0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux資料匯總之內(nèi)存管理

Linux閱碼場(chǎng) ? 來(lái)源:未知 ? 作者:鄧佳佳 ? 2018-03-27 11:39 ? 次閱讀

網(wǎng)絡(luò)上面有很多坑爹的文章,誤導(dǎo)不少人,很多人對(duì)Linux的很多誤解可能來(lái)自于這些廣泛流傳的技術(shù)文章。下面我們推出一個(gè)系列來(lái)總結(jié)。先從內(nèi)存管理開始。

1. compact_memory

網(wǎng)上常見文字:

compact_memory

只有在啟用了CONFIG_COMPACTION選項(xiàng)才有效。當(dāng)向該文件(/proc/sys/vm/compact_memory)寫入1時(shí),所有的內(nèi)存域都會(huì)被壓縮,使空閑的內(nèi)存盡可能形成連續(xù)的內(nèi)存塊。

”“

當(dāng)內(nèi)核編譯參數(shù)設(shè)置了CONFIG_COMPACTION,就會(huì)在/proc/sys/vm/compact_memory有入口文件。將1寫入到這個(gè)文件,則所有的zones就會(huì)進(jìn)行壓縮,以便能夠盡可能地提供連續(xù)內(nèi)存塊。對(duì)于需要分配大頁(yè)的時(shí)候這個(gè)功能非常重要,不過(guò),進(jìn)程會(huì)在需要時(shí)直接進(jìn)行內(nèi)存壓縮(compact memory)。

修正

這里的compact與"壓縮(compress)"沒有半毛錢關(guān)系,compact是使得空閑內(nèi)存更加緊湊的內(nèi)存遷移技術(shù)。實(shí)現(xiàn)的效果如下:

假設(shè)紅色和白色分別是空閑和被占用的頁(yè)面,經(jīng)過(guò)內(nèi)存compaction之前的狀態(tài)為:

那么內(nèi)存的compact行為可以達(dá)到如下目的,空閑內(nèi)存被扎堆了,這樣如果要申請(qǐng)更大的連續(xù)內(nèi)存,則可以滿足:

如果要直譯,compact memory可以翻譯為“內(nèi)存緊湊”。但是絕對(duì)不是壓縮,因?yàn)閦RAM之類的才是采用了壓縮技術(shù)。

2. cached和buffers的區(qū)別

網(wǎng)上常見文字:

Buffers與cached啥區(qū)別

A buffer is something that has yet to be “written” to disk.

A cache is something that has been “read” from the disk and stored for later use

對(duì)于應(yīng)用程序來(lái)說(shuō),buffers/cached 是等于可用的,因?yàn)閎uffer/cached是為了提高文件讀取的性能,當(dāng)應(yīng)用程序需在用到內(nèi)存的時(shí)候,buffer/cached會(huì)很快地被回收。

所以從應(yīng)用程序的角度來(lái)說(shuō),可用內(nèi)存=系統(tǒng)free memory+buffers+cached.

修正

此處極容易讓人產(chǎn)生誤解,以為free命令里面的buffers是為了寫而產(chǎn)生,而cached是為了讀而產(chǎn)生。

真實(shí)情況下,cached和buffers與讀寫沒有半毛錢關(guān)系,它們都是緩存,唯一的區(qū)別是,如果你cat /dev/sda1 > /dev/null,這樣/dev/sda1內(nèi)容進(jìn)入buffers,如果你cat /mnt/aaa/bbb.c > /dev/null,則/mnt/aaa/bbb.c的內(nèi)容進(jìn)入cached。所以,這兩種cache,一個(gè)以裸設(shè)備或分區(qū)為背景,一個(gè)以文件系統(tǒng)里面的文件為背景,無(wú)論讀寫皆然。

buffers主要有2個(gè)用戶:

  1. 應(yīng)用直接訪問(wèn)裸分區(qū)

  2. 文件系統(tǒng)本身的實(shí)現(xiàn),會(huì)認(rèn)為/dev/sda1是個(gè)裸設(shè)備,因此文件系統(tǒng)的metadata會(huì)緩存到buffers

3. PSS

許多人引用了關(guān)于pss的這個(gè)解釋:

https://yq.aliyun.com/articles/24048

“PSS - Proportional Set Size 實(shí)際使用的物理內(nèi)存(比例分配共享庫(kù)占用的內(nèi)存)USS - Unique Set Size 進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫(kù)占用的內(nèi)存)

修正

這個(gè)文檔有3個(gè)問(wèn)題:

  1. 兩個(gè)進(jìn)程共享的部分,遠(yuǎn)遠(yuǎn)不是只有共享庫(kù),比如我們?cè)贚inux里面開2個(gè)bash進(jìn)程,那么這2個(gè)bash,實(shí)際是共享1個(gè)代碼段;其他的mmap()的時(shí)候shared的映射當(dāng)然也是。

  2. 共享庫(kù)里面的內(nèi)存,也不是都共享,只是代碼段等不會(huì)做CoW(寫時(shí)拷貝)的內(nèi)存才會(huì)跨進(jìn)程共享。

  3. USS去掉的是所有跨進(jìn)程共享的內(nèi)存,不是只去掉了共享庫(kù)。

