Релиз ядра Linux 5.5
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.5. Среди наиболее заметных изменений: возможность назначения сетевым интерфейсам альтернативных имён, интеграция криптографических функций из библиотеки Zinc, возможность зеркалирования на более чем 2 диска в Btrfs RAID1, механизм отслеживания состояния Live-патчей, фреймворк unit-тестирования kunit, повышена производительность беспроводного стека mac80211, возможность доступа к корневому разделу через протокол SMB, реализована верификация типов для BPF.
Основные новшества:
- Дисковая подсистема, ввод/вывод и файловые системы
- Для файловой системы Btrfs добавлена поддержка алгоритмов расчёта контрольных сумм xxhash64, blake2b и sha256. В реализация RAID1 обеспечена возможность зеркалирования данных на три (raid1c3) или четыре (raid1c4) устройства (ранее зеркалирование было ограничено двумя устройствами), что позволяет сохранить данные при одновременной потере 2 или 3 устройств. Например, при зеркалировании трёх накопителей в RAID1 обеспечивается надёжность на уровне RAID6, достигается более высокая производительность, но требуется на 33% больше дискового пространства;
- Реализована возможность использования SMB/CIFS для корневого раздела. В CIFS также добавлена поддержка системного вызова flock () и многоканальной передачи данных (для передачи данных в рамках одного сеанса могут устанавливаться несколько сетевых соединений);
- В реализации клиента к файловой системе NFS добавлена поддержка ускорения операций между разными устройствами (передача файлов с одного NFS-сервера на другой без копирования на сторону клиента);
- Из файловой системы XFS на уровень VFS вынесен код «iomap», который теперь можно использовать и в других ФС для обеспечения надёжного прямого ввода/вывода. Поддержка «iomap» уже добавлена в Ext4;
- В ФС 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), которое гостевая система не выполнялась;
- Память и системные сервисы
- Добавлен механизм отслеживания состояния 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-идентификатор для нового процесса в каждом пространстве имён;
- Изменён алгоритм балансировки нагрузки в планировщике задач, которые теперь учитывает метрики PELT (Per-Entity Load Tracking);
- Добавлен новый драйвер «hmem» с реализацией поддержки памяти специального назначения, определяемой системными прошивками. Подобная память может создаваться для определённых приложений, например, которым требуется особенно высокая пропускная способность. Драйвер может экспортировать данную память как устройство или как часть системного пула памяти;
- Добавлен фреймворк для unit-тестирования KUnit;
- Удалён системный вызов sysctl (), который много лет назад был объявлен устаревшим, не собирался по умолчанию (требовал указания настройки CONFIG_SYSCTL_SYSCALL) и не поддерживался в Glibc (вызов sysctl () предоставлялся для совместимости с BSD-системами, а для изменения параметров применялся интерфейс /proc/sys);
- Добавлен механизм для симуляции событий трассировки, который можно использовать для тестирования ПО, используемого для отладки и трассировки. Такеж реализована поддержка запуска отдельного обработчика для трассивроки событий в ядре, независимого от обработчика трассировки в пространстве пользователя;
- В kcov (debugfs-интерфкйс для анализа покрытия кода ядра) добавлено отслеживание выполнения фоновых потоков в ядре;
- Сетевая подсистема
- Добавлен механизм для назначения альтернативных имён сетевым интерфейсам, позволяющий применять для одного интерфейса сразу несколько имён. Размер имени может достигать 128 символов (ранее имя сетевого интерфейса было ограничено 16 символами). Для прикрепления дополнительного имени нужно использовать команду «ip link prop add» (например, «ip link prop add enx00e04c361e4c altname eth0»). Реализация основана на прикреплении к интерфейсу дополнительных свойств и в будущем может быть расширена другими параметрами, не ограничивающихся альтернативными именами;
- В подсистеме 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. Возможность может оказаться полезной для организации взаимодействия во вложенных виртуальных машинах, использующих разные гипервизоры;
- Аппаратные архитектуры
- Для архитектуры ARM64 реализована полная функциональность подсистемы ftrace, включая доступ к аргументам отслеживаемых функций;
- Для архитектуры MIPS добавлена поддержка kcov для анализа статистики о покрытии кода ядра;
- На системах x86 обеспечена эмуляция системного вызова iopl (), позволяющего выставить уровень привилегий ввода/вывода. При выставлении наивысшего уровня привилегий, процесс помимо неограниченного доступа к порту ввода/вывода также мог отключить прерывания, что могло применяться во вредоносных целях. Реализованная эмуляция блокирует возможность отключения и включения прерываний при помощи iopl ();
- Для архитектуры RISC-V реализовна поддержка механизма фильтрации системных вызовов seccomp (), в том числе с возможностью использования фильров вместе с BPF;
- Добавлена поддержка систем RISC-V без блока управления памятью (MMU, Memory-Management Unit);
- Для архитектуры xtensa реализована поддержка загрузки с использованием ядер запускаемых по месту (XIP, execute-in-place, выполнение с исходного носителя, без копирования в ОЗУ);
- Оборудование
Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 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).
Источник: http://www.opennet.ru/opennews/art.shtml? num=52256
© OpenNet