我有一个软件 RAID5 阵列,由使用 组装的四个 8TB 磁盘组成mdadm
。当我尝试使用fio
以下命令测量写入性能时
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
摘自这个答案(如何检查硬盘性能)我很高兴看到结果
WRITE: bw=186MiB/s (195MB/s), 186MiB/s-186MiB/s (195MB/s-195MB/s), io=10.0GiB (10.7GB), run=54942-54942msec
但是,如果我使用 Gnome Disks 程序,我会看到 100 个样本的平均写入速率仅为1.8 MB/s
!(我使用了默认设置:10 MiB
样本大小。)此外,Gnome Disks 报告的同一基准的平均写入速率为,比使用 10MB 块大小( )的报告速率76.2 MB/s
要低得多。fio
~300 MB/s
我知道这些工具无法提供直接可比的结果,但考虑到我实际没有看到糟糕的写入性能,Gnome Disks 肯定有问题。~5GB
在 nautilus 中复制文件时,我确实看到第一个文件复制得非常快~1.3GB
(可能直接进入缓存),然后出现几秒钟的停滞,看起来没有任何进展,然后非常快速地跳转到完成(但我愿意假设这是配置的典型特征)。
我是否犯了一个常见的错误——Gnome Disk 的写入速度测量可能存在什么问题?
答案1
看着https://github.com/GNOME/gnome-disk-utility/blob/5baa52eff3036fc59648bc2e10c4d4ec69dec50b/src/disks/gdubenchmarkdialog.c#L1337gnome-disks 似乎没有以O_DIRECT
异步方式提交 I/O(而您的 fio 作业却以异步方式提交)。此外,gnome-disks 似乎正在针对块设备执行 I/O(而您的 fio 作业正在使用文件系统中的文件),并且还选择在每次写入 I/O 之后执行 fsync(https://github.com/GNOME/gnome-disk-utility/blob/5baa52eff3036fc59648bc2e10c4d4ec69dec50b/src/disks/gdubenchmarkdialog.c#L1358)。它似乎还在执行读取操作,然后写入所读取的内容。我希望您的 fio 工作能够彻底击败它 - 能够同时执行 32 个未完成的命令是一个相当大的优势!
Gnome-disks 似乎正在做一些更类似于 fio 的工作,例如:
# The following is dangerous and will IRRECOVERABLY DESTROY DATA
name=pseudo-gnome-disks-dangerous
filename=/dev/<dev>
rw=write
bs=1M
fsync=1
size=500M
但即使上述操作也无法捕获 gnome-disks 正在执行的读取操作(因为 gnome-disks 先读取然后写入同一个块)。此外,如果不清楚上述 fio 作业是否危险,并且将不可恢复地破坏数据,因此除非您能够承受所选设备上的数据被不可恢复地破坏,否则不要运行它。
我是否犯了一个常见的错误——Gnome Disk 的写入速度测量可能存在什么问题?
恐怕你自己已经回答了这个问题:
我知道这些工具无法提供直接可比的结果
唯一的错误是将不同的基准测试工具相互比较,而不是只将它们自己进行比较。如果你不知道他们在做同样的事情,那就不公平了。
TLDR;gnome-disks 所做的事情和你原来的 fio 工作不一样,所以你要进行苹果和橘子的比较。