檔案快取回寫簡述

2021-09-07 16:51:33 字數 1387 閱讀 5868

1檔案快取回寫的時機

(1)週期性回寫,週期為dirty_writeback_interval,預設5s;

(2)塊裝置首次出現髒資料;

(3)髒頁達到限額,包括dirty_bytes、dirty_background_bytes、dirty_ratio、dirty_background_ratio;

(4)剩餘記憶體過少,喚醒所有回寫執行緒;

(5)syscall sync,喚醒所有回寫執行緒;

(6)syscall syncfs,同步乙個超級快對應的檔案系統;

(7)syscall fsync/fdatasync,同步某個檔案

(8)laptop模式,完成blk io request之後,啟動laptop_mode_wb_timer;

2回寫流程

3 dirty_writeback_intervaldirty_expire_interval

dirty_writeback_interval是回寫執行緒的迴圈週期,當然,迴圈的前提是塊裝置存在髒資料;

dirty_expire_interval是髒資料的超時時間,超過這個時間的髒資料將會馬上放入回寫佇列,但是這個模式只有一條路徑,啟用的writeback_work是for_kupdate模式,目前看這條路徑只有在週期性回寫最後建立乙個此類work檢查超時髒資料;

週期性回寫的流程如下:

bdi_writeback_workfn

--> wb_do_writeback

--> wb_writeback

--> wb_check_old_data_flush

--> for_kupdate模式wb_writeback

--> wb_check_background_flush

--> for_background模式wb_writeback

for_kupdate模式只回寫dirty_expire_interval之前的髒資料;

for_background模式回寫當前所有髒資料;

從此流程來看,dirty_expire_interval的作用不大,只是作為一種可選模式。

4系統掉電時最長丟失多少髒資料

從回寫週期來看,無論是塊裝置首先髒資料還是回寫執行緒的迴圈週期,都是間隔dirty_writeback_interval,它的預設值是5s。但是由於寫髒資料的過程並不在這個間隔時間內,所以丟失的資料可能長於5s。

而髒資料的回寫採取fifo的策略,所以最老的資料也不會停留很久,所以這個最長時間可以理解為略大於5s.

Linux檔案寫快取

1.應用發起的寫操作何時將內容真正寫入檔案?2.如何保證在異常掉電的情況下,應用寫入檔案的資料不丟失?應用對檔案的操作一般基於標準庫函式fopen fread fwrite fclose實現,本文主要是針對fwrite操作的闡述。當應用呼叫fwrite向檔案中寫入資料時,實際上經過使用者空間和核心空...

頁快取記憶體與頁回寫

訪問物理記憶體的速度遠快於訪問磁碟的速度 所以把經常使用的資料快取到物理記憶體 頁快取記憶體 訪問磁碟可直接變為訪問物理記憶體的方式 頁快取記憶體是由記憶體中的物理頁面組成的 內容對應磁碟上的物理塊 讀快取當核心開始乙個讀操作時 它首先會檢查需要的資料是否再頁快取記憶體中 如果在就放棄訪問磁碟 直接...

檔案快取 寫與讀

1.先判斷是否有sdcard以及許可權environment.getexternalstoragestate equals environment.media mounted 2.得到sdcard路徑 mnt sdcard environment.getexternalstoragedirector...