Deaktivieren Sie den Linux-Seitencache für Lesevorgänge

Deaktivieren Sie den Linux-Seitencache für Lesevorgänge

Gibt es eine Möglichkeit, das Seiten-Caching für Lesevorgänge in Linux zu deaktivieren? Genauer gesagt möchte ich, dass meine Prozesse direkt von der Festplatte lesen.

Der Kontext meines Problems: Ich probiere neue Abfrageverarbeitungstechniken in Postgres aus und messe ihre Laufzeit. Um einen genauen Vergleich der Laufzeit verschiedener Methoden zu erhalten, muss ich das Lesen aus dem OS-Cache deaktivieren.

Ich habe die folgenden Ansätze gelesen, aber keiner davon trifft auf meinen Fall zu:

  1. Leeren Sie den Cache mit echo 1 > /proc/sys/vm/drop_caches: Ich muss dies bei jeder Iteration meiner Abfrage aufrufen, was meine endgültigen Messzeiten durcheinanderbringen würde.
  2. Verwendung O_DIRECTinnerhalb des Programms: Ich habe keine Kontrolle darüber, wie Postgres die Dateien liest
  3. Montieren Sie mein Gerät mit -o sync. Ich habe gelesenHierdass dadurch die Schreibpufferung deaktiviert wird, aber ich bin nicht sicher, ob dadurch auch das Lesen aus dem Cache deaktiviert wird?
  4. Verwendung hdparm -W 0 /dev/sda1: Auch hier wird dadurch nur der Cache für Schreibvorgänge deaktiviert.
  5. Verwenden eines anwendungsspezifischen Skripts erklärtHier: Das würde funktionieren, wenn ich eine einzelne Anwendung hätte, aber in meiner Umgebung habe ich einen Postgres-Server als Dienst (mit vielen Threads) und einen Client. Ich bin nicht 100 % sicher, aber es scheint, als ob das Skript für normale Anwendungen funktioniert, nicht für Dienste wie Postgres.

verwandte Informationen