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

d4h6thdoqdb9pcqqbaopfpcvu2e.png

В одной из предыдущих публикаций мы уже рассказывали о концепции зонального хранения данных и о том, какие преимущества обеспечивает эта технология. Но насколько готова ваша IT-инфраструктура к ее внедрению? Хотя работа над поддержкой устройств зонального хранения в операционных системах на базе Linux началась еще в 2014 году, некоторые дистрибутивы и по сей день оказываются неспособны полноценно работать с такими накопителями. Чтобы вам было проще сориентироваться, мы подготовили сегодняшний материал, в котором подробно рассмотрены особенности имплементации зонального хранения данных в различных версиях ядер и популярных дистрибутивах Linux.

Рекомендуемые версии ядер Linux


Впервые поддержка зональных блочных устройств хранения данных появилась в ядре Linux версии 4.10. Первоначально таковая была ограничена пользовательским интерфейсом ZBD (Zoned Block Device) на уровне блоков, возможностью управления очередью последовательной записи на уровне SCSI и нативной поддержкой файловой системы F2FS. В последующих версиях ядер появились дополнительные функции и инструменты, призванные оптимизировать работу с устройствами зонального хранения данных:
  • 4.13.0 — добавлен маппер зональных блочных устройств dm-zoned;
  • 4.16.0 — внедрена поддержка блочной инфраструктуры с несколькими очередями;
  • 5.6.0 — добавлена поддержка файловой системы zonefs, позволяющей работать с отдельными зонами зональных блочных устройств как с обычными файлами;
  • 5.8.0 — представлен общий интерфейс блочного уровня, поддерживающий операции записи Zone Append (добавление зоны); появилась возможность эмуляции этих операций на уровне SCSI с помощью обычных команд записи;
  • 5.9 — добавлена поддержка набора команд NVMe ZNS (Zoned Name Spaces — зональное пространство имен).

Хронологию перечисленных изменений легко проследить на представленной ниже схеме.
4nkmo9m1yq6iduddhoc-j7osp6a.png

Учитывая сказанное выше, при выборе операционной системы следует отдавать предпочтение дистрибутиву, использующему последнюю стабильную версию ядра, поскольку она будет включать в себя все имеющиеся функции и инструменты для работы с зональными блочными устройствами, а также содержать исправления всех проблем и ошибок, известных на момент релиза. Если же вы планируете использовать LTS-версии Linux, то оптимальным выбором для вас станут дистрибутивы операционных систем на базе ядер 4.14, 4.19 и 5.4, так как к ним будут гарантированно применены бэкпорты всех патчей, выпущенных для основной, разрабатываемой в настоящий момент ревизии ядра.

Поддерживаемые дистрибутивы Linux


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

Fedora


xhk6xnujcdh_sjfgmenthyblp2g.png

Fedora — операционная система, разрабатываемая сообществом Fedora Project под эгидой Red Hat. Впервые поддержку интерфейса ZBD данный дистрибутив получил в версии 26. Начиная с 27-й ревизии Fedora также включает в себя dm-zoned, скомпилированный как предварительно загружаемый модуль ядра. Последняя на сегодняшний день стабильная версия Fedora 33 обзавелась поддержкой набора команд NVMe ZNS.

Debian


gqnxdsuyxlb607gv8k5moqmexfa.png

Debian — одна из первых Unix-подобных операционных систем, базирующихся на ядре Linux, оказавшая значительное влияние на развитие этого типа ОС в целом. Поддержка зональных блочных устройств появилась в данном дистрибутиве начиная с 10-й версии, получившей кодовое имя Buster.

Ubuntu


g1z-yg2dq5y7jvvfv7oojezobti.png

Ubuntu — один из самых популярных бесплатных дистрибутивов Linux, код которого был изначально основан на Debian. Новые стабильные версии операционной системы выходят с периодичностью в 6 месяцев, а выпуски с долгосрочной поддержкой (LTS) — каждые два года. Впервые возможность работы с зональными блочными устройствами через ZBD была реализована в версии 17.04 Zesty Zapus с переходом на ядро 4.10, а уже в следующем выпуске была добавлена поддержка dm-zoned.

Red Hat Enterprise Linux


tf3yp635z7_v5i_axrkmsvcjwbs.png

Red Hat Enterprise Linux — операционная система от компании Red Hat, ориентированная на корпоративных пользователей. Ее отличительными особенностями являются расширенная коммерческая поддержка (до 10 лет с возможностью продления до 13 лет) и высокая стабильность работы, расплатой за которую являются крайне редкие глобальные обновления: даже наиболее актуальный на данный момент дистрибутив 8.3 базируется на ядре 4.180–240.

Хотя эта версия уже поддерживает ZBD и имеет в своем составе dm-zoned, в RHEL соответствующие опции по умолчанию отключены, поэтому работать с зональными устройствами «из коробки» не получится — ядро придется предварительно перекомпилировать.


