
有沒有辦法在 Linux 中關閉讀取的頁面快取?更具體地說,我希望我的進程直接從磁碟讀取。
我的問題的設定:我正在 Postgres 中嘗試新的查詢處理技術並測量它們的運行時間。為了準確比較不同方法的運行時間,我需要關閉從作業系統快取的讀取。
我已閱讀以下方法,但它們都不適用於我的情況:
- 使用清除快取
echo 1 > /proc/sys/vm/drop_caches
:我需要在查詢的每次迭代時呼叫它,這會弄亂我的最終測量時間。 - 在程式內使用
O_DIRECT
:我無法控制 Postgres 如何讀取文件 - 使用 掛載我的設備
-o sync
。我讀這裡它會關閉寫入緩衝,但我不確定它是否也會禁用從快取的讀取? - 使用
hdparm -W 0 /dev/sda1
:同樣,這只會停用寫入快取。 - 使用特定於應用程式的腳本解釋這裡:如果我有一個應用程序,這將起作用,但在我的設置中,我有一個 Postgres 伺服器作為服務(具有許多線程)和一個客戶端。我不是 100% 確定,但該腳本似乎適用於常規應用程序,而不適用於 Postgres 等服務。