NVM Express

(Перенаправлено з NVMe)

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].

Примітки

Література

Посилання