Namespace — пространство имен. Это одна из ключевых технологий NVMe интерфейса для управления и организации NVMe накопителей в системе.
Multi-path I/O — позволяет организовать несколько независимых путей доступа к накопителю.
Понятия Namespace и Multi-path I/O появились в 2012 году в спецификации NVMe 1.1.
https://nvmexpress.org/base-nvm-express-part-one/
Пространство имен NVMe — это том хранения, организованный в логические блоки. Для хранения пространств имен выделяется некоторая область энергонезависимой памяти. В протоколе предусмотрена тонкая настройка процессов выделения и освобождения памяти, поэтому область энергонезависимой памяти для пространства имен может быть меньше, чем размер пространства имен.
С каждым пространством имен контроллера (NS) связан идентификатор пространства имен (NSID), который используется в каждой команде контроллера.
Пространство имен может принадлежать одному хост-контроллеру (private namespace, частное пространство имен) или нескольким контроллерам (shared namespace, общее пространство имен).
Хост-контроллер определяет, является ли пространство имен частным или общим по значению полей «Namespace Multi-path I/O» и «Namespace Sharing Capabilities (NMIC)» в структуре данных идентификаторов пространства имен (Identify Namespace).
Пространства имен можно создавать и удалять с помощью команд управления. Вновь созданное пространство имен можно присоединить к уже существующему.
Многопутевой ввод / вывод (Multi-path I/O) позволяет одному хосту иметь доступ к пространству имен двум или более полностью независимым путям PCI Express.
Совместное использование пространства имен дает возможность для двух или более хостов получать доступ к общему общему пространству имен с использованием различных контроллеров NVM Express.
Для многопутевого ввода-вывода и совместного использования пространства имен необходимо, чтобы подсистема NVM содержала два или более контроллеров. Параллельный доступ к общему пространству имен двумя или более хостами требует координации между хостами. Процедура, используемая для координации этих хостов, выходит за рамки спецификации NVMe.
На Рис.1 показана подсистема NVM, которая содержит один контроллер NVM Express и один порт PCI Express. Поскольку это устройство с одной функцией PCI Express, контроллер NVM Express должен быть связан с функцией 0 PCI. Контроллер может поддерживать несколько пространств имен. Контроллер на рисунке 1 поддерживает два пространства имен, обозначенные NS A и NS B. С каждым пространством имен контроллера связан идентификатор пространства имен, обозначенные как NSID 1 и NSID 2, которые используются контроллером для ссылки на определенное пространство имен. Идентификатор пространства имен отличается от самого пространства имен и является дескриптором, который хост и контроллер используют для указания конкретного пространства имен в команде. Отображение идентификаторов пространства имен контроллера в пространства имен выходит за рамки спецификации NVMe. В этом примере ID пространства имен 1 связан с пространством имен A, а ID 2 пространства имен связан с пространством имен B. Оба пространства имен являются частными для контроллера, и эта конфигурация не поддерживает ни многопутевой ввод-вывод, ни совместное использование пространства имен.
Рис.1 Показана подсистема NVM, которая содержит один контроллер NVM Express и один порт PCI Express.
На Рис.2 показана многофункциональная подсистема NVM с одним портом PCI Express, содержащим два контроллера, один контроллер связан с функцией PCI 0, а другой контроллер — с функцией PCI 1. Каждый контроллер поддерживает одно частное пространство имен и доступ к общему пространству имен. B. Идентификатор пространства имен должен быть одинаковым во всех контроллерах, которые имеют доступ к общему пространству имен. В этом примере оба контроллера используют идентификатор пространства имен 2 для доступа к общему пространству имен B.
Рис.2 Подсистема NVM с одним портом PCI Express, содержащим два контроллера
Два порта, показанные на рисунке 3, могут быть связаны с одним и тем же корневым комплексом или с разными корневыми комплексами и могут использоваться для реализации как для многопутевых архитектур ввода-вывода, так и совместного использования ввода-вывода. Архитектурные аспекты системного уровня и использование нескольких портов в матрице PCI Express выходят за рамки спецификации NVMe.
Рис.3 Подсистема NVM с двумя контроллерами, подключенными к двум различным портам.
Общее пространство имен и мультипутевой доступ к накопителю позволяют вычислительному комплексу использовать весь потенциал NVMe накопителей как для частного, так и совместного доступа.
Механизмы реализации этого функционала заложены в спецификацию NVMe, но процедуры управления являются внешними по отношению к протоколу, то есть — реализуются программным обеспечением конкретных производителей.