HDD&SSD 硬盘读写测试:fio 与 CrystalDiskMark —— 在 linux 与 windows 环境
在 linux 中使用 fio 模拟 windows 的 CrystalDiskMark 测试项目
引用、转载请注明出处:
HDD&SSD 硬盘读写测试:fio 与 CrystalDiskMark —— 在 linux 与 windows 环境_去山的那边看海啊的博客-CSDN博客
CrystalDiskMark 是什么?
官网:https://crystalmark.info/en/
大名鼎鼎的 CrystalDiskMark,也就是常说的 CDM 软件,操作简单好用,颜值高。还可以换皮肤玩。但在只能在 windows 环境下使用,不支持linux。
fio 是什么?
官网:https://fio.readthedocs.io/en/latest/
fio 是 Linux下开源的一款IOPS测试工具,主要用来对磁盘进行压力测试和性能验证。 类似的工具,简单的例如有 dd、hdparm 这些,但与 fio 相比,功能上都太简陋了。
安装
sudo apt install fio
常用参数:
以这样一个测试为例:
sudo fio -direct=1 -iodepth=1 -rw=randrw -ioengine=libaio -bs=4k -size=64M -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q1T1-RND4K64M
# -direct 是否忽略缓存,
# -iodepth 读写队列深度
# -rw 读写测试模式,randrw 随机读写,readwrite 连续读写
# -ioengine 读写方式:libaio:linux 异步读写;
# -bs 读写块大小
# -size 读写数据总量
# -numjobs 线程数量
# -runtime 运行时间,与 -size 一起,满足条件时,测试退出
# -group_reporting 聚合输出报告形式
# -filename 读写测试文件;如果读测试可以直接指定IO设备例如;/dev/sda ; 写测试必须为文件;
# -name 测试报告标题
注意:
读写测试时,需要指定一个可以读写的文件;此时需要使用 dd 生成一个测试文件;
time dd if=/dev/zero of=/home/test.temp bs=4k count=100000
使用 fio 模拟 CrystalDiskMark 的测试
那么我想在 Linux 下测试硬盘读写性能,并且想和之前在 windows 下用 CDM 测试的结果进行比对,就需要使用 fio 对 CDM 的测试项目进行模拟;
测试项目:
Q8T1-SEQ1M:多队列连续读写
sudo fio -iodepth=1 -iodepth=8 -rw=readwrite -ioengine=libaio -bs=1M -size=64M -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q8T1-SEQ1M64M
sudo fio -iodepth=1 -iodepth=8 -rw=readwrite -ioengine=libaio -bs=1M -size=1G -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q8T1-SEQ1M1G
Q1T1-SEQ1M:单队列连续读写
sudo fio -iodepth=1 -iodepth=1 -rw=readwrite -ioengine=libaio -bs=1M -size=64M -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q1T1-SEQ1M64M
sudo fio -iodepth=1 -iodepth=1 -rw=readwrite -ioengine=libaio -bs=1M -size=1G -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q1T1-SEQ1M1G
Q32T1-RND4K:4K多队列随机读写
sudo fio -iodepth=1 -iodepth=32 -rw=randrw -ioengine=libaio -bs=4k -size=64M -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q32T1-RND4K64M
sudo fio -iodepth=1 -iodepth=32 -rw=randrw -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q32T1-RND4K1G
Q1T1-RND4K:4K单队列随机读写
sudo fio -iodepth=1 -iodepth=1 -rw=randrw -ioengine=libaio -bs=4k -size=64M -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q1T1-RND4K64M
sudo fio -iodepth=1 -iodepth=1 -rw=randrw -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=60 -group_reporting -filename=/home/test.temp -name=Q1T1-RND4K1G
注意:
以上测试项目,fio 可以配置 -direct=1 屏蔽缓存,非常方便地测得硬盘的缓存外读写性能。
CDM 并没有这样直接的设置,所以测试结果是包含缓存内性能的。可以通过将 -size=1G 设置为更大的读写文件,耗尽缓存空间,以及增加 测试轮次(默认是5)来达到类似效果。
测试效果比较
windows 中对 西数 SN550 的测试结果:
linux 中对 西数 SN550 的测试结果:
Q32T1-RND4K64M 不使用缓存
Q32T1-RND4K64M 使用缓存
Q8T1-SEQ1M64M 使用缓存:
Q8T1-SEQ1M64M 不使用缓存:
结果分析:
缓存是个非常复杂的东西,从结果可以看到,有些 fio 测试在缓存参与时和CDM的结果一致,另外一些却是无缓存参与的与CDM一致。原因可能是多样的,系统任务调度的问题,文件系统NTFS、ext4之间的差异,系统缓存调度差异等等。目前来看测试结果仅供参考。但同时,fio 的实力还未真正得到发挥。
更多推荐
所有评论(0)