Linux Kernel 5.8: что нового в ядре
Линус Торвальдс наконец-то представил релиз ядра Linux 5.8. О планируемых изменениях мы писали задолго до этого события. Теперь планы стали реальностью, так что новшества можно обсудить. Размер патча составил 65 МБ, изменения затронули 16180 файлов, плюс добавлено 1043240 строк кода. Наиболее заметными и ожидаемыми изменениями ядра стали: детектор состояний гонки KCSAN; универсальный механизм доставки уведомлений […]
Линус Торвальдс наконец-то представил релиз ядра Linux 5.8. О планируемых изменениях мы писали задолго до этого события. Теперь планы стали реальностью, так что новшества можно обсудить.
Размер патча составил 65 МБ, изменения затронули 16180 файлов, плюс добавлено 1043240 строк кода.
Наиболее заметными и ожидаемыми изменениями ядра стали:
- детектор состояний гонки KCSAN;
- универсальный механизм доставки уведомлений в пространство пользователя;
- поддержка оборудования inline-шифрования;
- расширенные механизмы защиты для ARM64;
- возможность раздельного монтирования экземпляров procfs;
- реализация для ARM64 механизмов защиты Shadow Call Stack и BTI.
Еще ядро поддерживает российский процессор Baikal-T1.
Новшества разделяются на нескольких категорий. Это виртуализация и безопасность, память с системными сервисами, дисковая подсистема, файловые системы, сетевая подсистема и «железо».
40% изменений в новом ядре связано с драйверами, 16% — с обновлением кода для различных процессорных архитектур, 10% — с сетевым стеком, 3% — с файловыми системами.
Виртуализация и безопасность
- Добавлено создание отдельных экземпляров procfs, что дает возможность использовать сразу несколько точек монтирования с разными опциями. При этом отражается лишь одно пространство pid namespace.
- Появилась возможность блокировки загрузки модулей ядра с секциями с кодом, где разрешено исполнение и запись. Это изменение является частью проекта, цель которого — избавить ядро от страниц памяти, которые допускают одновременно как исполнение, так и запись.
- Платформа ARM64 получила поддержку механизма Shadow-Call Stack. Он предоставляет защиту от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
- Теперь есть поддержка оборудования для inline-шифрования блочных устройств (Inline Encryption).
- Добавлен параметр командной строки ядра initrdmem, что позволяет указать физический адрес размещения initrd в памяти при размещении начального загрузочного образа в ОЗУ.
- Эта же платформа получила поддержку инструкций ARMv8.5-BTI (Branch Target Indicator). Необходима она для защиты выполнения наборов инструкций, на которые не должны выполняться переходы при ветвлении.
- Появились новые capability: CAP_PERFMON — с доступом к подсистеме perf и выполнением мониторинга производительности; CAP_BPF — с разрешением выполнений некоторых операций с BPF.
- Благодаря новому устройству virtio-mem есть возможность задействовать горячее подключение с отключением памяти к гостевым системам.
- Реализована защита от уязвимости CROSSTalk/SRBDS.
Память и системные сервисы
- Появился универсальный механизм доставки уведомлений из ядра в пространство пользователя. Этот механизм основан на штатном драйвере pipe и дает возможность эффективно распределять уведомления от ядра по каналам, открытым в пространстве пользователя.
- В ядро добавлен отладочный инструмент KCSAN (Kernel Concurrency Sanitizer), который предназначен для динамического выявления состояний гонки внутри ядра.
- В Group появилась настройка memory.swap.high. Она предназначена для замедления задач, которые занимают слишком большой объем файла подкачки.
- Расширены возможности функциональности pidfd, которая позволяет обрабатывать ситуации с повторным использованием PID.
- Добавлен системный вызов faccessat2(). Он отличается от faccessat() дополнительным аргументом с флагами, которые соответствуют рекомендациям POSIX.
- Добавлен механизм BPF iterator. Он нужен для вывода в пространство пользователя содержимого структур ядра.
- Механизм padata получил поддержку многопоточных задач с балансировкой нагрузки.
- Теперь есть новый API выделения буферов (AF_XDP), который позволяет упростить написание XDP-сетевых драйверов.
- Как и планировалось ранее, появились рекомендации по использованию терминов ‘master / slave’ и ‘blacklist / whitelist’.
Дисковая подсистема, I/O, файловые системы
- F2FS получила поддержку сжатия с использованием алгоритма LZO-RLE.
- В CIFS появился параметр nodele, который допускает штатные проверки прав на сервере с одновременным запретом удаления файлов или каталогов для клиента.
- В Device Manager появился новый обработчик emulate block size. Он позволяет эмулировать логический блок меньшего размера. Пример — эмуляция 512-байтных секторов на дисках с размером сектора 4К.
- Ext4 теперь лучше обрабатывает ошибку EXOSPC при использовании многопоточности.
- Для Ext4 и XFS включена поддержка операций DAX в привязке к отдельным файлам и каталогам.
- В EXFAT теперь есть поддержка верификации загрузочной области.
- FAT получила упреждающую загрузку элементов ФС. Тест 2ТБ накопителя, подключенного по USB, занял 51 секунду вместо 383, как раньше.
Сетевая подсистема
- В ядре и утилите ethtool теперь появилась поддержка функций тестирования подключенного сетевого кабеля и самодиагностики сетевых устройств. Конечно, чтобы эта возможность работала, нужна и аппаратная поддержка, так что чисто программного ничего нового «не вырастет».
- В код управления работой сетевых мостов добавлена поддержка протокола Media Redundancy Protocol. Он позволяет обеспечить отказоустойчивость за счет «закольцовывания» нескольких Ethernet-коммутаторов.
- В IPv6-стеке теперь есть поддержка сжатия диапазонов в ответах выборочного подтверждения.
- Для IPv6 добавлена поддержка TCP-LD.
Оборудование
- DRM-драйвер i915 для видеокарт Intel получил по умолчанию поддержку чипов Intel Tiger Lake (GEN12). В свою очередь, чипы теперь совместимы с системой SAGV (System Agent Geyserville). Она позволяет подстраивать частоту и напряжение в зависимости от требований к энергопотреблению/производительности.
- Добавлена поддержка устройств Renesas RZ/G1H, Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.
- Появилась поддержка датчиков энергопотребления процессоров AMD Zen и Zen 2, плюс датчиков температуры AMD Ryzen 4000 Renoir.
- В драйвер amdgpu добавлена поддержка пиксельного формата FP16 с реализацией возможности работы с оцифрованными буферами в видеопамяти.
- Драйвер Nouveau получил поддержку формата модификаторов NVIDIA.
- В драйвере MSM (Qualcomm) теперь есть поддержка GPU Adreno A405, A640 и A650.
- Поддерживаются смартфоны Xiaomi Redmi Note 7, Samsung Galaxy S2 и ноутбуки Elm/Hana Chromebook.
- Появилась поддержка российского процессора Baikal-T1 и системы на кристалле BE-T1000.
После релиза ядра латиноамериканский фонд свободного ПО выложил вариант свободного ядра Linux-libre 5.8-gnu. В нем нет несвободных компонентов или участков кода, использование которых ограничено производителем.