В самом начале последней недели апреля увидела свет новая версия ядра Linux. Особенностью данного релиза стал сам факт того, что понадобился RC8. Помимо того в течении апреля произошла совершенно невероятная история с исправлениями из Университета Миннесоты, о которых следует рассказать отдельно, когда немного осядет пыль и полностью будет восстановлен ущерб от преднамеренно неисправных патчей.
Патч размером 39 MiB содержит труд 1873 разработчиков, из них 262 новых. Усилиями сообщества добавлено 518307 и удалено 313155 строк кода. Больше всего отличились следующие компании:
- Intel;
- Linaro;
- Red Hat;
- Google;
- Huawei Technologies;
- Facebook;
- NVIDIA;
- AMD;
- SUSE;
Но на втором месте по числу исправлений не отдельная компания, а Unknown, что не может не радовать. Из списка активных контрибютеров выпала компания Habana Labs.
▍- Графика
Львиную долю кодовой базы ядра Linux занимают драйвера, поэтому совсем неудивительно, что им посвящена значительная часть изменений и обновлений релиза.
Intel VRR / Adaptive-Sync
Для чипов Intel Tiger Lake (Gen 12) и более новых добавлена поддержка Variable Rate Refresh (VRR) / Adaptive-Sync. Данная функциональность пока существует лишь для DisplayPort / eDP подключений. HDMI Forum закрыл доступ к спецификациям, и по этой причине ощутить преимущества адаптивной синхронизации смогут только обладатели eDP дисплеев с VRR функционалом.
Разгон GPU Radeon RX 6000
В реализации RDNA 2 (Sienna Cichlid) на ОС Linux одной из отсутствующих функций была поддержка OverDrive разгона для графических карт серии Radeon RX 6800/6900. Наконец в новой версии ядра эта возможность реализована в драйвере amdgpu. Разгон Sienna Cichlid выполняется с использованием тех же атрибутов sysfs, которые в настоящее время разгоняют AMD GPU OverDrive.
Пиксельный формат FP16 для DCE
Благодаря патчам независимого разработчика Марио Кляйнеру в ядре появилась поддержка пиксельного формата FP16 для старых поколений графических процессоров ADM Radeon. Исправления затрагивают Display and Compositing Engine с 8-й по 11-ю версию. Это позволяет снять ограничения на неспособность старых устройств масштабировать фреймбуфер формата FP16.
AC/DC для GPU Radeon и прочие обновления для amdgpu
Включение функции ACDC на мобильных графических процессорах Radeon, где сила тока и тактовый диапазон изменяются в зависимости от того, работает ли ноутбук в режиме питания переменного или постоянного тока. При включенном бите функции микропрограммное обеспечение берет на себя управление обработкой функции. Кроме того для APU Van Gogh и GPU Navy 22, a. k. a. Navy Flounder появилась возможность сброса GPU.
▍- Файловые системы
Ожидаемые обновления вызывающей противоречивые чувства btrfs, XFS, CIFS и других.
Начальная поддержка зонированных устройств в btrfs
Зонированные блочные устройства обладают непривычными свойствами, это сделано с умыслом и во имя более плотной записи данных. Эти устройства разделены на зоны, в которых не возможен произвольный доступ для операций записи. Запись в таких зонах осуществляется только последовательно, от первого блока и до последнего.
Единственный способ перезаписи данных в последовательной зоне — это сброс указателя записи в начало зоны, что приведет к немедленному удалению всего содержимого. С другой стороны, полностью поддерживается произвольный доступ для чтения. Для файловых систем это создает определенные проблемы, так как разработка драйверов ведется с учетом того, что блоки хранения могут быть записаны в произвольном порядке. До сих пор поддержка зонированных устройств практически отсутствовала в основных ФС, однако с релизом Linux 5.12 btrfs получил эту функциональность.
Перенос идентификаторов при монтировании
Добавлен новый системный вызов mount_setattr(2)
, который дает возможность переносить идентификаторы прав с одного mount на другой для fat, ext4 и xfs. Перенос ID при монтировании файловой системы полезен для ряда серверных и DevOps сценариев. В частности ФС, в которых нет самой концепции владельца ресурса, как например vfat, могут использовать данную функциональность для реализации DAC (discretionary access control) проверок.
Режим ранней записи в NFS
Когда на NFS включен режим ранней записи, операции ввода будут немедленно отправляться на сервер. До этого кернел асинхронно отправлял их в фоновом режиме. В некоторых сценариях это дает преимущество, например, гарантирует, что клиент NFS немедленно увидит ошибки ENOSPC
.
Опции mount.tfs
дополнились новыми элементами:
writes=lazy
— текущий способ записи по умолчанию.writes=eager
— нестабильные операции ввода немедленно отправляются на сервер.writes=wait
— нестабильные операции ввода немедленно отправляются на сервер и затем ядро ожидает ответа на запрос.
XFS
Проведена активная работа по ускорению заморозки, когда выполняются только рабочие нагрузки для чтения, рефакторингу кода ведения журнала, более быстрому сканированию fsync и сборке мусора, а также продолжению работы над возможностью поддержки сжатия используемого дискового пространства.
F2FS
Добавлена поддержка выбора уровня сжатия для алгоритма LZ4, также реализована новая опция монтирования checkpoint_merge
. Еще в sysfs появились новые элементы:
/sys/fs/f2fs/<dev name>/stat/sb_status
для отображения статуса суперблока в режиме реальном времени в шестнадцатеричном формате;/sys/fs/f2fs/<disk>/ckpt_thread_ioprio
для изменения приоритета ввода-вывода службы совмещения контрольных точек.
CIFS
В настоящее время NFS и CIFS в Linux имеют параметр монтирования actimeo
для управления кэшированием метаданных но в то же время CIFS не имеет сопутствующих параметров монтирования для того, чтобы различать атрибуты каталога кэширования и файлы. Теперь же в CIFS эти опции добавлены: acregmax
для управления кэшированием файлов и acdirmax
для управления кэшированием атрибутов каталогов.
▍- Сетевая подсистема
TCP/IP стек ядра Linux занимает особое место в общей картине, в виду существенной сложности архитектуры и огромным возможностям по использованию в самых разнообразных устройствах. Сетевая инфраструктура больше других обеспечивает доминирование Linux ОС на серверах и продолжает развиваться семимильными шагами.
- добавлены уведомления при изменении флагов маршрутизации на сетевом оборудовании;
- netfilter, реализована структура владения таблицами, позволяющая пользователям привязывать таблицу вместе с содержимым к процессу через сокет netlink;
- TCP, изменения связанные с рандомизацией портов в протоколах транспортного уровня (RFC-6056).
- в IGMPv3 появилась поддержка механизма Explicit Host Tracking.
- cfg80211/mac80211, у пользователей появилась возможность отключить режим HE, аналогично тому, как можно отключить VHT и HT.
- hsr, реализована поддержка
EntryForgetTime
, благодаря чему удалось устранить проблемы связи с Cisco IE в режиме Redbox; - ipvs, новый алгоритм балансировки нагрузок, основанный на случайном выборе двух серверов, в зависимости от взвешенных оценок.
Опрос NAPI в потоках ядра
NAPI призвана решать повышать производительность при высоких, опрашивая сетевое устройство вместо ожидания IRQ. Этот опрос, однако, выполняется в контексте softirq, где планировщик задач не может его видеть, и это затрудняет настройку системы для максимальной производительности.
Благодаря исправлениям Wei Wang-а, а также Paolo Abeni, Felix Fietkau, и Jakub Kicinski ядро может по выбору создать отдельный поток для каждого сетевого интерфейса с поддержкой NAPI. После этого опрос NAPI будет выполняться в контексте этого потока, а не в программном прерывании. Это пока еще не избавление от softirq, но шаг в нужном направлении. Новое свойство активируется из sysfs через параметр /sys/class/net/<iface>/threaded
.
Multipath TCP
MPTCP является набором расширений (RFC-6824) протокола TCP, с помощью которых данные для одного соединения передаются через разные сетевые интерфейсы по нескольким IP маршрутам одновременно. В новой версии появилась поддержка MP_PRIO
для выставления приоритета определенным потоком нижнего уровня. Данный атрибут также определен в RFC-6824. Также улучшена возможность отображения IPv4 адресов в пространство IPv6.
Internet Protocol
Асинхронность установки маршрута в аппаратном обеспечении может привести к тому, что служба маршрутизации объявит маршрут до того, как он был фактически установлен в сетевом устройстве. Это может привести к потере пакетов или неправильной маршрутизации пакетов до тех пор, пока маршрут не будет фактически установлен в аппаратном обеспечении.
Ранее при сбое во время разгрузки маршрутов в пользовательское пространство не поступало никаких извещений и из-за этого демон маршрутизации мог бесконечно долго пребывать в состоянии ожидания. Новый патч добавляет статус offload_failed
с помощью флага RTM_F_OFFLOAD_FAILED
к маршрутам IPv4, чтобы пользователи могли лучше видеть процесс разгрузки.
▍- Безопасность
Сюда вошли исправления, связанные с Security Enhanced Linux, KFENCE, Trusted Protection Module и Integrity Management architecture.
KFENCE
Kernel Electric-Fence, или KFENCE, представляет из себя новое средство обнаружения ошибок безопасности памяти на основе выборки, отличительной особенностью которого является незначительная потеря производительности. KFENCE предназначен для ядер на промышленных системах и имеет практически нулевые накладные расходы на производительность. Новый детектор способен отловить такие ошибки использования памяти, как выход за пределы буфера и обращения после освобождения памяти.
Основная причина появления на свет KFENCE в способности обнаружить редкие сценарии с ошибками в коде, которые обычно не присутствуют в тестовых средах.
IMA
Integrity Measurement Architecture позволяет измерять данные в файлах и буферных массивах. Однако различные структуры данных, политики и состояния, хранящиеся в памяти ядра, тоже влияют на целостность системы. До недавнего времени IMA не обладала обобщенной функцией для измерения критически важных данных целостности ядра. Сейчас подобная возможность уже присутствует в подсистеме IMA.
Криптография
Из кода ядра удалены некоторые алгоритмы хэшей:
- RIPE-MD 128;
- RIPE-MD 256;
- RIPE-MD 320;
- Tiger 128;
- Tiger 160;
- Tiger 190.
Такая же судьба постигла алгоритм потокового шифрования Salsa20, а blake2 подтянулся до blake2s.
В картах eMMC стало возможным использовать встроенное шифрование.
▍- Nintendo 64
Хорошие новости для ретро-игроманов, в новой версии Linux наконец-то появилась поддержка игровой консоли Nintendo пятого поколения.
В далеком 1996 г․ компания выпустила игровую приставку Nintendo 64. Консоль была оснащена 64-битным процессором NEC VR4300 (MIPS R4300i) с тактовой частотой 93.75 МГц и стала самой производительной среди приставок середины 1990-х гг.
▍- Чипы и чипсеты
В Linux 5.12 было значительное число обновлений для архитектуры x86 и ARM.
x86
В настоящее время существует созданная сообществом, с помощью обратной разработки, поддержка Microsoft Surface System Aggregation Module (SAM). The system aggregation module в своей основе — это встроенный контроллер, найденный в более поздних версиях аппаратного обеспечения Surface. SAM отвечает за обработку состояния батареи, тепловую отчетность, ввод с сенсорной панели, поведение скрытой клавиатуры и многое другое.
Платформа Lenovo IdeaPad получила поддержку:
- подсветка клавиатуры;
- всегда на зарядке USB;
- повторное включение управления сенсорной панелью.
Также ACPI драйвер Lenovo ThinkPad теперь может управлять языковыми настройками клавиатуры и управлять режимами энергопотребления. Lenovo ThinkPad X1 Tablet Gen 2 обзавелся драйвером с поддержкой подсистемы HID.
ARM
В число поддерживаемых платформ, плат и устройств добавлены:
- ASUS ASUS Zenfone 2 Laser смартфон;
- Beacon i.MX8M Nano;
- Beacon EmbeddedWorks (на платах RZ/G2H и RZ/G2N);
- Boundary Devices i.MX8MM Nitrogen SBC;
- BQ Aquaris X5 a. k. a. Longcheer L8910 смартфон;
- Intel eASIC N5X;
- NanoPi M4B;
- OnePlus6 / OnePlus6T смартфон;
- Netgear R8000P Wi-Fi маршрутизатор;
- PineTab Early Adopter tablet;
- Plymovent BAS;
- Plymovent M2M;
- Purism Librem5 Evergreen смартфон;
- Samsung GT-I907 смартфон;
- Snapdragon 888 / SM8350;
- Snapdragon MTP;
- Sony Xperia Z3+/Z4/Z5 смартфоны.
Некоторые платформы ARM подверглись чистке ввиду отсутствия сколь-нибудь значимого количества устройств с ОС Linux, либо ввиду отсутствия поддержки со стороны производителя.
- efm32;
- picoxcell;
- prima2/atlas;
- tango;
- u300;
- zte zx.
ARM64 также имеет немало обновлений для SoC драйвером, также в подсистеме KVM обновился код PMU (Performance Monitoring Unit) до ARMv8.
RISC-V
Появилась начальная поддержка SoC SiFive FU740, анонсированного в конце прошлого года. Этот чип используется на плате разработки HiFive Unmatched. Другим новшеством для платформы стала поддержка технологии NUMA.
Автор: Микаел Григорян