単一プロセスに対してブロックキャッシュをオフにする方法は?

単一プロセスに対してブロックキャッシュをオフにする方法は?

私は多くのディスクバインディングサービスを備えた大規模なシステムを持っています。ブロックキャッシュを使用すると、よりうまく機能します。

これに加えて、いくつかのバックアッププロセスが実行されています。

私は彼らがどのようにブロックキャッシュを使用するべきかを知っています。絶対に使用しないでください。

バックアップは、あるブロックデバイスを別のブロックデバイスにコピーすることによって実行されます。buffer注文する。キャッシュが必要な可能性はほぼゼロです。

ただし、バックアップが実行中の場合、通常のサービスが低下します。低くするioniceあまり役に立ちません。問題は、IO優先順位ではなく、ブロックキャッシュを不要なデータで上書きすることです。

bufferブロックキャッシュをまったく使用しないように、このコマンドを何らかの方法で設定できますか?

重要な場合は、lvm ボリュームを別のボリュームにコピーします。

ベストアンサー1

見つけました。nocache作業のためのツール。

一般的に言えば、Linuxではこれは不可能です。プロセス

しかし、posix_fadvise(...)順次読み取り/書き込み操作が必要な場合は、呼び出しを使用してブロック/バッファキャッシュサブシステムに通知できます。 AはPOSIX_FADV_DONTNEEDカーネルに「追加情報」を提供しますが、近いうちに読み取られないのでキャッシュしないでください。

nocacheposix_fadvise(...)環境変数を介して注入された共有ライブラリを介してすべての重要なファイル操作をブロックしますLD_PRELOAD

名前が示すように、これは単なる提案ですが、私の実験ではわかります。巨大なパフォーマンスの向上(実際にエンドユーザーに目立つパフォーマンスを低下させることなく、他の重要なタスクをバックグラウンドバックアップと並行して実行できます)。

おすすめ記事