linux中記憶體管理相關的proc檔案有meminfo,buddyinfo,pagetypeinfo,slabinfo,vmallocinfo;
下面分別介紹下buddyinfo,pagetypeinfo,slabinfo;
/proc/buddyinfo
linux kernel夥伴系統是以order為單位管理記憶體分組;kernel會以order 0,1,2,3,4,5,6,7,8,9,10,也就是從order 0 乙個page 4096kbytes大小,到order10提供約4mb大小的memory配置,根據每種不同大小的連續記憶體的使用狀況,可把被釋放的記憶體組合為更高一階的memory page oder,或是把連續的記憶體根據需求拆解為所需的page order大小的記憶體區塊,而這些當下buddy system對記憶體的使用情況,就是buddyinfo所可以提供的記憶體使用資訊,當所要配置的記憶體page order正好落在目前buddy system所無法**的連續記憶體區塊時,就可能會導致記憶體申請失敗. (記憶體申請失敗會通過low memory killer 或oom 來強制應用程式的刪除執行,配置出足夠大小的連續物理記憶體空間).
/proc/buddyinfo這個檔案就是顯示當前系統不同zone區按order 0~10 依次剩餘的空閒記憶體大小
root:/ # cat /proc/buddyinfo
node 0, zone dma 1792 474 341 141 28 18 2 3 20 36 275
node 0, zone normal 1203 456 251 183 19 10 1 5 13 29 283
dma zone 區有1792個2^0 個page,474個2^1個page....
在系統執行過程中,按照夥伴演算法原理,不同order 空閒記憶體會進行變化,
下面是系統執行一段時間前後的兩次buddyinfo資訊:
root:/ # cat /proc/buddyinfo
node 0, zone dma 158 46 8 4 2 0 1 14 35 30 333
node 0, zone normal 170 86 30 17 2 1 1 9 37 31 319
root:/ # cat /proc/buddyinfo
node 0, zone dma 1 2 46 64 13 7 3 5 36 29 333
node 0, zone normal 1 1 77 72 13 2 1 0 36 31 319
具體涉及到的**:
struct zone
struct free_area ;
/* free memory management - zoned buddy allocator. */
#ifndef config_force_max_zoneorder
#define max_order 11
#else
#define max_order config_force_max_zoneorder
#endif
enum ;
注意在每個order空閒記憶體list中,又按照不同的migrate_types進行進一步細分,這樣主要便於系統
記憶體**,合併為大的order;
這個檔案是將buddyinfo的內容進一步細分:
free pages count per migrate type at order -- 不同order 按照migrate type的空閒page數量
number of blocks -- 連續記憶體塊數量
|root:/ # cat /proc/pagetypeinfo
page block order: 10
pages per block: 1024
free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
node 0, zone dma, type unmovable 248 78 126 95 5 4 1 1 18 32 59
node 0, zone dma, type reclaimable 0 1 3 3 1 1 0 0 1 1 0
node 0, zone dma, type movable 696 385 201 44 22 13 1 2 1 3 214
node 0, zone dma, type cma 0 0 0 0 0 0 0 0 0 0 0
node 0, zone dma, type reserve 0 0 0 0 0 0 0 0 0 0 2
node 0, zone dma, type isolate 0 0 0 0 0 0 0 0 0 0 0
node 0, zone normal, type unmovable 1 71 125 131 7 5 0 1 10 28 60
node 0, zone normal, type reclaimable 0 0 0 0 1 1 0 1 1 0 0
node 0, zone normal, type movable 128 383 121 52 11 5 0 3 2 1 221
node 0, zone normal, type cma 0 0 0 0 0 0 0 0 0 0 0
node 0, zone normal, type reserve 0 0 0 0 0 0 0 0 0 0 2
node 0, zone normal, type isolate 0 0 0 0 0 0 0 0 0 0 0
number of blocks type unmovable reclaimable movable cma reserve isolate
node 0, zone dma 142 8 531 36 2 0
node 0, zone normal 139 10 608 0 2 0
number of mixed blocks unmovable reclaimable movable cma reserve isolate
node 0, zone dma 0 0 0 36 0 0
node 0, zone normal 0 0 0 0 0 0
Linux下proc檔案系統詳解 proc
proc檔案系統是乙個偽檔案系統,它只存在記憶體當中,而不占用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些引數。這裡將介紹如何從 proc檔案系統中獲取與防火牆相關的一些效能引數,以及如何通過 proc檔案系統修改...
Linux的proc檔案系統
proc 為乙個核心資料結構介面,使用者空間和核心空間可以通過該介面通訊,與普通檔案不同的是,這些虛擬檔案的內容都是動態建立的。proc 檔案系統是乙個偽檔案系統,它只存在記憶體當中,而不占用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式 可以通過 proc 得到系統...
linux下的 Proc 檔案系統
proc檔案系統是一種在使用者態檢查核心狀態的機制。在proc下一般有如下子目錄和檔案 apm 高階電源管理資訊 bus 匯流排以及匯流排上的裝置 devices 可用的裝置資訊 driver 已經啟用的驅動程式 interrupts 中斷資訊 ioports 埠使用資訊 version 核心版本 ...