NVMe ZNS

Zoned Storage Initiative начала свое движение в июне 2019 года. Инициативная группа, которая активно поддерживается Western Digital, предложила новую пардигму инфраструктуры хранения, построенной на зонировнных устройствах (Zoned Storage Devices, ZSDs).

Экстремальные масштабы данных, с которыми приходится работать, породили запрос на эффективное управление и рациональное использование хранилищ, содержащих тысячи накопителей.
Технологии зонированных блочных устройств успешно решают поставленную задачу.
Зонирование сначала ввели для жестких дисков с черепичной записью SMR HDD.
Следующим этапом вводится поддержка зонирования SSD — NVMe ZNS (Zoned Name Space).

Принципы функционирования Zoned Storage Devices

Последовательная запись в пределах зоны вплоть до ее заполнения — ключевой принцип записи, поставленный во главу технологии зонирования. Именно упорядочение процесса записи придает в результате зонированному накопителю преимущества перед обычным. Процессы чтения, при этом, остаются практически неизменными.

Адресное пространство зонированного блочного накопителя делится на зоны. Зона объединяет группу логических блоков (LBA). В зонированном блочном устройстве каждая зона имеет атрибуты зоны и является одним из следующих типов зон:
обычная зона (conventional zone);
зона разрыва (gap zone). Этот тип присущ SMR HDD;
зона с указателем записи. Она может, в свою очередь, быть:
— зоной с предпочтительной последовательной записью (Sequential write preferred zone). Позволяет производить последовательную запись не с начального LBA зоны;
— зоной требующей последовательной записи (Sequential write required zone). Последовательная запись производится начиная с первого логического блока зоны;
— зоной требующей последовательной записи со смещением (Sequential or before required zone). Последовательная запись производится начиная с позиции равной или меньшей указателю записи.

Запись в зоны производится последовательно начиная с первого логического блока зоны. Каждая зона устройства имеет указатель позиции записи (write pointer), начиная с которой в зону допускается запись. Данные в зоне не могут быть произвольно перезаписаны. Единственный способ перезаписать уже записанную зону — сбросить указатель записи зоны, удалив все данные в зоне (zone reset, сброс зоны) и возобновить запись с начала зоны. Чтение данных происходит так же, как в традиционных устройствах хранения. Рисунок ниже иллюстрирует этот принцип.

Иллюстрация расположения зон в накопителе. Источник: https://zonedstorage.io

Зонированное хранилище возлагает на программное обеспечение хоста больше ответственности за управление размещением данных. Обработка начинается с отслеживания состояния каждой зоны. ZNS использует ту же концепцию возможных состояний зоны, которая используется для жестких дисков SMR, управляемых хостом.
Определены восемь возможных состояний зоны (Zone Condition):
— ZC1:Empty state. Зона пуста. Годная для записи зона, для которой указатель записи установлен на первый логический блок зоны.
— ZC2:Implicit_Open state. Неявно открытая зона. Зона, открытая командой записи. Может быть закрыта контроллером автоматически после операции записи.
— ZC3:Explicit_Open state. Явно открытая зона. Зона, открытая с помощью команды «открыть зону». Данные при этом не записываются. Может быть переведена в закрытое состояние командой «закрыть зону».
— ZC4:Closed state. Закрытая зона.
— ZC5:Full state. Полностью заполненная зона.
— ZC6:Read_Only state. В состояние «только чтение» зона может быть приведена контроллером из соображений надежности записи, когда износ ячеек памяти зоны близок к критическому.
— ZC7:Offline state. Выведенная из обращения зона.
— ZC8:Inactive. Неактивная зона.

Различия характеристик зон в различных состояниях показаны в следующей таблице:

Характеристики зоны
СостояниеУказатель записи
действующий
Открытая зона
доступна для
использования
Доступна для
чтения
Доступна для
записи
EmptyДа
Сброшен в начальную
позицию
НетДа
Для типа зоны с
предпочтительной
последовательной записью
Да,
при переводе
В статус
Implicit_Open
Implicit_OpenДаДаДаДа
Explicit_OpenДаДаДаДа
ClosedДаНетДаДа,
при переводе
В статус
Implicit_Open
FullНетНетДа
Read_OnlyНетНетДаНет
OfflineНетНетНетНет
InactiveНетНетДа
Для типа зоны с
предпочтительной
последовательной записью
Нет

