Прошло всего два месяца со времени выхода релиза ядра Linux 5.8, которое назвали «величайшим»", а Торвальдс уже опубликовал новый релиз, на этот раз версии 5.9.
По данным журналиста Майкла Ларабеля, в коде ядра — 20,49 млн строк, 3,58 млн строк комментариев и 3,72 млн пустых строк. Количество файлов с исходным кодом достигло 59 тыс. Но окей, все это количественные характеристики. А что нового в ядре? Давайте посмотрим.
Аппаратное обеспечение
- Для архитектуры RISC-V разработчики добавили поддержку kcov —, debugfs-интерфейс для анализа покрытия кода ядра, плюс систему выявления утечек памяти kmemleak, защиту стека, метки перехода и tickess-операций.
- Для ARM и ARM64 механизм регулирования частоты процессора schedutil активирован по умолчанию. Для изменения частоты чипа используются данные от планировщика задач, так что schedutil обращается непосредственно к драйверам cpufreq. В итоге частоты подгоняются под текущую нагрузку.
- Для карт Intel добавили поддержку чипов на базе микроархитектуры Rocket Lake и начальную поддержку дискретных карт Intel Xe DG1.
- В драйвер amdgpu добавили начальную поддержку GPU AMD Navi 21 (Navy Flounder) и Navi 22 (Sienna Cichlid). Кроме того, теперь есть поддержка движков ускорения кодирования и декодирования видео UVD/VCE для GPU Southern Islands (Radeon HD 7000). На данный момент драйвер GPU AMD — самый крупный драйвер в ядре с 2,71 млн строк кода.
- В драйвер Nouveau разработчики добавили поддержку покадровой проверки целостности при помощи CRC.
- Добавлена поддержка большого количества плат, гаджетов и платформ, включая Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (используется в Sony Xperia 10, 10 Plus, XA2, XA2 Plus и XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, пять новых плат на базе NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Виртуализация и безопасность
- Для таких архитектур, как xtensa и csky, добавлена поддержка ограничения системных вызовов при помощи подсистемы seccomp.
- При сборке ядра Clang появилась возможность настройки (CONFIG_INIT_STACK_ALL_ZERO) автоматической инициализации нулевым значением всех переменных, хранимых в стеке (при сборке указывается -ftrivial-auto-var-init=zero) .
- Появился capability-флаг AP_CHECKPOINT_RESTORE, который позволяет предоставлять доступ к функциям заморозки и восстановления состояния процессов без передачи дополнительных привилегий.
- В GCC 11 есть все возможности, которые нужны для инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра.Теперь этот инструмент можно использовать с ядрами, которые собраны в GCC.
- Ликвидирован код для поддержки 32-разрядных гостевых систем, работающих в режиме паравиртуализации под управлением гипервизора Xen. Пользователям необходимо перейти на использование 64-разрядных ядер.
Память и системные сервисы
- Разработчики ужесточили защиту от использования GPL-прослоек для связывания проприетарных драйверов с компонентами ядра, экспортируемыми только для модулей под лицензией GPL. Подробнее об этом мы писали здесь.
- Появилась поддержка механизма kcompactd для упреждающей упаковки страниц памяти в фоновом режиме, который позволяет увеличить число больших страниц памяти, доступных ядру. Благодаря этому удалось в 70-80 раз снизить задержки при выделении крупных страниц памяти по сравнению с механизмом упаковки, который использовался ранее.
- Добавлена поддержка сжатия образа ядра с задействованием алгоритма Zstandard (zstd).
- Для x86 систем добавлена поддержка процессорной инструкции FSGSBASE, что дает возможность читать и изменять содержимое регистров FS/GS из пространства пользователя.
- Появился параметр allow_writes, который дает возможность запретить изменения MSR-регистров процессора из пространства пользователя и ограничить доступ к содержимому данных регистров операциями чтения. Правда, запрещения записи по дефолту пока нет, но в ближайшее время разработчики переведут доступ в режим «только для чтения» по умолчанию.
- В интерфейсе асинхронного ввода/вывода io_uring добавлена полная поддержка асинхронных операций буферизированного чтения, не требующих привлечения потоков ядра.
- Модель потребления энергии в ядре учитывает теперь периферийные устройства, а не только CPU.
- Обновлен алгоритм назначения приоритетов для потоков внутри ядра. Обновленный вариант дает возможность оптимального согласования во всех подсистемах ядра при назначении приоритетов для задач реального времени.
- Для управления параметрами формирования частоты CPU для задач реального времени добавлен sysctl sched_uclamp_util_min_rt_default.
- Добавлены новые флаги FAN_REPORT_NAME и FAN_REPORT_DIR_FID в механизме fanotify. Они позволяют передавать сведения о родительском имени и уникальном идентификаторе FID при наступлении событий создания, удаления или перемещения элементов каталога и не связанных с каталогами объектов.
- Еще один важный апдейт — реализация нового контроллера распределения памяти slab (slab memory controller). Благодаря ему получилось на 30-45% сократить используемой для slab памяти, оптимизировать общее потребление памяти ядром и снизить фрагментацию памяти.
Работа с файлами и дисковая подсистема
- Появилась опция монтирования rescue для файловой системы Btrfs. Она дает возможность унифицировать доступ ко всем другим опциям для восстановления. Проведена оптимизация производительности, добавлена возможность использования альтернативных типов контрольных сумм, отличных от CRC32c.
- Добавлена возможность inline-шифрования (Inline Encryption) в файловых системах ext4 и F2FS. Эта функция помогает активировать встроенные в контроллер накопителя механизмы шифрования.
- В XFS добавлен сброс inode (flush) в полностью асинхронном режиме. Процессы при выполнении операции очистки памяти не блокируются. Наконец-то решили проблему с квотами, которая не позволяла корректно отслеживать предупреждения о превышении мягкого лимита и ограничений на число inode.
- В Ext4 добавлена упреждающая загрузка «битовых карт» распределения блоков. Оптимизация вместе с ограничением сканирования позволяет сократить время монтирования очень больших разделов.
- В подсистему SCSI тоже добавлено inline-шифрования на базе встроенных средств аппаратного шифрования.
- Для md/raid5 добавлен параметр /sys/block/md1/md/stripe_size для настройки размера STRIPE-блока.
Сеть
- В Netfilter появилась функция отклонения пакетов на стадии до проверки маршрутизации.
- В nftables добавлена возможность аудита событий, связанных с изменением конфигурации.
- Для nftables в API netlink добавлена еще и поддержка анонимных цепочек, имя которым назначается ядром динамически.
- В BPF теперь поддерживаются итераторы для обхода, фильтрации и изменения элементов ассоциативных массивов (map) без копирования данных в пространство пользователя.
- Новый тип BPF-программ BPF_PROG_TYPE_SK_LOOKUP запускаются в момент, когда ядро ищет сокет для входящего соединения.
- Добавлена поддержка протокола PRP (Parallel Redundancy Protocol). Он позволяет на базе Ethernet реализовать прозрачное для приложений переключение на запасной канал в случае сбоя любых компонентов сети.
- Появились новые возможности для MPTCP (MultiPath TCP). В первую очередь, это расширение протокола TCP для организации работы TCP-соединения c доставкой пакетов параллельно по нескольким маршрутам через разные сетевые интерфейсы, которые привязаны к разным IP-адресам.
По статистике, в новой версии реализовано 16074 исправлений от 2011 разработчиков. Общий размер патча составляет 62 МБ. Изменены 14548 файлов, добавлено 782155 строк кода, удалено 314792 строк. Примерно 45% изменений связаны с драйверами, 15% —с обновлением кода для аппаратных архитектур, 13% — с сетью, 3% — с файловыми системами и еще 3% — с внутренними подсистемами ядра.
Традиционно латиноамериканский Фонд свободного ПО предложил вариант полностью свободного ядра 5.9 — Linux-libre 5.9-gnu. В нем нет проприетарных элементов прошивок и драйверов.
chemtech
Кому интересно тестирование ядра Linux: syzkaller — Распределенный, неконтролируемый фазер для тестирования сисколов Linux.
Страница с тестами и найдеными багами ядра Linux: https://syzkaller.appspot.com/upstream