Kernel buddy system 的內容: /proc/buddyinfo紀錄的就是Linux kernel的記憶體管理機制 - buddy system的內容。
昨天談到的slab是Linux的記憶體管理機制之一,從slab中可獲得的kernl中所執行的process使用的記憶體的資訊。另一個可以檢視kernel管理記憶體內容的工具是**/proc/buddyinfo**中的內容。
/proc/buddyinfo紀錄的就是Linux kernel的記憶體管理機制 - buddy system的內容。Linux kernel透過buddy system來對free page進行管理,page是kernel記憶體使用的基本單位。當系統需要一塊page時,會透過buddy system提取,而buddy的管理機制會儘可能地維持記憶體的連續性,以減少fragmentation的情形發生。buddy system管理記憶體的方式是將連續的page指定為一個chunk,而且chunk的大小是以2的次方依序分割。也就是1k, 2k, 4k, 8k, 16k, 32k,... 以此類推。當kernel需要一塊空間時,他會從最小且足夠的chunk中去要一塊。若是不夠,則轉向下一個chunk去要,而且盡可能把切剩餘的空間加到同等級的chunk中,藉此減少用不到的浪費(fragmentation)。譬如說,需要16k,但是16k的chunk沒有剩餘的了,所以就向32k的chunk去要,而切剩的另外16k則計算到16k的chunk中。在**/proc/buddyinfo中就是記錄這些chunk的使用情形,依序顯示每個不同大小的chunk**還有多少個可用空間。
cat /proc/buddyinfo
Node 0, zone DMA 5 3 5 2 3 2 1 1 2 2 1
Node 0, zone Normal 0 1 5 0 1 1 1 1 1 0 108
Node 0, zone HighMem 320 259 147 59 16 11 6 3 1 1 684
/proc/buddyinfo中將實體記憶體依照其位址(由low至high)分成3個zone,分別是: DMA、Normal與HighMem。而每個zone內的數字代表在這個zone之中依序還有多少可用的chunk數量。像這個例子,在DMA zone中,4k的chunk(由左至右第三個數字)還有5個可用的空間。
[本系列文章]
Linux系統效能分析與探討 - [1] CPU的效能關鍵字
Linux系統效能分析與探討 - [2] 記憶體的效能關鍵字
Linux系統效能分析與探討 - [3] Linux作業系統網路模組的效能關鍵字
Linux系統效能分析與探討 - [4] Linux block device的效能關鍵字
Linux系統效能分析與探討 - [5] 了解process的運作的指令 1 - ps
Linux系統效能分析與探討 - [6] 了解process的運作的指令2 - top
Linux系統效能分析與探討 - [7] 了解process的運作的指令3 - pstree
Linux系統效能分析與探討 - [8] 了解process使用記憶體的狀況 - pmap
Linux系統效能分析與探討 - [9] 顯示系統的附載狀況 - uptime, w
Linux系統效能分析與探討 - [10] 顯示系統的狀態 - vmstat
Linux系統效能分析與探討 - [11] 檢視記憶體的使用狀況 - free
Linux系統效能分析與探討 - [12] 取得詳細記憶體資訊 - cat /proc/meminfo
Linux系統效能分析與探討 - [13] Kernel slab cache的資訊 - slabtop