free 輸出中的 buffers 欄位是什麼?

free 輸出中的 buffers 欄位是什麼?

這些 問題簡單列出free指令的格式,注意buffers是必須寫出到磁碟的核心內存,而cache是​​不需要寫到磁碟的檔案資料。

在我的系統上,與大多數時候我自由運行的情況不同,緩衝區佔據了超過 10% 的 RAM。通常,緩衝區是一個很小的、幾乎是令牌的值。

我的問題是,緩衝區區域到底是什麼?我可以用 查找嗎lsof?它是否包含尚未刷新的開啟檔案區域?它是記憶體映射檔案區域嗎?它是什麼?

系統運作良好,使用的交換空間很少,因此性能良好。

答案1

free從提取其數據/proc/meminfo

slkwr133701:/usr/src/linux # free

             total       used       free     shared    buffers     cached
Mem:       2053456     434572    1618884          0      77888     201820

slkwr133701:/usr/src/linux # cat /proc/meminfo

MemTotal:        2053456 kB
MemFree:         1618736 kB
Buffers:           77928 kB
....

這是指用於臨時區塊 I/O 儲存的記憶體。核心必須不斷分配和釋放相同大小的單元,例如區塊 I/O 傳輸、網路封包和套接字緩衝區

您可以透過運行來更好地了解快取和緩衝區分配slabtop

回答您的使用問題:系統通常會分配比其需要更多的區塊,但隨著「記憶體壓力」的增加,這些額外的區塊將被釋放。

答案2

「緩衝區」在記憶體壓力下是可回收的。所以它類似於頁面緩存(“緩存”欄);沒什麼好擔心的。 「緩衝區」值可以小也可以大,這取決於您的系統正在做什麼:-)。我們可以發現這裡統計了幾種類型的快取。

緩衝區高速緩存其實是塊設備的頁高速緩存。 Linux 只是單獨報告這些dd status=progress if=/dev/sda of=/dev/null。顯然人們在運行 DVD 播放器程式時也會注意到這一點。

證明請參見:30% 的 RAM 是「緩衝區」。它是什麼?

如果您尚未存取區塊設備節點,則您的「緩衝區」可能都是檔案系統元數據。檔案系統在內部使用緩衝區高速緩存是為了方便。他們確保它永遠不會重複文件數據- 檔案內容 - 儲存在主頁快取中。檔案系統使用緩衝區快取的確切用途(如果有的話)因檔案系統而異。

在實體 RAM 量較小的電腦上,當我使用 ext3/ext4 檔案系統時,我注意到「緩衝區」看起來可能很高。這是因為對日誌的寫入會通過緩衝區高速緩存。 (請參閱上面的連結)。 ext3/4 檔案系統也將目錄內容儲存在緩衝區快取中。

其次,指令顯示的「緩衝區」free也包括SReclaimable,意思是可回收的slab。 (此處示範:再次監控 Linux 記憶體的正確方法)。

平板內存是不是頁面/緩衝區快取的一部分。然而,將它們一起計數很方便。它們都是可回收的,可回收平板的主要(唯一?)用途是用於檔案系統快取。例如,檔案元資料(索引節點)和路徑查找(目錄項目)會快取在可回收的板中。 」在具有大量文件且大部分空閒的系統上,可回收的平板內存[可能]會佔用大部分系統內存」。

您可以在 中看到原始值BuffersSReclaimablecat /proc/meminfo。您也可以執行slabtop查看板列表。 AFAICTslabtop不提供有關平板是否可回收的統計資料。但你通常可以猜到,如果有一些可疑的板塊,我想你可以透過名字來找。


[*] 就本答案而言,「緩衝區快取」是 in 計數的Buffers快取/proc/meminfo。然而,其他來源可能將整個頁面快取稱為統一緩衝區快取。如果您想要歷史解釋,請參閱第一個連結。

此外,當 Linux 開發人員爭論檔案系統實作時,他們可能會使用「緩衝區快取」來表示不同的含義。

答案3

其次,free指令顯示的「緩衝區」還包括SReclaimable

根據 free 命令的手冊頁(版本 3.3.15):“cache 頁面緩存和平板使用的內存(/proc/meminfo 中的 Cached 和 SReclaimable)”

因此,包含 SReclaimable 的是緩存,而不是緩衝區。

相關內容