Важное отличие явно и неявно открытых зон: если ZNS SSD работает на пределе количества открытых зон и все они открыты явным образом, любая попытка открыть новую зону будет неудачной. Однако, если некоторые из зон открыты неявно, то попытка открыть новую зону приведет к тому, что SSD закроет одну из этих неявно открытых зон.

Принципы записи в блоки вызывают ассоциации, не правда ли? Вы не ошиблись! Они напоминают процедуру в жестких дисках с черепичной записью (SMR HDD) и похожи на работу с блоками в флеш-накопителях (SSD). Неудивительно, что именно для этих устройств хранения в первую очередь адаптирована новая технология. Охватываются два слоя в пирамиде глобального хранилища — рабочие данные на быстрых SSD и архивные на емких недорогих SMR HDD.

Зонированные устройства хранения могут использовать различные технологий записи. Хранилище на жестких дисках с черепичной магнитной записью может использовать команды зонированного блока интерфейса SCSI (Zoned Block Commands, ZBC), стандартизованные T10/SAS и зонных команд ATA (Zoned Device ATA Command Set, ZAC), утвержденных T13/SATA. ZBC и ZAC позволяют использовать модель зонированного блочного хранилища.

В устройствах хранения на твердотельных дисках (SSD) также может быть реализован зонированный интерфейс для уменьшения излишней записи, уменьшения потребности устройства в DRAM и повышения качества обслуживания в масштабных системах.
Зонированное пространство имен NVMe (ZNS) — это техническое предложение комитета по стандартизации NVMe, добавляющее интерфейс зонированного хранилища к стандарту интерфейса NVMe.

Зонирование пространства имен в SMR HDD

По сути, в жестких дисках с черепичной записью механизм зонированного доступа лежит в основе, стандарт адаптировался в первую очередь под них. Поскольку запись на его поверхности производится с перекрытием, повторная запись в зону возможна только с начала зоны или точки окончания последней записи. Между зонами оставляется технологический зазор (см. рисунок ниже).

Расположение данных в дорожках традиционного HDD и в зонах SMR HDD. Источник: https://blog.westerndigital.com

Новые спецификации переносит непосредственное управление блоками из контроллера накопителя на хост-контроллер интерфейса. Это дает больше контроля системе и позволяет более тонко использовать ресурсы накопителей.

Вводятся три модели управления накопителем:

Хост-управляемая модель

Модель, управляемая хостом, не обеспечивает обратной совместимости с устаревшими стеками хранения хоста. Она делегирует управление ограничением последовательной записи SMR хосту. Ключевое отличие от накопителей, управляемых внутренним контроллером: управляемые хостом устройства не допускают никаких операций произвольной записи в зонах (только последовательная запись).

В модели, управляемой хостом, блоки устройств организованы в несколько зон от одной до многих тысяч. Есть два типа зон: зоны, требующие последовательной записи, и дополнительные обычные зоны. Обычные зоны, занимающие очень небольшой процент от общей емкости диска, используются для хранения метаданных. Зоны, требующие последовательной записи, составляют большую часть емкости накопителя, где устройство обеспечивает последовательность всех команд записи в каждой зоне. В модели с управляемым хостом поддерживаются команды произвольного чтения, которые работают практически так же, как в стандартных дисках.

Хост должен управлять всеми операциями записи, чтобы они выполнялись последовательно в определенной зоне, следуя указателю записи. Как только данные записываются в зону, указатель записи увеличивается, чтобы указать начальную точку следующей операции записи в этой зоне. Любая неупорядоченная запись, то есть операция записи, не начинающаяся в местоположении указателя записи зоны, заставит диск прервать операцию и пометить ошибку. Восстановление после такой ошибки является обязанностью управляющего программного обеспечения хоста. Такая последовательность действий позволяет управляемым хостом устройствам обеспечивать предсказуемую производительность.

Модель управляемая накопителем

SMR HDD управляемые собственными контроллерами дают обратную совместимость с интерфейсами и обеспечивают ограничения последовательной записи за счет внутреннего контроллера. При этом производительность системы будут зависеть от используемых приложений и рабочих нагрузок на накопитель.

Хост-ориентированная модель

Модель с поддержкой хоста сохраняет совместимость с устаревшими стеками хранения хоста и обратную совместимость с обычными дисками. В то же время, она предоставляет набор команд для хоста для жесткого управления обработкой операций записи на диск.

