如何解釋這些 fio 頻寬結果?
fio
在具有以下設置的新伺服器上執行了幾個測試:
1 個三星 PM981a 512GB M.2 NVMe 驅動器。
- Proxmox 在 root 上安裝了 ZFS。
- 1x VM 創建了 30GB 空間並安裝了 Debian 10。
6 個 Intel P4510 2TB U.2 NVMe 驅動器通過 OCuLink 連接到 6 個專用 PCIe 4.0 x4 通道。
- 直接連接到單個 VM。
- 在 VM 中配置為 RAID10(條帶化 3 個鏡像)。
主機板/CPU/記憶體:華碩KRPA-U16/EPYC 7302P/8x32GB DDR4-3200
這些磁碟的順序讀取速度高達 3,200 MB/s 。從理論上講,最大頻寬應為 19.2 GB/s。
在 ZFS RAID 上執行我得到的結果在 ~2,000 - 3,000 MB/s 的範圍內(例如,在沒有 ZFS 或任何其他成本的情況下進行測試時,磁碟能夠達到 3,200 MB/s 的完整速度,例如,在執行 Crystal Disk Mark
fio
時numjobs=1
在直接安裝在其中一個磁碟上的 Windows 中):fio --name=Test --size=100G --bs=1M --iodepth=8 --numjobs=1 --rw=read --filename=fio.test => Run status group 0 (all jobs): READ: bw=2939MiB/s (3082MB/s), 2939MiB/s-2939MiB/s (3082MB/s-3082MB/s), io=100GiB (107GB), run=34840-34840msec
考慮到一切似乎都是合理的。也可能受 CPU 限制,因為其中一個核心將處於 100% 負載(其中一些用於 ZFS 程序)。
當我增加到
numjobs
8-10 時,事情變得有點奇怪:fio --name=Test --size=100G --bs=1M --iodepth=8 --numjobs=10 --rw=read --filename=fio.test => Run status group 0 (all jobs): READ: bw=35.5GiB/s (38.1GB/s), 3631MiB/s-3631MiB/s (3808MB/s-3808MB/s), io=1000GiB (1074GB), run=28198-28199msec
38.1 GB/s - 遠高於理論最大頻寬。
這裡的解釋究竟是什麼?
評論補充:
虛擬機配置:
iotop
測試期間:
第一個
fio
(帶有 的--numjobs=1
)順序執行任何讀取操作,除了快速預讀/預取之外,您的條帶配置沒有任何好處:iodepth
僅適用於通過libaio
引擎完成的非同步讀取,這反過來需要真正的支持O_DIRECT
(ZFS 缺乏) . 您可以嘗試將預取視窗從預設的 8M 增加到 64M (echo 67108864 > /sys/module/zfs/parameters/zfetch_max_distance
)。當然,您的里程可能會有所不同,因此請務必檢查這不會影響其他工作負載。第二個
fio
(帶有 的那個--numjobs=8
)可能被 ARC 記憶體扭曲了。可以肯定的是,只需打開另一個執行的終端dstat -d -f
:您將看到每個磁碟的真實傳輸速度,它肯定會與它們的理論最大傳輸速率一致。您還可以fio
使用新啟動的機器(因此使用空 ARC)重試測試,以查看情況是否發生變化。