free からの出力の buffers 列とは何ですか?

free からの出力の buffers 列とは何ですか?

これら 質問free コマンドの形式を簡単にリストします。バッファはディスクに書き出す必要があるカーネル メモリであり、キャッシュはディスクに書き込む必要のないファイル データであることに注意してください。

私のシステムでは、これまでフリーで実行してきたほとんどのときとは異なり、バッファが RAM の 10% 以上を占めています。通常、バッファは小さな、ほとんどトークンのような値です。

私の質問は、バッファと呼ばれる領域には一体何があるのでしょうか? を使用して検索できますか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 プレーヤー プログラムを実行しているときにも気付くようです。

証拠については以下を参照してください:RAM の 30% は「バッファ」です。これは何ですか?

ブロックデバイスノードにアクセスしていない場合は、「バッファ」はすべてファイルシステムである可能性があります。メタデータファイルシステムは、利便性のために内部的にバッファキャッシュを使用します。これにより、ファイルが重複しないようにします。データ- ファイルの内容 - メイン ページ キャッシュに保存されます。ファイル システムがバッファ キャッシュを具体的に何に使用するかは、ファイル システムによって異なります。

物理 RAM の容量が少ないマシンで、ext3/ext4 ファイルシステムを使用している場合、「バッファ」が高くなる可能性があることに気付きました。これは、ジャーナルへの書き込みがバッファ キャッシュを通過するためです。(上記のリンクを参照してください)。ext3/4 ファイルシステムは、ディレクトリの内容もバッファ キャッシュに保存します。

第二に、コマンドによって表示される「バッファ」には、free再利用可能なスラブを意味する SReclaimable も含まれます。(ここで示します:Linux メモリを監視する正しい方法)。

スラブメモリはないページ/バッファ キャッシュの一部です。ただし、これらを一緒にカウントすると便利です。これらは両方とも再利用可能であり、再利用可能なスラブの主な (唯一の?) 用途は、ファイル システムのキャッシュです。たとえば、ファイル メタデータ (inode) とパス検索 (dentry) は、再利用可能なスラブにキャッシュされます。"再利用可能なスラブメモリは、多くのファイルを持つアイドル状態のシステムでは、システムメモリの大部分を占める可能性がある。

で生のBuffersと の値を確認できます。を実行してスラブのリストを確認することもできます。 私の知る限り、スラブが再利用可能かどうかの統計は提供されません。 ただし、通常は推測できます。疑わしいスラブがある場合は、名前で検索できると思います。SReclaimablecat /proc/meminfoslabtopslabtop


[*] この回答では、「バッファ キャッシュ」とは でカウントされるキャッシュを指しますBuffers/proc/meminfoただし、他のソースではページ キャッシュ全体を統合バッファ キャッシュと呼ぶ場合があります。歴史的な説明が必要な場合は、最初のリンクを参照してください。

また、Linux 開発者は、ファイルシステムの実装について論争していたときに、「バッファ キャッシュ」を別の意味で使用していた可能性があります。

答え3

第二に、freeコマンドで表示される「バッファ」にはSReclaimableも含まれる。

free コマンドのマニュアル ページ (バージョン 3.3.15) によると、「ページ キャッシュとスラブによって使用されるキャッシュ メモリ (/proc/meminfo にキャッシュされ、SReclaimable になります)」

したがって、SReclaimable が含まれるのはバッファではなくキャッシュです。

関連情報