使用dd命令简单测试磁盘性能

为什么80%的码农都做不了架构师?>>>   hot3.png

1.dd命令的简单使用

工作中,我们经常需要测试磁盘的性能,我们可以使用 dd 命令对系统的磁盘性能进行一个测试。

dd if=/dev/zero of=/mnt/test/testfile bs=1G count=1 oflag=direct
  • if:表示从/dev/zero这个设备读取数据,在类UNIX 操作系统中,/dev/zero是一个特殊的设备文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)

  • of:就是数据的输出位置,这里可以是驱动器、分区、或者文件。上面的例子中使用的就是文件/mnt/test/testfile

  • bs:(block-size)每进行一次读写的数据量大小,默认单位是byte,上面例子中就是1G

  • count:表示进行读写的次数,上面例子中就是进行了1次读写

  • oflag:表示读写磁盘的方式。direct代表不使用系统的缓存,直接对磁盘进行读写。dsync代表使用同步io对磁盘进行读写。sync表示同时写入元数据(metadata包括size、访问时间st_atime & st_mtime等等,因为元数据一般存放在其他的地方,一次需要进行2次IO操作)。directdsync比较类似,directdsync的基础上不使用系统的缓存。

可以对小文件进行多次读取来测试磁盘的延迟,例如:

dd if=/dev/zero of=/root/testfile bs=512 count=100000 oflag=dsync

输出:

我们可以测算出,每次的io延迟大概在182.505s/100000=0.00182s左右,也就是每次的IO延迟在1ms左右。

上述的压测是基于dsync模式下进行的,也就是同步写入,同时没有使用系统的缓存,如果我们使用默认的参数,那么dd命令默认是使用系统的缓存的,我们可以得到一个很好的结果,如图:

最后,我们可以使用下面的命令对磁盘的读取速度进行测试:

dd if=/root/testfile of=/dev/null bs=4k count=10000 iflag=direct

结果输出:

如果我们将iflag=direct删除,因为系统缓存的原因,压测结果会非常好,完全就是内存的读取速度,如图:

总结,在使用dd进行压测的过程中,系统的缓存对压测的成绩影响很大,因此为了真实的还原系统磁盘的处理速度,我们需要在压测过程中注意添加相应的iflag和oflag参数,同时还要多次测试求平均值,从而更好的反映磁盘的真实性能。

2.参考文献

《Linux I/O Performance Tests using dd》

《Linux 中直接 I/O 机制的介绍》

转载于:https://my.oschina.net/cloes/blog/3031785

你可能感兴趣的:(使用dd命令简单测试磁盘性能)