書き込みディスクキャッシュのフラッシュアルゴリズムを調整する

書き込みディスクキャッシュのフラッシュアルゴリズムを調整する

空きメモリを書き込みキャッシュに使用したいと思います。Linux はこれを自動的に行いますが、奇妙なフラッシュ アルゴリズムがあり、それを自分の用途に合わせて調整する必要があります。

最近、ディスクのコピーに使用しましたddrescue。ブロックを読み取り、そのブロックをディスクに書き込みます。

私が望むのは、空き領域がなくなるまで読み取りをできるだけ多く行い、その後いくらかの領域が解放されるまでブロックし、同時に書き込みをできるだけ速く行ってメモリを解放することです。

したがって、書き込みディスクが読み取りディスクよりも高速な場合はメモリは使用されず、書き込みディスクが読み取りディスクよりも低速な場合は、コピーが完了するまですべてのメモリが使用されたままになります。

どちらのシナリオでも、メモリ使用量は一定のままです (他のプログラムが空きメモリの一部を使用しない限り)。

しかし、私が見ているのは次のようなものです:

書き込みキャッシュ

読み取りはキャッシュをいっぱいにします(書き込みはほとんど行われません)。キャッシュが制限に達すると(または一定時間が経過すると)、読み取りはブロックされますが、全てキャッシュはディスクに書き込まれます。まるでトロールが時々「同期」を実行しているかのようです。

/proc/sys/vm/dirty_* を変更しようとしましたが、効果はありませんでした。私が引き起こすことができた唯一の変更は、トップの高さです。したがって、/proc/sys/vm/dirty_* に言及する回答では、鋸歯状のグラフを測定可能に平坦化するテスト済みの値を提供する必要があります。

Linux にできるだけ早く書き込みを開始するように指示し、空き領域がある場合は読み取りや書き込みをブロックしないというチューニングが、おそらく私の目的に合うでしょう。

のようなツールがあることは知っていますmbuffer。これらのツールはグラフを平坦化しますが、動的ではありません (つまり、空きメモリが少ないときにメモリを解放します)。また、シークを許可しないため、 のようなプログラムddrescue(前後にシークする必要がある) では機能しません。

関連情報