Linux基礎之Buffer/Cache

作用:

  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)等系統函數;
  • 操作系統刷盤(時間維度):髒頁在內存中駐留時間超過一個特定的閾值;
  • 操作系統刷盤(空間維度):可用內存低於一個特定的閾值;

參考:

  1. Linux系統中的Page cache和Buffer cache
  2. 淺墨: 聊聊Linux IO(下)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章