X9DR3-F 上的 NVMe 驱动器性能意外不佳

X9DR3-F 上的 NVMe 驱动器性能意外不佳

我遇到了服务器中 NVMe SSD 条带性能异常低下的情况。硬件如下:

  • 主板:X9DR3-F
  • CPU:双E5-2650v2
  • 内存:128GB DDR3-1333 UDIMM(16x8GB)
  • NVMe 驱动器:4x 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 性能。这大约是 4x 消费级 SATA HDD 在较低硬件上 RAID-5 的读取性能,因此绝对慢得令人无法接受:

$ 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

Samsung 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,因为我从来没有解决过这个问题。

相关内容