1. 程式人生 > >Linux下的磁碟快取

Linux下的磁碟快取

為了得到需要重新整理的髒頁,就要徹底的搜尋與在磁碟上有映像的索引節點相應的所有address_space物件(是一棵搜尋樹)。由於頁快取記憶體可能有大量的頁,如果用一個單獨的執行流來掃描整個快取記憶體,會令CPU和磁碟長時間繁忙,因此,Linux使用一種複雜的機制把對頁快取記憶體的掃描劃分為幾個執行流。當記憶體不足或者使用者顯式的(使用者態程序發出sync()系統呼叫等)呼叫請求重新整理操作時會執行wakeup_bdflush()函式。wakeup_bdflush()函式會呼叫pdflush_operation()喚醒pdflush核心執行緒,並委託它執行回撥函式background_writeout()。background_writeout()函式有效的從頁快取記憶體中獲得指定數量的髒頁,並把它寫回磁碟。此外,執行background_writeout()函式的pdflush核心執行緒只有在滿足以下兩個條件下才能被喚醒:一是對頁快取記憶體中的頁內容進行了修改,二是引起髒頁部分增加到超過某個髒背景閾值。背景閾值通常設定為系統中所有頁的10%,不過可以通過修改檔案/proc/sys/vm/dirty_background_ratio來調整該值。