NVM Express (NVMe) или спецификация интерфейса хост-контроллера энергонезависимой памяти (NVMHCIS) — это спецификация интерфейса открытого логического устройства для доступа к энергонезависимым носителям информации компьютера, подключенным через шину PCI Express. Аббревиатура NVM означает энергонезависимую память, обычно флэш-память NAND, которая поставляется в различных физических форм-факторах, включая твердотельные накопители (SSD), карты расширения PCIe и M.2 (преемник mSATA). .
Архитектурно логика NVMe физически хранится внутри и выполняется микросхемой контроллера NVMe, которая физически совмещена с носителем данных (обычно SSD). Изменения версии NVMe (например, с 1.3 на 1.4) включаются в носитель данных и не влияют на компоненты, совместимые с интерфейсом PCIe, такие как материнские платы и процессоры.
Различия во внешнем виде между SATA и NVME Источник изображения: официальный сайт Kingston
Протокол NVMe основан на протоколе PCIe и обеспечивает высокоскоростную передачу данных между хостом NVMe и SSD-накопителем NVMe. Простая архитектура, реализованная FPGA, выглядит следующим образом:
FPGA осуществляет управление NVME (см. водяной знак для источника изображения)
Ниже представлены несколько реализаций протокола NVME с открытым исходным кодом.
❝https://github.com/Cosmos-OpenSSD/Cosmos-plus-OpenSSD ❞
❝https://github.com/giuseppedongiovanni/nvme_comp_storage ❞
История развития OpenSSD такова:
Проект nvme_comp_storage — это система хранения данных на базе OpenSSD. Подробная архитектура выглядит следующим образом:
Оба проекта имеют исключительно подробную документацию, ссылка на которую приведена ниже:
❝https://github.com/Cosmos-OpenSSD/Cosmos-plus-OpenSSD/tree/master/doc ❞
❝https://github.com/giuseppedongiovanni/nvme_comp_storage/blob/master/Project_Documentation.pdf ❞
Среди них у OpenSSD есть официальный сайт. На момент публикации этой статьи доступ к официальному сайту ограничен~.
❝https://github.com/antmicro/nvme-verilog-pcie ❞
❝https://github.com/antmicro/openssd-nvme ❞
Этот проект аналогичен вышеуказанному проекту,Разница лишь в том, что весь код в этом проекте от нижнего уровня PCIe приезжать до верхнего уровня написан мной (в проекте PCIe есть достоинство),Проекты, которые не хотят полагаться на официальную интеллектуальную собственность,Этот проект имеет большое справочное значение.
Неординарный проект этого президента не будет описываться подробно.
❝https://github.com/mcrl/NVMe ❞
Этот проект основан на контроллере NVME AMD-XILINX FPGA XDMA. Подробная структура файла выглядит следующим образом:
NVMe/
├── hw/ (RTL codes)
│ ├── COMSTRAINTS/ (Constraints : Board connections)
│ ├── IP/ (IPs : ILA, XDMA IP, Board design)
│ ├── RTL/ (NVMe Hardware Driver RTL codes)
│ ├── scripts/
│ ├── SIM/
│ └── SYNTH/ (NVMe Hardware Driver Project directories)
├── sw/ (NVMe suFile Library)
├── SIM/
├── README.md
├── LICENSE
└── CMakeLists.txt
❝https://github.com/FDU-ME-ARC/NVMeCHA ❞
NVMeCHA — это контроллер NVMe со сверхнизкой задержкой и высокой пропускной способностью с высокопараллельной, конвейерной и масштабируемой архитектурой, включающей контроллер управления и несколько контроллеров ввода-вывода с полной аппаратной автоматизацией. Контроллер управления представляет собой совместную программно-аппаратную разработку, в которой сложная обработка команд управления NVMe управляется программным обеспечением, а передача данных через PCIe осуществляется аппаратно. Эта гибридная архитектура сочетает гибкость программного обеспечения с эффективностью оборудования, сокращая ресурсы ЦП и повышая производительность. Контроллер ввода-вывода имеет высокопараллельную и конвейерную аппаратную архитектуру, позволяющую обрабатывать множество команд ввода-вывода NVMe параллельно без какого-либо вмешательства программного обеспечения. Каждый контроллер ввода-вывода соответствует паре очередей ввода-вывода NVMe.
Проект проверяется на плате Xilinx KCU105 FPGA, которая подключается к компьютеру через интерфейс PCIe gen3 x8. По оценкам с помощью инструмента тестирования SPDK-Perf, максимальная пропускная способность чтения и записи контроллера NVMe может достигать 7,0 ГБ/с, что составляет 89% теоретической пропускной способности PCIe. Максимальная пропускная способность чтения/записи 4 КБ может достигать 1,7 миллиона операций ввода-вывода в секунду (MIOPS). Средняя задержка чтения/записи для размера 4 КБ составляет всего 2,4 мкс/3,2 мкс.
В рамках этого проекта также публикуется статья: Транзакции IEEE по автоматизированному проектированию интегральных схем и систем, номер документа: 10.1109/TCAD.2021.3088784.
❝https://github.com/DUNE/pl-nvme ❞
❝https://github.com/yu-zou/DirectNVM ❞
Этот проект похож на приведенный выше проект, но производительность не такая высокая, как у вышеупомянутой архитектуры.
Проект содержит исходный код системы Dune NvmeStorage, а также простую среду тестирования NVMe, которая позволяет проверять интерфейс с использованием низкоуровневых FPGA Xilinx.
Содержит исходный код FPGA, среду моделирования или прошивку Nvme test FPGA, а также хост-программу nvme_test.
Поскольку часть NVME по сути тесно связана с FPGA PCIe, она, по сути, появляется одновременно с проектом PCIe. Тем, кто хочет реализовать ее снизу, настоятельно рекомендуется проект antmicro.