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

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

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