書き込みキャッシュに空きメモリを使いたいです。 Linuxではこれを自動的に実行しますが、使用するために調整したい奇妙な更新アルゴリズムがあります。
最近ディスクのコピーに使用しましたddrescue
。ブロックを読み取り、そのブロックをディスクに書き込みます。
私が望むのは、もはや利用可能なスペースがなくなるまで読み取りをできるだけ多く読み、次にいくつかのスペースが解放されるまでブロックし、同時に書き込みはできるだけ早く書き込みを介してメモリを解放することです。
したがって、ディスクへの書き込みがディスクからの読み取りよりも速い場合はメモリが使用されず、ディスクへの書き込みがディスクからの読み取りよりも遅い場合は、コピーが完了するまですべてのメモリが使用され続けます。
どちらの場合も、メモリ使用量は変わりません(他のプログラムが利用可能なメモリの一部を占有しない限り)。
しかし、私が見るのはこれです:
読み取りはキャッシュを埋め(書き込みがほとんどありません)、キャッシュが制限に達すると(または一定時間が経過すると)読み取りがブロックされます。みんなキャッシュがディスクに書き込まれます。時々「同期」を実行するトロールとほぼ同じです。
/proc/sys/vm/dirty_*を変更してみましたが、何の役にも立ちませんでした。私ができる唯一の変更はトップの高さでした。したがって、/proc/sys/vm/dirty_*に言及する回答は、ギザギザのパターンを測定可能に平坦化するテスト値を提供する必要があります。
Linuxにできるだけ早く書き込みを開始しますが、空き領域がある場合は、読み取りまたは書き込みをブロックしないように指示する調整は、おそらく私の目的に適しています。
私はmbuffer
グラフを平面化しますが、動的ではなく(たとえば、利用可能なメモリが低い場合は空きメモリ)、ルックアップを許可しないため、同様のプログラムでは使用できませんddrescue
(後で見る必要があります)。