Релиз ядра Linux 5.3
16 сентября 2019 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.3. Среди наиболее заметных изменений: поддержка GPU AMD Navi, процессоров Zhaoxi и технологии управления энергопотреблением Intel Speed Select, возможность использования инструкций umwait для ожидания без использования циклов, повышающий интерактивность режим 'utilization clamping' для асимметричных CPU, системный вызов pidfd_open, возможность использования IPv4-адресов из подсети 0.0.0.0/8, возможность аппаратного ускорения nftables, поддержка HDR в подсистеме DRM, интеграция гипервизора ACRN.
В анонсе нового выпуска Линус напомнил всем разработчикам о главном правиле разработки ядра - сохранение неизменности поведения для компонентов пространства пользователя. Изменения в ядре никаким образом не должны нарушать уже работающие приложения и приводить к регрессиям на пользовательском уровне. При этом нарушение поведения может вызвать не только изменение ABI, удаление устаревшего кода или появление ошибок, но и косвенное влияние корректно работающих полезных улучшений. В качестве наглядного примера была отброшена полезная оптимизация в коде Ext4, сокращающая число обращений к накопителю за счёт отключения упреждающего чтение таблицы inode при мелких запросах ввода/вывода.
Оптимизация привела к тому, что из-за снижения дисковой активности энтропия для генератора случайных чисел getrandom() стала накапливаться медленнее и в некоторых конфигурациях при определённом стечении обстоятельств могли наблюдаться подвисания во время загрузки до заполнения пула энтропии. Так как оптимизация действительно полезная, среди разработчиков возникла дискуссия, в которой предлагалось устранить проблему за счёт отключения по умолчанию блокирующего режима работы вызова getrandom() с добавлением опционального флага для ожидания энтропии, но подобное изменение повлияет на качество случайных чисел на начальном этапе загрузки. В коммите с откатом изменения Линус отметил, что планирует вернуть оптимизацию обратно, как только проблема с getrandom() будет решена.
В новую версию принято 15794 исправлений от 1974 разработчиков, размер патча - 92 Мб (изменения затронули 13986 файлов, добавлено 258419 строк кода, удалено 599137 строк). Около 39% всех представленных в 5.3 изменений связаны с драйверами устройств, примерно 12% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра.
- Память и системные сервисы
- Продолжено развитие функциональности 'pidfd', помогающей обрабатывать ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). Ранее в ядро уже был добавлен
системный вызов pidfd_send_signal() и флаг CLONE_PIDFD в вызове clone(), позволяющий получить pidfd для использования в idfd_send_signal(). При использовании вызова clone() с флагом CLONE_PIDFD могли возникать проблемы с сервисными менеджерами или системой принудительного завершения процессов при нехватке памяти в платформе Android. В этом случае для запуска используется вызов fork() или clone() без CLONE_PIDFD.
В ядре 5.3 представлен системный вызов pidfd_open(), позволяющий получить проверяемый pidfd для произвольного существующего процесса, созданного не через вызов clone() с флагом CLONE_PIDFD. Также добавлена поддержка поллинга pidfd при помощи poll() и epoll(), что позволяет в менеджерах процессов отслеживать завершения произвольных процессов, не опасаясь состояния гонки в случае присвоения PID новому процессу. Механизм уведомления о завершении работы процесса, связанного с pidfd, аналогичен информированию о завершении своего дочернего процесса;
- В планировщик задач добавлена поддержка механизма закрепления нагрузки ( Utilization clamping), позволяющего придерживаться минимального или максимального диапазонов частот, в зависимости от активных на CPU задач. Представленный механизм ускоряет задачи, которые напрямую влияют на качество взаимодействия с пользователем, через запуск этих задач как минимум в нижней границе "запрошенной" частоты. Низкоприоритетные задачи, не сказывающиеся на работе пользователя, запускаются c использованием верхнего лимита "разрешённой" частоты. Лимиты задаются через атрибуты sched_uclamp_util_min и sched_uclamp_util_max в системном вызове sched_setattr().
- Добавлена поддержка технологии управления энергопотреблением Intel Speed Select, доступной на некоторых серверах с процессорами Intel Xeon. Указанная технология позволяет устанавливать настройки производительности и пропускной способности разделов для разных ядер CPU, что позволяет сделать более приоритетной производительность для задач, выполняемых на определённых ядрах, жертвуя производительностью на других ядрах;
- Процессам в пространстве пользователя предоставлена возможность ожидания в течение небольшого времени без использования циклов при помощи инструкции umwait. Данная инструкция, вместе с инструкциями umonitor и tpause, будет предложена в готовящихся к выпуску чипах Intel "Tremont", и позволит реализовывать задержки, эффективные с точки зрения энергопотребления и не влияющие на производительность других потоков при использовании Hyper Threading;
- Для архитектуры RISC-V добавлена поддержка больших страниц памяти (huge pages);
- В механизм трассировки "kprobes" добавлена возможность разыменования указателей ядра в пространство пользователя, что может применяться, например, для оценки содержимого структур, передаваемых в системные вызовы. Также добавлена возможность установки проверок на этапе загрузки.
- В файл конфигурации добавлена опция PREEMPT_RT для работы в режиме реального времени. Сам код для поддержки режима реального времени пока не добавлен в ядро, но появление опции является хорошим знаком, что многолетняя эпопея по интеграции патчей Realtime-Preempt близится к финалу;
- Добавлен системный вызов clone3() c реализацией более расширяемого варианта интерфейса clone(), допускающего указание большего числа флагов;
- Добавлен обработчик bpf_send_signal(), позволяющий BPF-программам отправлять сигналы произвольным процессам;
- Для событий perf в окружении гипервизора KVM добавлен новый механизм фильтрации событий, позволяющий администратору определить типы событий, допустимые или не допустимые для мониторинга на стороне гостевой системы;
- В механизм верификации eBPF-приложений добавлена возможность обработки программ с циклами, если выполнение цикла ограничено и не может привести к превышению лимита на максимальное число инструкций;
- Дисковая подсистема, ввод/вывод и файловые системы
- Для файловой системы XFS реализована возможность многопоточного обхода inode (например, при проверке квот). Добавлены новые ioctl BULKSTAT и INUMBERS, предоставляющие доступ к возможностям, появившимся в пятой редакции формата ФС, таким как время рождения inode и возможность задания параметров BULKSTAT и INUMBERS для каждой группы AG (Allocation Groups);
- В Ext4 добавлена поддержка пустот в каталогах (не привязанных блоков).
Обеспечена обработка флага "i" (immutable) для открытых файлов (запрет записи в ситуации, если флаг был установлен в момент, когда файл уже был открыт);
- В Btrfs обеспечено определение быстрой реализации crc32c на всех архитектурах;
- В CIFS с кода для поддержки smbdirect снят признак экспериментальной разработки. В SMB3 добавлена возможность использования криптоалгоритмов в режиме GCM. Добавлена новая опция монтирования для извлечения параметров режима из записей ACE (Access Сontrol Entry). Оптимизирована производительность вызова open();
- В F2FS добавлена опция для ограничения сборщика мусора при работе в режиме checkpoint=disable. Добавлен ioctl для удаления диапазонов блоков из F2FS, что позволяет реализовать корректировку размера раздела на лету. Добавлена возможность размещения в F2FS файла подкачки с обеспечением прямого ввода/вывода. Для всех пользователей добавлена поддержка закрепления файла и выделения блоков для подобных файлов;
- В интерфейс для асинхронного ввода/вывода io_uring добавлена поддержка асинхронных операций sendmsg() и recvmsg();
- В файловую систему UBIFS добавлена поддержка сжатия с использованием алгоритма zstd и возможность верификации подписанных образов ФС;
- В ФС Ceph добавлена поддержка меток безопасности SELinux для файлов;
- Для NFSv4 реализована новая опция монтировния "nconnect=", определяющая число установленных с сервером соединений. Трафик между этими соединениями будет распределяться с использованием балансировки нагрузки. Кроме того, сервером NFSv4 теперь создаётся каталог /proc/fs/nfsd/clients с информацией о текущих клиентах, включая сведения об открытых ими файлах;
- Виртуализация и безопасность
- В состав ядра включён гипервизор для встраиваемых устройств ACRN, который написан с оглядкой на готовность для выполнения задач реального времени и пригодность к использованию в критически важных системах. ACRN обеспечивает минимальные накладные расходы, гарантирует низкие задержки (low latency) и адекватную отзывчивость при взаимодействии с оборудованием. Поддерживается виртуализация ресурсов CPU, ввода/вывода, сетевой подсистемы, операций с графикой и звуком. ACRN может применяться для запуска нескольких изолированных виртуальных машин в электронных блоках управления, приборных панелях, автомобильных информационных системах, потребительских IoT-устройств и другой встраиваемой техники;
- В User-mode Linux добавлен режим "путешествия во времени", позволяющий замедлить или ускорить время в виртуальном окружении UML для упрощения отладки связанного со временем кода. Кроме того добавлен параметр
time-travel-start, позволяющий стартовать системные часы с указанного момента в epoch-формате;
- Добавлены новые опции командной строки ядра "init_on_alloc" и "init_on_free", при указании которых включается обнуление выделяемых и освобождаемых областей памяти (заполнение нулями при malloc и free), что позволяет усилить безопасность за счёт дополнительных накладных расходов на инициализацию;
- Добавлен новый драйвер virtio-iommu с реализацией паравиртализированного устройства, позволяющего отправлять IOMMU-запросы, такие как ATTACH, DETACH, MAP и UNMAP, поверх транспорта virtio без эмуляции таблиц страниц памяти;
- Добавлен новый драйвер virtio-pmem, представляющий доступ к устройствам хранения, отражённым в физическое адресное пространство, таким как NVDIMM;
- Реализована возможность прикрепления криптографических ключей к пользовательскому или сетевому пространству имён (ключи становятся недоступны за пределами выбранного пространства имён), а также защиты ключей при помощи ACL;
- В криптоподсистему добавлена поддержка очень быстрого алгоритма некриптографичекого хэширования xxhash, скорость которого упирается в производительность памяти;
- Сетевая подсистема
- Обеспечена обработка адресов IPv4 в диапазоне 0.0.0.0/8, который ранее был недоступен для использования. Введение данной подсети позволит распределить ещё 16 млн адресов IPv4;
- В Netfilter для nftables добавлена поддержка механизмов аппаратного ускорения фильтрации пакетов за счёт применения добавленного в драйверы Flow Block API. На сторону сетевых адаптеров могут выноситься целые таблицы правил со всеми цепочками. Включение производится через привязку флага NFT_TABLE_F_HW к таблице. Поддерживаются простые метаданные протоколов 3 и 4 уровней, действия принять/отбросить, сопоставления по IP и сетевым портам отправителя/получателя и типу протокола;
- Добавлена встроенная поддержка отслеживания соединений для сетевых мостов, не требующая применения эмулирующей прослойки br_netfilter;
- В nf_tables добавлена поддержка модуля SYNPROXY, повторяющего аналогичную функциональность из iptables, а также реализована возможность проверки в правилах по отдельным опциям в заголовке IPv4;
- Добавлена возможность прикрепления BPF-программ к системным вызовам setsockopt() и getsockopt(), что, например, позволяет прикрепить свои обработчики доступа к этим вызовам. Кроме того, добавлена новая точка вызова (hook), при помощи которой можно организовать вызов BPF-программы один раз за каждый интервал RTT (round-trip-time, время пинга);
- Для IPv4 и IPv6 добавлен новый механизм хранения данных маршрутизации nexthop, нацеленный на увеличение масштабируемости таблиц маршрутизации. Проведённые тесты показали, что при использовании новой системы набор в 743 тысяч маршрутов был загружен в ядро всего за 4.3 секунды;
- Для Bluetooth реализована функциональность, необходимая для поддержки LE ping;
- Оборудование
- Добавлена поддержка x86-совместимых процессоров компании Zhaoxin, развиваемых в результате совместного проекта VIA Technologies и муниципалитета Шанхая. Семейство CPU ZX построено на базе архитектуры x86-64 Isaiah, продолжающей развитие технологий VIA Centaur;
- В подсистему DRM (Direct Rendering Manager), а также в графические драйверы amdgpu и i915, добавлена поддержка разбора, обработки и отправка через HDMI-порт метаданных HDR (расширенный динамический диапазон), позволяющего использовать HDR-панели и экраны, способные отображать дополнительные диапазоны яркости;
- В драйвер amdgpu добавлена начальная поддержка GPU AMD NAVI (RX5700), которая включает базовый драйвер, код для взаимодействия с экранами (DCN2), поддержку GFX и вычислений (GFX10),
SDMA 5 (System DMA0), средства управления питанием и мультимедийные кодировщики/декодировщики (VCN2). В amdgpu также улучшена поддержка карт на базе GPU Vega12 и Vega20, для которых добавлены дополнительные возможности управления памятью и энергопотреблением;
- В драйвер amdkfd (для дискретных GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка карт на базе GPU VegaM;
- В DRM-драйвере для видеокарт Intel для чипов Icelake реализован новый мультисегментный режим гамма-коррекции. Добавлена возможность вывода через DisplayPort в формате YCbCr4:2:0. Добавлены новые прошивки GuC для SKL, BXT, KBL, GLK и ICL. Реализована возможность отключения питания экрана в асинхронном режиме. Добавлена поддержка сохранения и восстановления контекста рендеринга для чипов Ironlake (gen5) и gen4 (Broadwater - Cantiga), что позволяет из пространства пользователя восстанавливать состояние GPU при перехода от выполнения одних пакетных операций к другим;
- В драйвере Nouveau обеспечено определение чипсета NVIDIA Turing TU116;
- Расширены возможности DRM/KMS-драйвера для ускорителей экранных операций ARM Komeda (Mali D71), добавлена поддержка масштабирования, разделения/слияния слоёв, поворота, отложенной записи, AFBC, SMMU и форматов кодирования цвета Y0L2, P010, YUV420_8/10BIT;
- В драйвер MSM добавлена поддержка серии A540 GPU Adreno, применяемой в процессорах Qualcomm, а также поддержка DSI-контроллера MSM8998 для Snapdragon 835;
- Добавлены драйверы для LCD-панелей Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 и VXT VL050-8048NT-C01;
- Добавлен драйвер для задействования средств ускорения декодирования
видео, доступных в SoC Amlogic Meson;
- В драйвере v3d (для GPU Broadcom Video Core V, используемого в Raspberry Pi) появилась поддержка диспетчеризации вычислительных шейдеров;
- Добавлен драйвер для SPI-клавиатур и трекпадов, применяемых в современных моделях ноутбуков Apple MacBook и MacBookPro;
- Добавлена дополнительная защита ioctl-вызовов, связанных с драйвером floppy, а сам драйвер помечен как оставленный без сопровождения
("orphaned"), что подразумевает прекращение его тестирования. Драйвер пока сохраняется в ядре, но его корректная работа не гарантируется. Драйвер рассматривается как устаревший, так как для его тестирования трудно найти работающее оборудование - все актуальные внешние накопители, как правило, используют интерфейс USB.
- Добавлен cpufreq-драйвер для плат Raspberry Pi, позволяющий динамически управлять изменением частоты процессора;
- Добавлена поддержка новых ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) и Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), а также плат:
- Purism Librem5,
- Aspeed BMC,
- Microsoft Olympus BMC,
- Kontron SMARC,
- Novtech Meerkat96 (i.MX7),
- ST Micro Avenger96,
- Google Cheza (Qualcomm SDM845),
- Qualcomm Dragonboard 845c (Qualcomm SDM845),
- Hugsun X99 TV Box (Rockchip RK3399),
- Khadas Edge/Edge-V/Captain (Rockchip RK3399),
- HiHope RZ/G2M,
- NXP LS1021A-TSN.
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.3 - Linux-libre 5.3-gnu (Архивная копия от 16 ноября 2020 на Wayback Machine), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах qcom, hdcp drm, allegro-dvt и meson-vdec. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, звуковом драйвере для skylake, а также в документации к микрокоду.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.