正确用DD测试磁盘读写速度

Publish: October 17, 2016 Category: Shell No Comments

以下几种方式测试磁盘读写速度的区别:

# 仅得到写缓存的速度
dd bs=1M count=128 if=/dev/zero of=test

# 当sync做准备开始往磁盘上写数据时,前面的dd已经显示错误的‘写入速度’
dd bs=1M count=128 if=/dev/zero of=test; sync

# 读取128M数据到内存并写入到磁盘上所用时间 【比较符合实际】
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

# 每次读1M后就要先把这1M写入磁盘,重复128次,基本上没用到写缓存
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

建议使用:

dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

因为这种方式最接近计算机实际操作,所以测出来的数据最有参考价值

例子:

# dd bs=10M count=128 if=/dev/zero of=test conv=fdatasync
128+0 records in
128+0 records out
1342177280 bytes (1.3 GB) copied, 4.60449 s, 291 MB/s

结果为:291MB/s


原则上:

  • 可以通过使用dd if=/dev/zero of=/file 来测试磁盘的纯写入性能。

  • 使用dd if=/file of=/dev/null 来测试磁盘的纯读取性能。

  • 使用dd if=/file1 of=/file2 来测试磁盘的读写性能。


测试硬盘的结果如下

(1)测试纯写入性能

#dd if=/dev/zero of=test bs=1M count=64 conv=fdatasync oflag=direct
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 0.0710237 s, 945 MB/s

结果为945 MB/s。


(1)测试纯读取性能

# dd if=./test of=/dev/null bs=1M count=64 iflag=direct
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 0.0283407 s, 2.4 GB/s

结果为2.4GB/s。