Dd
FIO 報告寫入速度慢,而 DD 報告寫入速度快
根據大多數磁碟基準,順序寫入速度通常非常接近讀取速度。我的在 ~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 性能的結果。)