天天看點

Direct IO 與 Buffer IO

Direct IO 與 Buffer IO

1、Buffer I/O

(1)描述

資料在被寫入的時候,預設使用的Buffer I/O。使用Buffer I/O的時候才在記憶體與磁盤中間加了一層page cache。

資料在寫入的時候,資料會被先寫入page cache。如果使用者采用的時同步寫(synchronous write),則資料會立即從page cache寫回到磁盤中;如果使用的時延遲寫(deferred writes),那麼應用程式就完全不需要等到資料全部被寫回到磁盤,資料隻要被寫到頁緩存中就可以了,作業系統會定期将頁緩存中的資料刷回到磁盤。

資料被讀取的時候,如果這塊資料已經在page cache中,則這塊資料可以立即傳回給程式;如果沒有,則需要将資料從磁盤讀取到page cache中,再從page cache到程式。

Direct IO 與 Buffer IO

(2)優缺點以及優化方案

優點:

使用了page cache,提高了寫入效率,減少了讀盤的次數

缺點:

資料需要在程式記憶體以及page cache之間進行多次拷貝操作,帶來cpu以及記憶體開銷。

優化:

可以通過調整/proc/sys/vm/dirty_background_ratio來調整flush page cache的頻率以及調整/proc/sys/vm/dirty_ratio來控制阻塞寫操作進行flush的動作。

2、Direc I/O

(1)描述

資料在磁盤與程式記憶體之間進行直接傳輸不經過page cache。

适用于self-caching的程式,自己管理資料的讀寫以及緩存,降低資料在page cache中的拷貝帶來的開銷,提高性能

Direct IO 與 Buffer IO

(2)優缺點

優點:

如果要傳輸的資料量很大,降低資料在page cache中的拷貝帶來的開銷,提高性能。

缺點:

(1)Direct I/O的開銷大

(2)因為沒有page cache的使用,讀的時候需要從磁盤中讀取資料,寫的時候也沒有辦法延遲寫隻能同步寫,降低了性能。

繼續閱讀