美文网首页技术
Direct I/O 与 Buffer I/O

Direct I/O 与 Buffer I/O

作者: 白奕新 | 来源:发表于2019-08-18 10:51 被阅读0次

    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的使用,读的时候需要从磁盘中读取数据,写的时候也没有办法延迟写只能同步写,降低了性能。

    相关文章

      网友评论

        本文标题:Direct I/O 与 Buffer I/O

        本文链接:https://www.haomeiwen.com/subject/gchrsctx.html