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 і компактні внутрішні накопичувачі формфактора 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 дозволило створити велику різноманітність USB-флеш-накопичувачів, які змогли працювати з будь-якими комп'ютерами, не вимагаючи оригінальних драйверів для кожної моделі[10].

Для ефективного використання накопичувачів NVMe в мережах зберігання даних розробляються різні стандарти передачі команд NVMe через RDMA[en] (поверх 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 року, розробники сфокусувалися на додаванні функціональних можливостей для пристроїв корпоративного класу.[16].

Наступні версії специфікації NVMe:

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

Перші контролери і готові накопичувачі[ред. | ред. код]

Перші контролери SSD з підтримкою NVMe і еталонний дизайн флеш-накопичувачів у форм-факторі повнопрофільної плати PCIe були випущені компанією Integrated Device Technology в серпні 2012 року[21][22].

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

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

У червні 2015 року з'явився один з перших NVMe-накопичувачів споживчого класу в компактному форм-факторі M.2 — Samsung SM951-NVMe[прим. 1][25].

У вересні 2015 смартфони Apple iPhone 6s і iPhone 6s Plus стали першими мобільними пристроями із NVMe-накопичувачами[26].

Технічні особливості та інфраструктура[ред. | ред. код]

Порівняння з AHCI[ред. | ред. код]

Обробка черг в NVMe.

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

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

Форм-фактори накопичувачів[ред. | ред. код]

  • Плати розширення 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 в якості логічного інтерфейсу[27].
Для підключення бекплейнів з підтримкою накопичувачів U.2 до шини PCI Express використовуються кабелі з роз'ємами OCuLink або SFF-8643[прим. 2], що забезпечує підключення чотирьох ліній PCI Express. Кабель може підключатися до спеціального гнізда на системній платі, у звичайний слот розширення PCI Express через плату-ретаймер[що це?] або до роз'єму M.2 через перехідник.
NVMe-накопичувач Samsung 960 PRO у форм-факторі M.2[прим. 3].
  • M.2 (NGFF) — безкорпусні накопичувачі в компактному форм-факторі. Призначені для використання в ноутбуках і стаціонарних ПК. Накопичувачі формату M.2 можуть підключатися безпосередньо до відповідного роз'єму системної плати, або встановлюватися в слот PCI Express через перехідник.
  • Intel Ruler SSD (EDSFF) — форм-фактор для серверних накопичувачів з підтримкою гарячої заміни. Був анонсований компанією Intel в 2017 році на Flash Memory Summit[28]. Форм-фактор U.2 забезпечував механічну сумісність з корпусами, призначеними для установки дисків 2,5", але не дуже добре підходив для твердотільних накопичувачів — обмежені габарити ускладнювали нарощування обсягу накопичувачів і утруднювали охолодження. Розміри накопичувачів EDSFF складають 325,35×9,5×38,6 мм, підтримується підключення через 4 або 8 ліній PCIe (в перспективі — до 16). Прикладами готових продуктів, що використовують форм-фактор EDSFF є сервери і JBOF-системи[прим. 4] виробництва Supermicro, що дозволяють розмістити до 32 накопичувачів в корпусі висотою 1U[29].
  • Samsung NGSFF — форм-фактор для серверних накопичувачів з підтримкою гарячої заміни. Як і EDSFF, розроблений як альтернатива U.2. Має менші габарити в порівнянні з EDSFF — 110×4,38×30,5 мм, що дозволяє встановити більшу кількість накопичувачів (36 в 1U) і використовувати корпусу меншою глибини[30][31].

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 мкс[32]. Перша версія офіційної специфікації NVMe over Fabrics була опублікована 9 червня 2016 року[33].

Підтримка операційними системами[ред. | ред. код]

Windows[ред. | ред. код]

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

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

Linux[ред. | ред. код]

Первісна розробка драйвера для Linux велася компанією Intel. Драйвер був включений в гілку 3.3 ядра Linux 19 березня 2012 року[37].

У процесі розробки драйвера NVMe були виявлені недоліки архітектури блокового введення-виведення в ядрі Linux, що ускладнювали масштабування продуктивності понад 1 мільйон IOPS на пристрій[38]. За участю інженерів Fusion-io був розроблений масштабований шар блокового введення-виведення для високопродуктивних твердотілих накопичувачів, відомий як blk-multiqueue або blk-mq, і доданий в ядро версії 3.13 19 січня 2014 року[39]. Інший напрямок в області оптимізації блокового введення-виведення полягає у зменшенні затримок, пов'язаних із обробкою переривань[40].

OS X[ред. | ред. код]

Apple додала підтримку NVMe 8 квітня 2015 року в оновленні 10.10.3 для OS X Yosemite[41].

ОС сімейства BSD[ред. | ред. код]

Розробка драйвера NVMe для 9-ї гілки FreeBSD велася за підтримки Intel[42]. Починаючи з FreeBSD версії 10.2 драйвери nvd(4) і nvme(4) включені в конфігурацію ядра за замовчуванням[43].

Драйвер NVMe для DragonFly був написаний з нуля Меттом Діллоном[44]. Перший офіційний реліз з підтримкою NVMe — 4.6[45].

Розробка NVMe-драйвера для OpenBSD була розпочата в квітні 2014 року розробником, який раніше розвивав драйвери USB 2.0 і AHCI[46]. Перший випуск драйвера з'явився в OpenBSD 6.0[47].

Підтримка NVMe в NetBSD з'явилася у випуску 8.0.

Solaris[ред. | ред. код]

Solaris отримала підтримку NVMe з версії Oracle Solaris 11.2[48].

QEMU[ред. | ред. код]

Для налагодження драйверів і іншого ПЗ в QEMU починаючи з версії 1.6 з'явилася емуляція NVMe-пристроїв (серпень 2013 року)[49].

UEFI[ред. | ред. код]

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

Примітки[ред. | ред. код]

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

Література[ред. | ред. код]

Посилання[ред. | ред. код]