Топ питань
Часова шкала
Чат
Перспективи
NVM Express
З Вікіпедії, вільної енциклопедії
Remove ads
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].
Remove ads
Передумови появи
Узагальнити
Перспектива
Ранні твердотілі накопичувачі використовували для підключення паралельний 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].
Remove ads
Історія
Узагальнити
Перспектива
Робота над специфікацією
Перші подробиці про новий стандарт доступу до енергонезалежної пам'яті з'явилися на 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, випущені на сьогоднішній день:[17]
- 1.0e (січень 2013)
- 1.1b (липень 2014), яка додає стандартизовані Command Sets для досягнення кращої сумісності між різними пристроями NVMe, Management Interface зі стандартизованими інструментами для управління пристроями NVMe, що спрощує адміністрування, а також Transport Specifications, які визначають способи транспортування команд NVMe через різні фізичні інтерфейси, підвищуючи взаємодію.[18]
- 1.2 (листопад 2014)
- 1.2a (жовтень 2015)
- 1.2b (червень 2016)
- 1.2.1 (червень 2016), яка представляє наступні нові функції у порівнянні з версією 1.1b: Multi-Queue для підтримки кількох черг I/O, що підвищує пропускну здатність даних та продуктивність, Namespace Management, що дозволяє динамічно створювати, видаляти та змінювати розміри просторів імен, забезпечуючи більшу гнучкість, а також Endurance Management для моніторингу та управління рівнем зносу SSD, оптимізуючи продуктивність і продовжуючи термін служби.[19]
- 1.3 (травень 2017)
- 1.3a (жовтень 2017)
- 1.3b (травень 2018)
- 1.3c (травень 2018)
- 1.3d (березень 2019), яка з моменту випуску версії 1.2.1 додала Namespace Sharing, що дозволяє кільком хостам отримувати доступ до одного простору імен, сприяючи спільному використанню сховища, Namespace Reservation, яка надає механізми для резервування просторів імен, запобігаючи конфліктам і забезпечуючи цілісність даних, а також Namespace Priority, яка встановлює пріоритети для різних просторів імен, оптимізуючи продуктивність для критично важливих завдань.[20][21]
- 1.4 (червень 2019)
- 1.4a (березень 2020)
- 1.4b (вересень 2020)
- 1.4c (червень 2021), яка має наступні нові функції у порівнянні з 1.3d: IO Determinism для забезпечення постійної затримки та продуктивності шляхом ізоляції навантажень, Namespace Write Protect для запобігання пошкодженню даних або несанкціонованим змінам, Persistent Event Log, що зберігає журнали подій у енергонезалежній пам’яті, сприяючи діагностиці та усуненню несправностей, і Verify Command, що перевіряє цілісність даних.[22][23]
- 2.0 (травень 2021)[24]
- 2.0a (липень 2021)
- 2.0b (січень 2022)
- 2.0c (жовтень 2022)
- 2.0d (січень 2024),[25] яка, у порівнянні з 1.4c, вводить Zoned Namespaces (ZNS), що організовує дані у зони для ефективних операцій запису, зменшуючи write amplification і покращуючи довговічність SSD, Key Value (KV) для ефективного зберігання та вилучення пар «ключ-значення» безпосередньо на пристрої NVMe, оминаючи традиційні файлові системи, Endurance Group Management для управління групами SSD на основі їхньої довговічності, оптимізуючи використання та подовжуючи термін служби.[26][25][27]
- 2.1 (серпень 2024)[28], яка вводить Live Migration для підтримання доступності послуг під час міграції, Key Per I/O для застосування ключів шифрування на рівні операцій, NVMe-MI High Availability Out of Band Management для управління пристроями NVMe поза межами звичайних шляхів даних, а також NVMe Network Boot / UEFI для завантаження пристроїв NVMe через мережу.[29]
Перші контролери і готові накопичувачі
Перші контролери SSD з підтримкою NVMe і еталонний дизайн флеш-накопичувачів у форм-факторі повнопрофільної плати PCIe були випущені компанією Integrated Device Technology в серпні 2012 року[30][31].
Перший серверний NVMe-накопичувач Samsung XS1715 у форм-факторі U.2 (2.5", роз'єм SFF-8639) був анонсований в липні 2013 року. Основою для накопичувача був контролер, розроблений PMC-Sierra. Заявлені характеристики склали 3 ГБайт/с при послідовному читанні і 740000 IOPS при випадковому доступі блоками 4 Кіб[32].
У червні 2014 року свої перші лінійки серверних NVMe-накопичувачів, представила компанія Intel. Лінійки DC P3700, DC P3600, DC P3500, що відрізняються між собою продуктивністю і ресурсом, випускаються у форм-факторі U.2 і у вигляді низькопрофільних плат PCIe[33]. У наступному, 2015 року Intel випустила заснований на P3500 накопичувач споживчого класу — Intel 750.
У червні 2015 року з'явився один з перших NVMe-накопичувачів споживчого класу в компактному форм-факторі M.2 — Samsung SM951-NVMe[прим. 1][34].
У вересні 2015 смартфони Apple iPhone 6s і iPhone 6s Plus стали першими мобільними пристроями із NVMe-накопичувачами[35].
Remove ads
Технічні особливості та інфраструктура
Узагальнити
Перспектива
Порівняння з AHCI

Протокол 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 в якості логічного інтерфейсу[36].
- Для підключення бекплейнів з підтримкою накопичувачів 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[37]. Форм-фактор U.2 забезпечував механічну сумісність з корпусами, призначеними для установки дисків 2,5", але не дуже добре підходив для твердотільних накопичувачів — обмежені габарити ускладнювали нарощування обсягу накопичувачів і утруднювали охолодження. Розміри накопичувачів EDSFF складають 325,35×9,5×38,6 мм, підтримується підключення через 4 або 8 ліній PCIe (в перспективі — до 16). Прикладами готових продуктів, що використовують форм-фактор EDSFF є сервери і JBOF-системи[прим. 4] виробництва Supermicro, що дозволяють розмістити до 32 накопичувачів в корпусі висотою 1U[38].
- Samsung NGSFF — форм-фактор для серверних накопичувачів з підтримкою гарячої заміни. Як і EDSFF, розроблений як альтернатива U.2. Має менші габарити в порівнянні з EDSFF — 110×4,38×30,5 мм, що дозволяє встановити більшу кількість накопичувачів (36 в 1U) і використовувати корпусу меншою глибини[39][40].
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 мкс[41]. Перша версія офіційної специфікації NVMe over Fabrics була опублікована 9 червня 2016 року[42].
Підтримка операційними системами
Windows
Робота над першою версією драйвера Microsoft для Windows велася сформованою за ініціативою «OpenFabrics Alliance» робочою групою «NVMe Windows Working Group» і була завершена в 2012 році[43].
Компанія Microsoft інтегрувала драйвер NVMe в Windows 8.1 і Windows Server 2012 R2[44]. Драйвер Microsoft для Windows 7 і Windows Server 2008 R2 був випущений у вигляді оновлень[45].
Linux
Первісна розробка драйвера для Linux велася компанією Intel. Драйвер був включений в гілку 3.3 ядра Linux 19 березня 2012 року[46].
У процесі розробки драйвера NVMe були виявлені недоліки архітектури блокового введення-виведення в ядрі Linux, що ускладнювали масштабування продуктивності понад 1 мільйон IOPS на пристрій[47]. За участю інженерів Fusion-io був розроблений масштабований шар блокового введення-виведення для високопродуктивних твердотілих накопичувачів, відомий як blk-multiqueue або blk-mq, і доданий в ядро версії 3.13 19 січня 2014 року[48]. Інший напрямок в області оптимізації блокового введення-виведення полягає у зменшенні затримок, пов'язаних із обробкою переривань[49].
OS X
Apple додала підтримку NVMe 8 квітня 2015 року в оновленні 10.10.3 для OS X Yosemite[50].
ОС сімейства BSD
Розробка драйвера NVMe для 9-ї гілки FreeBSD велася за підтримки Intel[51]. Починаючи з FreeBSD версії 10.2 драйвери nvd(4) і nvme(4) включені в конфігурацію ядра за замовчуванням[52].
Драйвер NVMe для DragonFly був написаний з нуля Меттом Діллоном[53]. Перший офіційний реліз з підтримкою NVMe — 4.6[54].
Розробка NVMe-драйвера для OpenBSD була розпочата в квітні 2014 року розробником, який раніше розвивав драйвери USB 2.0 і AHCI[55]. Перший випуск драйвера з'явився в OpenBSD 6.0[56].
Підтримка NVMe в NetBSD з'явилася у випуску 8.0.
Solaris
Solaris отримала підтримку NVMe з версії Oracle Solaris 11.2[57].
QEMU
Для налагодження драйверів і іншого ПЗ в QEMU починаючи з версії 1.6 з'явилася емуляція NVMe-пристроїв (серпень 2013 року)[58].
UEFI
Драйвер NVMe для завантажувального оточення UEFI доступний на SourceForge (проект edk2)[59].
Remove ads
Примітки
Література
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads