После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.17. Среди наиболее заметных изменений: новая система управления производительностью для процессоров AMD, возможность рекурсивного маппинга идентификаторов пользователей для ФС, поддержка переносимых скомпилированных BPF-программ, перевод генератора псевдослучайных чисел на алгоритм BLAKE2s, утилита RTLA для анализа выполнения в режиме реального времени, новый бэкенд fscache для кэширования сетевых ФС, возможность прикрепления имён к анонимным операциям mmap.
В новую версию принято 14203 исправлений от 1995 разработчиков,
размер патча – 37 МБ (изменения затронули 11366 файлов, добавлено 506043 строк кода, удалено 250954 строк). Около 44% всех представленных в 5.17 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% – с файловыми системами и 4% c внутренними подсистемами ядра.
Основные новшества в ядре 5.17:
- Дисковая подсистема, ввод/вывод и файловые системы
- Реализована возможность вложенного маппинга идентификаторов пользователей примонтированных файловых систем, применяемого для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе. Добавленная возможность позволяет рекурсивно использовать маппинг поверх файловых систем для которых уже применяется маппинг.
- Полностью переписана подсистема fscache, применяемая для организации кэширования в локальной файловой системе данных, передаваемых через сетевые файловые системы. Новая реализация отличается значительным упрощением кода и заменой усложнённых операций планирования и отслеживания состояний объектов на более простые механизмы. Поддержка нового fscache реализована в файловой системе CIFS.
- В подсистеме отслеживания событий в ФС fanotify реализован новый тип событий FAN_RENAME, который позволяет разом перехватить операцию переименования файлов или каталогов (ранее для обработки переименований применялись два раздельных события FAN_MOVED_FROM и FAN_MOVED_TO).
- В файловой системе Btrfs проведена оптимизация операций логгирования и fsync для больших каталогов, реализованная за счёт копирования только индексных ключей и сокращения объёма логгируемых метаданных. Обеспечена поддержка индексации и поиска по размеру элементов с данными о свободном пространстве, что позволило примерно на 30 уменьшить задержки и сократить время поиска. Разрешено прерывать операции дефрагментации. Включена возможность добавлять устройства при отключении балансировки между накопителями, т.е. при монтировании ФС с опцией skip_balance.
- Предложен новый синтаксис монтирования файловой системы Ceph, решающий имевшиеся проблемы, связанные с привязкой к IP-адресам. Кроме IP-адресов для определения сервера теперь можно использовать идентификатор кластера (FSID): mount -t ceph [email protected]_name=/[subdir] mnt -o mon_addr=monip1[:port][/monip2[:port]]
- Файловая система Ext4 переведена на новый API для монтирования, который разделяет стадии разбора опций монтирования и настройки суперблока. Прекращена поддержка опций монтирования lazytime и nolazytime, которые добавлялись как временное изменение для упрощения перевода util-linux на использование флага MS_LAZYTIME. Добавлена поддержка установки и чтения меток в ФС (ioctl FS_IOC_GETFSLABEL и FS_IOC_SETFSLABEL).
- В модуль ksmbd с реализацией файлового сервера, использующего протокол SMB3, добавлена поддержка обмена ключами, задействован сетевой порт 445 для smbdirect и добавлена поддержка параметра “smb2 max credit”.
- NFSv4 добавлена поддержка работы в файловых системах без разделения регистров символов в именах файлов и каталогов. В NFSv4.1+ добавлена поддержка определения агрегированных сеансов (trunking).
- Память и системные сервисы
- Добавлен драйвер amd-pstate, обеспечивающий динамическое управление частотой следующего поколения CPU и APU от компании AMD для достижения оптимальной производительности. Драйвер разработан совместно с компанией Valve и нацелен на повышение эффективности управления энергопотреблением. Для адаптивного изменения частоты используется механизм CPPC (Collaborative Processor Performance Control), который позволяет более точно менять показатели (не ограничен тремя уровнями производительности) и более оперативно реагировать на изменение состояния, чем ранее используемые P-state драйверы на базе ACPI (CPUFreq).
- В подсистеме eBPF предложен обработчик bpf_loop(), предоставляющий альтернативный способ организации циклов в eBPF-программах, более быстрый и простой для проверки верификатором.
- На уровне ядра реализован механизм CO-RE (Compile Once – Run Everywhere), позволяющий собирать код eBPF-программ только один раз и использовать специальный универсальный загрузчик, адаптирующий загружаемую программу к текущему ядру и типам BTF (BPF Type Format).
- В планировщике задач обеспечено отслеживание и вывод среди статистики /proc/PID/sched времени, проведённого процессами в состоянии принудительного простоя (forced-idle), применяемого например, для снижения нагрузки при перегреве процессора.
- Добавлен модуль gpio-sim, предназначенный для симуляции чипов GPIO для проведения тестирования.
- Предоставлена возможность назначения имён для областей приватной анонимной (выделенной через malloc) памяти, что может упростить проведение отладки и оптимизации потребления памяти в приложениях. Имена присваиваются через prctl с флагом PR_SET_VMA_ANON_NAME и отображаются в /proc/pid/maps и /proc/pid/smaps в форме “[anon:]”.
- В команду “perf ftrace” добавлена подкоманда “latency” для генерации гистограмм с информацией о задержках.
- Добавлен набор утилит “RTLA” для анализа работы в режиме реального времени. В состав входят такие утилиты, как osnoise (определяет влияние операционной системы на выполнение задачи) и timerlat (изменяет задержки, связанные с таймером).
- Интегрирована вторая серия патчей с реализацией концепции фолиантов страниц памяти (page folios), которые напоминают объединённые страницы памяти (compound pages), но отличаются улучшенной семантикой и более понятной организацией работы. Использование фолиантов позволяет ускорить управление памятью в некоторых подсистемах ядра. В предложенных патчах завершён перевод страничного кэша на использование фолиантов и добавлена начальная поддержка ФС XFS.
- Добавлен режим сборки “make mod2noconfig”, при котором генерируется конфигурация, собирающая все отключённые подсистемы в форме модулей ядра.
- Подняты требования к версии LLVM/Clang, которую можно использовать для сборки ядра. Для сборки теперь требуется как минимум выпуск LLVM 11.
- Предложена обновлённая реализация генератора псевдослучайных чисел RDRAND, отвечающего за работу устройств /dev/random и /dev/urandom, примечательная переходом на использование хеш-функции BLAKE2s вместо SHA1 для операций смешивания энтропии. Изменение позволило повысить безопасность генератора псевдослучайных чисел, благодаря избавлению от проблемного алгоритма SHA1 и исключению перезаписи вектора инициализации RNG. Так как алгоритм BLAKE2s опережает SHA1 по производительности, то его применение также положительно отразилось на производительности.
- Добавлена защита от уязвимостей в процессорах, связанных со спекулятивным выполнением инструкций после операций безусловного прямого перехода из-за упреждающей обработки инструкций, следующих в памяти сразу за командой перехода (SLS, Straight Line Speculation). Для включения защиты требуется сборка с использованием выпуска GCC 12, находящегося в на стадии тестирования.
- Реализованы расширенные проверки новых записей в таблице страниц памяти процесса, позволяющие выявлять некоторые типы повреждений и останавливать систему до компрометации в результате атаки.
- Добавлена возможность распаковки модулей ядра непосредственно самим ядром, а не обработчиком в пространстве пользователя, что позволяет при помощи LSM-модуля LoadPin гарантировать, что модули ядра загружены в память из верифицированного устройства хранения.
- Обеспечена сборка с флагом “-Wcast-function-type”, включающим вывод предупреждений о приведении указателей функций к несовместимому типу.
- Добавлен виртуальный хостовый драйвер USB для гипервизора Xen, предоставляющий доступ к USB-устройствам, проброшенным в гостевые системы.
- Добавлен модуль, позволяющий через Wi-Fi взаимодействовать с подсистемой IME (Intel Management Engine), которая поставляется в большинстве современных материнских плат с процессорами Intel и реализована в виде отдельного микропроцессора, работающего независимо от CPU.
- Для архитектуры ARM64 реализована поддержка отладочного инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра.
- Для 32-разрядных систем ARM добавлена возможность применения механизма KFENCE для выявления ошибок при работе с памятью.
- Добавлен механизм отслеживания подсчёта ссылок (refcount, reference-count), нацеленный на снижение числа ошибок при подсчёте ссылок, приводящих к обращению к памяти после её освобождения. Механизм пока ограничен сетевой подсистемой, но в будущем может быть адаптирован и для других частей ядра.
- В гипервизоре KVM добавлена поддержка инструкций AMX (Advanced Matrix Extensions), реализованных в грядущих серверных процессорах Intel Xeon Scalable.
- Для гипервизора XEN реализован драйвер pvUSB, позволяющий из гостевых систем обращаться к физическим USB-устройствам, закреплённым за гостевой системой.
- Добавлена поддержка выноса (offloading) на сторону сетевых устройств операций, связанных с управлением трафиком.
- Добавлена возможность использования протокола MCTP (Management Component Transport Protocol) поверх устройств с последовательным интерфейсом. MCTP может использоваться для взаимодействия управляющих контроллеров и связанных с ними устройств (хост-процессоры, периферийные устройства и т.п.).
- Проведена оптимизация TCP-стека, например, для повышения производительности вызовов recvmsg реализовано отложенное освобождение буферов сокетов.
- На уровне полномочий CAP_NET_RAW разрешено выставление через функцию setsockopt режимов SO_PRIORITY и SO_MARK.
- Для IPv4 разрешено прикрепление raw-сокетов не к локальным IP-адресам, используя опции IP_FREEBIND и IP_TRANSPARENT.
- Добавлен sysctl arp_missed_max для настройки числа сбоев при проверке ARP-монитором, после которого сетевой интерфейс переводится в отключённое состояние.
- Предоставлена возможность настройки отдельных значений sysctl min_pmtu и mtu_expires для сетевых пространств имён.
- В API ethtool добавлена возможность установки и определения размера буферов входящих и исходящих пакетов.
- В Netfilter добавлена поддержка фильтрации транзитного pppoe-трафика в сетевом мосте.
- В подсистему drm (Direct Renderering Manager) и драйвер i915 добавлена поддержка экранов для вывода конфиденциальной информации, например, в некоторые ноутбуки комплектуются экранами со встроенным режимом конфиденциального просмотра, не позволяющем подсматривать со стороны.
Добавленные изменения позволяют подключать специализированные драйверы для подобных экранов и управлять режимами конфиденциального просмотра через выставление свойств через обычные графические KMS-драйверы. - В драйвере amdgpu включена поддержка отладочной технологии STB (Smart Trace Buffer) для всех поддерживающих её GPU AMD. STB упрощает анализ сбоев и выявление источника проблем через сохранение в специальном буфере информации о функциях, выполняемых перед последним сбоем.
- В драйвере i915 добавлена поддержка чипов Intel Raptor Lake S.Предоставлена возможность управления подсветкой экрана через DPCD-интерфейс VESA.
- В драйверах fbcon/fbdev возвращена поддержка аппаратного ускорения прокрутки в консоли.
- Продолжена интеграция изменений для поддержки чипов Apple M1. Реализована возможность использования драйвера simpledrm на системах с чипом Apple M1 для вывода через фреймбуфер, предоставляемый прошивкой.
- Добавлена поддержка ARM SoС, устройств и плат
Snapdragon 7c, 845 и 888 (Sony Xperia XZ2 / XZ2C / XZ3, Xperia 1 III / 5 III, Samsung J5, Microsoft Surface Duo 2), Mediatek MT6589 (Fairphone FP1), Mediatek MT8183 (Acer Chromebook 314), Mediatek MT7986a/b (применяется в Wi-fi маршрутизаторах), Broadcom BCM4908 (Netgear RAXE500), Qualcomm SDX65, Samsung Exynos7885, Renesas R-Car S4-8, TI J721s2, TI SPEAr320s, NXP i.MX8 ULP8, Aspeed AST2500/AST2600, Engicam i.Core STM32MP1, Allwinner Tanix TX6, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t6000/t6001 MacBook Pro 14/16. - Добавлена поддержка процессоров ARM Cortex-M55 и Cortex-M33.
- Добавлена поддержка устройств на базе CPU MIPS: Linksys WRT320N v1,
Netgear R6300 v1, Netgear WN2500RP v1/v2. - Добавлена поддержка SoC StarFive JH7100 на базе архитектуры RISC-V.
- Добавлен драйвер lenovo-yogabook-wmi для управления подсветкой клавиатуры и доступа к различным датчикам в Lenovo Yoga Book.
- Добавлен драйвер asus_wmi_sensors для доступа к датчикам, используемым на материнских платах Asus X370, X470, B450, B550 и X399 на базе процессоров AMD Ryzen.
- Добавлен драйвер x86-android-tablets для планшетных ПК на базе архитектуры x86, поставляемых с платформой Android.
- Добавлена поддержка сенсорных экранов TrekStor SurfTab duo W1 и электронного пера для планшентов Chuwi Hi10 Plus и Pro.
- В драйверы для SoC Tegra 20/30 добавлена поддержка управления питанием и напряжением. Обеспечена возможность загрузки на старых 32-разрядных Tegra-устройствах на базе платформы Android, таких как ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 и Pad TF300TG.
- Добавлены драйверы для промышленных компьютеров Siemens.
- Добавлена поддержка LCD-панелей Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA и Team Source Display TST043015CMHX.
Решены проблемы с Tegra194 HD-audio. Добавлена поддержка HDA для кодеков CS35L41. Улучшена поддержка звуковых систем для ноутбуков Lenovo и HP, а также материнских плат Gigabyte. - Добавлена поддержка звуковых систем и кодеков AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, Intel systems using NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx.