我正在使用dd命令检查CentOS 6上的硬盘的磁盘速度。 该设置是一个DRBD设置 – 这个服务器是主要的。 为了确保得到正确的值,我使用不同的输出文件执行3次dd命令,然后取平均的读/写时间。 然而,dd命令的第一个读数比下一个2慢了一个数量级。
time -p dd if=/dev/zero of=/mailstore/testfile bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 88.5175 s, 3.0 MB/s real 90.12 user 0.00 sys 0.66 time -p dd if=/dev/zero of=/mailstore/testfile1 bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 0.226015 s, 1.2 GB/s real 0.30 user 0.00 sys 0.22 time -p dd if=/dev/zero of=/mailstore/testfile2 bs=16k count=16384 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 0.22094 s, 1.2 GB/s real 0.22 user 0.00 sys 0.21
这是正常的吗? 我应该忽略一读,然后采取3更多?
正如poigebuild议的那样,dd命令使用opflag = direct选项提供一致的输出。 例如。
time -p dd if=/dev/zero of=/mailstore/filetest33 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 296.587 s, 905 kB/s real 296.61 user 0.03 sys 1.07 time -p dd if=/dev/zero of=/mailstore/filetest44 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 260.308 s, 1.0 MB/s real 260.42 user 0.04 sys 1.13 time -p dd if=/dev/zero of=/mailstore/filetest56 bs=16k count=16384 oflag=direct 16384+0 records in 16384+0 records out 268435456 bytes (268 MB) copied, 253.681 s, 1.1 MB/s real 253.68 user 0.03 sys 1.06
dd有direct选项,要求内核绕过任何caching,并直接发送数据到块设备。 如果你需要基准你的设备,而不是内存,你必须使用它,例如:
dd if=/dev/zero of=direct_output bs=1M count=100 oflag=direct
所以,你说它是通过networking安装的。 哪个文件系统,CIFS或NFS? 无论哪种方式,我怀疑你可能已经被委派的文件。 当你的客户端获得一个委托的文件时,它可以在本地caching写入。 但是,当您使用O_DIRECT(这是什么oflag =直接的意思),写入立即发送到服务器,而不是任何caching。
无论哪种方式,都有一些奇怪的事情发生。 除非实际使用10Mbps以太网,否则应该超过1.1MB / s。
此外,您可以通过在另一个窗口中运行killall -USR1 dd来获得速度的中间传输更新。如果您检查dd手册页,则会看到USR1信号不会终止/停止dd,而是会打印出I / O统计。 在等待大型磁盘传输时,我经常这样做:
同时睡10个; 做killall -USR1 dd; DONE
哦,如果你怀疑磁盘caching,使用这个命令刷新readcache:echo 1> / proc / sys / vm / drop_caches
祝你好运!