NVM Express

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

NVM Express (NVMe, NVMHCI — от англ. Non-Volatile Memory Host Controller Interface Specification) — спецификация на протоколы доступа к твердотельным накопителям (SSD), подключенным по шине PCI Express. «NVM» в названии спецификации обозначает энергонезависимую память, в качестве которой в SSD повсеместно используется флеш-память типа NAND. Логический интерфейс NVM Express был разработан с нуля, основные цели — получение низких задержек и эффективное использование высокого параллелизма твердотельных накопителей за счёт применения нового набора команд и механизма обработки очередей, оптимизированного для работы с современными многоядерными процессорами[1].

Накопители, использующие NVM Express, могут представлять собой платы расширения PCI Express либо накопители форм-фактора 2.5″, использующие для подключения четыре линии PCI Express через разъём U.2 (SFF-8639)[2][3]. Накопители SATA Express[en] и компактные внутренние накопители форм-фактора M.2 (NGFF) при использовании 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 позволяет стандартизировать интерфейс SSD — производителям больше не нужно тратить ресурсы на разработку уникальных драйверов, разъёмов и форм-факторов[9]. Подобным образом принятие спецификаций USB mass storage[en] позволило создать большое разнообразие USB-флеш-накопителей, которые смогли работать с любыми компьютерами, не требуя оригинальных драйверов для каждой модели[10].

Для эффективного использования накопителей NVMe в сетях хранения данных разрабатываются различные стандарты передачи команд NVMe через RDMA (поверх InfiniBand или Ethernet — RoCE[en] и iWARP[en]) и 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 была продолжена:

  • NVMe 1.1b — 2 июля 2014 года[17];
  • NVMe 1.2 — 3 ноября 2014 года; для устройств потребительского класса: расширенное управление питанием и поддержка накопителей без динамической памяти; для устройств корпоративного класса: возможность обновления прошивки без остановки работы накопителя, снижение задержек в топологиях с большим количеством NVMe-накопителей и коммутаторами PCIe[18].
  • NVMe 1.2a — 23 ноября 2015 года[19].

Первые контроллеры и готовые накопители[править | править вики-текст]

Первые контроллеры SSD с поддержкой NVMe и эталонный дизайн флеш-накопителей в форм-факторе полнопрофильной платы PCIe были выпущены компанией Integrated Device Technology в августе 2012 года[20][21].

