Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Ядро 5.17

21.03.2022

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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 user@fsid.fs_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).
    • NFSv4 добавлена поддержка работы в файловых системах без разделения регистров символов в именах файлов и каталогов. В NFSv4.1+ добавлена поддержка определения агрегированных сеансов (trunking).
  • Память и системные сервисы
    • Добавлен драйвер amd-pstate, обеспечивающий динамическое управление частотой для достижения оптимальной производительности. Драйвер поддерживает новые CPU и APU AMD, включая некоторые чипы поколения Zen 2 и Zen 3, разработан совместно с компанией 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). CO-RE решает проблему с переносмостью скомпилированных eBPF-программ, которые ранее могли использоваться только в той версии ядра, для которой были собраны, так как позиция элементов в структурах данных меняется от версии к версии.
    • Предоставлена возможность назначения имён для областей приватной анонимной (выделенной через malloc) памяти, что может упростить проведение отладки и оптимизации потребления памяти в приложениях. Имена присваиваются через prctl с флагом PR_SET_VMA_ANON_NAME и отображаются в /proc/pid/maps и /proc/pid/smaps в форме "[anon:<name>]".
    • В планировщике задач обеспечено отслеживание и отображение в /proc/PID/sched времени, проведённого процессами в состоянии принудительного простоя (forced-idle), применяемого например, для снижения нагрузки при перегреве процессора.
    • Добавлен модуль gpio-sim, предназначенный для симуляции чипов GPIO для проведения тестирования.
    • В команду "perf ftrace" добавлена подкоманда "latency" для генерации гистограмм с информацией о задержках.
    • Добавлен набор утилит "rtla" для анализа работы в режиме реального времени и выявления причин появления непредвиденных задержек. Инструментарий реализован на базе штатных механизмов трассировки ядра. В состав входят такие команды, как osnoise (определяет влияние операционной системы на выполнение задачи) и timerlat (изменяет задержки, связанные с таймером).
    • Интегрирована вторая серия патчей с реализацией концепции фолиантов страниц памяти (page folios), которые напоминают объединённые страницы памяти (compound pages), но отличаются улучшенной семантикой и более понятной организацией работы. Использование фолиантов позволяет ускорить управление памятью в некоторых подсистемах ядра. В предложенных патчах завершён перевод страничного кэша на использование фолиантов и добавлена начальная поддержка фолиантов в ФС XFS.
    • Добавлен режим сборки "make mod2noconfig", при котором генерируется конфигурация, собирающая все отключённые подсистемы в форме модулей ядра.
    • Подняты требования к версии LLVM/Clang, которую можно использовать для сборки ядра. Для сборки теперь требуется как минимум выпуск LLVM 11.
    • Добавлена поддержка предложенного компанией Intel интерфейса PFRUT (Platform Firmware Runtime Update and Telemetry), позволяющего обновлять прошивки без перезагрузки системы и извлекать данные о работе прошивки.
  • Виртуализация и безопасность
    • Предложена обновлённая реализация генератора псевдослучайных чисел RDRAND, отвечающего за работу устройств /dev/random и /dev/urandom, примечательная переходом на использование хеш-функции BLAKE2s вместо SHA1 для операций смешивания энтропии. Изменение позволило повысить безопасность генератора псевдослучайных чисел, благодаря избавлению от проблемного алгоритма SHA1 и исключению перезаписи вектора инициализации RNG. Так как алгоритм BLAKE2s опережает SHA1 по производительности, то его применение также положительно отразилось на производительности.
    • Добавлена защита от уязвимостей в процессорах, вызванных спекулятивным выполнением инструкций после операций безусловного прямого перехода. Проблема возникает из-за упреждающей обработки инструкций, следующих в памяти сразу за командой перехода (SLS, Straight Line Speculation). Для включения защиты требуется сборка с использованием выпуска GCC 12, находящегося в на стадии тестирования.
    • Добавлен механизм отслеживания подсчёта ссылок (refcount, reference-count), нацеленный на снижение числа ошибок при подсчёте ссылок, приводящих к обращению к памяти после её освобождения. Механизм пока ограничен сетевой подсистемой, но в будущем может быть адаптирован и для других частей ядра.
    • Реализованы расширенные проверки новых записей в таблице страниц памяти, позволяющие выявлять нелегальные операции совместного доступа к страницам памяти разных процессов и блокировать на ранней стадии атаки, манипулирующие неверным подсчётом указателей. Из-за негативного влияния на производительность проверки отключены по умолчанию и для активации требуют сборки ядра с опцией "PAGE_TABLE_CHECK=y" и загрузки с параметром "page_table_check=on".
    • Добавлена возможность распаковки модулей ядра непосредственно самим ядром, а не обработчиком в пространстве пользователя, что позволяет при помощи LSM-модуля LoadPin гарантировать, что модули ядра загружены в память из верифицированного устройства хранения.
    • Обеспечена сборка с флагом "-Wcast-function-type", включающим вывод предупреждений о приведении указателей функций к несовместимому типу.
    • Добавлен виртуальный хостовый драйвер pvUSB для гипервизора Xen, предоставляющий доступ к USB-устройствам, проброшенным в гостевые системы (позволяет из гостевых систем обращаться к физическим USB-устройствам, закреплённым за гостевой системой).
    • Добавлен модуль, позволяющий через Wi-Fi взаимодействовать с подсистемой IME (Intel Management Engine), которая поставляется в большинстве современных материнских плат с процессорами Intel и реализована в виде отдельного микропроцессора, работающего независимо от CPU.
    • Для архитектуры ARM64 реализована поддержка отладочного инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра.
    • Для 32-разрядных систем ARM добавлена возможность применения механизма KFENCE для выявления ошибок при работе с памятью.
    • В гипервизоре KVM добавлена поддержка инструкций AMX (Advanced Matrix Extensions), реализованных в грядущих серверных процессорах Intel Xeon Scalable.
  • Сетевая подсистема
    • Добавлена поддержка выноса (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-трафика в сетевом мосте.
    • В модуль ksmbd с реализацией файлового сервера, использующего протокол SMB3, добавлена поддержка обмена ключами, задействован сетевой порт 445 для smbdirect и добавлена поддержка параметра "smb2 max credit".
  • Оборудование
    • В подсистему drm (Direct Rendering Manager) и драйвер i915 добавлена поддержка экранов для вывода конфиденциальной информации, например, некоторые ноутбуки комплектуются экранами со встроенным режимом конфиденциального просмотра, затрудняющим просмотр со стороны. Добавленные изменения позволяют подключать специализированные драйверы для подобных экранов и управлять режимами конфиденциального просмотра через выставление свойств в обычных KMS-драйверах.
    • В драйвере amdgpu включена поддержка отладочной технологии STB (Smart Trace Buffer) для всех поддерживающих её GPU AMD. STB упрощает анализ сбоев и выявление источника проблем через сохранение в специальном буфере информации о функциях, выполняемых перед последним сбоем.
    • В драйвере i915 добавлена поддержка чипов Intel Raptor Lake S и включена по умолчанию поддержка графической подсистемы чипов Intel Alder Lake P. Для чипов Intel Ice Lake включена поддержка технологии Adaptive-Sync (VRR), позволяющей адаптивно менять частоту обновления монитора для обеспечения плавного вывода и отсутствия разрывов. Предоставлена возможность управления подсветкой экрана через 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.
    • В драйвере iwlwifi для беспроводных карт Intel появилась поддержка модулей Intel Wi-Fi AX211, реализован режим сканирования OCE (Optimized Connectivity Experience), обеспечивающий получение расширенной информации о точках доступа, и решены проблемы со сканированием сетей в диапазоне 6GHz.
    • Добавлен драйвер x86-android-tablets для планшетных ПК на базе архитектуры x86, поставляемых с платформой Android.
    • Добавлена поддержка сенсорных экранов TrekStor SurfTab duo W1 и электронного пера для планшентов Chuwi Hi10 Plus и Pro.
    • В драйверы для SoC Tegra 20/30 добавлена поддержка управления питанием и напряжением. Обеспечена возможность загрузки на старых 32-разрядных устройствах на базе SoC Tegra, таких как 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.
    • Добавлена поддержка звуковых систем и кодеков AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, Intel systems using NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. Решены проблемы с Tegra194 HD-audio. Добавлена поддержка HDA для кодеков CS35L41. Улучшена поддержка звуковых систем для ноутбуков Lenovo и HP, а также материнских плат Gigabyte.




    • Оставьте свой комментарий !

      Ваше имя:
      Комментарий:
      Оба поля являются обязательными

       Автор  Комментарий к данной статье