コンテンツを優先してファイルのメタデータをキャッシュするようにLinuxを構成する方法は?


14

ファイルシステムメタデータのキャッシュにほとんどのRAMを使用するようにシステムを設定したいと思いますが、読み取り/書き込みキャッシュとファイルのプリフェッチに適度な量だけを使用します。理想的には、実際にファイルを開くまでディスクをスピンアップせずに(RAMに収まる限り)ファイルシステムを閲覧できるようにしたいと思います。

詳細は次のとおりです。

自家製のファイルサーバーがあります。約9TBのLVMボリュームに5つのディスクがありますが、RAMは4GBしかありません。サーバーはファイルを提供するために他のことをほとんど行わないため、RAMのほとんどはキャッシュに使用されます。(「無料」は、キャッシュに使用される3.9Gのうち3.4Gを報告します。)

サーバーは私の寝室にあり、すべてのディスクが回転していると、静かなときに迷惑になるほどのノイズが発生します。(シークノイズではなく、単なる回転ノイズです。ディスクはさまざまなメーカーやモデルのものであり、回転速度のわずかな違いが干渉の原因になると思います。サブヘルツ周期のわずかなノイズ。)だから、私はほとんどの時間ディスクをスピンダウンするようにサーバーを設定しました。

もちろん、ファイルマネージャーでフォルダーを開いたときにディスクがスピンダウンした場合、そのフォルダーを持つディスクのいずれかがスピンアップするまでに遅延があります。それは大したことではありません。しかし、LVMが別のディスク上の各サブフォルダーのメタデータを拡散した場合、私が見ている場所によっては、連続して数回発生する可能性があります。

私は、Linuxのほとんどがキャッシュをファイルの内容で満たし、おそらくプリフェッチされたデータでいっぱいになっていると思います。キャッシュは、スムーズな再生を保証するために数MBを超えるとあまり役に立ちません。映画を見ただけなら、もうすぐまた見ないでしょう。私の場合、数MBを超えると、プリフェッチが発生してもまったく役に立ちません。

しかし、ほとんどのファイルシステムメタデータ、少なくとも既にアクセスした部分をキャッシュできるようにするには、4GBで十分だと思うでしょう。睡眠。

ファイルを開くときにまだ遅延がありますが、それでも問題ありません。「クリック; 待ちます。クリック; 待ちます。クリック; 待ちます。演奏する; 「クリック」で視聴します。クリック; クリック; 演奏する; 待ちます。見る"。前者は非常にイライラします。後者はほとんど期待されています。

ノート:

  1. 問題があれば、カーネルは3.2、OSはDebian、ボリュームはlvm2、FSはext4です。

  2. スピンダウンの唯一の理由は、夜間の騒音です。それ以外の場合、サーバーは継続的に実行されます。(私はそれを妥当な低消費電力にしました。)スピンダウンの遅延は時刻によって異なります。

  3. ハードディスクはメディア専用です。OSは、別の(小さな)フラッシュドライブ上にあります。(これは、スピンアップの遅延がデータに起因するものであることを意味します。何らかの理由で何かが必要だったというだけではありません/usr。どうにかして問題を解決できる場合は、数GBを節約できます。

  4. パフォーマンスに対する合理的な影響は大したことではありません。とにかく、ディスクは私のネットワークよりも高速です。

回答:


10

Linuxのキャッシュ方法を制御するには、https: //www.kernel.org/doc/Documentation/sysctl/vm.txtを参照して ください。

特にvfs_cache_pressureを見ると、おそらく非常に低い値またはゼロが必要です(1の方が少し安全に聞こえますが)。

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

また、swappinessデータを交換したり、極端な場合にのみ発生するようにデータを変更したりしないように変更することもできます。

このdrop_cachesオプションは、キャッシュしたくないデータを明示的に削除するのに便利です。

おそらく他にも役立つ可能性のあるオプションがあるはずなので、カーネルのドキュメントを確認してください。

それらを適用するには、変更したい設定、/etc/sysctl.confまたはOSがブート時にそれらを復元するために必要なものを入れます。


3
良い投稿ですが、OPの目標を考えれば、実行可能な限り多くのスワッピングが必要です。スワップはユーザーのメモリにのみヒットするため、ディスクにスワップアウトする傾向が高まると、キャッシュが占有する物理メモリが増えます。swappinessを増やすとメモリは解放されますが、あまりにも大きくなるとアプリケーションの速度が低下する可能性があります(スイートスポットの決定は基本的に反復ゲスト化です)
Bratchley

こんにちはカイル、アイデアをありがとう。vfs_cache_pressureのように機能しますが、それだけでは十分ではありません。ここに私がやったことだ:
bogdanb

vcpを0に設定し、aを実行した場合find / -ls > /dev/null、ディスクをスピンダウンしてから、findすべてのファイルを再びスピンしても、ディスクはスピンアップしません。freeこれを行うと、バッファが約202MBに上昇することがわかります。しかし、私がしなければfind、そしてcat /file/bigger/than/ram > /dev/null、その後、freeショーcachedの空きスペース、およびいくつかの理由を埋めるために、立ち上がりはbuffers195メガバイト程度まで下がります。その後、ディスクをスピンダウンしてfind再度実行すると、ディスクはまだスピンアップします:
bogdanb

についてswappiness:デフォルトのに設定されています60が、マシンにはスワップパーティションがありません。フラッシュドライブにスワップファイルを置くことができると思いますが、それがどのように役立つか、またはサイズを調整する方法がわかりません。
bogdanb

1
Linuxはキャッシングについて賢くしようとしています。vfs = 0の設定が期待どおりに機能するかどうかはわかりません。アプリケーションからのプレッシャー(malloc())がより多くのメモリを要求すると、他のエントリを回収しようとすると思います。キャッシュに2GB以上を使用しないようにLinuxに指示する方法については、私はそのようなことを知りません。ほとんどの場合、RAMが無駄になります。あなたが見たいかもしれないもう一つのことは、ラップトップのためにディスクをスピンダウンさせ続けるために異なることをしようとする「ラップトップモード」です。私はそれを使っていないので、それについてあまり知りません。
カイル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.