Первый серверный NVMe-накопитель Samsung XS1715 в форм-факторе U.2 (2.5", разъём SFF-8639) был анонсирован в июле 2013 года. Основой для накопителя послужил контроллер, разработанный PMC-Sierra[en]. Заявленные характеристики составили 3 ГБайт/с при последовательном чтении и 740000 IOPS при случайном доступе блоками 4 КиБ[22].

В июне 2014 года свои первые линейки серверных NVMe-накопителей представила компания Intel. Линейки DC P3700, DC P3600, DC P3500, отличающиеся между собой производительностью и ресурсом, выпускаются в форм-факторе U.2 и в виде низкопрофильных плат PCIe[23]. В следующем, 2015 году Intel выпустила основанный на P3500 накопитель потребительского класса — Intel 750.

В июне 2015 года появился один из первых NVMe-накопителей потребительского класса в компактном форм-факторе M.2 — Samsung SM951-NVMe[прим 2][24].

Появившиеся в сентябре 2015 смартфоны Apple iPhone 6s и iPhone 6s Plus стали первыми мобильными устройствами, оснащёнными встроенными NVMe-накопителями[25].

Технические особенности и инфраструктура[править | править вики-текст]

Сравнение с AHCI[править | править вики-текст]

Обработка очередей в NVMe[2].

Протокол NVMe разрабатывался с нуля, при этом основными целями являлись получение низких задержек и обеспечение параллельного доступа к твёрдотельным накопителям с учётом параллелизма современных платформ, использующих многоядерные процессоры. Основными преимуществами NVMe перед AHCI является механизм работы с очередями и оптимизация обработки прерываний, что позволяет обеспечить более высокий уровень производительности[4].

Устройство AHCI ограничено одной очередью глубиной 32, в то время как NVMe поддерживает 64К (65536) очередей с глубиной 65536 каждая. Набор команд NVMe существенно упрощён в сравнении с ATA и SCSI, спецификацией определяется всего 13 обязательных команд, что, в первую очередь, существенно упрощает разработку устройств[2].

Форм-факторы накопителей[править | править вики-текст]

HGST SN150, NVMe-накопитель в форм-факторе низкопрофильной платы PCI Express.
  • Платы расширения PCI Express. Большая часть выпускаемых по состоянию на начало 2016 года плат NVMe-накопителей выполнены в форм-факторе половинной высоты/половинной длины с интерфейсом PCI Express x4.
NVMe-накопитель OCZ Z6300 в форм-факторе U.2
Двухпортовый ретаймер Supermicro AOC-SLG3-2E4R. Плата PCIe x8 с двумя разъёмами SFF-8643. Предназначена для подключения накопителей NVMe форм-фактора U.2.
  • U.2 (SFF-8639) — накопители форм-фактора 2.5" высотой 15 мм с разъёмом SFF-8639. Используются, в основном, в серверах. Преимуществами в сравнении с обычной платой расширения являются поддержка горячей замены накопителей и более компактное исполнение, позволяющее разместить большее количество накопителей в корпусе сервера или системы хранения данных. Разъём SFF-8639 обратно совместим с SFF-8482, бэкплейн с разъёмом SFF-8639 при подключении к нему соответствующего контроллера поддерживает подключение накопителей с интерфейсами SATA и SAS.
Разъём SFF-8639
Не все накопители форм-фактора U.2 являются NVMe-совместимыми. В начале 2013 года компания Dell выпустила новое поколение серверов с возможностью подключения до четырёх накопителей Micron P320h. Они были выполнены в совместимом с U.2 форм-факторе, подключались через четыре линии PCIe, но не использовали NVMe в качестве логического интерфейса[26].
Для подключения бэкплейнов с поддержкой накопителей U.2 к шине PCI Express используются кабели с разъёмами OCuLink или SFF-8643[прим 3], обеспечивающий подключение четырёх линий PCI Express. Кабель может подключаться к специальному разъёму на системной плате, в обычный слот расширения PCI Express через плату-ретаймер или к разъёму M.2 через переходник[2].
NVMe-накопитель Samsung 960 PRO в форм-факторе M.2[прим 4].
  • M.2 (NGFF) — бескорпусные накопители в компактном форм-факторе. Предназначены для использования в ноутбуках и стационарных ПК. Накопители формата M.2 могут подключаться либо непосредственно к соответствующему разъёму системной платы, либо устанавливаться в слот PCI Express через переходник.

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 мкс[27]. Первая версия официальной спецификации NVMe over Fabrics была опубликована 9 июня 2016 года[28].

Поддержка операционными системами[править | править вики-текст]

Windows[править | править вики-текст]

Работа над первой версией драйвера Microsoft для Windows велась сформированной по инициативе «OpenFabrics Alliance» рабочей группой «NVMe Windows Working Group» и была завершена в 2012 году[29].

Компания Microsoft интегрировала драйвер NVMe в Windows 8.1 и Windows Server 2012 R2[30]. Драйвер Microsoft для Windows 7 и Windows Server 2008 R2 был выпущен в виде обновлений[31].

Linux[править | править вики-текст]

Первоначальная разработка драйвера для Linux велась компанией Intel. Драйвер был включён в ветку 3.3 ядра Linux 19 марта 2012 года[32].

В процессе разработки драйвера NVMe были выявлены недостатки архитектуры блочного ввода-вывода в ядре Linux, затруднявшие масштабирование производительности свыше 1 миллиона IOPS на устройство[33]. При участии инженеров Fusion-io был разработан масштабируемый слой блочного ввода-вывода для высокопроизводительных твердотельных накопителей, известный как blk-multiqueue или blk-mq, и добавлен в ядро версии 3.13 19 января 2014 года[34]. Другое направление в области оптимизации блочного-ввода вывода относится к уменьшению задержек, связанных с обработкой прерываний[35].

ОС семейства BSD[править | править вики-текст]

Разработка драйвера NVMe для 9-й ветки FreeBSD велась при поддержке Intel[36]. Начиная с FreeBSD версии 10.2 драйверы nvd(4) и nvme(4) включены в конфигурацию ядра по умолчанию[37].

Драйвер NVMe для DragonFly был написан с нуля Мэттом Диллоном[38]. Первый официальный релиз с поддержкой NVMe — 4.6[39].

Разработка NVMe-драйвера для OpenBSD была начата в апреле 2014 года разработчиком, ранее развивавшим драйвера USB 2.0 и AHCI[40]. Первый релиз драйвера появился в OpenBSD 6.0[41].

Поддержка NVMe в NetBSD появилась в выпуске 8.0[41].

Solaris[править | править вики-текст]

Solaris получила поддержку NVMe с версии Oracle Solaris 11.2[42].

QEMU[править | править вики-текст]

Для отладки драйверов и другого ПО в QEMU начиная с версии 1.6 появилась эмуляция NVMe-устройств (август 2013 года)[43].

UEFI[править | править вики-текст]

Драйвер NVMe для загрузочного окружения UEFI доступен на SourceForge (проект edk2)[44].

Примечания[править | править вики-текст]

  1. Пространство имён NVMe (англ. NVMe namespace) — область накопителя NVMe, отформатированная для блочного доступа.
  2. Первый вариант Samsung SM951 был выпущен в том же форм-факторе, но поддерживал SATA Express.
  3. Разъём SFF-8643, он же Mini-SAS HD, обычно применяется в кабелях SAS, но кабели NVMe и кабели SAS с такими разъёмами не являются взаимозаменяемыми.
  4. Накопители форм-фактора M.2 могут использовать как AHCI, так и NVMe.
  1. Micheloni, Marelli, Eshghi, 2012, с. 43.
  2. 1 2 3 4 Jonmichael Hands, Peter Onufryk. NVM Express Infrastructure - Exploring Data Center PCIe Topologies (англ.) (PDF). Intel (29 January 2015). Проверено 10 февраля 2016.
  3. Intel Solid-State Drive DC P3600 Series (англ.) (PDF) 18, 20–22. Intel (20 March 2015). Проверено 10 февраля 2016.
  4. 1 2 Dave Landsman. AHCI and NVMe as Interfaces for SATA Express Devices — Overview (англ.) (PDF). SanDisk. Проверено 10 февраля 2016.
  5. Paul Wassenberg. SATA Express: PCIe Client Storage (англ.) (PDF). SATA-IO (25 June 2013). Проверено 10 февраля 2016.
  6. Zsolt Kerekes. SSD Market History — Charting the Rise of the Solid State Disk Market (англ.). StorageSearch.com. Проверено 11 февраля 2016.
  7. Amber Huffman. NVMHCI: The Optimized Interface for Caches and SSDs (англ.) (PDF). Flash Memory Summit (2008). Проверено 12 февраля 2016.
  8. A Comparison of NVMe and AHCI (англ.) (PDF). SATA-IO (31 July 2012). Проверено 11 февраля 2016.
  9. Amber Huffman. Extending the NVMHCI Standard to Enterprise (англ.) (PDF). Flash Memory Summit (2009). Проверено 20 февраля 2017.
  10. NVM Express Explained (англ.) (PDF). NVM Express, Inc. Проверено 10 февраля 2016.
  11. Dave Minturn. NVM Express Over Fabrics (англ.) (PDF). OFADevWorkshop (2015). Проверено 11 февраля 2016.
  12. Speeding up Flash... in a flash (англ.). The Inquirer (13 October 2007). Проверено 12 февраля 2016.
  13. Amber Huffman. Non-Volatile Memory Host Controller Interface (NVMHCI) 1.0 (англ.) (PDF). Intel Corporation. NVM Express, Inc. (14 April 2008). Проверено 20 февраля 2017.
  14. 1 2 Peter Onufryk. What’s New in NVMe 1.1 and Future Directions (англ.) (PDF). Flash Memory Summit (2013). Проверено 12 февраля 2016.
  15. New Promoter Group Formed to Advance NVM Express (англ.) (PDF), NVM Express, Inc. (June 1, 2011). Проверено 12 февраля 2016.
  16. Amber Huffman. NVM Express Revision 1.1 (англ.) (PDF). NVM Express, Inc. (October 11, 2012). Проверено 12 февраля 2016.
  17. NVM Express, Inc. NVM Express Revision 1.1b (англ.) (PDF) (2 July 2014).
  18. NVM Express, Inc. NVM Express Revision 1.2 (англ.) (PDF) (3 November 2014).
  19. NVM Express, Inc. NVM Express Revision 1.2a (англ.) (PDF) (23 October 2015). Проверено 12 февраля 2016.
  20. IDT releases two NVMe PCI-Express SSD controllers (англ.). The Inquirer (21 August 2012). Проверено 12 февраля 2016.
  21. IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update (англ.). The SSD Review (24 August 2012). Проверено 12 февраля 2016.
  22. Samsung Announces Industry’s First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews (англ.). StorageReview.com (18 July 2013). Проверено 12 февраля 2016.
  23. Scot Strong. Intel Adds PCIe Solutions To Its Data Center Family Of SSDs (англ.). The SSD Review (3 June 2014). Проверено 12 февраля 2016.
  24. Kristian Vättö. Samsung SM951-NVMe (256GB) PCIe SSD Review (англ.). AnandTech (25 June 2015). Проверено 26 августа 2016.
  25. Les Tokar. iPhone 6S Uses NVMe Storage – Performance Determined By Capacity (англ.). The SSD Review (October 2015). Проверено 12 февраля 2016.
  26. Kevin OBrien. Dell PowerEdge R720 12G Review (англ.). Storage Review (5 February 2013). Проверено 15 февраля 2016.
  27. Andy Herron. NVM Express Moves Into The Future (англ.) (pdf). NVM Express, Inc. (2016). Проверено 11 августа 2016.
  28. NVM Express over Fabrics Specification Released (англ.), NVM Express, Inc. (June 9, 2016). Проверено 11 августа 2016.
  29. Kwok Kong. The latest on NVMe open source drivers for Windows and VMware (англ.). Storage Review (4 August 2014). Проверено 15 февраля 2016.
  30. Andy Herron. Advancements in Storage and File Systems in Windows 8.1 (англ.) (pdf). Storage Developer Conference (11 January 2014). Проверено 15 февраля 2016. Архивировано 10 января 2014 года.
  31. Update to add native driver support in NVM Express in Windows 7 and Windows Server 2008 R2 (англ.). Microsoft (4 August 2014). Проверено 15 февраля 2016.
  32. Keith Busch. Update to add native driver support in NVM Express in Windows 7 and Windows Server 2008 R2 (англ.) (pdf). Flash Memory Summit (12 August 2013). Проверено 15 февраля 2016.
  33. Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems (англ.) (pdf). IT University of Copenhagen (5 March 2013). Проверено 15 февраля 2016.
  34. Werner Fischer. Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) (англ.). Thomas-Krenn. Проверено 15 февраля 2016.
  35. Stephen Bates. Having fun at queue depth = 1: What next generation non volatile memory (NG-NVM) means for PCIe SSDs and SSD drivers (англ.). PMC-Sierra (12 November 2015). Проверено 15 февраля 2016.
  36. Log of /head/sys/dev/nvme (англ.). FreeBSD source tree. The FreeBSD Project. Проверено 15 февраля 2016.
  37. FreeBSD 10.2-RELEASE Release Notes (англ.). The FreeBSD Project. Проверено 15 февраля 2016.
  38. NVMe comes to DragonFly – DragonFly BSD Digest (англ.). Проверено 8 сентября 2016.
  39. DragonFly BSD 4.6.
  40. David Gwynne. non volatile memory express controller (/sys/dev/ic/nvme.c) (англ.). BSD Cross Reference (16 April 2014). Проверено 15 февраля 2016.
  41. 1 2 NVME(4). NetBSD Kernel Interfaces Manual.
  42. nvme(7D) (англ.). Oracle. Проверено 15 февраля 2016.
  43. ChangeLog/1.6 — QEMU
  44. Download EDK II from. SourceForge.net. Проверено 11 января 2014.

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]