
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:
- 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. - Verwendung
O_DIRECT
innerhalb des Programms: Ich habe keine Kontrolle darüber, wie Postgres die Dateien liest - 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? - Verwendung
hdparm -W 0 /dev/sda1
: Auch hier wird dadurch nur der Cache für Schreibvorgänge deaktiviert. - 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.