SSD带宽问题及分析

SSD带宽问题及分析

我在联想 x3650 M5 服务器上安装了英特尔的 P3700 SSD,该服务器配有两个英特尔至强 E5-2630 v3 CPU。该服务器运行的是 Ubuntu 14.04,内核为 4.6.4。

我一直在使用菲奥使用 1MB 块大小的同步顺序读取对 SSD 进行基准测试。带宽结果约为 1.4GB/秒。这与应有的最大值 2.8GB/秒相比相对较小。我确实目睹了 P3700 在高端 PC 上使用类似基准测试达到此带宽。

使用黑踪我可以看到在接收回数据之前有相当大的延迟~425usec。

编辑- 我实际上并不知道~425usec 的延迟是否很高,因为我与P3700 规格不正确。规范延迟为 20us(顺序读取),4 KB块大小。使用以下方法测量延迟菲奥在我的系统上,块大小为 4KB,平均速度为 ~50usec,在我看来,这个速度相当不错。

259,0    0    40510     1.298997405 21580  Q   R 99427328 + 1024 [read_simple]
259,0    0    40511     1.298998348 21580  X   R 99427328 / 99427584 [read_simple]
259,0    0    40512     1.298998572 21580  Q   R 99427584 + 768 [read_simple]
259,0    0    40513     1.298998775 21580  G   R 99427328 + 256 [read_simple]
259,0    0    40514     1.298999664 21580  X   R 99427584 / 99427840 [read_simple]
259,0    0    40515     1.298999882 21580  Q   R 99427840 + 512 [read_simple]
259,0    0    40516     1.299000060 21580  G   R 99427584 + 256 [read_simple]
259,0    0    40517     1.299001737 21580  D  RS 99427328 + 256 [read_simple]
259,0    0    40518     1.299002539 21580  X   R 99427840 / 99428096 [read_simple]
259,0    0    40519     1.299002738 21580  Q   R 99428096 + 256 [read_simple]
259,0    0    40520     1.299002932 21580  G   R 99427840 + 256 [read_simple]
259,0    0    40521     1.299004179 21580  D  RS 99427584 + 256 [read_simple]
259,0    0    40522     1.299005114 21580  G   R 99428096 + 256 [read_simple]
259,0    0    40523     1.299006132 21580  D  RS 99427840 + 256 [read_simple]
259,0    0    40524     1.299006563 21580  U   N [read_simple] 1
259,0    0    40525     1.299006765 21580  I  RS 99428096 + 256 [read_simple]
259,0    0    40526     1.299007810 21580  D  RS 99428096 + 256 [read_simple]
259,0    0    40527     1.299433368     0  C  RS 99427328 + 256 [0]
259,0    0    40528     1.299457972     0  C  RS 99427584 + 256 [0]
259,0    0    40529     1.299499252     0  C  RS 99428096 + 256 [0]
259,0    0    40530     1.299509996     0  C  RS 99427840 + 256 [0]

我怀疑中断处理存在问题,可能是出于某种原因,CPU1 从 SSD 获得中断,然后将其转发给 CPU0,这会增加额外的开销。但看看/proc/中断(见下图)似乎来自 nvme0q0(以及出于某种原因来自 nvme0q1)的所有中断都仅到达 core0 - 这是可以接受的,因为我运行菲奥仅在 core0 上。

中断表截图来自/proc/中断

还有其他想法吗?调试建议?解决方案?

谢谢!

相关内容