更新
感谢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)。