У меня есть твердотельный накопитель 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
Есть другие идеи? посоветуете отладку? решение?
Спасибо!