X9DR3-F 上的 NVMe 硬碟效能意外不佳

X9DR3-F 上的 NVMe 硬碟效能意外不佳

我遇到了伺服器中 NVMe SSD 條帶效能異常低下的情況。硬體如下:

  • 主機板:X9DR3-F
  • CPU:雙E5-2650v2
  • 記憶體:128GB DDR3-1333 UDIMM (16x8GB)
  • NVMe 驅動器:4 個 MZVLB256HBHQ-000L7,透過帶有分叉通道的 PCIe 擴展器

lspci -nvv顯示了設備的 8GT/s x4 鏈路,顯示它在 PCIe 3.0 上運行,就像驅動器想要的那樣: LnkSta: Speed 8GT/s, Width x4。該驅動器的基準測試表明它能夠以 1.4GB/s 左右的寫入速度運行。

當我嘗試對驅動器進行順序寫入時,我獲得了大約三分之一的性能。下面顯示了寫入期間的 619MB/s,然後又暫停了 50 秒,大概是在資料完全刷新到磁碟時。

$ sudo dd if=/dev/zero of=/dev/nvme1n1 bs=16M count=1k status=progress
16726884352 bytes (17 GB, 16 GiB) copied, 27 s, 619 MB/s
1024+0 records in
1024+0 records out
17179869184 bytes (17 GB, 16 GiB) copied, 71.8953 s, 239 MB/s

假設這只是我的綜合基準與其他人的綜合基準相比的一些怪癖,我將所有 4 個裝置放入 MD RAID-0 中並再次嘗試:

$ sudo mdadm --create /dev/md0 --level=0 --raid-devices=4 --force --run /dev/nvme?n1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
$ sudo dd if=/dev/zero of=/dev/md0 bs=16M count=2k status=progress
34191966208 bytes (34 GB, 32 GiB) copied, 57 s, 600 MB/s
2048+0 records in
2048+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 79.7502 s, 431 MB/s

更好,但還有很多不足之處。如果我的公立學校教育數學可信的話,這些驅動器的傳輸速度在每秒 430x10 到 600x10 兆位元之間,因此最好的情況是 6gbit。在理想條件下,根據其他人的綜合基準,我預計 4x 驅動器在簡單的全 0 條帶寫入中將達到 6GByte。假設這只是系統的一些限制,我針對不同的主機測試了不相關的 40gbps 乙太網路卡:

$ iperf -c 10.x.x.x -P 4
------------------------------------------------------------
Client connecting to 10.x.x.x, TCP port 5001
TCP window size:  325 KByte (default)
------------------------------------------------------------
[  2] local 10.x.x.x port 53750 connected with 10.x.x.x port 5001 (icwnd/mss/irtt=87/8948/196)
[  1] local 10.x.x.x port 53754 connected with 10.x.x.x port 5001 (icwnd/mss/irtt=87/8948/132)
[  3] local 10.x.x.x port 53738 connected with 10.x.x.x port 5001 (icwnd/mss/irtt=87/8948/212)
[  4] local 10.x.x.x port 53756 connected with 10.x.x.x port 5001 (icwnd/mss/irtt=87/8948/107)
[ ID] Interval       Transfer     Bandwidth
[  2] 0.0000-10.0027 sec  12.4 GBytes  10.6 Gbits/sec
[  1] 0.0000-10.0180 sec  12.7 GBytes  10.9 Gbits/sec
[  3] 0.0000-10.0179 sec  10.6 GBytes  9.05 Gbits/sec
[  4] 0.0000-10.0180 sec  10.5 GBytes  8.97 Gbits/sec
[SUM] 0.0000-10.0011 sec  46.1 GBytes  39.6 Gbits/sec

雖然該網路卡與 SSD 性能無關,但對我來說,它確實表明系統能夠透過 PCIe 使至少 40gbit 鏈路飽和,特別是因為該卡只是 x8 鏈路而不是 4x4。 值得注意的一件事是,乙太網路卡位於 CPU1_SLOT1 上,SSD 位於 CPU2_SLOT4 上。 我不確定這是否會導致效能上的巨大差異,因為 SLOT4 直接掛在 CPU2 上,而 SLOT1 直接掛在 CPU1 上。 CPU 之間有雙 8GT/s QPI 連結,無需額外交換器: X9DR3-F框圖

對我來說,值得注意的是讀取效能也相對相對較低。這裡沒有檔案系統開銷,這只是有效的原始快閃記憶體和 PCIe 效能。這是關於較小硬體上 RAID-5 中 4 倍消費性 SATA HDD 的讀取性能,因此絕對慢得令人無法接受:

$ sudo dd if=/dev/md0 of=/dev/null bs=16M count=8k
8192+0 records in
8192+0 records out
137438953472 bytes (137 GB, 128 GiB) copied, 214.738 s, 640 MB/s

在此讀取操作期間檢查top顯示dd佔用了 100% CPU,其中 97% 用於系統等待。其他 31 個執行緒或多或少處於空閒狀態。我可以從哪裡開始診斷這裡遇到的效能問題?


假設這只是 DD 的問題,我再次嘗試使用 fio。我保留 MD 設備,將其格式化為 XFS,允許它選擇預設設置,安裝它,並執行以下概述的測試https://cloud.google.com/compute/docs/disks/benchmarking-pd-performance

順序寫入

Run status group 0 (all jobs):
  WRITE: bw=1348MiB/s (1414MB/s), 1348MiB/s-1348MiB/s (1414MB/s-1414MB/s), io=80.8GiB (86.7GB), run=61368-61368msec

