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].
Протокол NVMe розроблявся з нуля, при цьому основними цілями були одержання низьких затримок і забезпечення паралельного доступу до твердотілих накопичувачів з урахуванням паралелізму сучасних платформ, які використовують багатоядерні процесори. Основними перевагами NVMe перед AHCI є механізм роботи з чергами і оптимізація обробки переривань, що дозволяє забезпечити вищий рівень продуктивності.
AHCI обмежена однією чергою глибиною 32, в той час як NVMe підтримує 64К (65536) черг з глибиною 65536 кожна. Набір команд NVMe істотно спрощений у порівнянні з ATA і SCSI, специфікацією визначається всього 13 обов'язкових команд, що істотно спрощує розробку пристроїв.
- Плати розширення 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 в якості логічного інтерфейсу[27].
- Для підключення бекплейнів з підтримкою накопичувачів U.2 до шини PCI Express використовуються кабелі з роз'ємами OCuLink або SFF-8643[прим. 2], що забезпечує підключення чотирьох ліній PCI Express. Кабель може підключатися до спеціального гнізда на системній платі, у звичайний слот розширення PCI Express через плату-ретаймер[що це?] або до роз'єму M.2 через перехідник.
- 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 не лише локально, в межах одного сервера, але і будувати мережі зберігання даних з використанням переваг 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].
Робота над першою версією драйвера 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 велася компанією Intel. Драйвер був включений в гілку 3.3 ядра Linux 19 березня 2012 року[37].
У процесі розробки драйвера NVMe були виявлені недоліки архітектури блокового введення-виведення в ядрі Linux, що ускладнювали масштабування продуктивності понад 1 мільйон IOPS на пристрій[38]. За участю інженерів Fusion-io був розроблений масштабований шар блокового введення-виведення для високопродуктивних твердотілих накопичувачів, відомий як blk-multiqueue або blk-mq, і доданий в ядро версії 3.13 19 січня 2014 року[39]. Інший напрямок в області оптимізації блокового введення-виведення полягає у зменшенні затримок, пов'язаних із обробкою переривань[40].
Apple додала підтримку NVMe 8 квітня 2015 року в оновленні 10.10.3 для OS X Yosemite[41].
Розробка драйвера 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 отримала підтримку NVMe з версії Oracle Solaris 11.2[48].
Для налагодження драйверів і іншого ПЗ в QEMU починаючи з версії 1.6 з'явилася емуляція NVMe-пристроїв (серпень 2013 року)[49].
Драйвер NVMe для завантажувального оточення UEFI доступний на SourceForge (проект edk2)[50].
- ↑ Перший варіант Samsung SM951 був випущений у такому ж форм-факторі, але підтримував SATA Express.
- ↑ Роз'єм SFF-8643, він же Mini-SAS HD, зазвичай використовується в кабелях SAS, але кабелі NVMe і кабелі SAS з такими роз'ємами не взаємозамінні.
- ↑ Накопичувачі форм-фактора M.2 можуть використовувати як AHCI, так і NVMe.
- ↑ JBOF (Just a bundle of flash) — шасі з твердотілими накопичувачами і комутаторами PCIe, частина портів яких виведена зовні.
- ↑ Micheloni, Marelli, Eshghi, 2012, с. 43.
- ↑ Jonmichael Hands, Peter Onufryk (29 січня 2015). NVM Express Infrastructure - Exploring Data Center PCIe Topologies (PDF). Intel. Архів оригіналу (PDF) за 1 липня 2016. Процитовано 10 лютого 2016.
- ↑ Intel Solid-State Drive DC P3600 Series (PDF). Intel. 20 березня 2015. с. 18, 20—22. Архів оригіналу (PDF) за 2 квітня 2015. Процитовано 10 лютого 2016.
- ↑ Dave Landsman. AHCI and NVMe as Interfaces for SATA Express Devices — Overview (PDF). SanDisk. Архів оригіналу (PDF) за 5 жовтня 2013. Процитовано 10 лютого 2016.
- ↑ Paul Wassenberg (25 червня 2013). SATA Express: PCIe Client Storage (PDF). SATA-IO. Архів оригіналу (PDF) за 4 жовтня 2013. Процитовано 10 лютого 2016.
- ↑ Zsolt Kerekes. SSD Market History — Charting the Rise of the Solid State Disk Market. StorageSearch.com. Архів оригіналу за 25 травня 2017. Процитовано 11 лютого 2016.
- ↑ Amber Huffman (2008). NVMHCI: The Optimized Interface for Caches and SSDs (PDF). Flash Memory Summit. Архів оригіналу (PDF) за 4 березня 2016. Процитовано 12 лютого 2016.
- ↑ A Comparison of NVMe and AHCI (PDF). SATA-IO. 31 липня 2012. Архів оригіналу (PDF) за 12 лютого 2019. Процитовано 11 лютого 2016.
- ↑ Amber Huffman (2009). Extending the NVMHCI Standard to Enterprise (PDF). Flash Memory Summit. Архів оригіналу (PDF) за 17 квітня 2016. Процитовано 20 лютого 2017.
- ↑ NVM Express Explained (PDF). NVM Express, Inc. Архів оригіналу (PDF) за 4 березня 2016. Процитовано 10 лютого 2016.
- ↑ Dave Minturn (2015). NVM Express Over Fabrics (PDF). OFADevWorkshop. Архів оригіналу (PDF) за 22 квітня 2016. Процитовано 11 лютого 2016.
- ↑ Speeding up Flash... in a flash. The Inquirer. 13 жовтня 2007. Архів оригіналу за 18 вересня 2009. Процитовано 12 лютого 2016.
- ↑ Amber Huffman (14 квітня 2008). Non-Volatile Memory Host Controller Interface (NVMHCI) 1.0 (PDF). Intel Corporation. NVM Express, Inc. Архів оригіналу (PDF) за 5 червня 2015. Процитовано 20 лютого 2017.
- ↑ Peter Onufryk (2013). What’s New in NVMe 1.1 and Future Directions (PDF). Flash Memory Summit. Архів оригіналу (PDF) за 22 лютого 2016. Процитовано 12 лютого 2016.
- ↑ New Promoter Group Formed to Advance NVM Express (PDF) (англ.). NVM Express, Inc. 1 червня 2011. Архів оригіналу (PDF) за 4 березня 2016. Процитовано 12 лютого 2016.
- ↑ Amber Huffman (11 жовтня 2012). NVM Express Revision 1.1 (PDF). NVM Express, Inc. Архів оригіналу (PDF) за 6 липня 2017. Процитовано 12 лютого 2016.
- ↑ NVM Express, Inc (2 липня 2014). NVM Express Revision 1.1b (PDF). Архів оригіналу (PDF) за 1 липня 2016. Процитовано 29 вересня 2018.
- ↑ NVM Express, Inc (3 листопада 2014). NVM Express Revision 1.2 (PDF). Архів оригіналу (PDF) за 29 червня 2016. Процитовано 29 вересня 2018.
- ↑ NVM Express, Inc (23 жовтня 2015). NVM Express Revision 1.2a (PDF). Архів оригіналу (PDF) за 13 квітня 2016. Процитовано 12 лютого 2016.
- ↑ NVM Express, Inc (24 травня 2018). NVM Express Revision 1.3c (PDF). Архів оригіналу (PDF) за 25 червня 2018. Процитовано 25 червня 2018.
- ↑ IDT releases two NVMe PCI-Express SSD controllers. The Inquirer. 21 серпня 2012. Архів оригіналу за 24 серпня 2012. Процитовано 12 лютого 2016.
- ↑ IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update. The SSD Review. 24 серпня 2012. Архів оригіналу за 1 січня 2016. Процитовано 12 лютого 2016.
- ↑ Samsung Announces Industry’s First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews. StorageReview.com. 18 липня 2013. Архів оригіналу за 10 січня 2014. Процитовано 12 лютого 2016.
- ↑ Scot Strong (3 червня 2014). Intel Adds PCIe Solutions To Its Data Center Family Of SSDs. The SSD Review. Архів оригіналу за 23 грудня 2015. Процитовано 12 лютого 2016.
- ↑ Kristian Vättö (25 червня 2015). Samsung SM951-NVMe (256GB) PCIe SSD Review. AnandTech. Архів оригіналу за 28 серпня 2016. Процитовано 26 серпня 2016.
- ↑ Les Tokar (2015-10). iPhone 6S Uses NVMe Storage – Performance Determined By Capacity. The SSD Review. Архів оригіналу за 7 листопада 2015. Процитовано 12 лютого 2016.
- ↑ Kevin OBrien (5 лютого 2013). Dell PowerEdge R720 12G Review. Storage Review. Архів оригіналу за 11 лютого 2016. Процитовано 15 лютого 2016.
- ↑ Patrick Kennedy (9 серпня 2017). The Intel Ruler SSD: Already Moving Markets. Serverthehome. Архів оригіналу за 25 червня 2018. Процитовано 25 червня 2018.
- ↑ Supermicro Launches 1U Ruler NVMe Server. StorageReview. 3 березня 2018. Архів оригіналу за 25 червня 2018. Процитовано 25 червня 2018.
- ↑ Cliff Robinson (11 січня 2018). Supermicro 36x NGSFF SSD server offers 576TB of NVMe Storage in 1U. StorageReview. Архів оригіналу за 25 червня 2018. Процитовано 25 червня 2018.
- ↑ David Wang. Next Generation Small Form Factor (NGSFF) SSD Proposal (PDF). Flash Memory Summit. Архів оригіналу (PDF) за 25 червня 2018. Процитовано 25 червня 2018.
- ↑ Andy Herron (2016). NVM Express Moves Into The Future (PDF). NVM Express, Inc. Архів оригіналу (pdf) за 22 серпня 2016. Процитовано 11 серпня 2016.
- ↑ NVM Express over Fabrics Specification Released (англ.). NVM Express, Inc. 9 червня 2016. Архів оригіналу за 18 серпня 2016. Процитовано 11 серпня 2016.
- ↑ Kwok Kong (4 серпня 2014). The latest on NVMe open source drivers for Windows and VMware. Storage Review. Архів оригіналу за 4 березня 2016. Процитовано 15 лютого 2016.
- ↑ Andy Herron (11 січня 2014). Advancements in Storage and File Systems in Windows 8.1 (PDF). Storage Developer Conference. Архів оригіналу (pdf) за 10 січня 2014. Процитовано 15 лютого 2016.
- ↑ Update to add native driver support in NVM Express in Windows 7 and Windows Server 2008 R2. Microsoft. 4 серпня 2014. Архів оригіналу за 13 березня 2016. Процитовано 15 лютого 2016.
- ↑ 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.
- ↑ 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.
- ↑ Werner Fischer. Linux Multi-Queue Block IO Queueing Mechanism (blk-mq). Thomas-Krenn. Архів оригіналу за 3 березня 2016. Процитовано 15 лютого 2016.
- ↑ 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.
- ↑ Apple enables NVM Express protocol for faster SSD performance with OS X 10.10.3. Архів оригіналу за 29 вересня 2018. Процитовано 29 вересня 2018.
- ↑ Log of /head/sys/dev/nvme. FreeBSD source tree. The FreeBSD Project. Архів оригіналу за 29 травня 2013. Процитовано 15 лютого 2016.
- ↑ FreeBSD 10.2-RELEASE Release Notes. The FreeBSD Project. Архів оригіналу за 18 червня 2017. Процитовано 15 лютого 2016.
- ↑ NVMe comes to DragonFly – DragonFly BSD Digest. Архів оригіналу за 19 вересня 2016. Процитовано 8 вересня 2016.
- ↑ DragonFly BSD 4.6. Архів оригіналу за 4 вересня 2016. Процитовано 29 вересня 2018.
- ↑ David Gwynne (16 квітня 2014). non volatile memory express controller (/sys/dev/ic/nvme.c). BSD Cross Reference. Архів оригіналу за 28 квітня 2014. Процитовано 15 лютого 2016.
- ↑ NVME(4). NetBSD Kernel Interfaces Manual. Архів оригіналу за 17 вересня 2016. Процитовано 29 вересня 2018.
- ↑ nvme(7D). Oracle. Архів оригіналу за 9 грудня 2015. Процитовано 15 лютого 2016.
- ↑ ChangeLog/1.6 — QEMU. Архів оригіналу за 29 вересня 2018. Процитовано 29 вересня 2018.
- ↑ Download EDK II from. SourceForge.net. Архів оригіналу за 31 грудня 2013. Процитовано 11 січня 2014.
- Micheloni, Rino; Marelli, Alessia; Eshghi, Kam (2012). Inside Solid State Drives (SSDs). Springer Series in Advanced Microelectronics (англ.). Springer Science & Business Media. ISBN 978-94-00751453.
- David A. Deming. The Essential Guide to Serial ATA and SATA Express [Архівовано 29 вересня 2018 у Wayback Machine.]. — CRC Press, 2014. — 496 с. — (Auerbach Book). — ISBN 9781482243314.
- Офіційний сайт NVM Express [Архівовано 7 лютого 2017 у Wayback Machine.] (англ.)