July 01, 2008

觀察 Linux 的虛擬記憶體

延續 [尋幽訪勝話系統--以 Linux 探索軟硬體整合設計] 的演講,要觀察 GNU/Linux 運作時期的虛擬記憶體 (Virtaul Memory,以下簡稱 vm),其實沒有想像中的難。首先,可透過 vmstat 工具程式,執行方式如下:
$ vmstat -S m
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0     81    110    895    0    0    11    36  160  161 62 17 21  1
可列印 vm 的切割與狀態資訊。在 Linux 2.4 轉變到 2.6 的過程中,vm 經過很大的調整,cache 的設計也因此導致不同的表現,在上述 vmstat 的輸出可看到 "cache" 一欄的值,可透過 htop 工具程式作即時顯示系統的變化。不過,就算不安裝外部的工具程式,其實也有「窮人記憶體觀察工具」,那就是 /proc/meminfo ,可搭配 watch 使用:
$ watch  cat /proc/meminfo
顯示的效果如下圖:

每兩秒在終端機上更新一次,可清楚看到 vm 內各種類別的消長。

在 Linux 2.6.16 以後,引入 drop caches 的機制,所以咱們來看看 cache 的變化,如下圖:

htop 的視窗中,黃色部份就是 cache,當 /proc/sys/vm/drop_caches 的值被設定為 1 時,表示要求核心捨棄沒在使用的 cache (一般的),而被設定為 2 時則要求將 dentry, inode 所用的 cache memory 一併釋放,而設定為 3 時,就是 (1) + (2) 的效果,也就是幾乎把非作用的 cache 都釋放了。所以,在上圖中,很明顯可見,原本運作中的 GNU/Linux 的 vm 配置了可觀的 cache,在要求釋放後,就幾乎都清空。
由 jserv 發表於 July 1, 2008 04:03 PM
迴響
發表迴響









記住我的資訊?