pdflush進程詳解

來源:互聯網
上載者:User

pdflush進程詳解 一、簡介     由於頁快取的緩衝作用,寫操作實際上會被延遲。當頁快取中的資料比後台儲存的資料更新時,那麼該資料就被稱做髒資料。在記憶體中累積起來的髒頁最終必須被寫回磁碟。在以下兩種情況發生時,髒頁被寫回磁碟:1、當空閑記憶體低於一個特定的閾值時,核心必須將髒頁寫回磁碟,以便釋放記憶體。 2、當髒頁在記憶體中駐留時間超過一個特定的閾值時,核心必須將逾時的髒頁寫回磁碟,以確保髒頁不會無限期地駐留在記憶體中。 上面兩種工作的目的完全不同。實際上,在老核心中,這是由兩個獨立的核心線程分別完成的。但是在2.6核心中,由一群核心線程—pdflush後台回寫常式—統一執行兩種工作。 我們來看看這兩個目標是如何具體實現的。首先,當系統中的空閑記憶體低於一個特定的閾值時,pdflush線程將髒頁重新整理回磁碟。該後台回寫常式的目的在於在可用實體記憶體過低時,釋放髒頁以重新獲得記憶體。特定的記憶體閾值可以通過dirty_background_ratio參數設定。當空閑記憶體比閾值dirty_ background_ratio還低時,核心便會調用函數wakeup_bdflush()喚醒一個pdflush線程,隨後pdflush線程進一步調用函數background_writeout()開始將髒頁寫回磁碟。函數background_ writeout()需要一個長整型參數,該參數指定試圖回寫的頁面數目。函數background_writeout()會連續地寫出資料,直到滿足以下兩個條件: 1、已經有指定的最小數目的頁被寫出到磁碟。 2、空閑記憶體數已經回升,超過了閾值dirty_background_ratio。上述條件確保了pdflush操作可以減輕系統中記憶體不足的壓力。回寫操作不會在達到這兩個條件前停止,除非pdflush寫回了所有的髒頁,沒有剩下的髒頁可再被寫回了。 要滿足第二個目標,pdflush後台常式會被周期性喚醒(和空閑記憶體是否過低無關),將那些在記憶體中駐留時間過長的髒頁寫出,確保記憶體中不會有長期存在的髒頁。加入系統發生崩潰,則記憶體會處於混亂之中,而那些在記憶體中還沒來得及寫回磁碟的髒頁就會丟失,所以周期性同步回寫非常重要。在系統啟動時,核心初始化一個定時器,讓它周期地喚醒pdflush線程,隨後使其運行函數wb_kupdate()。該函數將把所有駐留時間超過百分之dirty_expire_centisecs秒的髒頁寫回。然後定時器將再次被初始化為百分之dirty_expire_ centisecs秒後喚醒pdflush線程。總而言之,pdflush線程周期地被喚醒並且把超過特定期限的髒頁寫回磁碟。  二、proc下的相關控制參數系統管理員可以在/proc/sys/vm中設定回寫相關的參數,也可以通過sysctl系統調用設定它們。 /proc/sys/vm/dirty_ratio這個參數控制一個進程在檔案系統中的檔案系統寫緩衝區的大小,單位是百分比,表示系統記憶體的百分比,表示當一個進程中寫緩衝使用到系統記憶體多少的時候,再有磁碟寫操作時開始向磁碟寫出資料。增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恒定的寫入場合時,應該降低其數值,一般預設是 40。 /proc/sys/vm/dirty_background_ratio這個參數控制檔案系統的pdflush進程,在何時重新整理磁碟。單位是百分比,表示系統總記憶體的百分比,意思是當磁碟的髒資料緩衝到系統記憶體多少的時候,pdflush開始把髒資料重新整理到磁碟。增大會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恒定的寫入場合時,應該降低其數值,一般預設是10。 /proc/sys/vm/dirty_writeback_centisecsPdflush寫後台進程每隔多久被喚醒並執行把髒資料寫出到硬碟。單位是 1/100 秒。預設數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峰的寫操作削平成多次寫操作。設定方法如下:echo 200 >/proc/sys/vm/dirty_writeback_centisecs  /proc/sys/vm/dirty_expire_centisecs這個參數聲明Linux核心寫緩衝區裡面的髒資料多“舊”了之後,pdflush 進程就開始考慮寫到磁碟中去。單位是 1/100秒。預設是 30000,也就是 30 秒的資料就算舊了,將會重新整理磁碟。對於特別重載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致IO提高太快。建議設定為 1500,也就是15秒算舊。echo 1500 >/proc/sys/vm/ dirty_expire_centisecs 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.