layout: post title: Linux上的檔案IO效能優化
對於一個要求數據讀寫同步的程式,通常可能加上O_DIRECT
和O_SYNC
來改變kernel的IO操作
呼叫流程的圖可以在這邊找到
也可以參考這篇文章的圖
在預設情況下使用檔案相關API即是與VFS互動
VFS內部會利用Page Cache進行IO快取加速,因此mmap實際上也是與Page Cache互動
而Buffer Cache主要是針對device讀寫的加速
O_SYNC
和O_DSYNC
是對於Page Cache在寫時附帶進行flush
O_DIRECT
則是不使用Page Cache,直接讀寫 (DMA as possible),且必須自己進行對齊與固定大小