Linux下产品或虚拟化产品,往往需要对Linux磁盘或者NFS等存储挂载点进行测试磁盘读写率,今天介绍一个常见的命令dd。
文件系统的性能依赖于的几个因素
1) The maximum rotational speed of your hard disk磁盘最大转速
2) The Allocated block size of a file system 文件系统分配的块大小
3) Seek Time磁盘寻道时间
4) The performance rate of the file system's metadata文件系统元数据的性能比率
5) The type of read/Write读写类型
建议:在文件系统测试期间 必须不能运行其他占用磁盘IO的密集型任务,否则测试结果将有很大偏差。
dd命令用于Linux下任意块大小的读和写。本文仅仅测试顺序读和顺序写,接下来我们测试下挂载到/home下的/dev/sda1。
场景1:默认情况下dd写数据
# dd if=/dev/zero of=/home/speetest bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0897865 seconds, 1.2 GB/s
哇,看到磁盘读写率这么高啊,这是因为数据写到到内存缓存中而不是磁盘中(data was cached to RAM memory)。
场景2:dd写数据同步到磁盘
# dd if=/dev/zero of=/home/speetest bs=1M count=100 conv=fdatasync
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 2.05887 seconds, 50.9 MB/s
现在你得到了顺序写的速率为50.9 MB/s。
场景3:比内存大的数据块的读写速率
Lets go to an amount of data size thats larger than the RAM. 以64kb块大小写200兆的数据到磁盘。
# dd if=/dev/zero of=/home/speedtest bs=64k count=3200 conv=fdatasync
3200+0 records in
3200+0 records out
209715200 bytes (210 MB) copied, 3.51895 seconds, 59.6 MB/s
测试结果看磁盘读写率接近于59 MB/s。
ext3文件系统默认情况下不需要指定块大小,是由mke2fs程序决定的,你可以测下自己的挂载点。
tune2fs -l /dev/sda1和dumpe2fs /dev/sda1
场景4:顺序读的磁盘速率
# dd if=/home/speedtest of=/dev/null bs=64k count=24000
5200+0 records in
5200+0 records out
340787200 bytes (341 MB) copied, 3.42937 seconds, 99.4 MB/s。
参考
https://www.slashroot.in/linux-file-system-read-write-performance-test