NVM Express
(
NVMe
,
NVMHCI
) — от
англ.
Non-Volatile Memory Host Controller Interface Specification
) — интерфейс доступа к
твердотельным накопителям
, подключённым по шине
PCI Express
. «NVM» в названии спецификации обозначает энергонезависимую память, в качестве которой в SSD повсеместно используется
флеш-память
типа
NAND
. Логический интерфейс NVM Express был разработан с нуля, основные цели — получение низких задержек и эффективное использование высокого параллелизма твердотельных накопителей за счёт применения нового набора команд и механизма обработки очередей, оптимизированного для работы с современными многоядерными процессорами
.
Тип разъёма и конструктив носителей NVMe может быть различным. Распространены накопители в
форм-факторах
M.2
,
(конструктивно совместимы с накопителями
SATA
2,5") и
платы расширения
PCI Express
. Накопители
SATA Express
и компактные внутренние накопители форм-фактора
M.2
при использовании PCIe также поддерживают NVM Express в качестве одного из логических интерфейсов
.
Содержание
Предпосылки появления
Ранние твердотельные накопители использовали для подключения параллельный
SCSI
и использовались в серверах и высокопроизводительных рабочих станциях
. Проникновение SSD на массовый рынок пришлось на середину 2000-х и совпало по времени с вытеснением параллельного SCSI интерфейсами
SATA
и
SAS
. Со временем дальнейшему наращиванию производительности SSD стали мешать ограничения интерфейсов SATA и SAS, ориентированных в первую очередь на подключение традиционных механических
жёстких дисков
. Например, в отличие от жёстких дисков, скорость последовательного чтения для большинства современных SSD ограничивается пропускной способностью интерфейса SATA.
Высокопроизводительные SSD с подключением к шине PCI Express производились до NVMe, но либо использовали уникальные закрытые стандарты и технологии оптимизации работы с флеш-памятью, либо представляли собой SATA- или SAS-контроллер и несколько SSD с интерфейсами SATA/SAS, размещёнными на одной плате. Переход на NVMe позволил стандартизировать интерфейс PCIe SSD — производителям больше не нужно тратить ресурсы на разработку уникальных драйверов, разъёмов и форм-факторов
. Подобным образом принятие спецификаций
позволило создать большое разнообразие
USB-флеш-накопителей
, которые смогли работать с любыми компьютерами, не требуя оригинальных драйверов для каждой модели
.
Первые подробности о новом стандарте доступа к энергонезависимой памяти появились на
Intel Developer Forum
в 2007 году, где был представлен NVMHCI (Non-Volatile Memory Host Controller Interface) — предполагаемый вариант нового интерфейса коммуникации между хостом и контроллером NAND
. В том же году была сформирована рабочая группа для проработки NVMHCI во главе с Intel. Первая спецификация NVMHCI 1.0 была закончена в апреле 2008 года и размещена на сайте Intel
.
Техническая проработка NVMe началась во второй половине 2009 года
. Спецификации NVMe были разработаны рабочей группой «NVM Express Workgroup», в которую входило более 90 компаний, председателем группы была Эмбер Хаффмен из
Intel
. Первая версия спецификации NVMe была представлена 1 марта 2011 года
. При работе над версией 1.1, появившейся 11 октября 2012 года, разработчики сфокусировались на добавлении функциональных возможностей для устройств корпоративного класса. В новом стандарте были добавлены
многопутевой ввод-вывод
с разделяемым доступом к пространствам имён NVMe
и поддержка
(
англ.
)
.
В дальнейшем работа над новыми версиями спецификации NVMe была продолжена:
NVMe 1.0e — 23 января 2013
;
NVMe 1.1b — 2 июля 2014 года
;
NVMe 1.2 — 3 ноября 2014 года; для устройств потребительского класса: расширенное управление питанием и поддержка накопителей без динамической памяти; для устройств корпоративного класса: возможность обновления прошивки без остановки работы накопителя, снижение задержек в топологиях с большим количеством NVMe-накопителей и коммутаторами PCIe
;
NVMe 1.2a — 23 ноября 2015 года
;
NVMe 1.2b — 1 июня 2016 года
;
NVMe 1.2.1 — 5 июня 2016 года
;
NVMe 1.3 — май 2017 года;
NVMe 1.3a — 24 октября 2017
;
NVMe 1.3b — 4 мая 2018 года
;
NVMe 1.3c — 24 мая 2018 года
;
NVMe 1.3d — 20 марта 2019 года
;
NVMe 1.4 — 10 июня 2019 года
;
NVMe 1.4a — 9 марта 2020 года
;
NVMe 1.4b — 21 сентября 2020 года
;
NVMe 1.4c — 9 марта 2021 года
;
NVMe 2.0 — 13 мая 2021 года
;
NVMe 2.0a — 23 июля 2021 года
;
NVMe 2.0b — 6 января 2022 года
.
Первые контроллеры и готовые накопители
Первые контроллеры SSD с поддержкой NVMe и эталонный дизайн флеш-накопителей в форм-факторе полнопрофильной платы PCIe были выпущены компанией
Integrated Device Technology
в августе 2012 года
.
Первый серверный NVMe-накопитель
Samsung
XS1715 в форм-факторе U.2 (2.5", разъём SFF-8639) был анонсирован в июле 2013 года. Основой для накопителя послужил контроллер, разработанный
. Заявленные характеристики составили 3 ГБайт/с при последовательном чтении и 740 000
IOPS
при случайном доступе блоками 4 КиБ
.
В июне 2014 года свои первые линейки серверных NVMe-накопителей представила компания Intel. Линейки DC P3700, DC P3600, DC P3500, различающиеся между собой производительностью и ресурсом, выпускаются в форм-факторе U.2 и в виде низкопрофильных плат PCIe
. В 2015 году Intel выпустила основанный на P3500 накопитель потребительского класса — Intel 750.
В июне 2015 года появился один из первых NVMe-накопителей потребительского класса в компактном форм-факторе M.2 — Samsung SM951-NVMe
.
Появившиеся в сентябре 2015 года смартфоны Apple
iPhone 6s
и iPhone 6s Plus стали первыми мобильными устройствами, оснащёнными встроенными NVMe-накопителями
.
Технические особенности и инфраструктура
Сравнение с AHCI
Основными преимуществами NVMe перед
AHCI
является оптимизированный механизм работы с очередями и обработкой прерываний, что позволяет обеспечить более высокий уровень производительности
.
Устройство AHCI ограничено одной очередью глубиной 32, в то время как NVMe поддерживает 64 К (65536) очередей с глубиной 65536 каждая. Набор команд NVMe существенно упрощён в сравнении с ATA и SCSI, спецификацией определяется всего 13 обязательных команд, что, в первую очередь, существенно упрощает разработку устройств
.
Форм-факторы накопителей
HGST SN150, NVMe-накопитель в форм-факторе низкопрофильной платы PCI Express
Платы расширения PCI Express
. Большая часть выпускаемых по состоянию на начало 2016 года плат NVMe-накопителей выполнена в форм-факторе половинной высоты/половинной длины с интерфейсом PCI Express x4.
U.2 (SFF-8639)
— накопители форм-фактора 2,5" высотой 15 мм с разъёмом SFF-8639. Используются, в основном, в серверах. Преимуществами в сравнении с обычной платой расширения являются поддержка горячей замены накопителей и более компактное исполнение, позволяющее разместить большее количество накопителей в корпусе сервера или системы хранения данных. Разъём SFF-8639 обратно совместим с SFF-8482, бэкплейн с разъёмом SFF-8639 при подключении к нему соответствующего контроллера поддерживает подключение накопителей с интерфейсами SATA и SAS.
Не все накопители форм-фактора U.2 являются NVMe-совместимыми. В начале 2013 года компания Dell выпустила новое поколение серверов с возможностью подключения до четырёх накопителей Micron P320h. Они были выполнены в совместимом с U.2 форм-факторе, подключались через четыре линии PCIe, но не использовали NVMe в качестве логического интерфейса
.
Для подключения бэкплейнов с поддержкой накопителей U.2 к шине PCI Express используются кабели с разъёмами OCuLink или SFF-8643
, обеспечивающий подключение четырёх линий PCI Express. Кабель может подключаться к специальному разъёму на системной плате, в обычный слот расширения PCI Express через плату-ретаймер или к разъёму M.2 через переходник
.
U.3
M.2
(NGFF) — бескорпусные накопители в компактном форм-факторе. Предназначены для использования в
ноутбуках
и стационарных ПК. Накопители формата M.2 могут подключаться либо непосредственно к соответствующему разъёму системной платы, либо устанавливаться в слот PCI Express через переходник.
Intel Ruler SSD (EDSFF)
— форм-фактор для серверных накопителей с поддержкой горячей замены. Был анонсирован компанией
Intel
в 2017 году на
Flash Memory Summit
. Форм-фактор U.2 обеспечивал механическую совместимость с корпусами, предназначенными для установки дисков 2,5", но не очень хорошо подходил для твердотельных накопителей — ограниченные габариты усложняли наращивание объёма накопителей и затрудняли охлаждение. Размеры накопителей EDSFF составляют 325,35×9,5×38,6 мм, поддерживается подключение через 4 или 8 линий PCIe (в перспективе — до 16). Примерами готовых продуктов, использующих форм-фактор EDSFF, являются серверы и JBOF-системы
производства
Supermicro
, позволяющие разместить до 32 накопителей в корпусе высотой 1U
.
Samsung NGSFF
— форм-фактор для серверных накопителей с поддержкой горячей замены. Как и EDSFF, разработан в качестве альтернативы U.2. Имеет меньшие габариты в сравнении с EDSFF — 110×4,38×30,5 мм, что позволяет установить большее количество накопителей (36 в 1U) и использовать корпуса меньшей глубины
.
NVMe over Fabrics
На протяжении последних лет ведутся разработки устройств и протоколов, позволяющих использовать накопители NVMe не только локально, в пределах одного сервера, но и строить
сети хранения данных
с использованием преимуществ NVMe. Подключение систем на базе накопителей NVMe к традиционным сетям хранения данных приводит к потере основного преимущества NVMe в виде сниженных за счёт отказа от SCSI задержек, так как в
Fibre Channel
и
iSCSI
предусмотрена инкапсуляция только команд SCSI.
Работы по устранению этого недостатка ведутся в двух направлениях:
Сохранение шины PCI Express в качестве транспорта и вынос её за пределы одиночного сервера. Компании Microsemi и Broadcom (подразделение PLX) разрабатывают коммутаторы PCI Express. Существуют прототипы готовых коммутаторов с внешними портами, обеспечивающих подключение нескольких хостов и устройств PCI Express.
Собственно
NVMe over Fabrics
— добавление в
Fibre Channel
и протоколы передачи данных блочного уровня, использующие
RDMA
, поддержки команд NVMe вместо SCSI. При этом обеспечивается уровень дополнительных задержек не более 10 мкс
. Первая версия официальной спецификации
NVMe over Fabrics
была опубликована 9 июня 2016 года
.
Поддержка операционными системами
Windows
Работа над первой версией драйвера Microsoft для Windows велась сформированной по инициативе «OpenFabrics Alliance» рабочей группой «NVMe Windows Working Group» и была завершена в 2012 году
.
Компания Microsoft интегрировала драйвер NVMe в Windows 8.1 и Windows Server 2012 R2
. Драйвер Microsoft для
Windows 7
и
Windows Server 2008 R2
был выпущен в виде обновлений
.
Samsung предлагает собственный драйвер NVMe, который обеспечивает более высокую производительность
.
Windows 10 поддерживает Host Memory Buffer с максимальным размером 64 МБ
.
Linux
Первоначальная разработка драйвера для
Linux
велась компанией Intel. Драйвер был включён в ветку 3.3 ядра Linux 19 марта 2012 года
.
В процессе разработки драйвера NVMe были выявлены недостатки архитектуры блочного ввода-вывода в ядре Linux, затруднявшие масштабирование производительности свыше 1 миллиона IOPS на устройство
. При участии инженеров
Fusion-io
был разработан масштабируемый слой блочного ввода-вывода для высокопроизводительных твердотельных накопителей, известный как
blk-multiqueue
или
blk-mq
, и добавлен в ядро версии 3.13 19 января 2014 года
. Другое направление в области оптимизации блочного-ввода вывода относится к уменьшению задержек, связанных с обработкой прерываний
.
Linux поддерживает Host Memory Buffer (HMB)
начиная с версии 4.13.1
с максимальным размером 128 MB по умолчанию
.
macOS
В macOS драйвер NVMe содержится в составе системы начиная с версии 10.13, вышедшей 25 сентября 2017 года.
ОС семейства BSD
Разработка драйвера NVMe для 9-й ветки
FreeBSD
велась при поддержке Intel
. Начиная с FreeBSD версии 10.2 драйверы nvd(4) и nvme(4) включены в конфигурацию ядра по умолчанию
.
Драйвер NVMe для
DragonFly
был написан с нуля Мэттом Диллоном
. Первый официальный релиз с поддержкой NVMe — 4.6
.
Разработка NVMe-драйвера для
OpenBSD
была начата в апреле 2014 года разработчиком, ранее развивавшим драйверы
USB 2.0
и
AHCI
. Первый релиз драйвера появился в OpenBSD 6.0
.
Solaris
получила поддержку NVMe с версии Oracle Solaris 11.2
.
Haiku
Полная поддержка NVMe доступна в
Haiku
с ревизии 54102
.
QEMU
Для отладки драйверов и другого ПО в
QEMU
начиная с версии 1.6 появилась эмуляция NVMe-устройств (август 2013 года)
.
UEFI
Драйвер NVMe для загрузочного окружения
UEFI
доступен на SourceForge (проект edk2)
.
Примечания
Пространство имён NVMe (
англ.
NVMe namespace
) — область накопителя NVMe, отформатированная для блочного доступа.
Первый вариант Samsung SM951 был выпущен в том же форм-факторе, но поддерживал SATA Express.
Разъём SFF-8643, он же Mini-SAS HD, обычно применяется в кабелях
SAS
, но кабели NVMe и кабели SAS с такими разъёмами не являются взаимозаменяемыми.
Накопители форм-фактора M.2 могут использовать как AHCI, так и NVMe
JBOF (Just a bundle of flash) — шасси с твердотельными накопителями и коммутаторами PCIe, часть портов которых выведена наружу.
, с. 43.
↑
Jonmichael Hands, Peter Onufryk.
(англ.)
(PDF). Intel (29 января 2015). Дата обращения: 10 февраля 2016.
1 июля 2016 года.
(англ.)
(PDF) 18, 20–22.
Intel
(20 марта 2015). Дата обращения: 10 февраля 2016.
2 апреля 2015 года.
↑
Dave Landsman.
(англ.)
(PDF). SanDisk. Дата обращения: 10 февраля 2016. Архивировано из
5 октября 2013 года.
Paul Wassenberg.
(англ.)
(PDF).
SATA-IO
(25 июня 2013). Дата обращения: 10 февраля 2016. Архивировано из
4 октября 2013 года.
Zsolt Kerekes.
(англ.)
. StorageSearch.com. Дата обращения: 11 февраля 2016.
25 мая 2017 года.
Amber Huffman.
(англ.)
(PDF). Flash Memory Summit (2008). Дата обращения: 12 февраля 2016.
4 марта 2016 года.
(англ.)
(PDF).
SATA-IO
(31 июля 2012). Дата обращения: 11 февраля 2016. Архивировано из
12 февраля 2019 года.
Amber Huffman.
(англ.)
(PDF). Flash Memory Summit (2009). Дата обращения: 20 февраля 2017.
17 апреля 2016 года.
(англ.)
(PDF). NVM Express, Inc. Дата обращения: 10 февраля 2016.
4 марта 2016 года.
Dave Minturn.
(англ.)
(PDF). OFADevWorkshop (2015). Дата обращения: 11 февраля 2016.
22 апреля 2016 года.
(англ.)
. The Inquirer (13 октября 2007). Дата обращения: 12 февраля 2016. Архивировано из
18 сентября 2009 года.
Amber Huffman.
(англ.)
(PDF).
Intel Corporation
. NVM Express, Inc. (14 апреля 2008). Дата обращения: 20 февраля 2017.
5 июня 2015 года.
↑
Peter Onufryk.
(англ.)
(PDF). Flash Memory Summit (2013). Дата обращения: 12 февраля 2016.
22 февраля 2016 года.
(PDF)
(англ.)
. NVM Express, Inc. 2011-06-01.
(PDF)
из оригинала
4 марта 2016
. Дата обращения:
12 февраля 2016
.
Amber Huffman.
(англ.)
(PDF). NVM Express, Inc. (11 октября 2012). Дата обращения: 12 февраля 2016.
6 июля 2017 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 16 декабря 2023.
16 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF) (2 июля 2014). Дата обращения: 15 февраля 2016.
1 июля 2016 года.
NVM Express, Inc.
(англ.)
(PDF) (3 ноября 2014). Дата обращения: 15 февраля 2016.
29 июня 2016 года.
NVM Express, Inc.
(англ.)
(PDF) (23 октября 2015). Дата обращения: 12 февраля 2016.
13 апреля 2016 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 июля 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
28 января 2023 года.
NVM Express, Inc.
(англ.)
(PDF) (24 мая 2018). Дата обращения: 25 июня 2018.
25 июня 2018 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
23 ноября 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF). Дата обращения: 13 декабря 2023.
13 декабря 2023 года.
NVM Express, Inc.
(англ.)
(PDF).
NVM Express
(13 мая 2021). Дата обращения: 8 августа 2021.
20 июля 2021 года.
NVM Express, Inc.
(англ.)
(PDF).
NVM Express
(23 июля 2021). Дата обращения: 8 августа 2021.
8 августа 2021 года.
NVM Express, Inc.
(англ.)
.
NVM Express
(6 января 2022). Дата обращения: 9 февраля 2022.
20 января 2022 года.
(англ.)
. The Inquirer (21 августа 2012). Дата обращения: 12 февраля 2016. Архивировано из
24 августа 2012 года.
(англ.)
. The SSD Review (24 августа 2012). Дата обращения: 12 февраля 2016.
1 января 2016 года.
(англ.)
. StorageReview.com (18 июля 2013). Дата обращения: 12 февраля 2016. Архивировано из
10 января 2014 года.
Scot Strong.
(англ.)
. The SSD Review (3 июня 2014). Дата обращения: 12 февраля 2016.
23 декабря 2015 года.
Kristian Vättö.
(англ.)
. AnandTech (25 июня 2015). Дата обращения: 26 августа 2016.
28 августа 2016 года.
Les Tokar.
(англ.)
. The SSD Review (октябрь 2015). Дата обращения: 12 февраля 2016.
7 ноября 2015 года.
Kevin OBrien.
(англ.)
. Storage Review (5 февраля 2013). Дата обращения: 15 февраля 2016.
11 февраля 2016 года.
Patrick Kennedy.
(англ.)
. Serverthehome (9 августа 2017). Дата обращения: 25 июня 2018.
25 июня 2018 года.
(англ.)
. StorageReview (3 марта 2018). Дата обращения: 25 июня 2018.
25 июня 2018 года.
Cliff Robinson.
(англ.)
. StorageReview (11 января 2018). Дата обращения: 25 июня 2018.
25 июня 2018 года.
David Wang.
(англ.)
. Flash Memory Summit. Дата обращения: 25 июня 2018.
25 июня 2018 года.
Andy Herron.
(англ.)
(pdf).
NVM Express, Inc.
(2016). Дата обращения: 11 августа 2016.
22 августа 2016 года.
(англ.)
. NVM Express, Inc. 2016-06-09.
из оригинала
18 августа 2016
. Дата обращения:
11 августа 2016
.
Kwok Kong.
(англ.)
. Storage Review (4 августа 2014). Дата обращения: 15 февраля 2016. Архивировано из
4 марта 2016 года.
Andy Herron.
(англ.)
(pdf). Storage Developer Conference (11 января 2014). Дата обращения: 15 февраля 2016.
10 января 2014 года.
(англ.)
.
Microsoft Support
(4 августа 2014). — KB2990941. Дата обращения: 15 февраля 2016.
13 марта 2016 года.
Обер, Михаил.
— В: Выбираем SSD : обзор технологий на рынке и сравнительные тесты // XX hardware LUXX : журн. — 2016. — 2 января. — С. 3. — Электр. изд.
(неопр.)
Дата обращения: 16 октября 2021. Архивировано из
16 октября 2021 года.
Keith Busch.
(англ.)
(pdf). Flash Memory Summit (12 августа 2013). Дата обращения: 15 февраля 2016.
5 ноября 2013 года.
Matias Bjørling; Jens Axboe; David Nellans; Philippe Bonnet.:
(англ.)
(pdf). IT University of Copenhagen (5 марта 2013). Дата обращения: 15 февраля 2016.
2 февраля 2014 года.
Werner Fischer.
(англ.)
. Thomas-Krenn. Дата обращения: 15 февраля 2016.
3 марта 2016 года.
Stephen Bates.
(англ.)
. PMC-Sierra (12 ноября 2015). Дата обращения: 15 февраля 2016. Архивировано из
6 марта 2016 года.
(неопр.)
. Дата обращения: 16 октября 2021.
22 февраля 2022 года.
(неопр.)
. Дата обращения: 16 октября 2021.
29 октября 2017 года.
(неопр.)
. Дата обращения: 16 октября 2021.
16 октября 2021 года.
(англ.)
.
FreeBSD source tree
. The FreeBSD Project. Дата обращения: 15 февраля 2016.
29 мая 2013 года.
(англ.)
. The FreeBSD Project. Дата обращения: 15 февраля 2016.
18 июня 2017 года.
(англ.)
. Дата обращения: 8 сентября 2016.
19 сентября 2016 года.
(неопр.)
. Дата обращения: 8 сентября 2016.
4 сентября 2016 года.
David Gwynne.
(англ.)
.
BSD Cross Reference
(16 апреля 2014). Дата обращения: 15 февраля 2016.
28 апреля 2014 года.
↑
(неопр.)
. Дата обращения: 9 сентября 2016. Архивировано из
17 сентября 2016 года.
(англ.)
. Oracle. Дата обращения: 15 февраля 2016.
9 декабря 2015 года.
(англ.)
.
Haiku official discussion forums
. Haiku Community (28 апреля 2020). Дата обращения: 28 апреля 2020.
(неопр.)
. Дата обращения: 8 июля 2020.
17 июля 2020 года.
(неопр.)
. SourceForge.net. Дата обращения: 11 января 2014.
31 декабря 2013 года.
Литература
Rino Micheloni, Alessia Marelli, Kam Eshghi.
. — Springer Science & Business Media, 2012. — 382 с. — (Springer Series in Advanced Microelectronics). —
ISBN 9789400751453
.
David A. Deming.
. — CRC Press, 2014. — 496 с. — (Auerbach Book). —
ISBN 9781482243314
.