Disk stats (read/write):
    md0: ios=0/710145, merge=0/0, ticks=0/397607236, in_queue=397607236, util=99.82%, aggrios=0/177558, aggrmerge=0/2, aggrticks=0/99452549, aggrin_queue=99465067, aggrutil=99.62%
  nvme0n1: ios=0/177568, merge=0/5, ticks=0/56627328, in_queue=56635784, util=97.96%
  nvme3n1: ios=0/177536, merge=0/1, ticks=0/145315089, in_queue=145331709, util=99.62%
  nvme2n1: ios=0/177559, merge=0/3, ticks=0/151148103, in_queue=151165889, util=99.44%
  nvme1n1: ios=0/177569, merge=0/0, ticks=0/44719677, in_queue=44726889, util=97.87%

隨機寫入

Run status group 0 (all jobs):
  WRITE: bw=101MiB/s (106MB/s), 101MiB/s-101MiB/s (106MB/s-106MB/s), io=6074MiB (6370MB), run=60003-60003msec

Disk stats (read/write):
    md0: ios=0/1604751, merge=0/0, ticks=0/623304, in_queue=623304, util=100.00%, aggrios=0/401191, aggrmerge=0/2, aggrticks=0/153667, aggrin_queue=153687, aggrutil=99.99%
  nvme0n1: ios=0/402231, merge=0/3, ticks=0/156754, in_queue=156775, util=99.98%
  nvme3n1: ios=0/401144, merge=0/2, ticks=0/149648, in_queue=149667, util=99.98%
  nvme2n1: ios=0/400158, merge=0/0, ticks=0/150380, in_queue=150400, util=99.98%
  nvme1n1: ios=0/401233, merge=0/4, ticks=0/157887, in_queue=157908, util=99.99%

順序讀取

Run status group 0 (all jobs):
   READ: bw=6244MiB/s (6547MB/s), 6244MiB/s-6244MiB/s (6547MB/s-6547MB/s), io=367GiB (394GB), run=60234-60234msec

Disk stats (read/write):
    md0: ios=3089473/14, merge=0/0, ticks=272954324/220, in_queue=272954544, util=99.98%, aggrios=779529/3, aggrmerge=6/1, aggrticks=68744470/104, aggrin_queue=68744621, aggrutil=99.60%
  nvme0n1: ios=779520/6, merge=12/2, ticks=24023533/1, in_queue=24023534, util=98.84%
  nvme3n1: ios=779519/2, merge=14/0, ticks=145571896/378, in_queue=145572449, util=99.60%
  nvme2n1: ios=779536/3, merge=0/1, ticks=77038488/3, in_queue=77038492, util=98.90%
  nvme1n1: ios=779544/3, merge=0/1, ticks=28343963/34, in_queue=28344012, util=98.81%

隨機讀取

Run status group 0 (all jobs):
   READ: bw=372MiB/s (390MB/s), 372MiB/s-372MiB/s (390MB/s-390MB/s), io=21.8GiB (23.4GB), run=60002-60002msec

Disk stats (read/write):
    md0: ios=5902401/10, merge=0/0, ticks=2684388/0, in_queue=2684388, util=100.00%, aggrios=1475009/3, aggrmerge=608/0, aggrticks=685706/0, aggrin_queue=685706, aggrutil=99.90%
  nvme0n1: ios=1475288/4, merge=632/1, ticks=697246/0, in_queue=697246, util=99.89%
  nvme3n1: ios=1475328/2, merge=611/0, ticks=678849/1, in_queue=678850, util=99.89%
  nvme2n1: ios=1474625/3, merge=588/1, ticks=673908/0, in_queue=673909, util=99.90%
  nvme1n1: ios=1474795/3, merge=602/0, ticks=692822/1, in_queue=692822, util=99.90%

這些速度要快得多,表明多線程在陣列上運行具有優勢,但其他線上基準測試再次顯示這些驅動器單獨執行1GB/s 寫入(而我的所有4 個驅動器組合的峰值為1.4GB/s) ,並且我我們已經看到 UserBenchmark 結果顯示每個驅動器的讀取速度為 2.2GB/s,因此 6GB/s 的讀取速度在上下文中表現得相當不錯。

那麼有什麼辦法可以提高單一進程效能呢?

答案1

三星 MZVLB256HBHQ-000L7 是小型 SSD (256 GB),因此對於跨多個 GB 的任何寫入,您都將遇到內部 NAND 頻寬瓶頸。您可以修剪它們(遺失目前儲存在磁碟機上的所有數據)來清理內部 pSLC 緩存,為第一個基準測試提供更多頻寬,但您很快就會再次使其飽和。

答案2

我對三星 MZVL* 硬碟的體驗非常糟糕。看https://superuser.com/questions/1721288/ssd-performance-falls-off-a-cliff

我正在嘗試在您的驅動器上找到信譽良好的規格,但我的主要猜測是驅動器缺少 DRAM。

答案3

好吧,我不想這樣做,但最終我應該回答並結束這個問題。 PM981驅動有 512MB DRAM 緩存,還提供 12GB SLC 緩存,所以它們應該很快。 RAID-0 中的四個人應該尖叫。

https://www.techpowerup.com/ssd-specs/samsung-pm981a-256-gb.d784

我只是買了一個NAS,因為我從來沒有解決過這個問題。

相關內容