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操作)。direct
和dsync
比较类似,direct
在dsync
的基础上不使用系统的缓存。
可以对小文件进行多次读取来测试磁盘的延迟,例如:
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参数,同时还要多次测试求平均值,从而更好的反映磁盘的真实性能。