Релиз ядра Linux 5.2

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.2. Среди наиболее заметных изменений: режим работы Ext4 без учёта регистра символов, раздельные системные вызовы для монтирования ФС, DRM-драйверы для GPU Mali 4xx/ 6xx/7xx, возможность обработки изменения значений sysctl в программах BPF, device-mapper модуль dm-dust, защита от атак MDS, поддержка Sound Open Firmware для DSP, оптимизация производительности BFQ, доведение подсистемы PSI (Pressure Stall Information) до возможности использования в Android.

В новую версию принято 15100 исправлений от 1882 разработчиков, размер патча — 62 Мб (изменения затронули 30889 файлов, добавлено 625094 строк кода, удалено 531864 строк). Около 45% всех представленных в 5.2 изменений связаны с драйверами устройств, примерно 21% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 3% — файловыми системами и 3% c внутренними подсистемами ядра. 12.4% всех изменений подготовлено компанией Intel, 6.3% — Red Hat, 5.4% — Google, 4.0% — AMD, 3.1% — SUSE, 3% — IBM, 2.7% — Huawei, 2.7% — Linaro, 2.2% — ARM, 1.6% — Oracle.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для Ext4 добавлена поддержка работы без различия регистра символов в именах файлов, которая активируется только в привязке к отдельным пустым каталогам при помощи нового атрибута »+F» (EXT4_CASEFOLD_FL). При установке данного атрибута на каталог все операции с файлами и подкаталогами внутри будут производиться без учёта регистра символов, в том числе регистр будет игнорироваться при операциях поиска и открытия файлов (например, файлы Test.txt, test.txt и test.TXT в подобных каталогах будут считаться одинаковыми). По умолчанию, за исключением каталогов с атрибутом »+F» , ФС продолжает быть регистрозависимой;
    • Унифицированы функции обработки символов UTF-8 в именах файлов, которые применяются при выполнении операций сравнения и нормализации строк;
    • В XFS добавлена инфраструктура для отслеживания состояния файловой системы и новый ioctl для запроса статуса работоспособности;
    • Добавлен новый модуль device-mapper «dm-dust», позволяющий симулировать появление bad-блоков на носителе или ошибок при чтении с диска. Модуль позволяет упростить отдадку и тестирование приложений и различных систем хранения в условиях возможного появления сбоев;
    • Проведена значительная оптимизация производительности планировщика ввода/вывода BFQ. В условиях высокой нагрузки на ввод/вывод внесённые оптимизации позволяют до 80% сократить время таких операций, как запуск приложений;
    • В интерфейс для асинхронного ввода/вывода io_uring добавлена новая операция IORING_OP_SYNC_FILE_RANGE, выполняющая действия, эквивалентные системному вызову sync_file_range (), а также реализована возможность регистрации eventfd с io_uring и получения уведомлений о завершении операций;
    • Добавлена серия системных вызовов для монтирования файловых систем: fsopen (), open_tree (), fspick (), fsmount (), fsconfig () и move_mount. Данные системные вызовы позволяют раздельно обработать разные стадии монтирования (обработать суперблок, получить информацию об ФС, примонтировать, прикрепить к точке монтирования), которые ранее выполнялись при помощи общего системного вызова mount (). Раздельные вызовы дают возможность выполнять более сложные сценарии монтирования и отдельно выполнять такие операции, как перенастройка суперблока, включение опций, изменение точки монтирования и перенос в другое пространство имён. Кроме того, раздельная обработка позволяет точно определять причны вывода кодов ошибок и задавать несколько источников для многослойных ФС, таких как overlayfs;
    • Для файловой системы CIFS добавлен ioctl FIEMAP, обеспечивающий эффективное опоставление экстентов;
    • Улучшена реализация монтирования NFSv4 в режиме «soft» (при возникновении ошибки доступа к серверу в режиме «soft» вызов в сразу возвращает код ошибки, а при режиме «hard» управление не отдаётся до возобновления доступности ФС или таймаута). В новом выпуске обеспечена более точная обработка таймаута, ускорено восстановление после сбоя и добавлена новая опция монтирования «softerr», позволяющая изменить код ошибки, возвращаемый при наступления таймаута, на ETIMEDOUT;
    • В API nfsdcld, предназначенном для отслеживания состояния клиенов NFS, обеспечена возможность корректного отслеживания NFS-сервером состояния клиента при перезагрузке. Таким образом, демон nfsdcld теперь может выполнять роль обработчика nfsdcltrack;
  • Виртуализация и безопасность
    • Проведена работа по устранению мест в ядре, допускающих выполнение кода из доступных на запись отражённых областей памяти, что позволяет блокировать потенциальные бреши, которые могут быть эксплуатированы при атаке;
    • Добавлен новый параметр командной строки ядра «mitigations=», предотавляющий упрощённый способ управления включением тех или иных техник защиты от уязвимостей, связанных со спекулятивным выполнением инструкций в CPU. Передача «mitigations=off» выключает все имеющиеся методы, а применяемый по умолчанию режим «mitigations=auto» включает заищиту, но не влияет на использование Hyper Threading. Режим «mitigations=auto, nosmt» дополнительно выключает Hyper Threading, если того требует метод защиты.
    • Добавлена поддержка эллиптических кривых GOST R 34.10–2012 (RFC 7091, ISO/IEC 14888–3);
    • Код ядра почти избавлен от непрерывающихся выражений casе в switch (без return или break после каждого блока case). Осталось исправить 32 из 2311 случая подобного использования switch, после чего при сборке ядра можно будет применять режим »-Wimplicit-fallthrough»;
    • Для архитектуры PowerPC реализована поддержка аппаратных механизмов ограничения нежелательных путей для доступа ядра к данным в пространстве пользователя;
    • Добавлен код для блокирования атак класса MDS (Microarchitectural Data Sampling) в процессорах Intel. Проверить подверженность системе уязвимости можно через SysFS-переменную »/sys/devices/system/cpu/vulnerabilities/mds». Доступно два режима защиты: полный, требующий наличия обновлённого микрокода, и обходной, который полностью не гарантирует очистку буферов CPU при передаче управления в пространство пользователя или гостевой системе. Для управления режимами защиты в ядро добавлен параметр «mds=», который может принимать значения «full», «full, nosmt» (+ отключение Hyper-Threads) и «off»;
  • Сетевая подсистема
    • Добавлена поддержка шлюзов IPv6 для маршрутов IPv4. Например, теперь можно указывать правила маршрутизации вида «ip ro add 172.16.1.0/24 via inet6 2001: db8::1 dev eth0»;
    • Для ICMPv6 реализованы ioctl-вызовы icmp_echo_ignore_anycast и icmp_echo_ignore_multicast для игнорирования ICMP ECHO для anycast и multicast адресов. Добавлена возможность ограничения интенсивности обработки пакетов ICMPv6;
    • Для mesh-протокола B.A. T.M.A. N. («Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы, добавлена поддержка трансляции из multicast в unicast, а также возможность управлния через sysfs;
    • В ethtool добавлен новый параметр Fast Link Down, позволяющий сократить время поступления информации о событии отключения линка для 1000BaseT (в обычных уловиях задержка составляет до 750ms);
    • Возможность привязки туннелей Foo-Over-UDP к определённому адресу, сетевому интерфейсу или сокету;
    • В беспроводном стеке обеспечена возможность реализации обработчиков OWE (Opportunistic Wireless Encryption) в пространстве пользователя;
    • В Netfilter в цепочки nat добавлена подержка семейства адресов inet (например, теперь можно использовать одно правило трансляции для обработки ipv4 и ipv6, без разделения правил для ipv4 и ipv6);
    • В netlink добавлен режим strict для жёсткой проверки корректности всех сообщений и атрибутов, в котором не допускается превышение ожидаемого размера атрибутов и добавление добавочных данных в конце сообщений;
  • Память и системные сервисы
    • В системный вызов clone () добавлен флаг CLONE_PIDFD, при указании которого родительскому процессу возвращается файловых дескриптор «pidfd», отождествлённый с созданным дочерним процессом. Данный файловый дескриптор, например, можно использовать для отправки сигналов без опасения столкнуться с состоянием гонки (сразу после отправки сигнала целевой PID может быть освобождён из-за завершения работы процесса и занят другим процессом);
    • Для второй версии cgroups добавлена функциональность контроллера freezer, при помощи которого можно остановать работу в cgroup и временно высвободить некоторые ресурсы (CPU, ввод/вывод и потенциально даже память) для выполнения других задач. Управление производится через управляющие файлы cgroup.freeze и cgroup.events в дереве cgroup. Запись 1 в cgroup.freeze замораживает процессы в текущем cgroup и всех дочерних группах. Так как заморозка требует некоторого времени, дополнительно предложен файл cgroup.events через который можно узнать о завершении операции;
    • Обеспечен экспорт атрибутов памяти, прикреплённой к каждому узлу в sysfs, что позволяет из пространства пользователя определить характер обработки банков памяти в системах с гетерогенной памятью;
    • Доработана подсистема PSI (Pressure Stall Information), которая позволяет проанализировать информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для определённых задач или наборов процессов в cgroup. При помощи PSI обработчики в пространстве пользователя могут более точно оценить уровень загруженности системы и характер замедления работы, по сравнению с Load Average. В новой версии обеспечена возможность настройки порогов чувстивтельности и использвать вызов poll () для получения уведомления о срабатывании установленных пороговых значений за определённый промежутов времени. Данная возможность позволяет организовать в Android отслеживание нехватки памяти на ранней стадии, определять истоник проблем и завершать неважные приложения, не доводя до появления заметных пользователю проблем. При стресс-тестировании средства мониторинга потребления памяти на основе PSI продемонстировали с 10 раз меньше ложных срабатываний по сравнению со статистикой vmpressure;
    • Проведена оптимизация кода для проверки BPF-программ, который для больших программ стал выполнять проверку до 20 раз быстрее. Оптимизация позволила поднять лимит на размер BPF-программ с 4096 до миллиона инструкций;
    • Для BPF-программ предоставлена возможность доступа к глобальных данным, что позволяет определять в программах глобальные переменные и константы;
    • Добавлен API, позволяющий контролировать из BPF-программ изменения параметров sysctl;
    • Для архитектуры MIPS32 реализован JIT-компилятор для виртуальной машины eBPF;
    • Для 32-разрядной архитектуры PowerPC добавлена поддержка отладочного инструмента KASan (Kernel address sanitizer), обеспечивающего выявление ошибок при работе с памятью;
    • На системах x86–64 снято ограничение по размещению дампов состояния при крахе ядра (crash-dump) в областях памяти ниже 896MB;
    • Для архитектуры s390 реализована поддержка рандомизации адресного пространства ядра (KASLR) и возможность верификации цифровых под KGDBписей при загрузке ядра через kexec_file_load ();
    • Для архитектуры PA-RISC добавлена поддержка отладчика ядра (KGDB), меток перехода и kprobes;
  • Оборудование
    • В состав включён драйвер Lima для GPU Mali 400/450, применяемого во многих старых чипах на основе архитектуры ARM. Для более новых GPU Mali добавлен драйвер Panfrost, поддерживающий чипы на базе микроархитектур Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) и Bifrost (Mali G3x, G5x, G7x);
    • Добавлена поддержка звуковых устройств, использующих открытые прошивки Sound Open Firmware (SOF). Несмотря на наличие открытых драйверов, код прошивок для звуковых чипов до сих пор оставался закрытым и поставлялся в бинарном виде. Проект Sound Open Firmware разработан компаний Intel для создания открытых прошивок для DSP-чипов, связанных с обработкой звука (подзнее к разработке также подклюился Google). В настоящее время в рамках проекта уже подготовлены открыте прошивки для звуковых чипов платформ Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake и IceLake;
    • В DRM-драйвере Intel (i915) добавлена поддержка чипов Elkhartlake (Gen11). Добавлены PCI-идентификаторы для чипов Comet Lake (Gen9), и добавлены дополнительные идентификаторы для Icelake. Включён режим асинхроннго переключения между двумя буферами в видеопамяти (async flip) при выполении операций записи через mmio, что позволило заметно поднять производительность некоторых 3D-приложений (например, производительнлсть в тесте 3DMark Ice Storm увеличилась на 300–400%). Добавлена поддержка технологии HDCP2.2 (High-bandwidth Digital Content Protection) для шифрования видеосигнала, передаваемого чере HDMI;
    • В драйвер amdgpu для GPU Vega20добавлена поддержка RAS (Reliability, Availability, Serviceability) и экспериментальная поддержка подсистемы SMU 11, пришедшей на смену технологии Powerplay. Для GPU Vega12 добавлена поддержка режима BACO (Bus Active, Chip Off). Добавлена начальная поддержка XGMI, высокоскоростной шины (PCIe 4.0) для соединения GPU. В драйвер amdkfd добавлены недостающие идентификаторы карт на базе GPU Polaris10;
    • В драйвер Nouveau добавлена плат на основе чипсета NVIDIA Turing 117 (TU117). В kconfig добавлена настройка для отключения устаревших функций, которые уже не применяются в актуальных выпусках libdrm;
    • В API DRM и драйвер amdgpu добавлена поддержка объектов синхронизации «timeline», позволяющих обойтись без классических блокировок.
    • Из ветки staging в основной состав перенесён драйвер vboxvideo для виртуального GPU VirtualBox;
    • Добавден драйвер aspeed для GFX чипа SoC ASPEED;

Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.1 — Linux-libre 5.1-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске включена загрузка файлов Sound Open Firmware. Отключена загрузка блобов в драйверах mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp и ucsi_ccg. Обновлён код чистки блобов в драйверах и подсистемах ixp4xx, imx-sdma, amdgpu, nouveau и goya, а также в документации к микрокоду. Прекращена чистка блобов в драйвере r8822be из-за его удаления.

© OpenNet