Linux

為什麼在 Linux 和 Windows 上 diskspd 和 fio 會生成奇數?

  • August 9, 2018

更新

感謝 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 數字似乎是準確的。

不幸的是,沒有足夠的資訊來回答您的問題 - 通常需要查看執行的完整 fio 輸出並了解您正在執行的 fio 版本,因為這可以說明諸如達到什麼深度以及 Linux 認為磁碟有多忙是在執行期間(例如,當延遲接近 0 時,這幾乎總是發生記憶體的跡象)。

可能是文件所在的文件系統不支持direct=1它使用的選項。可能是您的文件由於某種原因被完全記憶體,而您只是從記憶體中讀取(當文件大小大大小於您的總 RAM 時,請注意這一點)。可能是因為你沒有寫入你的文件它是稀疏/空的並且不是真正的“那裡”(在你讀回之前嘗試做一整套寫入)……

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

引用自:https://unix.stackexchange.com/questions/461328