テストシステムのセットアップは、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の最小サイズを大きな値に設定する必要がありました。
最小ARC値を設定します。それだけで十分です。
ARCは必要に応じて拡大/縮小します。ビュッフェキャッシュを食べているものがZFSファイルシステム上にあってはなりません。このサーバーは何をしていますか?
sync
マウントオプションを使用してNFSディレクトリをマウントしてみてください。
さらに、Linuxページキャッシュの使用を制限するために、定期的にecho 3 > /proc/sys/vm/drop_caches
編集: eewhiteコメントのように、最後のコマンドはページキャッシュだけでなくARCもドロップするようです。したがって、注意して、必要な場合にのみ発行してください。
echo 1 >/proc/sys/vm/drop_caches
はLinuxバッファキャッシュにアクセスしますが、ARCはそのままにします