话说,Linux 自带的dd工具测试硬盘读写速度只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确。理论上bs越大,所测得性能越高。

上句来自网上,是不是真的呢?百闻不如一见。今天来进行实际的测试和对比。

找了一台没有硬盘的机器,再找了一块希捷7200rpm 3T的硬盘。一块硬盘只能做raid0,条带设置为256K。 敲入lsblk命令如下。 

linux 监控磁盘读写 linux磁盘读写性能测试_数据

 

一、格式化前对新加的盘进行测试 

1. 读测试

linux 监控磁盘读写 linux磁盘读写性能测试_linux 监控磁盘读写_02

 

2. 写测试

linux 监控磁盘读写 linux磁盘读写性能测试_4G_03

 

3. 在测试完下面的2.5后,再返回来测试该磁盘的写

linux 监控磁盘读写 linux磁盘读写性能测试_4G_04

可以看出,这三种差别不大。但是和上面一步相差很大!都快成倍数关系了。

 

4. 怀着忐忑的心情,再次测试了下 oflag=dsync参数。结果很快,没有想象的那么慢,将近10秒,虽然比上面大了不少。当然速度也慢了不少!

linux 监控磁盘读写 linux磁盘读写性能测试_文件系统_05

 

5. 上面的写速度相差比较大,所以再次测试了读速度。总量没变,还是1G的数据,只是改变了块大小,发现速度截然不同!块变大,速度反而变小,小太多!

linux 监控磁盘读写 linux磁盘读写性能测试_linux 监控磁盘读写_06

估计是因为没有文件系统。

6. 不同的bs块大小测试,发现写速度变化不大! 

linux 监控磁盘读写 linux磁盘读写性能测试_linux 监控磁盘读写_07

 

二、对系统盘的目录/mnt/disk1进行测试

1. 在home目录下操作失败了

linux 监控磁盘读写 linux磁盘读写性能测试_文件系统_08

 

2. of 必须指定文件,存不存在没关系。应该是sda盘已经格式化了文件系统有关。

linux 监控磁盘读写 linux磁盘读写性能测试_linux 监控磁盘读写_09

 

3. 把参数改为oflag=dsync,半天还没结束!

linux 监控磁盘读写 linux磁盘读写性能测试_文件系统_10

 

过了很久几次查看没动静,约一小时后,再开了个shell 进来看,文件变成了4G多点!不应该是1G?

linux 监控磁盘读写 linux磁盘读写性能测试_4G_11

 

4. 先ctrl+c退出原理的shell再测试下,不带后面的参数,再加上时间time的命令。比第二步(2.2)的速度稍有提高。

linux 监控磁盘读写 linux磁盘读写性能测试_文件系统_12

 

5. 反复三种方式测试了一下

linux 监控磁盘读写 linux磁盘读写性能测试_4G_13

速度基本上比较稳定。没有加参数速度稍微快一点点,而加参数conv=fdatasync 或者 fsync这两种没区别。

而oflag=dsync后续再测。

 

6. 从1.5返回测试不同的块大小。时间和速度变化不大,和上面(2.5)对比变化也很小,证明开始推断是正确的。所以文件系统必须要安装

linux 监控磁盘读写 linux磁盘读写性能测试_文件系统_14

 

7. 介于上面oflag=dsync的结果,我们再测试一下。

linux 监控磁盘读写 linux磁盘读写性能测试_数据_15

上面又卡主了,约五分钟后,我新开了一个shell窗口,连续两次查1.img的大小,已经都4G了,还在增大。所以上面的shell窗口ctrl+c果断推出。

 

linux 监控磁盘读写 linux磁盘读写性能测试_数据_16

 读速度非常高,bs为16k是更大。

linux 监控磁盘读写 linux磁盘读写性能测试_数据_17

 

 

到这里为止,我们可以得出一些结论

1.oflag=dsync是对物理数据(磁盘)的缓冲,不经过文件系统。而conv=fdatasync 或者conv=fsync是对文件系统的缓冲,其实字面f就是文件file;而前者data表示只缓存数据,后者数据和元数据都缓存。所以一般情况下都是安装了文件系统的,所以应选文件系统的参数,也可以默认不选择,差别不大。

2.bs块大小写磁盘,其值变化应该没多大影响。而对于,有文件系统的情况下,变大性能上升;但是对于物理裸盘,变大性能反而下降

当然只是目前测试的结果,可能还不够充分,后续有机会再完善,有问题也欢迎提出。