作用:
Buffer Cache和Page Cache都用來提升IO讀寫性能,大致原理如下:
- 讀性能: 通過預讀提前加載數據,以及緩存頻繁訪問數據,減少I/O次數,提升讀性能;
- 寫性能: 對上層的應用程序直接寫入Page/Buffer即可返回,不用等待數據真正落盤;對下層的磁盤,由pdflush內核線程一次性地將多個寫請求數據刷新到磁盤,減少I/O次數,提升寫性能;
區別
Buffer Cache和Page Cache最大的差別在於:Page Cache是針對文件系統的緩存,Buffer Cache是針對塊設備的緩存,如下圖所示:
Page Cache的數據是否還要經過Buffer Cache?
在以前的Linux系統中,當Page Cache的數據需要刷新時,會先寫入Buffer Cache,然後再落盤,這樣就會顯得冗餘。爲了解決這個問題,在內核版本2.6之後,Page Cache和Buffer Cache進行了整合,文件的系統的IO不再使用Buffer Cache,只有不經過文件系統直接對磁盤操作的數據會被Buffer Cache緩存。
Page Cache的同步
Page Cache的數據同步有兩種方式:Write Through(寫穿,同步方式)和Write back(寫回,異步方式)。Write Through意味着數據寫入Page Cache後還要等待數據落盤纔會返回;Write back則指數據寫入Page Cache後即可返回,由pdflush內核線程在特定的時候寫入磁盤:
- 用戶主動刷盤:調用sync(2)、fsync(2)、fdatasync(2)等系統函數;
- 操作系統刷盤(時間維度):髒頁在內存中駐留時間超過一個特定的閾值;
- 操作系統刷盤(空間維度):可用內存低於一個特定的閾值;
參考: