
Linux で読み取りページのキャッシュをオフにする方法はありますか? 具体的には、プロセスがディスクから直接読み取るようにしたいです。
問題の設定: Postgres で新しいクエリ処理手法を試し、その実行時間を測定しています。さまざまな方法の実行時間を正確に比較するには、OS キャッシュからの読み取りをオフにする必要があります。
私は以下のアプローチを読みましたが、どれも私のケースには当てはまりませんでした。
- 次を使用してキャッシュをクリアします
echo 1 > /proc/sys/vm/drop_caches
。クエリの反復ごとにこれを呼び出す必要があるため、最終的な測定時間が台無しになります。 O_DIRECT
プログラム内での使用: Postgresがファイルをどのように読み取るかは制御できません- を使用してデバイスをマウントします
-o sync
。ここ書き込みバッファリングはオフになりますが、キャッシュからの読み取りも無効になるかどうかはわかりません。 - 使用方法
hdparm -W 0 /dev/sda1
: 繰り返しますが、これにより書き込みのキャッシュのみが無効になります。 - アプリケーション固有のスクリプトの使用についての説明ここ: これは、単一のアプリケーションがあれば機能しますが、私の設定では、Postgres サーバーをサービスとして (多数のスレッドを持つ) 使用し、クライアントも使用しています。100% 確信はありませんが、このスクリプトは Postgres などのサービスではなく、通常のアプリケーションで機能するようです。