Storage

如何解釋這些 fio 頻寬結果?

  • May 16, 2022

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 Markfionumjobs=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 程序)。

當我增加到numjobs8-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)重試測試,以查看情況是否發生變化。

引用自:https://serverfault.com/questions/1018971