Ядро 5.5
27.01.2020
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.5. Среди наиболее заметных изменений: возможность назначения сетевым интерфейсам альтернативных имён, интеграция криптографических функций из библиотеки Zinc, возможность зеркалирования на более чем 2 диска в Btrfs RAID1, механизм отслеживания состояния Live-патчей, фреймворк unit-тестирования kunit, повышение производительности беспроводного стека mac80211, возможность доступа к корневому разделу через протокол SMB, верификация типов в BPF.
В новую версию принято 15505 исправлений от 1982 разработчиков,
размер патча - 44 Мб (изменения затронули 11781 файлов, добавлено 609208 строк кода, удалено 292520 строк). Около 44% всех представленных в 5.5 изменений связаны с драйверами устройств, примерно 18% изменений имеют
отношение к обновлению кода специфичного для аппаратных архитектур, 12%
связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними
подсистемами ядра.
Основные новшества:
- Дисковая подсистема, ввод/вывод и файловые системы
- Для файловой системы Btrfs добавлена поддержка алгоритмов расчёта контрольных сумм xxhash64, blake2b и sha256. В реализации RAID1 обеспечена возможность зеркалирования данных на три (raid1c3) или четыре (raid1c4) устройства (ранее зеркалирование было ограничено двумя устройствами), что позволяет сохранить данные при одновременной потере 2 или 3 устройств. Например, при зеркалировании трёх накопителей в RAID1 обеспечивается надёжность на уровне RAID6, достигается более высокая производительность, но требуется на 33% больше дискового пространства;
- Реализована возможность использования SMB/CIFS для корневого раздела. В CIFS также добавлена поддержка системного вызова flock() и многоканальной передачи данных (для передачи данных в рамках одного сеанса могут устанавливаться несколько сетевых соединений);
- В реализации клиента к файловой системе NFS появилась поддержка ускорения операций между разными устройствами (передача файлов с одного NFS-сервера на другой без копирования на сторону клиента);
- Из файловой системы XFS на уровень VFS вынесен код "iomap", который теперь можно использовать и в других ФС для обеспечения надёжного прямого ввода/вывода. Поддержка "iomap" уже добавлена в Ext4. В XFS также осуществлён переход на новый API для монтирования ФС и переработан near-режим сканирования экстентов, что позволило решить проблему с задержками при операции tail.
- В Ext4 обеспечена возможность использования блоков меньшего размера при шифровании (ранее шифрование осуществлялось только блоками, размер которых совпадал с размером страниц памяти (4096));
- В F2FS реализован режим закрепления файла с выравниванием по границе 2MB для размещения в полностью корректном сегменте, что гарантирует отсутствие дальнейшего перераспределения данного файла сборщиком мусора;
- В ФС hugetlbfs добавлена возможность создания файлов с флагом O_TMPFILE;
- Системный вызов statx() теперь может применяться для определения защиты файла с использованием fs-verity;
- Добавлена поддержка мониторинга состояния датчиков температуры устройств NVMe c использованием API hwmon (поддерживается в libsensors и команде "sensors"), доступ к которому не требует повышенных привилегий (ранее сведения о температуре отражались в "smart log", который был доступен только для root).
- Виртуализация и безопасность
- В рамках проекта по интеграции в ядро VPN WireGuard, в штатный Crypto API перенесены многие функции из криптографической библиотеки
Zinc, в том числе быстрые реализации алгоритмов ChaCha20 и Poly1305;
- В криптоподсистему добавлена поддержка хэш-функции blake2b, обеспечивающей очень высокую производительность вычисления хеша при сохранении надёжности на уровне SHA-3, а также сокращённый вариант Blake2s.
- В Crypto API добавлена реализация эллиптических кривых Curve25519, предложенных Дэниелом Бернштейном;
- Добавлены хуки для подключения через LSM-модули и SELinux обработчиков доступа к системному вызову perf_event_open();
- В гипервизоре KVM на архитектуре x86 обеспечена возможность обработки вложенных пятиуровневых таблиц страниц памяти и добавлена поддержка инструкции XSAVES для процессоров AMD. Для процессоров ARM64 добавлена возможность передачи гостевой системе информации о времени (stolen-time), которое гостевая система не выполнялась;
- В AppArmor добавлена начальная поддержка хранения результирующих raw-правил в сжатом виде (применяется алгоритм deflate). Для управления уровнем сжатия предложен sysctl "apparmor.rawdata_compression_level";
- Память и системные сервисы
- Добавлен механизм отслеживания состояния Live-патчей, упрощающий комбинированное применение нескольких live-патчей к работающей системе. Очередной live-патч может определить изменения, добавленные ранее применёнными патчами, убедиться в совместимости с ними и проверить, что применяемый патч ранее не был установлен;
- Расширены возможности подсистемы eBPF. Упрощена разработка переносимых BPF-программ на языке Си - в libbpf реализован принцип: скомпилировал один раз - запускается везде. Предложена начальная реализация механизма верификации BTF (BPF Type Format), который может использоваться в ядре для проверки типов в псевдокоде BPF.
Указанная возможность задействована для BPF-программ, вызываемых при срабатывании точек трассировки (tracepoints), и используется для проверки указателей в передаваемых при вызове аргументах. Кроме того, добавлен механизм "BPF trampoline", позволяющий практически свести к нулю накладные расходы при передаче вызовов между ядром и программами BPF;
- Продолжено усовершенствование интерфейса асинхронного ввода/вывода io_uring. В том числе добавлена возможность изменения набора файлов без необходимости их повторной регистрации, поддержка определения произвольного размера цикличного буфера завершённых операций (CQ), возможность указания абсолютных значений таймаута и поддержка системных вызовов, создающих файловые дескрипторы (например, вызов accept()). Добавлена новая команда IORING_OP_CONNECT для асинхронного выполнения вызовов connect();
- В системный вызов clone3() c реализацией расширяемого варианта интерфейса clone(), допускающего указание большего числа флагов, добавлен флаг CLONE_CLEAR_SIGHAND для очистки всех обработчиков сигнала в создаваемом процессе. Привилегированные процессы через clone3() теперь могут выбирать PID-идентификатор для нового процесса в каждом пространстве имён;
- Изменён алгоритм балансировки нагрузки в планировщике задач CFS (Completely Fair Scheduler), который теперь учитывает метрики PELT (Per-Entity Load Tracking);
- Добавлен новый драйвер "hmem" с реализацией поддержки памяти специального назначения (EFI Specific Purpose Memory), определённой в спецификации EFI 2.8 для системных прошивок. Подобная память может создаваться для определённых приложений, например, которым требуется особенно высокая пропускная способность. Драйвер может экспортировать данную память как устройство или как часть системного пула памяти;
- Добавлен фреймворк для unit-тестирования KUnit;
- Удалён системный вызов sysctl(), который много лет назад был объявлен устаревшим, не собирался по умолчанию (требовал указания настройки CONFIG_SYSCTL_SYSCALL) и не поддерживался в Glibc (вызов sysctl() предоставлялся для совместимости с BSD-системами, а для изменения параметров применялся интерфейс /proc/sys);
- Добавлен механизм для симуляции событий трассировки, который можно использовать для тестирования ПО, используемого для отладки и трассировки. Так же реализована поддержка запуска отдельного обработчика для трассировки событий в ядре, независимого от обработчика трассировки в пространстве пользователя;
- В kcov (debugfs-интерфейс для анализа покрытия кода ядра) добавлено отслеживание выполнения фоновых потоков в ядре;
- Сетевая подсистема
- Добавлен механизм для назначения альтернативных имён сетевым интерфейсам, позволяющий одновременно применять для одного интерфейса сразу несколько имён (в том числе применять несколько шаблонов udev). Размер имени может достигать 128 символов (ранее имя сетевого интерфейса было ограничено 16 символами). Для прикрепления дополнительного имени нужно использовать команду "ip link prop add" (например, "ip link prop add enx00e04c361e4c altname someothername"). Реализация основана на прикреплении к интерфейсу дополнительных свойств и в будущем может быть расширена другими параметрами, не ограничивающимися альтернативными именами;
- В подсистеме mac80211 реализованы лимиты для очередей эфирного времени (AQL, Airtime Queue Limits), позволяющие оптимизировать управление очередями Wi-Fi и повысить эффективность работы алгоритма управляемой задержки (CoDel, Сontrolled Delay) с драйверами, поддерживающими вынос операций (offloading) на сторону прошивки и оборудования;
- В сетевой протокол TIPC (Transparent Inter-process Communication), предназначенный для организации межпроцессного взаимодействия в кластере, добавлена поддержка шифрования и аутентификации всех сообщений;
- Для сокетов с адресацией AF_VSOCK, предназначенных для сетевого взаимодействия приложений гостевых систем и хостов, реализована возможность одновременного использования нескольких видов транспорта (vsock-transport, vmci-transport, vhost-transport и virtio-transport). В том числе разные виды транспорта можно назначать для обмена в направлениях guest->host и host->guest. Возможность может оказаться полезной для организации взаимодействия во вложенных виртуальных машинах, использующих разные гипервизоры;
- Обеспечено кэширование успешных результатов проверки входящих пакетов в таблице маршрутизации, при групповой обработке очереди поступающих пакетов, в условиях когда не применяется маршрутизация в зависимости от адреса источника и все пакеты в группе имеют один и тот же адрес назначения. Оптимизация позволила повысить пропускную способность на 17% при тестировании UDP-флудом на один адрес назначения;
- Реализованы 64-разрядные счётчики числа пакетов (qdisc), но для сохранения совместимости пользователю при запросе статистики в структуре gnet_stats_basic по-прежнему возвращаются 32-разрядные значения (для запроса 64-разрядных счётчиков добавлен флаг TCA_STATS_PKT64);
- Реализация протокола SCTP расширена возможностями, определёнными в RFC 7829 (поддержка алгоритма Quick Failover);
- В подсистему netfilter добавлена возможность использования масок в "hash:net,iface", что позвляет указывать в правилах префикс интерфейса вместо его полного имени. В цепочках POSTROUTING появилась поддержка сопоставлений с входящим интерфейсом (iif). Реализована возможность применения механизмов аппаратного ускорения (offload) при обработке flowtable (механизм выбора пути перенаправления пакетов), а также при сопоставлении входящего интерфейса и VLAN. Добавлена поддержка сопоставления с C-VLAN;
- Аппаратные архитектуры
- Для архитектуры x86 реализована поддержка пятиуровневых страниц памяти, позволяющих существенно увеличить возможный размер ОЗУ;
- Для архитектуры ARM64 реализована полная функциональность подсистемы ftrace, включая доступ к аргументам отслеживаемых функций;
- Для архитектуры MIPS добавлена поддержка kcov для анализа статистики о покрытии кода ядра;
- На системах x86 обеспечена эмуляция системного вызова iopl(), позволяющего выставить уровень привилегий ввода/вывода. Ранее при выставлении наивысшего уровня привилегий, процесс помимо неограниченного доступа к порту ввода/вывода, также мог отключить прерывания, что могло применяться во вредоносных целях. Реализованная эмуляция блокирует возможность отключения и включения прерываний при помощи iopl();
- Для архитектуры RISC-V реализована поддержка механизма фильтрации системных вызовов seccomp(), в том числе с возможностью использования фильтров вместе с BPF;
- Добавлена поддержка систем RISC-V без блока управления памятью (MMU, Memory-Management Unit);
- Для архитектуры xtensa реализована поддержка загрузки с использованием ядер, запускаемых по месту (XIP, execute-in-place, выполнение с исходного носителя, без копирования в ОЗУ);
- Добавлена начальная поддержка процессоров Loongson-3A R4;
- Оборудование
- В DRM-драйвер для видеокарт Intel добавлена поддержка чипов семейства Jasper Lake, улучшена поддержка чипов Tiger Lake. Реализована возможность вывода через Display Port в режиме HDR (High Dynamic Range). Добавлена настройка DRM_I915_UNSTABLE для включения экспериментальных изменений, нарушающих совместимость API/ABI. Для чипов Gen12+ включена поддержка технологии защиты от копирования HDCP 1.4 и 2.2 (High-bandwidth Digital Content Protection). Добавлена поддержка механизма Display State Buffer (DSB), предоставляющего движок DMA, который можно запрограммировать для пакетной загрузки данных из памяти без привлечения CPU;
- В драйвере amdgpu добавлена поддержка технологии защиты от копирования HDCP 1.4. Реализована возможность импорта и экспорта dma-buf без применения вспомогательных DRM-обработчиков. Для GPU Vega 20 обеспечена поддержка RAS (Reliability Availability Serviceability). Добавлена поддержка MSI-X. Для GPU Navi добавлена возможность разгона (OverDrive) через sysfs. Для GPU Arcturus добавлена поддержка EEPROM и задействованы VCN-движки для ускорения кодирования видео. Добавлена поддержка ASIC Dali, основанного на Raven2. Добавлены PCI-идентификаторы для карт на базе GPU Navi12 и Navi14. Включена поддержка движков кодирования VCN2.5;
- В драйвер amdkfd (для дискретных GPU, таких как Fiji, Tonga, Polaris) добавлена поддержка карт на базе GPU Navi12, Navi14 и Renoir. Обеспечена возможность работы на архитектуре POWER;
- В драйвер adreno добавлена поддержка GPU Adreno 510;
- В драйвер tegra добавлена поддержка DisplayPort для чипов Tegra 210, 186 и 194;
- В virtio-gpu добавлена поддержка mmap;
- В подсистему DRM (Direct Rendering Manager) добавлен режим быстрого отключения (unmapping) VRAM-буферов в GEM, не приводящий к изменению таблицы страниц памяти;
- В звуковой подсистеме появилась поддержка механизма WoV (wake-on-voice), применяемого для вывода из ждущего режима некоторых моделей Chromebook на базе SoC Mediatek;
- Добавлен новый HID-драйвер для игровых клавиатур Logitech (G15, G15 v2);
- Добавлена поддержка рабочих станций SGI Octane/Octane2;
- Добавлена поддержка ARM SoC Broadcom BCM2711, Amlogic Meson A1 и G12, Freescale S32V234, Marvell Armada AP807/AP807-quad, Marvell Armada CP115, Realtek RTD1293 и RTD1296, Rockchip RK3308;
- Добавлена поддержка ARM-плат и платформ Raspberry Pi 4, Luxul XWC-2000, FriendlyARM NanoPi Duo2, Amlogic Ugoos am6, Atmel at91 Overkiz Kizbox2/3, Marvell Espressobin, NXP i.MX8MN, i.MX8QXP Colibri, S32V234 EVB, Netronix E60K02, Kobo Clara HD, Kontron N6311/N6411, Renesas Salvator-XS, Rockchip Beelink A1, Renesas HiHope RZ/G2N, Marvell CN913x, Droid Bionic xt875, NetCom Plus 1xx/2xx/4xx/8xx,
Aspeed Rainier, Aspeed Tacoma.
Одновременно латиноамериканский Фонд свободного ПО сформировал
вариант полностью свободного ядра 5.5 - Linux-libre 5.5-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах для Ethernet-адаптеров Realtek RTL815[23] с интерфейсом USB, беспроводных адаптерах WFX wf200, звуковых кодеках IDT Clockmatrix и RT5677. Обновлён код чистки блобов в драйверах и подсистемах wilc1000, brcmstb_dpfe, r8169, iwlwifi, драйвере dmi для сенсорных экранов, xhci-tegra, i915 и mlxsw (Mellanox Spectrum ASIC).
|
|