Новая версия ядра Linux 6.4 появилась спустя всего два месяца после Linux 6.3. Несмотря на относительно небольшой временной интервал, изменений достаточно много. Всего принято 16012 исправлений от 2080 разработчиков, причем изменения затронули 14220 файлов, добавлено 1006924 строк кода, удалено 597615 строк. Размер патча составил 81 МБ.
Больше всего изменений, которые связаны с драйверами устройств. Это около 43% от общего объема. Еще около 14% изменений относятся к обновлению кода, актуального для аппаратных архитектур, 10% — сетевой стек, всего 4% — файловые системы и еще 3% — внутренние подсистемы ядра. Подробности под катом!
Что касается самых заметных изменений, то это, например, продолжение работы над интеграцией языка Rust, появившаяся возможность создания kernel worker из пространства пользователя, поддержка перехода в спящий режим для систем на архитектуре RISC-V, поддержка шифрования RPC-пакетов NFS.
Оборудование и драйвера
- Здесь не очень большое количество изменений, но среди них есть важные. Например, в драйвере i915 (Intel) продолжена реализация поддержки GPU Meteor Lake.
- Кроме того, для PCIe-карты Qualcomm Cloud AI 100 (AIC100) добавили драйвер QAIC.
- Также удалены символьные драйверы для устаревших устройств с интерфейсом PCMCIA, такие как cm4000_cs, cm4040_cs и scr24x_cs. Плюс больше не поддерживается SoC Intel Thunder Bay (выпуск данного SoC был отменён Intel).
- Зато появилась поддержка звука, хотя и базовая, на системах с CPU Intel Lunar Lake. Добавлен драйвер AMD SoundWire Manager для управления звуковым сопроцессорами AMD.
- Плюс добавлена поддержка мониторинга состояния датчиков температуры через API hwmon для около 100 моделей плат ASUS.
- Также добавили драйвер msi-ec, что дает возможность управлять расширенными функциями ноутбуков MSI из пространства пользователя. В первую очередь, это выбор профиля энергопотребления, изменение скорости кулера и т.п.
- А еще — появилась, наконец, поддержка систем Apple на базе ARM-чипа M2. Правда, это только начало работ по добавлению поддержки этих систем.
- В драйвере же MediaTek MT76 добавлена поддержка WiFi 7.
Память и системные сервисы
- Сейчас продолжается перенос дополнительной функциональности из ветки Rust-for-Linux. Речь идет об использовании Rust в качестве второго языка для разработки драйверов и модулей ядра. Стоит отметить, что поддержка языка неактивна по умолчанию. Среди добавленных возможностей — реализация типов ARef (always-refcounted) для ссылок на объект, к которому применяется механизм подсчёта ссылок, Task для работы со структурой task_struct и LockedBy для защиты данных через внешние блокировки.
- Появилась поддержка режима LAM_U57 (Linear Address Masking) для процессоров Intel. Новинка дает возможность использовать часть битов 64-разрядных указателей (c 57 по 62 биты) для хранения не связанных с адресацией метаданных.
- Также реализован вариант механизма объединения идентичных страниц памяти, который работает на уровне процессов. Это дает возможность сильно снизить потребление памяти. Причем в текущей версии ядра поддержка дедупликации осуществляется через prctl(PR_SET_MEMORY_MERGE) для процесса целиком и наследуется для дочерних процессов, без необходимости активации для каждого диапазона памяти при помощи вызова madvise(MADV_MERGEABLE), что значительно упрощает применение.
- Непривилегированные процессы теперь получают информацию подсистемы ядра PSI (Pressure Stall Information), позволяющей в пространстве пользователя проанализировать сведения о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для точной оценки уровня загруженности системы и характера замедления работы. Если же процесс непривилегированный, то опрос PSI допускается не чаще чем каждые две секунды.
- В BPF появилась поддержка типовых итераторов, что упрощает создание циклов в BPF-программах. А также реализовано заполнение в режиме ротации буфера с логом проблем, что выявляется верификатором кода.
- Добавлена и новая виртуальная файловая система /sys/kernel/tracing/touched_functions. Она дает возможность определить все функции ядра, доступные для трассировки и прикрепления BPF-программ.
- Еще одно интересное нововведение — это реализация поддержки архитектуры LoongArch (в дополнение к поддержке ARM, AArch64, i386, x86_64, s390, RISC-V и MIPS) в минимальной стандартной Си-библиотеке.
- Как и говорилось выше, для систем на базе архитектуры RISC-V теперь появилась поддержка перехода в спящий режим (hibernation). Также добавлена поддержка расширения Svnapot, позволяющего связывать группы страниц памяти, размером 4K, для создания более крупных страниц памяти.
- В драйвер amd-pstate добавлена поддержка управляемого автономного режима (Guided Autonomous Mode), при котором частота процессора выбирается автоматически, но не может выходить за пределы указанного диапазона.
Дисковая подсистема и файлы
- Здесь не так много изменений, но среди них есть довольно значимые. Например, в XFS добавлены изменения, необходимые для реализации проверки ФС на лету (online scrub).
- А в Ext4 упрощена организация записи журнала (data=journal).
- Кроме того, в Btrfs переписан код для проверки ФС, который переведён на использование scrub_stripe, поддерживает проверку RAID56 и выполняется примерно на 10% быстрее. Повышена производительность журналирования каталогов (исключение перебора индексов при журналировании позволило в 4 раза сократить время, затрачиваемое на выполнение fsync).
- Что касается файловой системы F2FS, то в ней добавлена поддержка зонированных блочных устройств, в которых размер зон не кратен степени двойки.
Сеть
- Среди прочих изменений стоит выделить реализацию универсального программного интерфейса для управления светодиодными индикаторами на сетевых коммутаторах или сетевых платах. В структуру данных DeviceTree добавлены отдельные поля для привязки светодиодных индикаторов к устройствам.
- Плюс добавлен API на базе Netlink, который предназначен для контроля работы светодиодов на сетевых коммутаторах или платах.
- Появилась поддержка планировщиков для протокола SCTP, для справедливого распределения пропускной способности между потоками (Fair Capacity Scheduler) и справедливого заполнения очереди с учётом весовых коэффициентов (Weighted Fair Queueing Scheduler).
Виртуализация
- В новой версии ядра запрещается отключать и выгружать модуль SELinux во время работы. Отключение SELinux теперь может производиться только на начальной стадии загрузки через передачу параметра «selinux=0» в командной строке ядра.
- Также добавлена поддержка гипервызовов Hyper-V, применяемых для проброса PCI-устройств в гостевые системы с драйверами для Hyper-V.
- А еще — реализован фреймворк для выноса обработки запросов SMCCC (Secure Monitor Call Calling Conventions) в пространство пользователя.
- Ну а в хранилище ключей (keyring) ".machine" реализован режим, допускающий размещения только ключей, заверенных цифровой подписью известного системе удостоверяющего центра.
Как всегда, сформирован и вариант свободного ядра, 6.4 — Linux-libre 6.4-gnu, которое очищено от тех элементов, где содержатся несвободные компоненты или участки кода. Вот ссылка на ядро Linux-libre 6.4-gnu.
Ну а на этом все. Если вы уже обновились — расскажите, как все прошло. Не было ли проблем, а если да — то какие именно.
Возможно, эти тексты тоже вас заинтересуют:
→ Создаем блог на Django с опросами и тестами. Краткая инструкция. Часть 1
→ OpenStack vs VMware: что лучше — open source или проприетарная платформа
→ Когда типизация делает тебе больно: как у нас появился статический анализатор