Что же касается RHEL 6 и 7, то, поскольку перечисленные выпуски были основаны на ядрах 2.6.32 и 3.10 соответственно, они не способны корректно работать с зональными устройствами хранения данных.

CentOS


atftwfgsoipyg4zyswerbx3wnds.png

CentOS — операционная система, разрабатываемая сообществом на основе исходных кодов Red Hat Enterprise Linux. Нумерации дистрибутивов CentOS и RHEL, равно как и возможности соответствующих выпусков операционных систем, на 100% совпадают. Как и в Red Hat Enterprise Linux, поддержка зональных блочных устройств появилась в 8-й версии CentOS, однако для активации необходимых опций ядро придется самостоятельно перекомпилировать.

SUSE Linux Enterprise Server


kdu2ncycmlsktetlqxnkhibxwp4.png

SUSE Linux Enterprise Server (SLES) — операционная система, ориентированная на корпоративных пользователей, которую разработала немецкая компания SUSE на базе одноименного дистрибутива. Основные версии SLES выходят с интервалом 2–3 года, тогда как пакеты обновлений выпускаются примерно каждые 12 месяцев. Полноценная поддержка зональных блочных устройств была добавлена в SUSE Linux Enterprise Server начиная с версии 12.4.

openSUSE


jczfzmglf1sftwoeqnvxwghce9g.png

openSUSE (ранее — SUSE Linux и SuSE Professional) — популярный дистрибутив Linux, разработка которого спонсируется SUSE Linux GmbH. В основе концепции openSUSE лежит создание удобных инструментов с открытым исходным кодом для разработчиков программного обеспечения и системных администраторов.

openSUSE получила поддержку интерфейса ZBD, необходимого для работы с зональными блочными хранилищами, начиная с версии Leap 15.0, а с переходом на ядро 5.3 в сборке Leap 15.2 к ней добавился dm-zoned.


Поддерживает ли ваша операционная система устройства зонального хранения данных?


Как сказано выше, интерфейс для работы с зональными блочными устройствами хранения данных (Zoned Block Device, ZBD), поддерживающий стандарты T10 ZBC и T13 ZAC, был добавлен в ядро Linux начиная с версии 4.10, поэтому первое, что необходимо сделать, — проверить текущую версию ядра с помощью команды терминала uname. Например, при использовании дистрибутива Fedora 29 вывод данной команды будет выглядеть следующим образом:
uname -r
5.0.13-200.fc29.x86_64

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

Чтобы проверить, включена ли данная опция, можно обратиться напрямую к файлу конфигурации операционной системы, расположенному в директории /boot или /, либо воспользоваться командой:

cat /boot/config-`uname -r` | grep CONFIG_BLK_DEV_ZONED

или же
cat /lib/modules/`uname -r`/config | grep CONFIG_BLK_DEV_ZONED

Для ядер, экспортирующих параметры конфигурации через виртуальную файловую систему proc, можно использовать команды:
modprobe configs
cat /proc/config.gz | gunzip | grep CONFIG_BLK_DEV_ZONED

или
modprobe configs
zcat /proc/config.gz | grep CONFIG_BLK_DEV_ZONED

Если соответствующая опция активна, вы увидите следующий вывод:
CONFIG_BLK_DEV_ZONED=y

В случае же, если в терминале отобразится
CONFIG_BLK_DEV_ZONED=n

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

От параметра конфигурации CONFIG_BLK_DEV_ZONED зависит поддержка эмуляции зональных блочных устройств на уровне драйвера null_blk, поддержка подсистемы SCSI для накопителей ZBC и ZAC SMR, а также доступ к набору команд зонального пространства имен, необходимых для работы с NVMe SSD. Что же касается управления порядком команд записи, то здесь все оказывается немного сложнее.

Изначально (в ядрах с 4.10 по 4.15 включительно) данная функция была реализована на уровне ядра. Однако начиная с версии 4.16 управление порядком команд записи было передано планировщикам ввода-вывода блочного уровня deadline (работает с единственной очередью команд) и mq-deadline (реализация deadline с использованием blk-mq, поддерживает множественные очереди), использование которых стало обязательным для корректной работы зональных устройств хранения. Позднее, с релизом ядра 5.0, поддержка deadline была полностью упразднена и планировщик mq-deadline стал основным решением для работы с зональными устройствами хранения.

Таким образом, если вы используете операционную систему, базирующуюся на ядре 4.16 или более позднем, вам необходимо убедиться в том, что в качестве планировщика ввода-вывода выбран deadline или mq-deadline. Для этого достаточно воспользоваться следующей командой:

cat /sys/block/sdb/queue/scheduler

[mq-deadline] kyber bfq none

Если по умолчанию используется другой планировщик, его можно сменить на нужный, введя команду:
echo deadline > /sys/block/sdb/queue/scheduler

или
echo mq-deadline > /sys/block/sdb/queue/scheduler

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

© Habrahabr.ru