Скоростные характеристики NVMe

Если по тексту встречаются неизвестные Вам термины, просмотрите раздел «Термины и понятия» сайта

Общая производительность подсистемы контроллер — накопители определяется двумя основными характеристиками:
— скоростью передачи данных по каналу;
— задержками передачи данных.

* здесь рассматривается интерфейс, поэтому скоростные параметры и задержки собственно накопителей системы хранения не берутся в расчет — это отдельная тема.

Скорость передачи данных по каналу

NVMe спроектирован для работы по шине PCI Express (PCIe). Накопитель передает данные параллельно по нескольким линиям PCIe ( x2 или x4 ). Обмен данными по каждой линии происходит независимо (асинхронно). Соответственно, общая пропускная способность канала связи увеличивается пропорционально числу линий.
Накопители NVMe SSD используют 2 или 4 линии PCIe.
С увеличением скорости передачи по линии PCI в новых редакциях будет расти и скорость NVMe канала.
Пропускная способность двух линии PCI Express 3.0 составляет практически 2 Гигабайт/с, четырех — 4 Гигабайт/с. С приходом PCI 4.0 пропускная способность удвоится (https://ru.wikipedia.org/wiki/PCI_Express).

Примечание. Не пытайтесь увидеть эти цифры в тестах дисковой системы, а тем более — при мониторинге ее производительности в приложении. Скорости и задержки там будут определяться скоростью «отдачи» накопителем данных в ответ на запрос контроллера.

Поскольку интерфейс проектировался «с чистого листа» и ориентирован на особенности вполне конкретных накопителей — SSD, в нем нет ничего лишнего. Нет необходимости тащить длинный хвост обязательной совместимости со старыми типам устройств.
Эффективный и оптимизированный набор команд сильно сокращен — всего 13 обязательных команд (10 административных и 3 чтения/записи) против более 200 в устаревших интерфейсах хранения.
Для выполнения запроса на чтение 4 Килобайт достаточно передать одну 64-байтную команду. Меньше накладных расходов — выше коэффициент полезного использования интерфейса.

В NVMe очень эффективно реализует обработку очередей команд.
Интерфейс поддерживает до 65 535 очередей ввода-вывода, причем каждая из них может содержать до 64 тыс. ожидающих команд.
Приоритеты привязаны к каждой очереди ввода / вывода с четко определенным механизмом арбитража.
С помощью управления прерываниями MSI-X реализуется мультипоточный неблокирующий доступ к NVMe устройству. Протокол может организовать несколько очередей отправки-завершения для каждого накопителя.
Подробнее об очередях

Иллюстрация параллельной обработки очередей NVMe. Пары «отправка — завершение» (Submission Queue — Completion Queue) расположены в одном ядре процессора (1:1 mapping).

Задержки

Снижение задержек передачи данных интерфейса — одна из ключевых задач, решенных при проектировании NVMe.

Задержки, вносимые собственно NVMe

Из чего складывается задержка передачи данных? Приведенная ниже диаграмма наглядно демонстрирует задержки, вносимые всеми компонентами системы хранения. Диаграмма наглядно представляет путь от программного обеспечения до микросхем флеш-памяти (источник — материалы Flash Memory Summit 2013).

Расшифровка диаграммы:
Сравниваются 4 типа накопителей:
— на чипах флеш MLC с интерфейсом SATA, внутренним контроллером накопителя по спецификации ONFI2;
— на чипах флеш MLC с интерфейсом SATA, внутренним контроллером накопителя по спецификации ONFI3;
— на чипах флеш MLC с интерфейсом NVMe, внутренним контроллером по спецификации ONFI3;
— перспективный накопитель (имеется в виду, еще не объявленный на момент публикации 3D XPoint Memory накопитель) с интерфейсом NVMe.

Каждый столбец содержит шесть компонентов:
NVM Tread, который, скорее, должен был быть написан tREAD (в смысле «время чтения»). Это время чтения флэш-памяти NAND или NVM, то есть, сколько затрачено времени с момента выборки адреса в микросхеме до появления данных на выходе флэш-памяти NAND или микросхемы NVM.
NVM xfer: время, необходимое для передачи (transfer) данных с микросхемы флэш-памяти NAND или другого типа NVM на контакты ввода / вывода SSD.
Misc SSD (разное SSD): для учета задержек, связанных с внутренней работой SSD, такой как трансляция адресов или среднее время, затраченное на сборку мусора.
Link Xfer: время, необходимое для передачи данных через интерфейс PCIe.
Platform + adapter (Платформа + адаптер): задержка от порта PCIe хост-компьютера до поступления данных на контакты процессора.
Software (программное обеспечение): время, необходимое стеку ввода-вывода операционной системы для выполнения операции чтения с диска.

Эта диаграмма иллюстрирует — насколько упрощается стек ввода-вывода NVME по сравнению со SCSI (SAS).
Как результат, задержки составляют:
— для NVMe: 2,8 мкс;
— для SAS (SCSI): 6,0 мкс.
Эта задержка является частью показателя «Platform + adapter» на предыдущей диаграмме.

Выводы и рекомендации

Увеличьте производительность системы хранения, сократив, по возможности, задержки, вносимые ее компонентами:
— Используйте накопители с интерфейсом NVMe. Link Xfer сократится на 5..6 мкс.
— Отказ от SAS/SATA контроллера сократит задержку еще на 5..6 мкс (Platform + adapter).
— Физические основы и внутренняя организация SSD существенно влияют на уровень задержек. NVM Tread + Misc SSD накопителя на основе 3D XPoint Memory в сумме на 56 мкс. меньше, чем у NAND устройства.


Потенциал интерфейса NVMe, надеемся, понятен. Насколько он будет реализован в конкретной вычислительной системе зависит, в том числе, от характера ее загрузки. Некоторые рассуждения по этой теме приведены в заметке NVMe или SATA.

Аналитические материалы по производительности решений и результаты тестов собраны представлены ниже: