В одной из предыдущих публикаций мы уже рассказывали о концепции зонального хранения данных и о том, какие преимущества обеспечивает эта технология. Но насколько готова ваша 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 — зональное пространство имен).
Хронологию перечисленных изменений легко проследить на представленной ниже схеме.
Учитывая сказанное выше, при выборе операционной системы следует отдавать предпочтение дистрибутиву, использующему последнюю стабильную версию ядра, поскольку она будет включать в себя все имеющиеся функции и инструменты для работы с зональными блочными устройствами, а также содержать исправления всех проблем и ошибок, известных на момент релиза. Если же вы планируете использовать LTS-версии Linux, то оптимальным выбором для вас станут дистрибутивы операционных систем на базе ядер 4.14, 4.19 и 5.4, так как к ним будут гарантированно применены бэкпорты всех патчей, выпущенных для основной, разрабатываемой в настоящий момент ревизии ядра.
Поддерживаемые дистрибутивы Linux
Предлагаем вашему вниманию сравнительные таблицы, которые помогут оценить уровень поддержки зональных блочных устройств в различных Linux-дистрибутивах, поставляемых с предварительно скомпилированными двоичными ядрами.
Fedora
Fedora — операционная система, разрабатываемая сообществом Fedora Project под эгидой Red Hat. Впервые поддержку интерфейса ZBD данный дистрибутив получил в версии 26. Начиная с 27-й ревизии Fedora также включает в себя dm-zoned, скомпилированный как предварительно загружаемый модуль ядра. Последняя на сегодняшний день стабильная версия Fedora 33 обзавелась поддержкой набора команд NVMe ZNS.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
||
ZBD |
dm-zoned |
ZNS |
||
Fedora 26 (EOL) |
4.11 |
Да |
Нет |
Нет |
Fedora 27 (EOL) |
4.13 |
Да |
Да |
Нет |
Fedora 28 |
4.16 |
Да |
Да |
Нет |
Fedora 29 |
4.18 |
Да |
Да |
Нет |
Fedora 30 |
5.0 |
Да |
Да |
Нет |
Fedora 31 |
5.3 |
Да |
Да |
Нет |
Fedora 32 |
5.6 |
Да |
Да |
Нет |
Fedora 33 |
5.8 |
Да |
Да |
Да |
Debian
Debian — одна из первых Unix-подобных операционных систем, базирующихся на ядре Linux, оказавшая значительное влияние на развитие этого типа ОС в целом. Поддержка зональных блочных устройств появилась в данном дистрибутиве начиная с 10-й версии, получившей кодовое имя Buster.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
Debian 9 (Stretch) |
4.9 |
Нет |
Нет |
Debian 10 (Buster) |
4.19 |
Да |
Да |
Ubuntu
Ubuntu — один из самых популярных бесплатных дистрибутивов Linux, код которого был изначально основан на Debian. Новые стабильные версии операционной системы выходят с периодичностью в 6 месяцев, а выпуски с долгосрочной поддержкой (LTS) — каждые два года. Впервые возможность работы с зональными блочными устройствами через ZBD была реализована в версии 17.04 Zesty Zapus с переходом на ядро 4.10, а уже в следующем выпуске была добавлена поддержка dm-zoned.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
12.04 LTS (Precise Pangolin) |
3.2 |
Нет |
Нет |
14.04 LTS (Trusty Tahr) |
3.13 |
Нет |
Нет |
16.04 LTS (Xenial Xerus) |
4.4 |
Нет |
Нет |
17.04 (Zesty Zapus) |
4.10 |
Да |
Нет |
17.10 (Artful Aardvark) |
4.13 |
Да |
Да |
18.04 LTS (Bionic Beaver) |
4.15 |
Да |
Да |
18.10 (Cosmic Cuttlefish) |
4.18 |
Да |
Да |
19.04 (Disco Dingo) |
5.0 |
Да |
Да |
19.10 (Eoan Ermine) |
5.3 |
Да |
Да |
20.04 LTS (Focal Fossa) |
5.4 |
Да |
Да |
20.10 (Groovy Gorilla) |
5.8 |
Да |
Да |
Red Hat Enterprise Linux
Red Hat Enterprise Linux — операционная система от компании Red Hat, ориентированная на корпоративных пользователей. Ее отличительными особенностями являются расширенная коммерческая поддержка (до 10 лет с возможностью продления до 13 лет) и высокая стабильность работы, расплатой за которую являются крайне редкие глобальные обновления: даже наиболее актуальный на данный момент дистрибутив 8.3 базируется на ядре 4.180-240.
Хотя эта версия уже поддерживает ZBD и имеет в своем составе dm-zoned, в RHEL соответствующие опции по умолчанию отключены, поэтому работать с зональными устройствами «из коробки» не получится — ядро придется предварительно перекомпилировать.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
RHEL 8 |
4.180-80 |
Нет |
Нет |
RHEL 8.1 |
4.180-147 |
Нет |
Нет |
RHEL 8.2 |
4.180-193 |
Нет |
Нет |
RHEL 8.3 |
4.180-240 |
Нет |
Нет |
Что же касается RHEL 6 и 7, то, поскольку перечисленные выпуски были основаны на ядрах 2.6.32 и 3.10 соответственно, они не способны корректно работать с зональными устройствами хранения данных.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
RHEL 6.0 |
2.6.32-71 |
Нет |
Нет |
RHEL 6.1 |
2.6.32-131 |
Нет |
Нет |
RHEL 6.2 |
2.6.32-220 |
Нет |
Нет |
RHEL 6.3 |
2.6.32-279 |
Нет |
Нет |
RHEL 6.4 |
2.6.32-358 |
Нет |
Нет |
RHEL 6.5 |
2.6.32-431 |
Нет |
Нет |
RHEL 6.6 |
2.6.32-504 |
Нет |
Нет |
RHEL 6.7 |
2.6.32-573 |
Нет |
Нет |
RHEL 6.8 |
2.6.32-642 |
Нет |
Нет |
RHEL 6.9 |
2.6.32-696 |
Нет |
Нет |
RHEL 6.10 |
2.6.32-754 |
Нет |
Нет |
RHEL 6 ELS+ |
2.6.32-754 |
Нет |
Нет |
RHEL 7.0 |
3.10.0-123 |
Нет |
Нет |
RHEL 7.1 |
3.10.0-229 |
Нет |
Нет |
RHEL 7.2 |
3.10.0-327 |
Нет |
Нет |
RHEL 7.3 |
3.10.0-514 |
Нет |
Нет |
RHEL 7.4 |
3.10.0-693 |
Нет |
Нет |
RHEL 7.5 |
3.10.0-862 |
Нет |
Нет |
RHEL 7.6 |
3.10.0-957 |
Нет |
Нет |
RHEL 7.7 |
3.10.0-1062 |
Нет |
Нет |
RHEL 7.8 |
3.10.0-1127 |
Нет |
Нет |
RHEL 7.9 |
3.10.0-1160 |
Нет |
Нет |
CentOS
CentOS — операционная система, разрабатываемая сообществом на основе исходных кодов Red Hat Enterprise Linux. Нумерации дистрибутивов CentOS и RHEL, равно как и возможности соответствующих выпусков операционных систем, на 100% совпадают. Как и в Red Hat Enterprise Linux, поддержка зональных блочных устройств появилась в 8-й версии CentOS, однако для активации необходимых опций ядро придется самостоятельно перекомпилировать.
SUSE Linux Enterprise Server
SUSE Linux Enterprise Server (SLES) — операционная система, ориентированная на корпоративных пользователей, которую разработала немецкая компания SUSE на базе одноименного дистрибутива. Основные версии SLES выходят с интервалом 2–3 года, тогда как пакеты обновлений выпускаются примерно каждые 12 месяцев. Полноценная поддержка зональных блочных устройств была добавлена в SUSE Linux Enterprise Server начиная с версии 12.4.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
11.3 |
3.0.76 |
Нет |
Нет |
11.4 |
3.0.101 |
Нет |
Нет |
12.0 |
3.12 |
Нет |
Нет |
12.1 |
3.12 |
Нет |
Нет |
12.2 |
4.4 |
Нет |
Нет |
12.3 |
4.4 |
Нет |
Нет |
12.4 |
4.12 |
Да |
Да |
15 |
4.12 |
Да |
Да |
15.1 |
4.12.14 |
Да |
Да |
15.2 |
5.3.18 |
Да |
Да |
openSUSE
openSUSE (ранее — SUSE Linux и SuSE Professional) — популярный дистрибутив Linux, разработка которого спонсируется SUSE Linux GmbH. В основе концепции openSUSE лежит создание удобных инструментов с открытым исходным кодом для разработчиков программного обеспечения и системных администраторов.
openSUSE получила поддержку интерфейса ZBD, необходимого для работы с зональными блочными хранилищами, начиная с версии Leap 15.0, а с переходом на ядро 5.3 в сборке Leap 15.2 к ней добавился dm-zoned.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
Leap 15.0 |
4.12 |
Да |
Нет |
Leap 15.1 |
4.12 |
Да |
Нет |
Leap 15.2 |
5.3 |
Да |
Да |
Tumbleweed |
5.9+ |
Да |
Да |
Поддерживает ли ваша операционная система устройства зонального хранения данных?
Как сказано выше, интерфейс для работы с зональными блочными устройствами хранения данных (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
Теперь вы можете быть уверены в том, что используемая вами операционная система сможет адекватно взаимодействовать с зональными устройствами хранения данных.