Компания Oracle опубликовала стабильные выпуски дистрибутива Oracle Linux 9 и ядра Unbreakable Enterprise Kernel 7 (UEK R7), позиционируемого для использования в дистрибутиве Oracle Linux в качестве альтернативы штатному пакету с ядром из Red Hat Enterprise Linux. Дистрибутив Oracle Linux 9 создан на основе пакетной базы Red Hat Enterprise Linux 9 и полностью бинарно совместим с ней.
Для загрузки без ограничений предложены установочные iso-образы, размером 8.6 ГБ и 840 МБ, подготовленные для архитектур x86_64 и ARM64 (aarch64). Для Oracle Linux 9 открыт неограниченный и бесплатный доступ к yum-репозиторию с бинарными обновлениями пакетов с устранением ошибок (errata) и проблем безопасности. Для загрузки также подготовлены отдельно поддерживаемые репозитории с наборами пакетов Application Stream и CodeReady Builder.
Помимо пакета с ядром из состава RHEL (на базе ядра 5.14) в Oracle Linux предложено собственное ядро Unbreakable Enterprise Kernel 7, основанное на ядре Linux 5.15 и оптимизированное для работы с промышленным программным обеспечением и оборудованием Oracle. Исходные тексты ядра, включая разбивку на отдельные патчи, доступны в публичном Git-репозитории Oracle. Ядро Unbreakable Enterprise Kernel устанавливается по умолчанию, позиционируется в качестве альтернативы штатному пакету с ядром RHEL и предоставляет ряд расширенных возможностей, таких как интеграция DTrace и улучшенная поддержка Btrfs. Кроме дополнительного ядра по функциональности выпуски Oracle Linux 9 и RHEL 9 полностью идентичны (список изменений можно посмотреть в анонсе RHEL9).
Ключевые новшества в ядре Unbreakable Enterprise Kernel 7:
- Улучшена поддержка архитектуры Aarch64. Размер страниц памяти на 64-разрялдных системах ARM по умолчанию уменьшен с 64 КБ до 4 КБ, что лучше сочетается с объёмами памяти и видами нагрузки, типичными для ARM-систем.
- Продолжена поставка системы динамической отладки DTrace 2.0, которая переведена на использование подсистемы ядра eBPF. DTrace 2.0 работает поверх eBPF, по аналогии с тем, как поверх eBPF работают существующие в Linux инструменты трассировки.
- Расширены возможности ФС Btrfs. В Btrfs добавлена асинхронная реализация операции DISCARD для пометки освобождённых блоков, которые уже можно не хранить физически. Асинхронная реализация позволяет не ждать завершения DISCARD накопителем и выполнять данную операцию в фоне. Добавлены новые опции монтирования для упрощения восстановления данных с повреждённой ФС: “rescue=ignorebadroots” для монтирования, несмотря на повреждения некоторых корневых деревьев (extent, uuid, data reloc, device, csum, free space), “rescue=ignoredatacsums” для отключения проверки контрольных сумм для данных и “rescue=all” для одновременного включения режимов ‘ignorebadroots’, ‘ignoredatacsums’ и ‘nologreplay’. Внесены существенные оптимизации производительности, связанные с выполнением операций fsync(). Добавлена поддержка fs-verity (проверка подлинности и целостности файлов) и сопоставления идентификаторов пользователей.
- В XFS реализована поддержка операций DAX для прямого доступа к ФС в обход страничного кэша для исключения двойного кэширования. Добавлены изменения, решающие проблемы с переполнением 32-разрядного типа данных time_t в 2038 году, в том числе предложены новые опции монтирования bigtime и inobtcount.
- Внесены улучшения в файловую систему OCFS2 (Oracle Cluster File System).
- Добавлена файловая система ZoneFS, упрощающая низкоуровневую работу с зонированными устройствами хранения. Под зонированными накопителями подразумеваются устройства на жёстких магнитных дисках или NVMe SSD, пространство для хранения в которых разбито на зоны, составляющие группы блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков. ФС ZoneFS связывает каждую зону в накопителе с отдельным файлом, который можно использовать для хранения данных в raw-режиме без манипуляции на уровне секторов и блоков, т.е. позволяет приложениям использовать файловый API вместо прямого обращения к блочному устройству при помощи ioctl.
- Стабилизирована поддержка протокола VPN WireGuard.
- Расширены возможности подсистемы eBPF. Реализован механизм CO-RE (Compile Once – Run Everywhere), который решает проблему с переносимостью скомпилированных eBPF-программ и позволяе собирать код eBPF-программ только один раз и использовать специальный универсальный загрузчик, адаптирующий загружаемую программу к текущему ядру и типам BTF (BPF Type Format). Добавлен механизм “BPF trampoline”, позволяющий практически свести к нулю накладные расходы при передаче вызовов между ядром и программами BPF. Предоставлены возможности прямого обращения к функциональности ядра из BPF-программ и приостановки обработчика.
- Интегрирован детектор расщеплённых блокировок (“split lock”), возникающих при доступе к невыровненным данным в памяти из-за того, что при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Ядро может на лету выявлять подобные блокировки, которые приводят к значительному падению производительности, и выводить предупреждения или отправлять сигнал SIGBUS приложению, вызвавшему блокировку.
- Обеспечена поддержка Multipath TCP (MPTCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
- В планировщике задач реализован режим планирования SCHED_CORE, позволяющий управлять тем, какие процессы могут совместно выполнятся на одном ядре CPU. Каждому процессу может быть назначен cookie-индентификатор, определяющий область доверия между процессами (например, принадлежность одному пользователю или контейнеру). При организации выполнения кода планировщик может обеспечить совместное использование одного ядра CPU только для процессов, связанных с одним владельцем, что может использоваться для блокирования некоторых атак класса Spectre за счёт предотвращения выполнения в одном потоке SMT (Hyper Threading) заслуживающих и не заслуживающих доверия задач.
- Для cgroups реализован контроллер распределения памяти slab (slab memory controller), который примечателен переносом учёта slab с уровня страниц памяти на уровень объектов ядра, что даёт возможность совместно использовать slab-страницы в разных cgroup, вместо выделения отдельных кэшей slab для каждой cgroup. Предложенный подход позволяет повысить эффективность использования slab, на 30-45% сократить размер используемой для slab памяти, значительно уменьшить общее потребление памяти ядром и снизить фрагментацию памяти.
- Обеспечена поставка отладочных данных в формате CTF (Compact Type Format), обеспечивающем компактное хранение сведений о Си-типах, связях между функциями и отладочных символах.
- Прекращена поставка модуля DRBD (Distributed Replicated Block Device) и устройства /dev/raw (для прямого доступа к файлам следует использовать флаг O_DIRECT).