02.07.2022

Релиз ядра Linux 5.17

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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:

  • Дисковая подсистема, ввод/вывод и файловые системы
  • Память и системные сервисы
    • Добавлен драйвер 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:<name>]».
    • В команду «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.

Источник.