Linux
為什麼在 Linux 和 Windows 上 diskspd 和 fio 會生成奇數?
更新
感謝 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)。