ຫຼັງຈາກສອງເດືອນຂອງການພັດທະນາ, Linus Torvalds ແນະ ນຳ ການປ່ອຍແກ່ນ Linux 5.7. Среди наиболее заметных изменений: новая реализация ФС exFAT, модуль bareudp для создания UDP-туннелей, защита на основе аутентификации указателей для ARM64, возможность прикрепления BPF-программ к LSM-обработчикам, новая реализация Curve25519, детектор «split-lock», совместимость BPF с PREEMPT_RT, снятие ограничения на 80-символьный размер строки в коде, учёт показателей температуры CPU в планировщике задач, возможность использования clone() для порождения процессов в другом cgroup, защита от записи в память при помощи userfaultfd.
Добавлена новая реализация драйвера exFAT, ສ້າງຕັ້ງຂຶ້ນ на актуальной кодовой базе «sdfat» (2.x), развиваемой компанией Samsung для своих Android-смартфонов. Ранее добавленный в ядро драйвер был основан на устаревшем коде Samsung (версия 1.2.9) и отставал по производительности от нового драйвера примерно на 10%. Напомним, что добавление поддержки exFAT в ядро стало возможным после того, как компания Microsoft ຈັດພີມມາ общедоступные спецификации и предоставила возможность безвозмездного использования патентов на exFAT в Linux.
В Btrfs реализована новая команда ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, позволяющая удалять подраздел по его идентификатору. Обеспечена полная поддержка клонирования inline-экстентов. Расширено число точек отмены операций перераспределения, что позволило сократить длительные ожидания при выполнении команды ‘balance cancel’. Ускорено определение обратных ссылок на экстенты (например, время выполнения тестового сценария уменьшилось с часа до нескольких минут). Добавлена возможность прикрепления к каждому inode дерева экстентов файла. Переработана схема блокировки, используемая при записи в подразделы и при исключении NOCOW. Повышена эффективность выполнения fsync для диапазонов.
В XFS улучшена проверка метаданных и выполнение fsck для активных разделов. Предложена библиотека для перестроения структур btree, которая в будущем будет использована для переработки xfs_repair и реализации возможности восстановления без отмонтирования раздела.
В CIFS добавлена экспериментальная поддержка размещения раздела подкачки в SMB3-хранилищах. Реализованы POSIX-расширения в readdir, определённые в спецификации SMB3.1.1. Повышена производительность записи для страниц размером 64KB при включении режима cache=strict и использовании версий протокола 2.1+.
ФС EXT4 переведена с bmap и iopoll на использование iomap.
В F2FS реализована опциональная поддержка сжатия данных с использованием алгоритма zstd. По умолчанию для сжатия задействован алгоритм LZ4. Добавлена поддержка команды «chattr -c commit». Обеспечено отображение времени монтирования. Добавлен ioctl F2FS_IOC_GET_COMPRESS_BLOCKS для получения сведений о числе сжатых блоков. Добавлены данные о сжатии, выводимые через statx.
В файловой системе Ceph добавлена возможность локального выполнения операций создания и удаления (unlink) файла без ожидания ответа от сервера (работа в асинхронном режиме). Изменение, например, позволяет заметно поднять производительность при работе утилиты rsync.
В OVERLAYFS добавлена возможность использования virtiofs в качестве ФС верхнего уровня.
Переписан код обхода путей в VFS, переделан код разбора символических ссылок и унифицирован обход точек монтирования.
В подсистеме scsi непривилегированным пользователям ອະນຸຍາດ выполнение команд ZBC.
В dm_writecache ປະຕິບັດ возможность постепенной очистки кеша на основании параметра max_age, задающего максимальное время жизни блока.
В dm_integrity ເພີ່ມ поддержка операции «discard».
В null_blk ເພີ່ມ поддержка подстановки ошибок для симуляции сбоев при проведении тестирования.
ເພີ່ມແລ້ວ возможность отправки udev-уведомлений об изменении размера блочного устройства.
ລະບົບຍ່ອຍເຄືອຂ່າຍ
В Netfilter включены ການປ່ຽນແປງ, значительно ускоряющие обработку больших списков сопоставления (nftables set), в которых требуется проверка сочетания подсетей, сетевых портов, протокола и MAC-адресов.
Оптимизации ແນະນໍາ в модуль nft_set_pipapo (PIle PAcket POlicies), решающий задачу сопоставления содержимого пакета с применяемыми в правилах фильтрации произвольными диапазонами состояния полей, такими как диапазоны IP и сетевых портов (nft_set_rbtree и nft_set_hash манипулируют сопоставлением интервалов и прямым отражением значений). Векторизированная при помощи 256-разрядных инструкций AVX2 верcия pipapo на системе с процессором AMD Epyc 7402 показала прирост производительности на 420% при разборе 30 тысяч записей, включающих связки порт-протокол. Прирост при сопоставлении связки из подсети и номера порта при разборе 1000 записей составил 87% для IPv4 и 128% для IPv6.
ເພີ່ມແລ້ວ модуль bareudp, позволяющий инкапсулировать в UDP-туннель различные L3-протоколы, такие как MPLS, IP и NSH.
Продолжена интеграция компонентов MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
ເພີ່ມແລ້ວ поддержка механизмов аппаратного ускорения инкапсуляции Ethernet-кадров в 802.11 (Wi-Fi).
При перемещении устройства из одного пространства имён сетевой подсистемы (network namespace) в другое обеспечена корректировка прав доступа и владельца соответствующих файлов в sysfs.
Предоставлена возможность использования флага SO_BINDTODEVICE пользователями, не имеющими прав root.
Принята третья часть патчей, переводящих инструментарий ethtool с ioctl() на использование интерфейса netlink. Новый интерфейс упрощает добавление расширений, улучшает обработку ошибок, позволяет отправлять уведомления при изменении состояния, упрощает взаимодействие между ядром и пространством пользователя и сокращает число синхронизируемых именованных списков.
Добавлена возможность использования специальных аппаратных ускорителей для выполнения операций отслеживания соединений.
В netfilter ເພີ່ມ хук для подключения классификаторов исходящих пакетов (egress), дополнивший собой ранее присутствовавший хук для входящих пакетов (ingress).
Virtualization ແລະຄວາມປອດໄພ
Добавлена аппаратная реализация аутентификации указателей (Pointer Authentication), использующая специализированные инструкции CPU ARM64 для защиты от атак, использующих приёмы возвратно-ориентированного программирования (ROP) при которых атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления. Защита сводится к использованию цифровых подписей для проверки адресов возврата на уровне ядра. Подпись хранится в неиспользуемых верхних битах самого указателя. В отличие от программных реализаций создание и проверка цифровых подписей производится при помощи специальных инструкций CPU.
ເພີ່ມແລ້ວ возможность защиты области памяти от записи при помощи системного вызова userfaultfd(), предназначенного для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя. Идея в том, чтобы использовать userfaultfd() и для отслеживания нарушения доступа к страницам, помеченным защищёнными от записи, и вызова обработчика, который может реагировать на подобные попытки записи (например, для обработки изменений в процессе создания live-снапшотов работающих процессов, фиксации состояния при сбросе дампов памяти на диск, реализации разделяемой памяти, отслеживания изменений в памяти). Функциональность эквивалентна применению mprotect() в связке с обработчиком сигнала SIGSEGV, но работает заметно быстрее.
В SELinux объявлен устаревшим параметр «checkreqprot», позволяющий отключить проверку защиты памяти при обработке правил (допускал использование исполняемых областей памяти, независимо от предписаний, заданных в правилах). Символическим ссылкам kernfs разрешено наследование контекста родительских каталогов.
ສ່ວນປະກອບ ລວມ ໂມດູນ KRSI, позволяющий прикреплять BPF-программы к любым LSM-хукам в ядре. Изменение позволяет создавать LSM-модули (Linux Security Module) в форме BPF-программ для решения задач аудита и мандатного контроля доступа.
ປະຕິບັດ оптимизация производительности /dev/random за счёт пакетной передачи значений CRNG вместо отдельного вызова инструкций RNG. Улучшена работа getrandom и /dev/random на системах ARM64, предоставляющих инструкции RNG.
Реализация эллиптической кривой Curve25519 ທົດແທນ на вариант из библиотеки HACL, для которого приведено математическое доказательство формальной верификации надёжности.
ເພີ່ມແລ້ວ механизм информирования о свободных страницах памяти. При помощи данного механизма гостевые системы могут передавать хост-системе сведения о страницах, которые больше не используются, и данные страницы хост может забрать обратно.
В vfio/pci ເພີ່ມ поддержка SR-IOV (Single-Root I/O Virtualization).
ຫນ່ວຍຄວາມຈໍາແລະການບໍລິການລະບົບ
C 80 до 100 символов ເພີ່ມຂຶ້ນ ограничение на максимальную длину строки в исходных текстах. При этом разработчикам по-прежнему рекомендуется держаться в границах 80 символов в строке, но это теперь не является жёстким лимитом. Кроме того, превышение лимита на размер строки теперь будет приводить к выводу предупреждения при сборке только если утилита checkpatch запущена с опцией «—strict’. Изменение даст возможность не отвлекать разработчиков на ການຫມູນໃຊ້ с пробелами и более свободно чувствовать себя при выравнивании кода, а также ຈະປ້ອງກັນ излишнее разбиение строк, мешающее восприятию кода и поиску.
ເພີ່ມແລ້ວ поддержка смешанного режима загрузки EFI, позволяющего без применения специализированного загрузчика загрузить 64-разрядное ядро из 32-разрядной прошивки, выполняемой на 64-разрядном CPU.
ເປີດໃຊ້ແລ້ວ система выявления и отладки расщеплённых блокировок («split lock«), возникающих при доступе к невыровненным данным в памяти из-за того, что при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Подобные блокировки приводят к значительному падению производительности (на 1000 циклов медленнее, чем атомарная операция с данными, попадающими в одну линию кеша). В зависимости от загрузочного параметра «split_lock_detect» ядро может на лету выявлять подобные блокировки и выводить предупреждения или отправлять сигнал SIGBUS приложению, вызвавшему блокировку.
В планировщике задач обеспечено отслеживание показателей датчиков температуры (Thermal Pressure) и реализован учёт перегрева при размещении задач. Пользуясь выдаваемой статистикой обработчик температуры (thermal governor) может корректировать максимальную частоту CPU при перегреве, а планировщик задач теперь учитывает снижение вычислительной мощности из-за подобного урезания частоты при планировании запуска задач (раньше планировщик реагировал на изменение частоты с определённой задержкой, какое-то время принимая решения на основе завышенных предположениях о доступных вычислительных ресурсах).
В планировщике задач задействованы инвариантные показатели отслеживания нагрузки, позволяющие корректно оценить нагрузку, независимо от текущей частоты работы CPU. Изменение позволяет более точно прогнозировать поведение задач в условиях динамического изменения вольтажа и частоты CPU. Например, задача, которая потребляла 1/3 ресурсов CPU при частоте 1000 MHz, станет потреблять 2/3 ресурсов при снижении частоты до 500 MHz, что раньше создавало ложное предположение о работе на полную мощность (т.е. задачи для планировщика казались более крупными только за счёт снижения частоты, что приводило к принятию неверных решений в schedutil cpufreq governor).
Драйвер Intel P-state, отвечающий за выбор режимов производительности, переведён на использование ຕາຕະລາງ.
Реализована возможность использования подсистемы BPF при работе ядра в режиме реального времени (PREEMPT_RT). Ранее при включении PREEMPT_RT предписывалось отключение BPF.
Добавлен новый тип BPF-программ — BPF_MODIFY_RETURN, которые могут прикрепляться к функции в ядре и изменять возвращаемое данной функцией значение.
ເພີ່ມແລ້ວ ໂອກາດ использования системного вызова clone3() для создания процесса в cgroup, отличающемся от родительского cgroup, что позволяет родительскому процессу применить ограничения и включить аккаунтинг сразу после порождения нового процесса или потока. Например, сервисный менеджер может напрямую выделять новые сервисы в отдельные cgroup, а новые процессы при помещении в «замороженные» cgroup и будут сразу остановлены.
в Kbuild ເພີ່ມ поддержка переменной окружения «LLVM=1» для переключения на инструментарий Clang/LLVM при сборке ядра. Подняты требования к версии binutils (2.23).
В debugfs добавлена секция /sys/kernel/debug/kunit/ с результатами тестов kunit.
Добавлен параметр загрузки ядра pm_debug_messages (аналог/sys/power/pm_debug_messages), включающий вывод отладочной информации о работе системы управления питанием (полезно при отладке проблем со спящим и ждущим режимом).
Улучшено профилирование cgroup при помощи инструментария perf. Ранее perf мог профилировать задачи только в определённом cgroup и не мог узнать к какой cgroup принадлежит текущий образец. Теперь perf получает сведения о cgroup для каждой выборки, что позволяет профилировать более одного cgroup и применять сортировку по
cgroup в отчётах.
В cgroupfs, псевдо-ФС для управления cgroups, добавлена поддержка расширенных атрибутов (xattrs) при помощи которых, например, можно оставлять дополнительную информацию для обработчиков в пространстве пользователя.
В cgroup memory controller ເພີ່ມа поддержка рекурсивной защиты значения «memory.low», регулирующего минимальный объём оперативной памяти, предоставленной участникам группы. При монтировании иерархии cgroup с опцией «memory_recursiveprot» значение «memory.low», которое установлено для нижних узлов, автоматически будет распределяться для всех дочерних узлов.
ເພີ່ມແລ້ວ фреймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для совместного использования виртуальных адресов (SVA, Shared Virtual Addressing) между CPU и периферийными устройствами, позволяющий аппаратным ускорителям получить доступ к структурам данных в основном CPU.
ສະຖາປັດຕະຍະກຳຮາດແວ
Для архитектуры ARM реализована возможность горячего извлечения памяти.
Для архитектуры RISC-V добавлена поддержка горячего подключения и извлечения CPU (CPU hotplug). Для 32-разрядных RISC-V реализован eBPF JIT.
Убрана возможность использования 32-разрядных ARM-систем для запуска гостевых окружений KVM.
Удалена «фиктивная» реализация NUMA для архитектуры s390, для которой так и не найдены сценарии использования, позволяющие добиться повышения производительности.
Для ARM64 добавлена поддержка расширения AMU (Activity Monitors Unit), определённого в ARMv8.4 и предоставляющего счётчики производительности, которые использованы для расчёта коэффициентов коррекции масштабирования частоты в планировщике задач.
ອຸປະກອນ
ເພີ່ມແລ້ວ поддержка устройств vDPA, в которых используется канал обмена данных, соответствующий спецификациям virtio. vDPA-устройства могут быть как физически подключённым оборудованием, так и эмулируемыми программно виртуальными устройствами.
В подсистеме GPIO ປາກົດວ່າ новая команда ioctl() для мониторинга изменений, позволяющая наладить информирование процесса об изменении состояния любой линии GPIO. В качестве примера использования новой команды ສະ ເໜີ утилита gpio-watch.
В DRM-драйвере i915 для видеокарт Intel ລວມ по умолчанию поддержки чипов Tigerlake («Gen12») и добавлена начальная поддержка управления подсветкой OLED. Улучшена поддержка чипов Ice Lake, Elkhart Lake, Baytrail и Haswell.
В драйвере amdgpu ເພີ່ມ возможность загрузки прошивок в чип USBC для ASIC. Улучшена поддержка чипов AMD Ryzen 4000 «Renoir». Появилась поддержка управления OLED-панелями. Обеспечено отображение состояния прошивки в debugfs.
В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 4 в гостевых системах (раннее поддерживался OpenGL 3.3).
Добавлен новый DRM-драйвер tidss для дисплейной системы платформы TI Keystone.