FIO 报告写入速度慢,而 DD 报告写入速度快

FIO 报告写入速度慢,而 DD 报告写入速度快

根据大多数磁盘基准测试,顺序写入速度通常非常接近读取速度。我的在 ~500MB/s 范围内。

$ dd if=/dev/zero of=tempfile bs=1M count=5120 conv=notrunc oflag=direct status=progress
5291114496 bytes (5,3 GB, 4,9 GiB) copied, 11 s, 481 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11,1929 s, 480 MB/s

$ dd if=/dev/zero of=tempfile bs=1024M count=5 conv=notrunc oflag=direct status=progress
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11 s, 490 MB/s
5+0 records in
5+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 10,9524 s, 490 MB/s

如您所见,当 bs=1M 时,dd 报告的平均速度超过 480MB/s;当 bs=1024M 时,dd 报告的平均速度超过 490MB/s。 (此外,fio 报告读取速度比 dd 高 20-30MB/s,这很有趣,但对我来说不是问题)

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write
....
    write: IOPS=146, BW=147MiB/s (154MB/s)(5120MiB/34894msec); 0 zone resets

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write
....
    write: IOPS=0, BW=144MiB/s (151MB/s)(5120MiB/35458msec); 0 zone resets

正如您所看到的,当 bs=1m 时,fio 报告约为 154MB/s,当 bs=1024m 时,fio 报告为 151MB/s。 (令人惊讶的是更低的值......)

是什么导致 fio 传输文件如此慢,如何配置它以接近 dd 的速度?

(顺便说一句,在寻找解决方案时,我注意到很多用户实际上认为他们的写入速度与 fio 报告的一样慢,并提出问题以了解为什么他们的写入速度如此慢,我什至看到了 NVME进行驱动测试时,我看到写入速度是读取速度的一半,似乎没有人注意到有什么问题......所以这个问题有一些更多不需要的副作用,而不仅仅是我没有获得一致的基准)

答案1

fio的作者向我解释了差异的原因:dd我使用的命令是写零,而使用fio随机数据默认情况下。环境--zero_buffers=1解决了这个问题。

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write --zero_buffers=1
....
  write: IOPS=0, BW=495MiB/s (519MB/s)(5120MiB/10339msec); 0 zone resets

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write --zero_buffers=1
....
  write: IOPS=474, BW=474MiB/s (497MB/s)(5120MiB/10798msec); 0 zone resets

现在有了更接近的结果。 (应该指出的是,虽然这些结果确实显示了驱动器理论最大写入速度的近似值;不使用此选项(使用随机缓冲区)进行测试将提供更能反映实际 I/O 性能的结果。)

相关内容