Dd

FIO 報告寫入速度慢,而 DD 報告寫入速度快

  • November 12, 2018

根據大多數磁碟基準,順序寫入速度通常非常接近讀取速度。我的在 ~500MB/s 範圍內。

$ dd if=/dev/zero of=tempfile bs=1M count=5120 conv=notrunc oflag=direct status=progress
5291114496 bytes (5,3 GB, 4,9 GiB) copied, 11 s, 481 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11,1929 s, 480 MB/s

$ dd if=/dev/zero of=tempfile bs=1024M count=5 conv=notrunc oflag=direct status=progress
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11 s, 490 MB/s
5+0 records in
5+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 10,9524 s, 490 MB/s

如您所見,dd 報告的平均速度超過 480MB/s,bs=1M,490MB/s,bs=1024M。(此外,fio 報告讀取速度比 dd 高 20-30MB/s,這很有趣,但對我來說不是問題)

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write
....
   write: IOPS=146, BW=147MiB/s (154MB/s)(5120MiB/34894msec); 0 zone resets

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write
....
   write: IOPS=0, BW=144MiB/s (151MB/s)(5120MiB/35458msec); 0 zone resets

如您所見,fio 報告 ~154MB/s 而不是 bs=1m,而 bs=1024m 報告是 151MB/s。(一個令人驚訝的更低的價值……)

是什麼導致 fio 傳輸文件如此緩慢,如何將其配置為更接近 dd 的寫入速度?

(附帶說明一下,在尋找解決方案時,我注意到很多使用者實際上認為他們的寫入速度和 fio 報告的一樣慢,並提出問題以了解為什麼他們的寫入如此緩慢,我什至看到了 NVME驅動測試,我看到寫入速度是讀取速度的一半,而且似乎沒有人注意到出了什麼問題……所以這個問題有一些更不想要的副作用,而不僅僅是我沒有得到一致的基準)

fio 的作者向我解釋了差異的原因:我使用dd命令是寫零,而預設情況下fio使用的是隨機數據。設置**–zero_buffers=1**解決了這個問題。

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write --zero_buffers=1
....
 write: IOPS=0, BW=495MiB/s (519MB/s)(5120MiB/10339msec); 0 zone resets

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write --zero_buffers=1
....
 write: IOPS=474, BW=474MiB/s (497MB/s)(5120MiB/10798msec); 0 zone resets

現在有更接近的結果。(應該注意,雖然這些結果確實顯示了驅動器理論最大寫入速度的近似值;沒有此選項的測試(使用隨機緩衝區)將提供更能反映真實世界 i/o 性能的結果。)

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