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

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

目的

验证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内核线程刷新磁盘。
利用dd对硬盘读写的一次简单测试利用dd对硬盘读写的一次简单测试 flyweight_visitor 发布了1 篇原创文章 · 获赞 0 · 访问量 34 私信 关注
上一篇:进制之间的转换


下一篇:Vue.js 杂记