2011-07-26 94 views
3

任何人都可以告訴我在Linux VM可調參數中的dirty_bytes和dirty_background_bytes的工作情況。linux虛擬內存參數

我推斷dirty_bytes指定應用程序正在執行寫操作的內存量,它開始直接寫入磁盤。它是正確的還是分配的內存量已用完,該部分首先傳輸到磁盤,然後再次將新數據存儲在內存中。例如。假設我想將1 GB的文件傳輸到磁盤,並將dirty_bytes設置爲100 MB,然後一旦將100 MB寫入內存,正在寫入的應用程序現在開始將數據直接寫入磁盤,或者將100 MB傳輸到磁盤磁盤,然後再將100 MB寫入內存,然後傳輸到磁盤等?

而且在dirty_background_bytes的情況下,當髒內存部分超過這個數時,pdflush會在後臺將髒數據寫回磁盤。

我理解這兩個參數是否正確?

回答

6

否,超過dirty_bytes(或dirty_ratio)不會導致進程開始直接寫入磁盤。

相反,當一個進程弄髒超出限制的頁面時,該進程將用於執行一些髒頁的同步寫入 - 確切地哪些仍然由通常的啓發式決定。它們可能不一定是那些原本被這個特定過程弄髒的頁面。

實際上,進程看到它的寫入(可能只是內存寫入),直到發生一些寫入操作爲止。

您對dirty_background_*正確。當超過後臺限制時,異步寫入開始,但用戶空間進程允許繼續。

+0

感謝caf ...這使得它更加清晰。 – randy7

+0

並且由於dirty_background_bytes和dirty_bytes控制寫入緩存,是否有任何參數或任何方式來控制讀取緩存的大小? – randy7

+0

@ randy7:'swappiness'參數通過替換不活動的匿名頁面和從頁面緩存中回收來調整回收內存之間的平衡。這裏較小的數字會使內核更喜歡頁面緩存回收。 – caf