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到程序。
Buffer I/O的异步写过程,图中的缓冲区即是page cache
(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 I/O的过程
(2)优缺点
优点:
如果要传输的数据量很大,降低数据在page cache中的拷贝带来的开销,提高性能。
缺点:
(1)Direct I/O的开销大
(2)因为没有page cache的使用,读的时候需要从磁盘中读取数据,写的时候也没有办法延迟写只能同步写,降低了性能。
网友评论