.png)
概括
我發現 Proxmox VE 7 (Bullseye) 中的 ZFS SSD 鏡像的 I/O 性能大幅波動。我只是一個新手,無法獨自找到它。
細節
這在現實任務中表現非常差,所以這不僅僅是人為基準。但為了幫助診斷它,我正在運行:
sysbench fileio --file-test-mode=rndrw run
它從 Proxmox 終端機「裸機」運行,沒有任何虛擬機器處於活動狀態。結果差異很大。下面是兩個例子:
File operations:
reads/s: 2316.07
writes/s: 1544.08
fsyncs/s: 4949.70
Throughput:
read, MiB/s: 36.19
written, MiB/s: 24.13
General statistics:
total time: 10.0062s
total number of events: 88040
Latency (ms):
min: 0.00
avg: 0.11
max: 35.66
95th percentile: 0.65
sum: 9947.54
Threads fairness:
events (avg/stddev): 88040.0000/0.00
execution time (avg/stddev): 9.9475/0.00
和
File operations:
reads/s: 22.60
writes/s: 15.07
fsyncs/s: 56.98
Throughput:
read, MiB/s: 0.35
written, MiB/s: 0.24
General statistics:
total time: 10.6162s
total number of events: 877
Latency (ms):
min: 0.00
avg: 11.43
max: 340.62
95th percentile: 77.19
sum: 10020.19
Threads fairness:
events (avg/stddev): 877.0000/0.00
execution time (avg/stddev): 10.0202/0.00
如您所見,事件總數增加了 10,000 倍,並且延遲大幅增加。這些波動不是「一次性的」。它不斷地在這些極端之間波動。
我已盡力縮小簡單硬體問題的範圍。兩款 SSD 都是全新的,smartctl 中的值均為 100。我已經更換了 SATA 電纜。我已經在鏡像降級的情況下運行它,以嘗試隔離單個驅動器問題。我已將磁碟機移至單獨的 SATA 控制器。沒有什麼能給我不同的結果。
我有第二台伺服器以類似的方式配置,儘管鏡像中使用的是較舊的(且不匹配的)SSD。沒看到這個問題。但伺服器硬體有所不同。糟糕的結果來自於下面所描述的系統。 「正常」的結果來自一台帶有 E3-1275v2 的舊改裝 PC。
我希望得到有助於診斷此問題的提示。問題似乎出在延遲。什麼會導致這種情況?接下來我該採取什麼步驟?
先致謝!
系統 (如果有幫助的話)
- MB:超微 X9DRi-F
- CPU:雙至強 E5-2650 v2
- 記憶體:128 GB(8 x 16 GB)
- SATA 控制器:板載 SATA 3(也測試了單獨的 SATA 2)
- SSD:2x 1GB TeamGroup SATA(是的,便宜,但應該沒問題)
- PCIe 卡:
- Mellanox MCX312B
- LSI SAS9207-8i(HBA 連接到 8 個未安裝的磁碟...傳遞到 VM)
- Nvidia GTX 750(傳遞到虛擬機器)
答案1
昨天我的新設定也發生了類似的事情:Proxmox VE 7 位於 Intel 11500 上,具有 32 GB RAM 和 2 個 SSD Crucial BX500(這些是消費級),配置為 ZFS 鏡像。
dd
我使用向 SSD 寫入 1GB 的零進行了基準測試,它以 5 MB/s 的速度運行(我知道dd
這不利於基準測試,但仍然...)。在基準測試期間,iostat
利用率為 100%。就我而言,我透過調整 SSD 解決了效能問題。您可以使用強制它zpool trim rpool
,並且可以使用啟用自動修剪zpool set autotrim=on rpool
。調整磁碟後,我再次執行基準測試,運行時間為 7 秒(153 MB/秒)。
在尋找如何提高效能的過程中,我將其設定xattr
為sa
維基百科我調整了zfs_arc_min
/zfs_arc_max
和其他核心參數。
我希望這也適合你。
答案2
您應該在 SSD 上使用 ashift=12 建立 zfs 池,以與 SSD 的 4096 個磁區保持一致。
檢查當前值
zpool get all pool_name | grep ashift
也要檢查分割區是否對齊到 1MB(2048 512 位元組磁區)
答案3
zfs 是寫入時複製 fs。這對於廉價 SSD 來說非常非常糟糕。你可以直接用Windows機器測試這個SSD,透過安全擦除它並做一個完整的寫入測試(我認為hd調整可以做到),你會看到這個SSD在SLC \ RAM耗盡時有什麼性能. .....它將非常糟糕...例如 50-70 mb/s,而不是 SATA 的 500+。還有一些便宜的SSD使用系統RAM而不是自己的RAM模組或SLC緩存,這對ZFS來說是不好的。我希望這個幫助有類似的問題,可以透過將 SSD 更改為 980 Pro 來解決(但由於成本原因,尺寸較小)