読み取り用の Linux ページ キャッシュを無効にする

読み取り用の Linux ページ キャッシュを無効にする

Linux で読み取りページのキャッシュをオフにする方法はありますか? 具体的には、プロセスがディスクから直接読み取るようにしたいです。

問題の設定: Postgres で新しいクエリ処理手法を試し、その実行時間を測定しています。さまざまな方法の実行時間を正確に比較するには、OS キャッシュからの読み取りをオフにする必要があります。

私は以下のアプローチを読みましたが、どれも私のケースには当てはまりませんでした。

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

関連情報