上圖中的4這片內(nèi)存,是libc的代碼段在內(nèi)存駐留的部分,被3個(gè)進(jìn)程共享;5這段內(nèi)存,是bash的代碼段,被2個(gè)進(jìn)程(1044和1045)指向。在計(jì)算PSS的時(shí)候,這些都需要被比例化。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209535
  • 內(nèi)存管理
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    14142

原文標(biāo)題:宋寶華:網(wǎng)上坑爹的Linux資料匯總之內(nèi)存管理

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個(gè)非常復(fù)雜的過(guò)程,主要分成兩個(gè)大的部分:內(nèi)核的
    的頭像 發(fā)表于 05-11 17:54 ?6064次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>詳解

    深度解析Linux內(nèi)存管理體系

    Linux內(nèi)存管理的整體模式是虛擬內(nèi)存管理(分頁(yè)內(nèi)存管理
    發(fā)表于 08-06 16:55 ?1738次閱讀

    走進(jìn)Linux內(nèi)存系統(tǒng)探尋內(nèi)存管理的機(jī)制和奧秘

    Linux 內(nèi)存是后臺(tái)開發(fā)人員,需要深入了解的計(jì)算機(jī)資源。合理的使用內(nèi)存,有助于提升機(jī)器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)
    的頭像 發(fā)表于 01-05 09:47 ?1632次閱讀

    關(guān)于Linux內(nèi)存管理的詳細(xì)介紹

    Linux內(nèi)存管理是指對(duì)系統(tǒng)內(nèi)存的分配、釋放、映射、管理、交換、壓縮等一系列操作的管理。在
    發(fā)表于 03-06 09:28 ?1069次閱讀

    Linux內(nèi)核的內(nèi)存管理詳解

    內(nèi)存管理的主要工作就是對(duì)物理內(nèi)存進(jìn)行組織,然后對(duì)物理內(nèi)存的分配和回收。但是Linux引入了虛擬地址的概念。
    發(fā)表于 08-31 14:46 ?792次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>詳解

    linux最全的資料匯總

    linux最全的資料匯總
    發(fā)表于 12-03 13:43

    linux內(nèi)存管理機(jī)制淺析

    本內(nèi)容介紹了arm linux內(nèi)存管理機(jī)制,詳細(xì)說(shuō)明了linux內(nèi)核內(nèi)存管理,
    發(fā)表于 12-19 14:09 ?73次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>機(jī)制淺析

    程序設(shè)計(jì)之內(nèi)存管理

    使用C語(yǔ)言編程時(shí),關(guān)于程序設(shè)計(jì)之內(nèi)存管理。
    發(fā)表于 05-20 17:01 ?0次下載

    linux內(nèi)存管理

    linux內(nèi)存管理
    發(fā)表于 10-24 11:12 ?3次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>

    Linux磁盤存儲(chǔ)區(qū)管理原理分析及技巧匯總

    Linux管理磁盤貯存區(qū)算的上一個(gè)技巧,很多朋友在這上面常常問(wèn)我,今天我就把這方面的東西匯總一下,從Linux特有的交換分區(qū)的原理開始介紹Lin
    發(fā)表于 11-07 10:14 ?0次下載

    嵌入式Linux內(nèi)存管理的知識(shí)匯總

    這個(gè)內(nèi)存管理的知識(shí)點(diǎn)還真的需要我們專門的去理解一下,今天大家一起來(lái)學(xué)習(xí)學(xué)習(xí)嵌入式Linux內(nèi)存管理的知識(shí)。 1.不涉及
    發(fā)表于 04-09 05:58 ?1029次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的知識(shí)<b class='flag-5'>匯總</b>

    你知道linux內(nèi)存管理基礎(chǔ)及方法?

    linux內(nèi)存管理采取的分頁(yè)存取機(jī)制,會(huì)將內(nèi)存中不經(jīng)常使用的數(shù)據(jù)塊交換到虛擬內(nèi)存中。linux
    發(fā)表于 04-28 17:12 ?1166次閱讀

    Linux內(nèi)核開發(fā)框架學(xué)習(xí)資料匯總

    Linux內(nèi)核開發(fā)框架學(xué)習(xí)資料匯總
    發(fā)表于 06-17 09:29 ?24次下載

    Linux內(nèi)存管理的基礎(chǔ)知識(shí)科普

    Linux內(nèi)存管理可謂是學(xué)好Linux的必經(jīng)之路,也是Linux的關(guān)鍵知識(shí)點(diǎn),有人說(shuō)打通了內(nèi)存
    的頭像 發(fā)表于 06-08 15:24 ?2116次閱讀

    Linux 內(nèi)存管理總結(jié)

    一、Linux內(nèi)存管理概述 Linux內(nèi)存管理是指對(duì)系統(tǒng)內(nèi)存
    的頭像 發(fā)表于 11-10 14:58 ?532次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>總結(jié)