Назад | Перейти на главную страницу

Проблема с пропускной способностью SSD и анализ

У меня есть твердотельный накопитель Intel P3700, установленный на сервере Lenovo x3650 M5 с двумя процессорами Intel Xeon E5-2630 v3. Сервер работает под управлением Ubuntu 14.04 с ядром 4.6.4.

Я использовал фио для тестирования SSD с использованием синхронного последовательного чтения с размером блока 1 МБ. Результат по пропускной способности составляет ~ 1,4 ГБ / сек. Это относительно мало и должно быть не более 2,8 ГБ / сек. Я действительно был свидетелем того, как P3700 достигает этой полосы пропускания с аналогичным тестом на ПК высокого класса.

С помощью blktrace Я вижу, что существует довольно большая задержка ~ 425 мксек до получения данных.

редактировать - На самом деле я не знаю, велика ли задержка ~ 425usec, поскольку мое сравнение с P3700 спецификации было неверно. Задержка спецификации составляет 20 мкс для последовательных чтений и 4 КБ размер блока. Измерение задержки с помощью фио и размер блока 4 КБ в моей системе я получаю в среднем ~ 50 мксек, что довольно прилично, ИМХО.

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 / interrupts (см. изображение ниже) кажется, что все прерывания от nvme0q0 (и nvme0q1 по какой-то причине) достигают только core0 - и это нормально, так как я запускаю фио только на core0.

Снимок экрана таблицы прерываний от / proc / interrupt

Есть другие идеи? посоветуете отладку? решение?

Спасибо!