https://habr.com/ru/post/540952/- Компьютерное железо
- Накопители
История накопителей представляет собой гонку между носителями и вычислительными мощностями. На пути к компьютерной нирване встаёт узкое место – хранение миллиардов нулей и единиц. Самый новый из игроков на этом поприще – энергонезависимая память
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 кБ) [пользователь closegl утверждает, что тут ошибка, и имеется в виду 32×32, 1 кБ ]
Стоит задуматься, а что ещё можно сделать с 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, когда разница между «памятью системы» и «хранилищем данных» совсем исчезнет или изменится до неузнаваемости.