为什么 diskspd 和 fio 在 Linux 上生成奇数而在 Windows 上生成奇数?

为什么 diskspd 和 fio 在 Linux 上生成奇数而在 Windows 上生成奇数?

更新

感谢Anon的回答,我发现文件系统有问题——我使用的是NTFS。以下是使用 FAT32 的结果。

视窗:

diskspd64 -b128K -d5 -o32 -t1 -W0 -Sh -w0 cdm
508, 518, 520, 513, 513

fio --name=dontknow --ioengine=windowsaio --thread --size=1024m --bs=128k --time_based=1 --runtime=5s --iodepth=32 --numjobs=1 --rw=read --direct=1 --buffered=0 --startdelay=0s --filename=cdm
557, 557, 557, 558, 556

Linux:

diskspd -b128K -d5 -o32 -t1 -W0 -Sh -w0 cdm
529, 528, 529, 529, 529

fio --name=dontknow --ioengine=libaio --thread --size=1024m --bs=128k --time_based=1 --runtime=5s --iodepth=32 --numjobs=1 --rw=read --direct=1 --buffered=0 --startdelay=0s --filename=cdm
560, 560, 560, 560, 559

原问题

基于同一驱动器上的相同输入文件,这些是 Windows 上给定命令的读取速度的结果数字(MB/s - 我每个运行 5 次):

diskspd64 -b128k -d5 -o32 -t1 -W0 -S -w0 cdm
555, 555, 556, 556, 555

fio --name=doesntmatter --ioengine=windowsaio --thread=1 --size=1024m --bs=128k --time_based=1 --runtime=5s --iodepth=32 --numjobs=1 --rw=read --direct=1 --startdelay=0s --filename=cdm
561, 553, 562, 561, 558

和 Linux(准确地说 - KDE neon useredition-20180802):

diskspd -b128K -d5 -o32 -t1 -W0 -Sh -w0 cdm
1800, 2000, 1925, 1891, 1973

fio --name=doesntmatter --ioengine=libaio --thread=1 --size=1024m --bs=128k --time_based=1 --runtime=5s --iodepth=32 --numjobs=1 --rw=read --direct=1 --startdelay=0s --filename=cdm
2637, 2826, 2593, 2770

我还想提一下,这是一款 SATA SSD 驱动器,官方给出的最大读取速度为555 MB/s.所以 Windows 的数字似乎是准确的。

答案1

不幸的是,没有足够的信息来回答您的问题 - 通常需要查看运行的完整 fio 输出并了解您正在运行的 fio 版本,因为这可以说明诸如达到的深度以及 Linux 认为磁盘有多繁忙之类的信息是在运行期间(例如,当延迟接近 0 时,这几乎总是发生缓存的迹象)。

可能是文件所在的文件系统不支持direct=1它正在使用的选项。可能是您的文件由于某种原因被完全缓存,而您只是从缓存中读回(当文件大小大大小于您的总 RAM 时请注意这一点)。可能是因为您没有写入文件,所以它是稀疏/空的并且不是真正的“那里”(在读回之前尝试执行完整的写入操作)...

PS:thread不需要取值(参见http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-thread)。

相关内容