dd是进行数据块拷贝的命令,可以很好的测试硬盘读写性能,网上例子很多,但是有时候我们并没有很好的理解它。
我用单机单块硬盘重新测试下。并且分析。
写性能测试
[root@localhost ~]# dd if=/dev/zero bs=1024 count=1000000 of=./1Gb.file conv=fdatasync
记录了1000000+0 的读入
记录了1000000+0 的写出
1024000000字节(1.0 GB)已复制,9.07139 秒,113 MB/秒
解释:
if=/dev/zero 提供数据源头。一般认为提供数据耗时占总比例很低,进而可以忽略它的耗时。
bs=1024 一次产生1024个字节数。
count=1000000 循环产生1000000次1024字节
cony=fdatasync 写文件为了减少对磁盘的频繁访问,所以除非你关闭文件的读写缓存,不然文件的写入是先写进缓存的。fdatasync的作用就是将数据写入磁盘
读性能测试
[root@localhost ~]# dd if=./1Gb.file bs=1024 of=/dev/null
记录了1000000+0 的读入
记录了1000000+0 的写出
1024000000字节(1.0 GB)已复制,0.762979 秒,1.3 GB/秒
[root@localhost ~]# free
total used free shared buffers cached
Mem: 3847976 2859992 987984 134476 0 2297636
-/+ buffers/cache: 562356 3285620
Swap: 4079612 286208 3793404
解释:
of=/dev/null 理解为一个不占用写时间的地方就可以。
常识告诉我,机械硬盘读速度不可能有1.3GB/秒。我觉得是cache对它进行了干扰。
所以我们需要清空cache,以前测试OOM,写过类似的程序把数据从cache挤出去。
我们清空cache后重新测试!
[root@localhost ~]# free
total used free shared buffers cached
Mem: 3847976 470032 3377944 130980 0 12388
-/+ buffers/cache: 457644 3390332
Swap: 4079612 432476 3647136
[root@localhost ~]# dd if=./1Gb.file bs=1024 of=/dev/null
记录了1000000+0 的读入
记录了1000000+0 的写出
1024000000字节(1.0 GB)已复制,7.82455 秒,131 MB/秒
131MB/秒这个数据是比较正常的,如果数据有偏差,可以按这种步骤多试几次求众数吧。
目前来看。这样测试出来的数据是可信的。也没有明显的弊端。