История накопителей представляет собой гонку между носителями и вычислительными мощностями. На пути к компьютерной нирване встаёт узкое место – хранение миллиардов нулей и единиц. Самый новый из игроков на этом поприще – энергонезависимая память Non-Volatile Memory Express (NVMe), представляющая собой что-то вроде гибрида нескольких предыдущих технических решений.
В первом поколении домашних компьютеров в качестве накопителей использовались флоппи-диски и компакт-кассеты, но с ростом возможностей компьютеров постепенно росла и важность накопителей. К 1990-м большое распространение получили жёсткие диски, позволявшие хранить сначала мегабайты, а потом и гигабайты информации. В результате выросла необходимость в быстрой системе связи между накопителем и остальной системой. В то время чаще всего использовался интерфейс ATA (IDE) в режиме программного ввода-вывода Programmed Input-Output (PIO).
В результате технологии перешли на прямой доступ к памяти (DMA), интерфейс UDMA, также известный, как Ultra ATA и Parallel ATA, и основанные на этой системе интерфейсы SCSI в компьютерах Apple и большинстве серверов. В итоге Parallel ATA превратился в Serial ATA (SATA), а Parallel SCSI — в Serial Attached SCSI (SAS). SATA в основном использовался в ноутбуках и настольных компьютерах до прихода NVMe и твердотельных накопителей.
Все эти интерфейсы разрабатывались с тем, чтобы не отставать от накопителей. В этом смысле, NVMe выбивается из общей картины своей интеграцией в систему. Также NVMe отличается тем, что не привязан к какому-то определённому интерфейсу или коннектору, что может сбить с толку. Кто может разделить M.2 и U.2, не говоря уже о том, какой протокол использует интерфейс, будь то SATA или NVMe?
Давайте-ка разбираться в чудесном и странном мире NVMe.
Обманчивый внешний вид
Элементы SATA Express, функционально схожие с M.2.
Попросите любого человека показать вам слот для NVMe на материнской плате, и скорее всего вам покажут изображение слота M.2, поскольку он стал наиболее популярным для твердотельных накопителей (ТТН) в потребительской электронике. При этом даже слот M.2 со вставленным в него твердотельным накопителем может не относиться к NVMe, поскольку этот интерфейс использует и SATA.
На плате рядом со слотом M.2 часто указывают, какую технологию он поддерживает. Также хорошей идеей будет почитать инструкцию к материнке. Причина путаницы в том, что изначально для ТТН существовал стандарт Mini-SATA (mSATA), использовавший форм-фактор PCIe Mini Card, который потом развился до форм-фактора М.2 и интерфейса U.2. Последний больше похож на интерфейсы SATA и SAS, и комбинирует два канала, SATA и PCIe, в один интерфейс для подключения ТТН.
Тем временем стандарт М.2 (после краткого экскурса в недолго существовавший стандарт SATA Express) расширили с тем, чтобы поддерживать не только SATA, но и AHCI с NVMe. Поэтому слоты М.2 часто неправильно называют «слотами NVMe», кода на самом деле NVMe – это протокол, основанный на PCIe, не определяющий никаких форм-факторов или типов коннекторов.
Интерфейс М.2 с ключами B и M
Тем временем сам по себе форм-фактор М.2 довольно разносторонний – или запутанный, это кому как. Физически он может быть шириной в 12, 16, 22 и 30 мм, и поддерживать длины от 16 до 110 мм. На краю разъёма наносится последовательность меток, обозначающих функциональность, и совпадающих с метками на самом слоте. Чаще всего это метки В и М из списка ключевых меток, в котором, например, есть следующее:
A: 2x PCIe x1, USB 2.0, I2C и DP x4.
B: PCIe x2, SATA, USB 2.0/3.0, аудио, и т.д.
E: 2x PCIe x1, USB 2.0, I2C, etc.
M: PCIe x4, SATA и SMBus.
Получается, что физических размеров карты расширения М.2 бывает аж 32 штуки, и это ещё до того, как мы учтём 12 возможных вариантов модификаций из списка. К счастью, в основной массе промышленность, судя по всему, пришла к общему стандарту в 22 мм ширины для карт накопителей, варианты длин которых ограничены. В итоге ТТН стандарта NVMe имеют маркировку типа «2242», что означает 22 мм ширины и 42 мм длины. Карточки ТТН могут быть отмечены буквами В, М или обеими.
Важно отметить, что сегодня слоты М.2 актитвно используются в качестве расширения PCIe в стеснённых условиях. Поэтому карточки WiFi часто имеют форм-фактор М.2.
Определяя NVMe
Всё это приводит нас к основному определению NVMe: это стандартный интерфейс для накопителей, напрямую подсоединяемых к PCIe. От SATA он отличается тем, что первый преобразует протокол PCIe в протокол SATA, который затем приходится интерпретировать специальному чипу на накопителе перед тем, как можно будет выполнять какие-либо команды, связанные с хранением данных.
Вместо этого NVMe определяет интерфейс, который напрямую можно использовать в любой ОС, имеющей NVMe-драйвер. Команды отправляются на NVMe-накопитель, выполняющий их для чтения или записи или проводящий какие-то операции обслуживания типа TRIM. Поскольку можно положиться на то, что любое устройство, представившееся как NVMe-устройство, представляет собой ТТН (NAND Flash, 3D XPoint, и т.д.), протокол NVMe разработан в расчёте на низкие задержки и большую скорость передачи пакетов.
Optane SSD от Intel типа 3D XPoint работает ровно вне зависимости от нагрузок
Недавно популярность обрела такая особенность NVMe, как местный буфер памяти, Host Memory Buffer (HMB). Это попытка избавиться от необходимости буферизовать данные в DRAM используя ТТН типа NAND Flash. Особенность использует часть памяти системы в качестве буфера, относительно мало теряя при этом в быстродействии, при этом буфер в основном используется для кэширования таблицы адресов.
В долгосрочной перспективе, с учётом темпов развития накопителей, такие технологии, как 3D XPoint делают ненужными даже подобные хитрости. Скорость доступа к той же 3D XPoint ближе к показателям DRAM, чем к NAND Flash. Поскольку ТТН типа 3D XPoint не нуждаются в DRAM-буфере, увеличение их популярности может привести к тому, что NVMe будут оптимизировать уже под них.
Взламывая NVMe
Память на магнитных сердечниках 64×64 (4 кБ)
Стоит задуматься, а что ещё можно сделать с NVMe, кроме как купить ТТН и засунуть его в слот M.2 B или М. Тут нужно решить, что вам больше интересно – взлом накопителя (пусть это будет лишь некая разновидность DRAM or SRAM), или же самого слота М.2.
Полноразмерные слоты PCIe имеют большой размер, а карты расширения предоставляют много места для таких громоздких компонентов, как BGA-чипы и гигантские системы охлаждения. Карты расширения М.2 наоборот, предназначены для мелких и компактных решений, способных уместиться в ноутбуке. Можно, к примеру, скомбинировать FPGA с нужными блоками железа SerDes и PCIe в форм-факторе M.2, и создать компактную карту расширения для ноутбуков и встраиваемых устройств.
Недавние хаки предлагают добавить поддержку NVMe к Raspberry Pi, заменить ТТН в Pinebook Pro WiFi-картой, и считывать NVMe Flash накопитель от айфона при помощи ZIF-адаптера для PCIe.
При этом никто не запрещает попытаться скомбинировать что-нибудь очень странное – к примеру, NVMe-накопитель на магнитных сердечниках.
Заключение
Оглядываясь назад на десятилетия развития вычислительной техники, видно, что различие между памятью и накопителями существовало всегда. Причём памятью всегда служили энергозависимые устройства типа SRAM или DRAM. В последнее время это различие становится всё менее значимым. NAND Flash с NVMe-интерфейсом уже обещают нам потенциально очень низкие задержки и скорость в несколько гигабайт в секунду (особенно с использованием PCIe 4.0) но и это не конец истории.
Самая горячая новинка – это DIMM «постоянной памяти», размещаемые в обычных слотах памяти. Они используют твердотельную технологию Intel Optane, позволяющую увеличивать объём памяти в системе до 512 Гб на модуль. Эти модули, естественно, пока что работают только в серверах Intel. Используются они для буферизации баз данных, большие объёмы которых не дают использовать в качестве буфера обычную память (например, терабайты DDR4 DIMM).
Если у нас будет очень быстрый и энергонезависимый накопитель, соединённый с контроллером памяти процессора напрямую, мы сможем уменьшить задержки до абсолютных минимумов. И хотя 3D XPoint (как разновидность памяти с изменением фазового состояния) пока ещё не такая быстрая, как DDR SDRAM, она демонстрирует нам, что может появиться после NVMe, когда разница между «памятью системы» и «хранилищем данных» совсем исчезнет или изменится до неузнаваемости.