Как и в случае с управляемыми дисками, производительность дисков с поддержкой хоста при использовании в качестве обычных дисков будет зависеть от приложения и рабочей нагрузки.

Зонирование пространства имен в NVMe SSD

Для SSD проблема с освобождением блоков для записи стоит все более остро.
Первые SSD работали с имеющимися интерфейсами и внутренний контроллер накопителя с системой управления Flash Translation Layer (FTL) скрывал от системы все присущие флеш-накопителю особенности. Широкое внедрение SSD привело к разработке адекватного по скорости и задержкам интерфейса NVMe. Но заложенная в основу внутренней логики SSD блочная структура (точнее — управление ей) теперь становится тормозящим фактором, поскольку:
— сбор мусора для высвобождения блоков под дальнейшую запись вызывает эффект усиления записи (Write Amplification). Чтобы высвободить блок, частично занятый полезными данными, эти данные приходится временно записывать в другой блок (как правило, в специально отведенной для этого области, скрытой от пользователя) и затем, объединив их с подобными данными, переписать опять в рабочую область. Процесс вызывает многократную запись одних и тех же данных (отсюда и термин «усиление записи»), вызывая дополнительный износ флэш-носителя и сокращая срок службы SSD.
— под сбор мусора необходимо избыточное выделение ресурсов. В некоторых случаях область, необходимая для перемещения данных доходит до 28% от емкости накопителя.
— для преобразования логического уровня интерфейса в физический требуется область динамической памяти (DRAM) в составе контроллера накопителя. Объем ее пропорционален объему накопителя, составляется примерно из соотношения 1GB DRAM на каждый 1TB NAND.
— сборка мусора начинается в накопителе в непредсказуемые моменты времени, что приводит к непостоянству показателя QoS.

Обзор NVMe ZNS

Твердотельные накопители NVMe ZNS могут иметь несколько преимуществ по сравнению с обычными твердотельными накопителями NVMe:
— Снижение усиления записи на стороне устройства. Меньше служебных операций — больше пропускная способность и меньше задержки.
— Снижение избыточного выделения ресурсов на стороне устройства
— Снижение использования DRAM на стороне устройства
— Увеличение количества операций записи на диск.

Твердотельные накопители NVMe ZNS приобретают эти преимущества за счет предоставления набора зон в пространстве имен NVMe. Каждая зона требует последовательной записи и явного сброса, аналогично жестким дискам SMR.

Введение абстракции зоны позволяет устройству ZNS оптимизировать отображение логических блоков на физические носители. В накопителях на основе флэш-памяти зоны последовательной записи протокола ZNS приводятся в соответствие с организацией блоков на физическом уровне носителя. Контроллер устройства больше не должен управлять произвольной записью и, следовательно, может иметь более эффективную реализацию, которая обеспечивает некоторые или все вышеупомянутые преимущества.


Внутреннее размещение данных в обычных SSD и ZNS SSD

Резкое снижение производительности заполненного SSD — следствие негативного влияния процедуры сборки мусора. Рисунок ниже иллюстрирует сравнение производительности зонированного (ZNS SSD, голубая диаграмма) и традиционного (Conventional, желтая диаграмма) SSD. При заполнении накопителя на 50% традиционный накопитель может потерять до 3/4 производительности. Этот эффект исключен в зонированных SSD.

Снижение производительности SSD при его заполнении. Источник: https://blog.westerndigital.com/zns-ssd-ultrastar-dc-zn540-sampling/

Модель зонированного хранилища NVMe Zoned Namespace

Стандарт зонированного пространства имен разработан на основе модели зонированного хранилища, управляемого хостом. Он позволил реализовать стек хранилища хоста и приложения для одновременной поддержки как управляемых хостом жестких дисков SMR, так и твердотельных накопителей NVMe ZNS.

NVMe ZNS имеет ряд отличий, обусловленных особенностями флеш-накопителей.

Типы зон.
Зонированные пространства имен NVMe поддерживают только один тип зоны: зоны с последовательной записью. Однако устройство NVMe может предоставлять область записи с произвольным доступом как отдельное обычное пространство имен на том же контроллере.

