引用、转载请注明出处:

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 的实力还未真正得到发挥。

Logo

更多推荐