web-dev-qa-db-ja.com

ZFS ARCキャッシュとLinuxバッファーキャッシュの競合(Ubuntu 16.04)

テストシステムのセットアップは、256 GB RAMを備えた単純なraidz 5ディスク(各8 TB)zpoolです。パフォーマンスは良好で、約650 MB /秒のスループットを達成しています。最終的に、Linuxバッファキャッシュがいっぱいになり、サイズが約32 MBに達するまでZFS ARCキャッシュが縮小し始めます。これが発生すると、スループットは約60 MB /秒に低下します。

Vm.vfs_cache_pressureを200に設定するなど、いくつかのカーネル調整オプションを試しましたが、問題の発生は変わりませんでした。

現在の回避策は、/ sys/module/zfs/parameters/zfs_arc_minを128 GBに、zfs_arc_maxを252 GBに設定することです。 Linuxバッファキャッシュのため、ARCは128 GBを超えることはありませんが、データ転送全体のパフォーマンスは650 MB /秒のスループットレベルにとどまります。

理想的には、Linuxバッファキャッシュをすべて無効にして、ZFS ARCキャッシュを0〜256 GBのメモリにして、残りのメモリをアプリケーションの作業負荷に利用できるようにしたいと考えています。 LinuxバッファキャッシュよりもZFS ARCキャッシュの優先度を高くすることが可能である場合、Linuxバッファキャッシュを効果的に無効にするため、これも許容できる回答です。

ありがとう、ザック

編集1:私が解決しようとしている問題は、メモリからZFS ARCを追い出すLinuxバッファキャッシュです。アプリケーションのワークロードですべてのメモリを使用できるようにしたいのですが、それに応じてZFS ARCが縮小します。回避策として、最小サイズが0に設定されている場合、LinuxバッファキャッシュがARCをメモリから削除するため、ZFS ARCの最小サイズを大きな値に設定する必要がありました。

4
user1492285

最小ARC値を設定します。それだけで十分です。

ARCは必要に応じて拡大/縮小します。ビュッフェキャッシュを食べているものがZFSファイルシステム上にあってはなりません。このサーバーは何をしていますか?

4
ewwhite

syncマウントオプションを使用してNFSディレクトリをマウントしてみてください。

さらに、Linuxページキャッシュの使用を制限するために、定期的にecho 3 > /proc/sys/vm/drop_caches

編集: eewhiteコメントのように、最後のコマンドはページキャッシュだけでなくARCもドロップするようです。したがって、注意して、必要な場合にのみ発行してください。

echo 1 >/proc/sys/vm/drop_cachesはLinuxバッファキャッシュにアクセスしますが、ARCはそのままにします

2
shodanshok