Емкость зоны (Zone Capacity) и размер зоны (Zone Size).
Для «подгонки» размеров зоны к размеру стираемых блоков флеш-накопителя в спецификации зонированного пространства имен NVMe введена емкость зоны. Этот параметр не определен в стандартах SCSI ZBC и ATA ZAC для SMR HDD.
NVMe ZNS определяет размер зоны как общее количество логических блоков в зоне. Емкость зоны — это дополнительный атрибут для каждой зоны, который указывает количество используемых логических блоков начиная с первого логического блока. Емкость зоны всегда меньше или равна размеру зоны.
Облегчается преобразование номера логического блока в номер зоны, в то же время позволяя оптимизировать сопоставление емкости хранения зоны с характеристиками основного носителя. Для устройства на основе флэш-памяти, например, емкость зоны может быть согласована с размером стираемых блоков флэш-памяти.

На рисунке ниже показана концепция емкости зоны.

Иллюстрация концепции емкости зоны. Источник: https://zonedstorage.io

Активные зоны
Реализация контроллера обычно требует выделения внутренних ресурсов (например, буфера записи) для выполнения операций записи в зоны. Ограничения на общий объем ресурсов, доступных контроллеру, могут подразумевать ограничение на общее количество зон, которые могут одновременно находиться в неявно открытых или явных открытых условиях. Этот потенциальный предел максимального количества открытых зон аналогично определен в стандартах NVMe ZNS, SCSI ZBC и ATA ZAC.

NVMe ZNS определяет дополнительный предел количества зон, которые могут находиться в неявно открытых, явно открытых или закрытых состояниях. Любая зона с таким состоянием определяется как активная зона и соответствует любой зоне, которая записывается или была записана только частично. Контроллер устройства ZNS может наложить ограничение на максимальное количество активных зон. Этот предел всегда равен или превышает ограничение на максимальное количество открытых зон.
Этот новый предел накладывает новые ограничения на пользовательские приложения. Хотя максимальное количество открытых зон в пространстве имен ограничивает только количество зон, которые приложение может одновременно записывать, максимальное количество активных зон накладывает ограничение на количество зон, которые приложение может выбрать для хранения данных. Если достигнуто максимальное количество активных зон, приложение должно либо сбросить, либо завершить некоторые активные зоны, прежде чем сможет выбрать другие зоны для хранения данных.
Как и ограничение на максимальное количество открытых зон, ограничение на максимальное количество активных зон для пространства имен не влияет на операции чтения. Любая зона, которая не находится в автономном режиме, всегда доступна для чтения независимо от текущего количества открытых и активных зон.

Добавление зоны
Спецификации NVMe позволяют контроллеру устройства выполнять команды, присутствующие в нескольких очередях отправки, доступных в любом порядке. Это имеет значение для стека ввода-вывода хоста, а именно, даже если хост последовательно подает команды записи, направленные в зону, команды могут быть переупорядочены до того, как они будут обработаны, и нарушат требование последовательной записи, что приведет к ошибкам. Программное обеспечение хоста может избежать такой ошибки, ограничив количество невыполненных команд записи на зону до одной. Это потенциально может привести к снижению производительности, особенно для рабочих нагрузок, выполняющих в основном небольшие операции записи.
Чтобы избежать этой проблемы, в спецификации NVMe ZNS появилась новая команда Zone Append. Эта команда не определена стандартами SCSI ZBC и ATA ZAC. Команда добавления зоны — это операция записи, которая определяет первый логический блок зоны в качестве позиции записи. При выполнении команды контроллер устройства записывает данные в указанной зоне, но делает это в текущей позиции указателя записи зоны. Это изменение позиции записи происходит автоматически и фактическая позиция записи данных возвращается хосту через информацию о завершении команды. Этот механизм позволяет хосту одновременно выполнять несколько операций добавления зоны и разрешать устройству обрабатывать их в любом порядке.

Оптимизация зонированного SSD

В зависимости от базовой флеш-памяти, твердотельный накопитель ZNS может отображать каждый отдельный блок стирания как отдельную зону размером в несколько мегабайт. Это означало бы, что запись в одну зону ограничена скоростью записи одного кристалла флэш-памяти NAND. Для современной флэш-памяти TLC NAND скорость записи на один кристалл достигает примерно 82 МБ / с (Samsung V-NAND 6-го поколения), а для QLC скорость записи на один кристалл может быть ниже 10 МБ / с. На практике зонированные SSD накопители будут поддерживать зоны, которые объединяют множество блоков стирания на нескольких кристаллах и во всех каналах контроллера, так что последовательная запись (или чтения) в одну зону будут такими же быстрыми, как если бы они работали под обычным FTL-контроллером SSD.

