web-dev-qa-db-ja.com

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

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

私のシステムでは、ほとんどの場合、空き容量を増やしたのとは異なり、バッファはRAMの10%以上を占めます。通常、バッファは小さな、ほとんどトークンの値です。

私の質問は、バッファと呼ばれる領域には正確には何があるのか​​ということです。 lsofで検索できますか?フラッシュされていない開いているファイル領域で構成されていますか?メモリマップトファイル領域ですか?それは何ですか?

システムは正常に動作し、スワップはほとんど使用されないため、パフォーマンスは良好です。

4
casualunixer

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を実行すると、キャッシュとバッファの割り当てをよりよく確認できます。

使用法に関する質問への回答:システムは通常、必要以上のブロックを割り当てますが、「メモリの負荷」が増加すると、これらの追加のブロックが解放されます。

5
2bc

「バッファ」は、メモリ不足の下で再利用可能です。したがって、ページキャッシュ(「キャッシュ」列)に似ています。大きな懸念材料ではありません。 「バッファ」の値は小さくても大きくてもかまいません。システムが何をしているかによって異なります:-)。ここでカウントされるキャッシュのいくつかのタイプを見つけることができます。

バッファキャッシュは、文字通りブロックデバイスのページキャッシュです。 Linuxはこれらを個別に報告するだけです。[*]プログラムがブロックデバイスノードを読み書きするときに「バッファ」の使用に気付くことがあります。 dd status=progress if=/dev/sda of=/dev/null。どうやら人々はDVD再生ソフトウェアでもそれに気づいています。

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

ブロックデバイスノードにアクセスしていない場合、「バッファ」はおそらくすべてファイルシステムメタデータです。ファイルシステムは、便宜上、内部でバッファキャッシュを使用します。メインページのキャッシュに保存されているファイルdata-ファイルの内容-が重複しないようにします。ファイルシステムがバッファキャッシュを使用する正確な目的は、ファイルシステムによって異なります。

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

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

スラブメモリはnotページ/バッファキャッシュの一部です。ただし、それらを一緒に数えると便利です。これらは両方とも再利用可能であり、再利用可能なスラブの主な(唯一の?)用途はファイルシステムのキャッシュです。たとえば、ファイルメタデータ(iノード)とパスルックアップ(dentry)は、再利用可能なスラブにキャッシュされます。 " 再生可能なスラブメモリは、多くのファイルがあるほとんどアイドル状態のシステムでシステムメモリの大部分を占める可能性があります 。"

BuffersSReclaimableの生の値はcat /proc/meminfoで確認できます。 slabtopを実行して、スラブのリストを表示することもできます。 AFAICT、slabtopは、スラブの統計を再利用可能かどうかを示しません。しかし、通常は推測できます。疑わしいスラブがある場合は、名前で調べることができると思います。


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

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

1
sourcejedi

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

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

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

0