Loading AI tools
спецификация на протоколы доступа к твердотельным накопителям Из Википедии, свободной энциклопедии
NVM Express (NVMe, NVMHCI) — от англ. Non-Volatile Memory Host Controller Interface Specification) — интерфейс доступа к твердотельным накопителям, подключённым по шине PCI Express. «NVM» в названии спецификации обозначает энергонезависимую память, в качестве которой в SSD повсеместно используется флеш-память типа NAND. Логический интерфейс NVM Express был разработан с нуля, основные цели — получение низких задержек и эффективное использование высокого параллелизма твердотельных накопителей за счёт применения нового набора команд и механизма обработки очередей, оптимизированного для работы с современными многоядерными процессорами[1].
Тип разъёма и конструктив носителей NVMe может быть различным. Распространены накопители в форм-факторах M.2, U.2[англ.] (конструктивно совместимы с накопителями SATA 2,5") и платы расширения PCI Express[2][3]. Накопители SATA Express и компактные внутренние накопители форм-фактора M.2 при использовании PCIe также поддерживают NVM Express в качестве одного из логических интерфейсов[4][5].
Ранние твердотельные накопители использовали для подключения параллельный SCSI и использовались в серверах и высокопроизводительных рабочих станциях[6]. Проникновение SSD на массовый рынок пришлось на середину 2000-х и совпало по времени с вытеснением параллельного SCSI интерфейсами SATA и SAS. Со временем дальнейшему наращиванию производительности SSD стали мешать ограничения интерфейсов SATA и SAS, ориентированных в первую очередь на подключение традиционных механических жёстких дисков[7][8]. Например, в отличие от жёстких дисков, скорость последовательного чтения для большинства современных SSD ограничивается пропускной способностью интерфейса SATA.
Высокопроизводительные SSD с подключением к шине PCI Express производились до NVMe, но либо использовали уникальные закрытые стандарты и технологии оптимизации работы с флеш-памятью, либо представляли собой SATA- или SAS-контроллер и несколько SSD с интерфейсами SATA/SAS, размещёнными на одной плате. Переход на NVMe позволил стандартизировать интерфейс PCIe SSD — производителям больше не нужно тратить ресурсы на разработку уникальных драйверов, разъёмов и форм-факторов[9]. Подобным образом принятие спецификаций USB mass storage[англ.] позволило создать большое разнообразие USB-флеш-накопителей, которые смогли работать с любыми компьютерами, не требуя оригинальных драйверов для каждой модели[10].
Для эффективного использования накопителей NVMe в сетях хранения данных разрабатываются различные стандарты передачи команд NVMe через RDMA (поверх InfiniBand или Ethernet — RoCE[англ.] и iWARP) и Fibre Channel без трансляции в SCSI под общим названием NVMe over Fabrics[11].
Первые подробности о новом стандарте доступа к энергонезависимой памяти появились на Intel Developer Forum в 2007 году, где был представлен NVMHCI (Non-Volatile Memory Host Controller Interface) — предполагаемый вариант нового интерфейса коммуникации между хостом и контроллером NAND[12]. В том же году была сформирована рабочая группа для проработки NVMHCI во главе с Intel. Первая спецификация NVMHCI 1.0 была закончена в апреле 2008 года и размещена на сайте Intel[13].
Техническая проработка NVMe началась во второй половине 2009 года[14]. Спецификации NVMe были разработаны рабочей группой «NVM Express Workgroup», в которую входило более 90 компаний, председателем группы была Эмбер Хаффмен из Intel. Первая версия спецификации NVMe была представлена 1 марта 2011 года[15]. При работе над версией 1.1, появившейся 11 октября 2012 года, разработчики сфокусировались на добавлении функциональных возможностей для устройств корпоративного класса. В новом стандарте были добавлены многопутевой ввод-вывод с разделяемым доступом к пространствам имён NVMe[прим. 1] и поддержка векторного ввода-вывода (англ. arbitrary-length scatter-gather I/O)[14][16].
В дальнейшем работа над новыми версиями спецификации NVMe была продолжена:
Первые контроллеры SSD с поддержкой NVMe и эталонный дизайн флеш-накопителей в форм-факторе полнопрофильной платы PCIe были выпущены компанией Integrated Device Technology в августе 2012 года[34][35].
Первый серверный NVMe-накопитель Samsung XS1715 в форм-факторе U.2 (2.5", разъём SFF-8639) был анонсирован в июле 2013 года. Основой для накопителя послужил контроллер, разработанный PMC-Sierra[англ.]. Заявленные характеристики составили 3 ГБайт/с при последовательном чтении и 740 000 IOPS при случайном доступе блоками 4 КиБ[36].
В июне 2014 года свои первые линейки серверных NVMe-накопителей представила компания Intel. Линейки DC P3700, DC P3600, DC P3500, различающиеся между собой производительностью и ресурсом, выпускаются в форм-факторе U.2 и в виде низкопрофильных плат PCIe[37]. В 2015 году Intel выпустила основанный на P3500 накопитель потребительского класса — Intel 750.
В июне 2015 года появился один из первых NVMe-накопителей потребительского класса в компактном форм-факторе M.2 — Samsung SM951-NVMe[прим. 2][38].
Появившиеся в сентябре 2015 года смартфоны Apple iPhone 6s и iPhone 6s Plus стали первыми мобильными устройствами, оснащёнными встроенными NVMe-накопителями[39].
Основными преимуществами NVMe перед AHCI является оптимизированный механизм работы с очередями и обработкой прерываний, что позволяет обеспечить более высокий уровень производительности[4].
Устройство AHCI ограничено одной очередью глубиной 32, в то время как NVMe поддерживает 64 К (65536) очередей с глубиной 65536 каждая. Набор команд NVMe существенно упрощён в сравнении с ATA и SCSI, спецификацией определяется всего 13 обязательных команд, что, в первую очередь, существенно упрощает разработку устройств[2].
На протяжении последних лет ведутся разработки устройств и протоколов, позволяющих использовать накопители NVMe не только локально, в пределах одного сервера, но и строить сети хранения данных с использованием преимуществ NVMe. Подключение систем на базе накопителей NVMe к традиционным сетям хранения данных приводит к потере основного преимущества NVMe в виде сниженных за счёт отказа от SCSI задержек, так как в Fibre Channel и iSCSI предусмотрена инкапсуляция только команд SCSI.
Работы по устранению этого недостатка ведутся в двух направлениях:
Работа над первой версией драйвера Microsoft для Windows велась сформированной по инициативе «OpenFabrics Alliance» рабочей группой «NVMe Windows Working Group» и была завершена в 2012 году[47].
Компания Microsoft интегрировала драйвер NVMe в Windows 8.1 и Windows Server 2012 R2[48]. Драйвер Microsoft для Windows 7 и Windows Server 2008 R2 был выпущен в виде обновлений[49]. Samsung предлагает собственный драйвер NVMe, который обеспечивает более высокую производительность[50]. Windows 10 поддерживает Host Memory Buffer с максимальным размером 64 МБ[51].
Первоначальная разработка драйвера для Linux велась компанией Intel. Драйвер был включён в ветку 3.3 ядра Linux 19 марта 2012 года[52].
В процессе разработки драйвера NVMe были выявлены недостатки архитектуры блочного ввода-вывода в ядре Linux, затруднявшие масштабирование производительности свыше 1 миллиона IOPS на устройство[53]. При участии инженеров Fusion-io был разработан масштабируемый слой блочного ввода-вывода для высокопроизводительных твердотельных накопителей, известный как blk-multiqueue или blk-mq, и добавлен в ядро версии 3.13 19 января 2014 года[54]. Другое направление в области оптимизации блочного-ввода вывода относится к уменьшению задержек, связанных с обработкой прерываний[55].
Linux поддерживает Host Memory Buffer (HMB)[56] начиная с версии 4.13.1[57] с максимальным размером 128 MB по умолчанию[58].
В macOS драйвер NVMe содержится в составе системы начиная с версии 10.13, вышедшей 25 сентября 2017 года.
Разработка драйвера NVMe для 9-й ветки FreeBSD велась при поддержке Intel[59]. Начиная с FreeBSD версии 10.2 драйверы nvd(4) и nvme(4) включены в конфигурацию ядра по умолчанию[60].
Драйвер NVMe для DragonFly был написан с нуля Мэттом Диллоном[61]. Первый официальный релиз с поддержкой NVMe — 4.6[62].
Разработка NVMe-драйвера для OpenBSD была начата в апреле 2014 года разработчиком, ранее развивавшим драйверы USB 2.0 и AHCI[63]. Первый релиз драйвера появился в OpenBSD 6.0[64].
Solaris получила поддержку NVMe с версии Oracle Solaris 11.2[65].
Haiku
Для отладки драйверов и другого ПО в QEMU начиная с версии 1.6 появилась эмуляция NVMe-устройств (август 2013 года)[67].
Драйвер NVMe для загрузочного окружения UEFI доступен на SourceForge (проект edk2)[68].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.