Linux---回寫機制


前言

當我們修改了某個文件時,被修改的內容不會直接寫入磁盤中,而是會寫入由內核提供的一個buffer里,那么,內核會在一個特定的時間或者機制,再將buffer中的內容寫進磁盤中去,為什么要這么做?原因就是減少開銷,降低磁盤的讀寫次數。

 

緩存的三種機制

一般緩存有三種機制:

1.不緩存(nowrite):這種機制是跳過緩存,直接寫入磁盤中。如果進行讀操作時,還需要從磁盤中讀取存入緩沖中。個人覺得在讀操作時,使用的時間長。

2.寫透緩存(write-through cache):當進行寫操作時,會寫入緩存中,並且馬上再寫入磁盤中。這種機制相對於上一種,寫操作使用的時間長,但讀操作使用的時間短。

3.回寫:這種機制在寫操作時,會先寫入緩存中,但不會立即寫入磁盤中,而是在一些特定條件或操作,才會把緩存中的數據寫入磁盤。回寫機制可以說是非常靈活,這是本筆記探討的內容。

 

回寫機制的Dirty標志

buffer在特定的時間里(查看/proc/sys/vm/dirty_writeback_centisecs 再除以 100 就是多少秒),會被標記為dirty page,被標記的dirty page會被加入到一個鏈表中,但並不會馬上寫入磁盤中。

 

回寫機制的寫入磁盤時機

有兩種情況dirty page才會被寫入磁盤中:

1.  當空閑的內存低於某一個值時(查看/proc/sys/vm/dirty_background_ration),會把1024個dirty page寫回磁盤中,直到內存回到空閑狀態。

2.  當dirty page超過一定的比例時(查看/proc/sys/vm/dirty_ratio),內核會啟動pdflush線程把超過的那一部分啟寫入磁盤中。

3.  當dirty page超過了一定的時間(查看/proc/sys/vm/dirty_expire_centisecs),才會被寫入磁盤中

4.  當用戶程序調用了sync() 和 fsync()系統調用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM