Традиционные SAS/SATA интерфейсы привычны, отработаны и удобны в быту. Есть большая инфраструктура — диски, контроллеры, совместимость с экспандерами, отработанное кабельное хозяйство. К ним прилагается работа стека SCSI и SATA, задержки контроллеров интерфейсов. Постоянно идущая борьба за рост IOPS и снижение задержек требует избавляться от лишних звеньев и помещать накопители как можно ближе к процессору. Поэтому что делать, если производительность SAS/SATA SSD не устраивает и хочется еще быстрее?
Выбирать PCIe!
Тенденции, как обычно, разделились.
Самые простые карты (как на фото выше) используют обычные SATA диски, подключенные к PCIe контроллеру. Никаких преимуществ перед простыми SATA SSD не дают, все транслируется в тот же AHCI стек. Этот подвид рассматривать не будем, он предназначается для потребительских устройств.
Более сложные варианты используют SAS мост и контроллеры флеш памяти с подключением к мосту.
По сути, второй подвид – это массив из SAS SSD, которые объединяются в единое пространство средствами ОС. Безусловный плюс такого подхода в возможности использовать стандартный стек SCSI. Работает везде, нареканий минимум, решение отработано десятилетиями. Плотность тоже на высоте, ведь нет ограничения 2.5” формата и флеша можно разместить много, объем доходит до 3.2TB. Типичные представители – Intel 910, LSI Nytro WarpDrive и Nytro XP, весьма быстрые карты с низкой нагрузкой на процессор. Естественный минус – по-прежнему это трансляция всех ступеней драйверов и стека SCSI, которые добавляют задержку и от этого хочется избавиться.
В целях избавления от ненужного SCSI стека, который был разработан в древние времена, когда существование флеша в массовых накопителях еще и не снилось, некоторые разработчики придумали накопители со специализированными контроллерами, которые соединяют PCIe напрямую с контроллером NAND. Такие карты делают Fusion-io, Virident, Huawei, Micron.
Плюсы:
- Низкие задержки, лучший показатель на сегодня в районе трех микросекунд.
- Высокая производительность — до 3.2/2.8 ГБ/с чтение/запись крупными блоками и
770К/630K IOPS на чтение/запись блоками 4К. - Отсутствие SCSI стека, оптимизация работы с NAND (например, Fusion-io).
Минусы:
- Высокая загрузка процессоров (не столь актуально при доступности процессоров с 16 ядрами).
- Невозможность горячей замены: в общем случае, PCIe карточки такого не позволяют.
- Драйверы уникальны для каждого контроллера.
Уникальность драйверов усложняет распространение перспективной технологии, поэтому начался поиск единого решения.
NVM Express
Свыше 90 компаний объединились в NVMHCI Work Group, чтобы разработать новый протокол NVM Express, который раскроет потенциал SSD решений в едином стандарте. Задел на будущее не забыт — оптимизация под многоядерность дает возможность каждому потоку выделить свою очередь команд и прерываний. Развитая система обнаружения ошибок и управления отлично подходит для промышленного применения. Поддерживается протокол самошифрования диска.
Так избавились от SCSI
Масштабируемый интерфейс хост контроллера поддерживает до 64К команд в одной I/O очереди, которых тоже может быть 64 тысячи. Основа NVM Express — совмещенный механизм Submission и Completion Queue (очереди на исполнение и завершенная очередь). Команды от программ помещаются в Submission Queue, результат исполнения помещается в Completion Queue контроллером. Несколько Submission Queue могут использовать одну Completion Queue и все они размещаются в памяти хоста.
Admin Submission и Completion Queue существуют для управления устройствами — создание и удаление очередей команд, отмены исполнения команд и т.д. В эти очереди могут попасть только управляющие команды из Admin Command Set.
Пользовательское ПО может создавать очереди до предела контроллера, но нормальной практикой считается ориентироваться на возможности сервера. Например, для четырех ядер в системе создавать лучше четыре пары очередей, чтобы избежать блокировок и привязать процессы к ядрам. Такой подход дает эффективное масштабирование производительности и низкие задержки.
Основные особенности NVMe:
- Поддерживает 64К I/O очередей, 64К команд в каждой.
- Развитый механизм арбитража и система приоритетов I/O очередей.
- Набор команд сокращен до 13 без учета команд управления и резервирования.
- Поддержка MSI-X и агрегации прерываний.
- Полный размер команды 64 байта гарантирует высокую производительность на случайных операциях малыми блоками.
- Поддержка виртуализации ввода-вывода, например, SR-IOV.
- Обходится одной записью в MMIO регистр в очереди команд.
- Поддерживает несколько пространств имен.
- Развитые возможности обнаружения ошибок и управления.
- Поддержка MPIO (включая резервирование), полная защита данных (DIF/DIX).
Сводная таблица преимуществ над традиционным AHCI интерфейсом (без перевода)
AHCI | NVMe | |
Maximum queue depth | 1 command queue; 32 commands per queue | 65536 queues; 65536 commands per queue |
Uncacheable register accesses (2000 cycles each) | 6 per non-queued command; 9 per queued command | 2 per command |
MSI-X and interrupt steering | single interrupt; no steering | 2048 MSI-X interrupts |
Parallelism and multiple threads | requires synchronization lock to issue a command | no locking |
Efficiency for 4 KB commands | command parameters require two serialized host DRAM fetches | gets command parameters in one 64 Bytes fetch |
Драйверы для Windows поддерживались OpenFabrics Alliance, начиная с Windows Server 2012 R2 поддержка NVMe встроена самим Microsoft.
Драйверы для Linux от Intel были включены в ядро 3.3, а в ядро 3.13 был включен новый блочный уровень для работы с SSD, к которому приложили руку сотрудники Fusion-io. Новый дизайн ядра разделяет внутренние очереди на два уровня (по процессорам и аппаратные submission очереди), убирая узкое место и распараллеливая I/O. В релизе 3.13 был модифицирован только драйвер virtioblk, другие драйверы будут модифицированы позднее.
Вроде все прекрасно, фантастическая производительность и низкие задержки для ускорителей нашли свое место на рынке, но чего-то не хватает. Ну конечно, какой настоящий корпоративный накопитель и без горячей замены? Непорядок, надо устранить.
Для распространения в массах желательно еще и использовать существующий форм- фактор, выбор пал на 2.5" формат (логично), с сохранением разъема SAS.
SAS разъем с дополнительными контактами
Традиционная PCIe плата с флешом требует аккуратного обращения, чтобы не повредить статикой чувствительные микросхемы. Помимо возможности горячей замены, в 2.5" формате флеш защищен кожухом во избежание эксцессов.
NVMe SSD
Естественно, не обошлось и без небольшого недостатка. Как мы уже писали, флеш сам по себе весьма небыстрое изделие и контроллеры обладают большим количеством каналов для параллелизации работы. В 2.5" формате место ограничено и достичь производительности полноразмерной PCI платы крайне проблематично — флеша много не поместить.
Samsung XS1715 обещает 740K IOPS на чтение, Micron P420m и Intel P3700 заметно скромнее — 430K и 450K соответственно.
Теперь про нас и NVMe
Среди текущих продуктов 4 NVMe SSD можно установить в четырехпроцессорный сервер ETegro Hyperion RS530 G4 на основе Intel Xeon E7-4800 v2.