Sau hai tháng phát triển, Linus Torvalds giới thiệu phát hành hạt nhân Linux 5.7. Среди наиболее заметных изменений: новая реализация ФС exFAT, модуль bareudp для создания UDP-туннелей, защита на основе аутентификации указателей для ARM64, возможность прикрепления BPF-программ к LSM-обработчикам, новая реализация Curve25519, детектор «split-lock», совместимость BPF с PREEMPT_RT, снятие ограничения на 80-символьный размер строки в коде, учёт показателей температуры CPU в планировщике задач, возможность использования clone() для порождения процессов в другом cgroup, защита от записи в память при помощи userfaultfd.
Phiên bản mới bao gồm 15033 bản sửa lỗi từ 1961 nhà phát triển,
размер патча — 39 МБ (изменения затронули 11590 файлов, добавлено 570560 строк кода,
297401 hàng đã bị xóa). Khoảng 41% được trình bày trong phần 5.7
những thay đổi liên quan đến trình điều khiển thiết bị, khoảng 16% thay đổi là
thái độ đối với việc cập nhật mã cụ thể cho kiến trúc phần cứng, 13%
liên quan đến ngăn xếp mạng, 4% cho hệ thống tệp và 4% cho nội bộ
các hệ thống con hạt nhân.
Добавлена новая реализация драйвера exFAT, thành lập на актуальной кодовой базе «sdfat» (2.x), развиваемой компанией Samsung для своих Android-смартфонов. Ранее добавленный в ядро драйвер был основан на устаревшем коде Samsung (версия 1.2.9) и отставал по производительности от нового драйвера примерно на 10%. Напомним, что добавление поддержки exFAT в ядро стало возможным после того, как компания Microsoft được phát hành общедоступные спецификации и предоставила возможность безвозмездного использования патентов на 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 непривилегированным пользователям cho phép выполнение команд ZBC.
В dm_writecache thực hiện возможность постепенной очистки кеша на основании параметра max_age, задающего максимальное время жизни блока.
В null_blk thêm поддержка подстановки ошибок для симуляции сбоев при проведении тестирования.
Thêm возможность отправки udev-уведомлений об изменении размера блочного устройства.
Hệ thống con mạng
В Netfilter включены thay đổi, значительно ускоряющие обработку больших списков сопоставления (nftables set), в которых требуется проверка сочетания подсетей, сетевых портов, протокола и MAC-адресов.
Tối ưu hóa giới thiệu в модуль 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.
Thêm модуль bareudp, позволяющий инкапсулировать в UDP-туннель различные L3-протоколы, такие как MPLS, IP и NSH.
Продолжена интеграция компонентов MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
Thêm поддержка механизмов аппаратного ускорения инкапсуляции Ethernet-кадров в 802.11 (Wi-Fi).
При перемещении устройства из одного пространства имён сетевой подсистемы (network namespace) в другое обеспечена корректировка прав доступа и владельца соответствующих файлов в sysfs.
Предоставлена возможность использования флага SO_BINDTODEVICE пользователями, не имеющими прав root.
Принята третья часть патчей, переводящих инструментарий ethtool с ioctl() на использование интерфейса netlink. Новый интерфейс упрощает добавление расширений, улучшает обработку ошибок, позволяет отправлять уведомления при изменении состояния, упрощает взаимодействие между ядром и пространством пользователя и сокращает число синхронизируемых именованных списков.
Добавлена возможность использования специальных аппаратных ускорителей для выполнения операций отслеживания соединений.
В netfilter thêm хук для подключения классификаторов исходящих пакетов (egress), дополнивший собой ранее присутствовавший хук для входящих пакетов (ingress).
Ảo hóa và bảo mật
Добавлена аппаратная реализация аутентификации указателей (Xác thực con trỏ), использующая специализированные инструкции CPU ARM64 для защиты от атак, использующих приёмы возвратно-ориентированного программирования (ROP) при которых атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления. Защита сводится к использованию цифровых подписей для проверки адресов возврата на уровне ядра. Подпись хранится в неиспользуемых верхних битах самого указателя. В отличие от программных реализаций создание и проверка цифровых подписей производится при помощи специальных инструкций CPU.
Thêm возможность защиты области памяти от записи при помощи системного вызова userfaultfd(), предназначенного для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя. Идея в том, чтобы использовать userfaultfd() и для отслеживания нарушения доступа к страницам, помеченным защищёнными от записи, и вызова обработчика, который может реагировать на подобные попытки записи (например, для обработки изменений в процессе создания live-снапшотов работающих процессов, фиксации состояния при сбросе дампов памяти на диск, реализации разделяемой памяти, отслеживания изменений в памяти). Функциональность эквивалентна применению mprotect() в связке с обработчиком сигнала SIGSEGV, но работает заметно быстрее.
В SELinux объявлен устаревшим параметр «checkreqprot», позволяющий отключить проверку защиты памяти при обработке правил (допускал использование исполняемых областей памяти, независимо от предписаний, заданных в правилах). Символическим ссылкам kernfs разрешено наследование контекста родительских каталогов.
Cấu trúc Bật nó lên mô-đun KRSI, позволяющий прикреплять BPF-программы к любым LSM-хукам в ядре. Изменение позволяет создавать LSM-модули (Linux Security Module) в форме BPF-программ для решения задач аудита и мандатного контроля доступа.
Đã tiến hành оптимизация производительности /dev/random за счёт пакетной передачи значений CRNG вместо отдельного вызова инструкций RNG. Улучшена работа getrandom и /dev/random на системах ARM64, предоставляющих инструкции RNG.
Реализация эллиптической кривой Curve25519 thay thế на вариант из библиотеки HACL, для которого được математическое доказательство формальной верификации надёжности.
Thêm механизм информирования о свободных страницах памяти. При помощи данного механизма гостевые системы могут передавать хост-системе сведения о страницах, которые больше не используются, и данные страницы хост может забрать обратно.
В vfio/pci thêm поддержка SR-IOV (Single-Root I/O Virtualization).
Dịch vụ bộ nhớ và hệ thống
C 80 до 100 символов tăng ограничение на максимальную длину строки в исходных текстах. При этом разработчикам по-прежнему рекомендуется держаться в границах 80 символов в строке, но это теперь не является жёстким лимитом. Кроме того, превышение лимита на размер строки теперь будет приводить к выводу предупреждения при сборке только если утилита checkpatch запущена с опцией «—strict’. Изменение даст возможность не отвлекать разработчиков на Thao tác с пробелами и более свободно чувствовать себя при выравнивании кода, а также sẽ ngăn chặn излишнее разбиение строк, мешающее восприятию кода и поиску.
Thêm поддержка смешанного режима загрузки EFI, позволяющего без применения специализированного загрузчика загрузить 64-разрядное ядро из 32-разрядной прошивки, выполняемой на 64-разрядном CPU.
Đã bao gồm система выявления и отладки расщеплённых блокировок («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, отвечающий за выбор режимов производительности, переведён на использование lịch trình.
Реализована возможность использования подсистемы BPF при работе ядра в режиме реального времени (PREEMPT_RT). Ранее при включении PREEMPT_RT предписывалось отключение BPF.
Добавлен новый тип BPF-программ — BPF_MODIFY_RETURN, которые могут прикрепляться к функции в ядре и изменять возвращаемое данной функцией значение.
Thêm cơ hội использования системного вызова clone3() для создания процесса в cgroup, отличающемся от родительского cgroup, что позволяет родительскому процессу применить ограничения и включить аккаунтинг сразу после порождения нового процесса или потока. Например, сервисный менеджер может напрямую выделять новые сервисы в отдельные cgroup, а новые процессы при помещении в «замороженные» cgroup и будут сразу остановлены.
в Kbuild thêm поддержка переменной окружения «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 thêmа поддержка рекурсивной защиты значения «memory.low», регулирующего минимальный объём оперативной памяти, предоставленной участникам группы. При монтировании иерархии cgroup с опцией «memory_recursiveprot» значение «memory.low», которое установлено для нижних узлов, автоматически будет распределяться для всех дочерних узлов.
Thêm фреймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для совместного использования виртуальных адресов (SVA, Shared Virtual Addressing) между CPU и периферийными устройствами, позволяющий аппаратным ускорителям получить доступ к структурам данных в основном CPU.
Kiến trúc phần cứng
Для архитектуры ARM реализована возможность горячего извлечения памяти.
Для архитектуры RISC-V добавлена поддержка горячего подключения и извлечения CPU (CPU hotplug). Для 32-разрядных RISC-V реализован eBPF JIT.
Убрана возможность использования 32-разрядных ARM-систем для запуска гостевых окружений KVM.
Удалена «фиктивная» реализация NUMA для архитектуры s390, для которой так и не найдены сценарии использования, позволяющие добиться повышения производительности.
Для ARM64 добавлена поддержка расширения AMU (Activity Monitors Unit), определённого в ARMv8.4 и предоставляющего счётчики производительности, которые использованы для расчёта коэффициентов коррекции масштабирования частоты в планировщике задач.
Оборудование
Thêm поддержка устройств vDPA, в которых используется канал обмена данных, соответствующий спецификациям virtio. vDPA-устройства могут быть как физически подключённым оборудованием, так и эмулируемыми программно виртуальными устройствами.
В подсистеме GPIO xuất hiện новая команда ioctl() для мониторинга изменений, позволяющая наладить информирование процесса об изменении состояния любой линии GPIO. В качестве примера использования новой команды gợi ý утилита gpio-watch.
В DRM-драйвере i915 для видеокарт Intel bao gồm по умолчанию поддержки чипов Tigerlake («Gen12») и добавлена начальная поддержка управления подсветкой OLED. Улучшена поддержка чипов Ice Lake, Elkhart Lake, Baytrail и Haswell.
В драйвере amdgpu thêm возможность загрузки прошивок в чип USBC для ASIC. Улучшена поддержка чипов AMD Ryzen 4000 «Renoir». Появилась поддержка управления OLED-панелями. Обеспечено отображение состояния прошивки в debugfs.
В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 4 в гостевых системах (раннее поддерживался OpenGL 3.3).
Добавлен новый DRM-драйвер tidss для дисплейной системы платформы TI Keystone.