话说,Linux 自带的dd工具测试硬盘读写速度只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确。理论上bs越大,所测得性能越高。
上句来自网上,是不是真的呢?百闻不如一见。今天来进行实际的测试和对比。
找了一台没有硬盘的机器,再找了一块希捷7200rpm 3T的硬盘。一块硬盘只能做raid0,条带设置为256K。 敲入lsblk命令如下。
一、格式化前对新加的盘进行测试
1. 读测试
2. 写测试
3. 在测试完下面的2.5后,再返回来测试该磁盘的写
可以看出,这三种差别不大。但是和上面一步相差很大!都快成倍数关系了。
4. 怀着忐忑的心情,再次测试了下 oflag=dsync参数。结果很快,没有想象的那么慢,将近10秒,虽然比上面大了不少。当然速度也慢了不少!
5. 上面的写速度相差比较大,所以再次测试了读速度。总量没变,还是1G的数据,只是改变了块大小,发现速度截然不同!块变大,速度反而变小,小太多!
估计是因为没有文件系统。
6. 不同的bs块大小测试,发现写速度变化不大!
二、对系统盘的目录/mnt/disk1进行测试
1. 在home目录下操作失败了
2. of 必须指定文件,存不存在没关系。应该是sda盘已经格式化了文件系统有关。
3. 把参数改为oflag=dsync,半天还没结束!
过了很久几次查看没动静,约一小时后,再开了个shell 进来看,文件变成了4G多点!不应该是1G?
4. 先ctrl+c退出原理的shell再测试下,不带后面的参数,再加上时间time的命令。比第二步(2.2)的速度稍有提高。
5. 反复三种方式测试了一下
速度基本上比较稳定。没有加参数速度稍微快一点点,而加参数conv=fdatasync 或者 fsync这两种没区别。
而oflag=dsync后续再测。
6. 从1.5返回测试不同的块大小。时间和速度变化不大,和上面(2.5)对比变化也很小,证明开始推断是正确的。所以文件系统必须要安装!
7. 介于上面oflag=dsync的结果,我们再测试一下。
上面又卡主了,约五分钟后,我新开了一个shell窗口,连续两次查1.img的大小,已经都4G了,还在增大。所以上面的shell窗口ctrl+c果断推出。
8. 读速度非常高,bs为16k是更大。
到这里为止,我们可以得出一些结论。
1.oflag=dsync是对物理数据(磁盘)的缓冲,不经过文件系统。而conv=fdatasync 或者conv=fsync是对文件系统的缓冲,其实字面f就是文件file;而前者data表示只缓存数据,后者数据和元数据都缓存。所以一般情况下都是安装了文件系统的,所以应选文件系统的参数,也可以默认不选择,差别不大。
2.bs块大小在写磁盘,其值变化应该没多大影响。而对于读,有文件系统的情况下,变大性能上升;但是对于物理裸盘,变大性能反而下降。
当然只是目前测试的结果,可能还不够充分,后续有机会再完善,有问题也欢迎提出。
另,有关文件IO知识可以参考https://www.cnblogs.com/orange-CC/articles/12671487.html,来自本人博客;还有更多文件系统和内存管理的知识欢迎阅读!