使用 hdparm 或 POSIX_FADV_RANDOM 來停用預讀

使用 hdparm 或 POSIX_FADV_RANDOM 來停用預讀

從 Linux 核心的文檔來看,建議 POSIX_FADV_RANDOM 似乎禁用了預讀。但是,當我使用 (sudo hdparm -A 0 /dev/sdb) 來停用 Readhead 時,效能會大幅下降;也注意到 read(2) 似乎每 512k 被分割一次並充當單獨的呼叫(不確定原因,可能是每個請求的最大磁區)。

那麼哪個選項真正禁用預讀呢? POSIX_FADV_RANDOM 是否也會停用作業系統緩存,或者我應該新增 POSIX_FADV_DONTNEED。

答案1

POSIX_FADV_RANDOM禁用核心檔案系統驅動程式執行的預讀。它建議檔案系統層不要讀取超出要求的內容。預讀是在檔案層級完成的:檔案系統層可能會從相同檔案中取得額外的數據,但如果您指定POSIX_FADV_RANDOM.

hdparm -A 0禁用磁碟本身執行的預讀。它建議磁碟,當您讀取一個磁區時,它不應將接下來的幾個磁區儲存在其內部快取中。

兩者都禁用預讀,但位於系統的不同層。

POSIX_FADV_RANDOM僅禁用預取。POSIX_FADV_DONTNEED如果您不希望快取該區域(或希望將其從快取中刪除),請將區域設為。

相關內容