Western Digital представил прототип SSD ZNS 512 ГБ. Демонстрация показала, что диск использует 2047 зон размером 256 МБ, но также поддерживает зоны размером 2 ГБ. В пределах одного зонального пространства имен все зоны будут использовать один и тот же размер зоны. Накопитель может поддерживать переформатирование пространства имен для изменения размера зоны или нескольких пространств имен с разными размерами зон.(Источник: https://www.anandtech.com)

Поддержка ОС

На рисунке показано высокоуровневое изображение структуры ядра Linux и того, как зонированные блочные устройства могут быть интегрированы вместе с унаследованными традиционными блочными устройствами. Поддержка в ядре Linux была введена посредством модификации некоторых существующих компонентов, введения новых интерфейсов, таких как интерфейс ZBD на блочном уровне, а также введения новых компонентов, таких как dm-zoned device mapper.

Поддержка ZNS накопителей ОС Linux. Источник: https://blog.westerndigital.com

Как показано на рисунке, существует множество способов, с помощью которых инфраструктура данных может использовать зонные блочные устройства. Например: использование унаследованной файловой системы с dm-zoned device mapper; использование файловой системы с собственной поддержкой ZBC; использование приложений, поддерживающих ZBD, которые напрямую взаимодействуют с зонными блочными устройствами через библиотеки пользовательского пространства, такие как libzbc и т. д.

На рисунке ниже представлена эволюция поддержки зонированных блочных устройств версиями ядра Linux.

Passthrough Access Support (SG Access) Поддержка отображения жестких дисков ZBC / ZAC, управляемых хостом, как узлов SCSI generic (SG)
Zoned Block Device Access и поддержка F2FS Поддержка зонированных блочных устройств уровня блочного ввода-вывода, добавленная в версию ядра 4.10, позволяет отображать управляемые хостом ZBC и ZAC-диски в виде файлов блочных устройств, аналогично обычным дискам.
Device Mapper и поддержка dm-zoned С версией ядра 4.13.0 в инфраструктуру сопоставления устройств была добавлена поддержка зонированных блочных устройств.
Block multi-queue и SCSI multi-queue В версии ядра 4.16.0 была добавлена поддержка блочной инфраструктуры с несколькими очередями.
zonefs В ядре 5.6.0 впервые была представлена файловая система zonefs, которая предоставляет зоны зонированного блочного устройства как обычные файлы. zonefs реализуется с использованием внутреннего интерфейса зонированных блочных устройств ядра, поддерживаются все типы зонированных блочных устройств (SCSI ZBC, ATA ZAC и NVMe ZNS).
Поддержка Zone Append Operation В ядре версии 5.8.0 представлен общий интерфейс блочного уровня для поддержки операций записи добавления зоны.
NVM Express Zoned Namespaces В версии ядра 5.9 добавлена поддержка набора команд NVMe ZNS. Это позволяет драйверу nvme работать с расширениями набора команд, необходимыми для обнаружения зонированных пространств имен, и регистрировать их на уровне блоков в качестве блочных устройств зоны, управляемой хостом. Этот выпуск ядра поддерживает только устройства, которые не реализуют никаких дополнительных характеристик зоны (ZOC)

Linux поддерживает только зонированные блочные устройства с постоянным размером зоны, равной двум LBA (логический адрес блока). Зонированные блочные устройства с конфигурацией зоны, которая не соответствует этим ограничениям, не будут отображаться как файл блочного устройства и будут доступны только для пользовательских приложений, использующих сквозной интерфейс. То есть файловые системы и средства отображения устройств не будут работать с устройством. Обратите внимание, что устройства могут выставлять емкость зоны, которая меньше размера зоны, а не степень 2. (источник: https://nvmexpress.org)


Материалы по теме:
https://nvmexpress.org/new-nvmetm-specification-defines-zoned-namespaces-zns-as-go-to-industry-technology/
https://zonedstorage.io/introduction/zns/
https://www.anandtech.com/show/15959/nvme-zoned-namespaces-explained
https://blog.westerndigital.com/what-is-zoned-storage-initiative/