当我们拿到一台VPS主机的时候,我们是不是经常迫不得已的想要对VPS的性能进行测试,其中包括CPU,内存,网络和硬盘读写速度的测试。今天我们就来研究一下如何对硬盘的IO速度进行测试。
首先我们来了解一些名词
IO:Input & Ouput,输入输出,即读与写。
下面我们来了解一下今天的主角:dd命令
首先我们来看看下面4条命令
dd bs=64k count=4k if=/dev/zero of=test
dd bs=64k count=4k if=/dev/zero of=test; sync
dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync
dd bs=64k count=4k if=/dev/zero of=test oflag=dsync
这四条命令,都是使用dd命令来执行的,区别在于这四条命令在内存中写缓存的处理方式。
dd bs=64k count=4k if=/dev/zero of=test
没有加任何参数,dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。因为其实dd给你的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度并不会显示出来给我们看到。所以即使这个命令最终输出的速度很快,其实也没有什么作用。
dd bs=64k count=4k if=/dev/zero of=test; sync
和上一条命令的完全一样,分号隔开的sync命令只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。
dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync
加上conv=fdatasync这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这128M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际使用结果的。
dd bs=64k count=4k if=/dev/zero of=test oflag=dsync
加上oflag=dsync这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取64k后就要先把这64k写入磁盘,然后再读取下面这64k,一共重复4 * 1024次。这种方式非常的慢,基本上没有用到写缓存(write cache)。因此这种方式测试出来的速度也是最准确可靠的。
我觉得利用dd命令测试硬盘读写速度,一般情况下只要用第4条命令就可以了。另外,dd测试结果显示越大并不一定说明服务器的性能越好,普通硬盘的服务器执行dd命令测试结果在30M/s左右就已经算是不错了。
注意:执行dd命令测试硬盘IO性能,对硬盘的损害很大,不建议多次或长时间尝试!
ok
mjj通道