Начало 2024 года приятное — вышел релиз ядра Linux 6.7. Как всегда, есть новости, изменения, кроме того, из ядра убрали устаревшие компоненты. Среди новинок можно отметить прекращение поддержки архитектуры Itanium, добавление ФС Bcachefs, а также поддержку futex в io_uring.
Что касается статистики, то в новом релизе сразу 18405 исправлений от 2066 разработчиков. Размер патча составляет 72 МБ (изменения затронули 13467 файлов, добавлено 906147 строк кода, удалено 341048 строк). Как всегда, больше всего изменений связанных с драйверами устройств, их около 45%/. Гораздо меньше — в обновлениях, которые имеют отношение к поддержке архитектур, сетевому стеку, файловым системам и внутренним подсистемам ядра — 14%, 13%, 5% и 3% соответственно. Подробности — под катом.
Оборудование и драйвера
- Обновился драйвер AMDGPU. Появилась поддержка GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 и DML2. Кроме того, при переключении видеорежима теперь нет мерцания.
- Для драйвера i915 добавлена поддержка чипов Intel Meteor Lake и добавлена начальная реализация Intel LunarLake (Xe 2).
- Еще одно важное обновление связано с тем, что в модуль ядра Nouveau добавлена начальная поддержка прошивок GSP-RM. Они применяются в в GPU NVIDIA RTX 20+ для выноса операций инициализации и управления GPU на сторону отдельного микроконтроллера GSP (GPU System Processor). Теперь драйвер может работать не посредством прямого программирования операций взаимодействия с «железом», а через прошивку. В результате добавление поддержки новых адаптеров упрощается, поскольку будут использоваться уже готовые вызовы для инициализации и управления энергопотреблением.
- Кроме того, появилась поддержка ARM SoC: Qualcomm Snapdragon 720G (применяется в смартфонах Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (применяется в маршрутизаторах и NAS).
- Важное обновление для любителей DIY — добавлена поддержка ARM-плат Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
- Кроме того, теперь поддерживается телефон Fairphone 5.
- Появилась поддержка звуковых интерфейсов ноутбуков HUAWEI, поставляемых с CPU AMD. Добавлена поддержка дополнительных спикеров, устанавливаемых на ноутбуки Dell Oasis 13/14/16. Аналогично и для спикеров ASUS K6500ZC. Добавлена поддержка индикатора отключения звука на ноутбуках HP 255 G8 и G10. Добавлена поддержка звуковых драйверов acp6.3. Добавлена поддержка профессиональных интерфейсов звукозаписи Focusrite Clarett+ 2Pre и 4Pre.
Память и системные сервисы
- В ядре теперь нет поддержки Intel Itanium. Они сами не продаются с 2021 года, причем их актуальность и тогда уже была невелика, хотя поддерживались они целых 20 лет. Проблемы с процессорами возникли из-за недостаточно высокой производительности — AMD64 их обошли. Единственная платформа, где еще использовались процессоры Itanium — серверы HP Integrity, приём заказов на которые был прекращён три года назад. В итоге, код ia64 был удален, поскольку смысла в нем уже не было. Кстати, Торвальдс заявил, что поддержка может быть возвращена, но только в том случае, если найдется компания, которая сможет сопровождать эту платформу не менее, чем в течение года.
- Кроме того, удален старый слой videobuf, использовавшийся для управления фреймвбуферами в медиаподсистеме и более 10 лет назад заменённый на новую реализацию videobuf2.
- Интересный апдейт относительно языка Rust — сейчас продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра. Так, в новой версии выполнен переход на Rust 1.73, плюс предложен набор привязок для работы с рабочими очередями (workqueues).
- Теперь поддерживается механизм binfmt_misc для добавлена поддержки новых форматов исполняемых файлов (например, для запуска скомпилированных приложений на Java или Python) внутри отдельных непривилегированных пространств имён (namespace).
- В подсистеме BPF добавлена поддержку исключений. Они обрабатываются как неотложный выход из BPF-программы с возможностью безопасного раскручивания кадров стека.
- Также появился кольцевой буфер «objpool» c масштабируемой реализацией высокопроизводительной очереди для выделения и возвращения объектов.
- Важный апдейт относительно архитектуры RISC-V — для нее добавлена возможность использования режима проверки Shadow-Call Stack, доступного в Clang 17. Он предназначен для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
- Для архитектур ARM32 и S390x добавлена поддержка актуального набора (cpuv4) инструкций BPF.
- Добавлен новый режим сканирования страниц памяти в механизм слияния идентичных страниц памяти (KSM: Kernel Samepage Merging).
Дисковая подсистема и файлы
- Среди наиболее важных изменений в этой секции, как и было озвучено в анонсе — добавление файловой системы Bcachefs. Это попытка увеличить производительность, надежность и улучшить масштабируемость, характерные для XFS. Все это — вместе с элементами расширенной функциональности, которые свойственны для Btrfs и ZFS. Среди новы возможностей — включение в раздел нескольких устройств, многослойные раскладки накопителей (нижний слой с часто используемыми данными на базе быстрых SSD, а верхний слой с менее востребованными данными из жестких дисков), репликация (RAID 1/10), кэширование, прозрачное сжатие данных (режимы LZ4, gzip и ZSTD), срезы состояния (снапшоты), верификация целостности по контрольным суммам и многое другое.
- Кроме того, в Btrfs сразу два важных апдейта — появление упрощенного режима квот, который дает возможность добиться более высокой производительности, а также новая структура данных «stripe tree», подходящая для логического маппинга экстентов в ситуациях, когда физических маппинг не совпадает на разных устройствах.
- Что касается ФС Ceph, то в ней реализована поддержка маппинга идентификаторов пользователей примонтированных файловых систем, применяемого для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
- В exFAT добавлены ioctl-вызовы для чтения и изменения атрибутов ФС. Добавлена обработка каталогов нулевого размера.
- В F2FS реализована возможность использования блоков размером 16K.
- В OverlayFS предложены опции монтирования «lowerdir+» и «datadir+».
- В XFS проведена оптимизация нагрузки на CPU в коде распределения блоков в реальном времени
- Наконец, код EXT2 переведён на использование фолиантов страниц памяти (page folios).
Сеть
- В драйвере NVMe-TCP (NVMe over TCP) теперь доступна поддержка шифрования канала передачи данных с использованием TLS (применяется KTLS и фоновый процесс в пространстве пользователя tlshd для согласования соединения).
- Кроме того, в TCP добавили дополнительную возможность использования временных меток (TCP TS) с микросекундной точностью (RFC 7323).
- Также в TCP-стек добавили поддержку расширения TCP-AO (TCP Authentication Option, RFC 5925). Оно позволяет верифицировать TCP-заголовки по MAC-кодам (Message Authentication Code), используя более современные алгоритмы HMAC-SHA1 и CMAC-AES-128.
- Планировщик пакетов fq оптимизирован, так что пропускная способность увеличена на 5% при больших нагрузках.
- В NFS улучшена реализация потоков с RPC-сервирвисами.
Виртуализация и безопасность
- Не обойдена вниманием архитектура LoongArch — для нее реализована поддержка виртуализации с использованием гипервизора KVM.
- Также есть и апдейт для систем RISC-V, для них в отношении гипервизора KVM появилась поддержка расширения Smstateen, блокирующего обращение виртуальной машины к регистрам CPU, которые явно не поддерживаются гипервизором.
- Для KVM на система на базе x86 разрешено использование до 4096 виртуальных CPU.
- В подсистему fscrypt добавлена возможность шифрования данных блоками, размером меньше, чем размер блока в файловой системе. Подобное может потребоваться для задействования аппаратных механизмов шифрования, поддерживающих только небольшие блоки (например, контроллеры UFS, поддерживающие только размер блока 4096, смогут использоваться с ФС с размером блока 16K).
- В подсистему AppArmor добавлена возможность управления доступом к механизму io_uring и созданию пространств имён идентификаторов пользователя (user namespaces), что позволяет выборочно разрешать доступ к данным возможностям только определённым процессам.
Как всегда, есть и полностью свободная версия ядра — в ней нет проприетарных элементов. Так, в новом релизе обновлён код чистки блобов в различных драйверах и подсистемах, например, в драйверах amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs и btqca. Убраны блобы и из новых драйверов mt7925, tps6598x, aw87390 и aw88399.
Другие интересные материалы
Автор: Denis