SSD带宽问题和分析

英特尔的P3700固态硬盘安装在具有两个Intel Xeon E5-2630 v3 CPU的Lenovo x3650 M5服务器上。 服务器运行Ubuntu 14.04 4.6.4内核。

我一直在使用fio来使用1MB块大小的同步顺序读取来对SSD进行基准testing。 带宽结果是〜1.4GB /秒。 这应该是最大的2.8GB /秒,相对较小。 我目睹了P3700在高端个人电脑上的类似基准testing达到了这个带宽。

使用blktrace我可以看到〜425usec有相当大的延迟,直到接收数据。

编辑 – 我实际上不知道〜425usec延迟是否很高,因为我与P3700规格的比较是不正确的。 连续读取的规格等待时间为20us,块大小为4KB 。 在我的系统上使用fio和4KB块大小来测量延迟我得到了〜50usec的平均值,这相当像样的恕我直言。

259,0 0 40510 1.298997405 21580 QR 99427328 + 1024 [read_simple] 259,0 0 40511 1.298998348 21580 XR 99427328 / 99427584 [read_simple] 259,0 0 40512 1.298998572 21580 QR 99427584 + 768 [read_simple] 259,0 0 40513 1.298998775 21580 GR 99427328 + 256 [read_simple] 259,0 0 40514 1.298999664 21580 XR 99427584 / 99427840 [read_simple] 259,0 0 40515 1.298999882 21580 QR 99427840 + 512 [read_simple] 259,0 0 40516 1.299000060 21580 GR 99427584 + 256 [read_simple] 259,0 0 40517 1.299001737 21580 D RS 99427328 + 256 [read_simple] 259,0 0 40518 1.299002539 21580 XR 99427840 / 99428096 [read_simple] 259,0 0 40519 1.299002738 21580 QR 99428096 + 256 [read_simple] 259,0 0 40520 1.299002932 21580 GR 99427840 + 256 [read_simple] 259,0 0 40521 1.299004179 21580 D RS 99427584 + 256 [read_simple] 259,0 0 40522 1.299005114 21580 GR 99428096 + 256 [read_simple] 259,0 0 40523 1.299006132 21580 D RS 99427840 + 256 [read_simple] 259,0 0 40524 1.299006563 21580 UN [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 / interrupts (看下面的图片)好像所有来自nvme0q0(和nvme0q1出于某种原因)的中断只能到达core0–这是因为我只在core0上运行fio

/ proc / interrupt中断表格截图

任何其他的想法? debuggingbuild议? 解?

谢谢!