您的位置:首页 > 其它

利用dd对硬盘读写的一次简单测试

2020-06-04 05:37 113 查看

利用dd对硬盘读写的一次简单测试

  • 默认方式:启动Page Cache,系统自动刷盘
  • fsync方式
  • sync方式
  • 结论
  • 目的

    验证Linux上不同的IO方式及page cache对文件读写性能的影响

    过程

    Direct IO方式

    执行前Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 149Mi 3.2Gi 0.0Ki 195Mi 3.2Gi
    Swap: 0B 0B 0B

    Direct IO测试结果

    dd if=/dev/zero of=zero.log bs=64K count=50K oflag=direct
    51200+0 records in
    51200+0 records out
    3355443200 bytes (3.4 GB, 3.1 GiB) copied, 39.0018 s, 86.0 MB/s

    执行后Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 149Mi 3.2Gi 0.0Ki 195Mi 3.2Gi
    Swap: 0B 0B 0B

    默认方式:启动Page Cache,系统自动刷盘

    执行前Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 149Mi 3.2Gi 0.0Ki 195Mi 3.2Gi
    Swap: 0B 0B 0B

    默认方式测试结果

    dd if=/dev/zero of=zero.log bs=64K count=50K
    51200+0 records in
    51200+0 records out
    3355443200 bytes (3.4 GB, 3.1 GiB) copied, 21.7411 s, 154 MB/s

    执行后Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 147Mi 108Mi 0.0Ki 3.3Gi 3.2Gi
    Swap: 0B 0B 0B

    fsync方式

    执行前Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 149Mi 3.2Gi 0.0Ki 195Mi 3.2Gi
    Swap: 0B 0B 0B

    fsync测试结果

    dd if=/dev/zero of=zero.log bs=64K count=50K conv=fsync
    51200+0 records in
    51200+0 records out
    3355443200 bytes (3.4 GB, 3.1 GiB) copied, 28.6824 s, 117 MB/s

    执行后Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 148Mi 111Mi 0.0Ki 3.3Gi 3.2Gi
    Swap: 0B 0B 0B

    sync方式

    执行前Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 149Mi 3.2Gi 0.0Ki 195Mi 3.2Gi
    Swap: 0B 0B 0B

    sync测试结果

    dd if=/dev/zero of=zero.log bs=64K count=50K oflag=sync
    51200+0 records in
    51200+0 records out
    3355443200 bytes (3.4 GB, 3.1 GiB) copied, 63.7788 s, 52.6 MB/s

    执行后Page Cache/Buffer Cache统计

    free -h
    total used free shared buff/cache available
    Mem: 3.6Gi 147Mi 100Mi 0.0Ki 3.3Gi 3.2Gi
    Swap: 0B 0B 0B

    结论

    经过简单比较,从消耗时间上sync > direct > fsync > 默认。理论上

    • sync在每次往page cache写完数据块后还需要主动发起sync调用,将元数据和数据写到磁盘上,故消耗时间最长
    • direct不需要经过page cache,直接将数据写到磁盘上,消耗时间依赖于磁盘调度和transfer time。至于direct为什么比fsync耗时长,并不完全清楚,猜测是由于fsync在最后主动刷盘前已经有部分数据通过pdflush内核线程刷到磁盘了,总体耗时平摊掉了。
    • fsync在总体上往page cache写完数据块之前主动发起一次fsync调用,将元数据和数据写到磁盘上
    • 默认方式是最快的,数据直接写到page cache即可返回。系统内核通过pdflush内核线程刷新磁盘。
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: