Ядро Linux 5.10: что нового?

Ядро Linux 5.10

14 декабря Линус Торвальдс объявил о релизе ядра Linux 5.10. Об этом разработчик объявил в списке рассылки Linux Kernel.  Это LTS-ядро: поддержка будет до 2026 года, что на год длиннее версии 5.4.

“ОК, вот оно — 5.10, протегано и запущено. Я всегда очень хочу, чтобы последняя неделя [перед релизом] была поспокойнее — так и вышло. В нём куча исправлений […], но ничего не даёт мне сказать “нам нужна ещё неделя”. Всё выглядит нормально”

Что нового в 5.10?

Ядро стало быстрее и эффективнее, а изменений правда много. Из действительно важного: подключили механизм защиты MemTag для AMD64 и опцию монтирования “nosymfollow”, оптимизировали Ext4, сделали новый системный вызов process_madvise, etc.

Дисковая подсистема, ввод/вывод и файловые системы

  • В ФС ext4 добавлен режим быстрых коммитов (fast_commit), позволяющий заметно сократить задержки при выполнении многих операций с файлами за счёт более быстрого сброса метаданных на диск при выполнении вызова fsync().

    В обычных условиях при выполнении fsync() синхронизируется избыточный набор метаданных. В режиме fast_commit в журнал переносятся только метаданные, необходимые для восстановления ФС в случае краха, что ускоряет вызов fsync() и повышает производительность операций, активно манипулирующих метаданными.

    Новый режим включается во время создания ФС утилитой mkfs. В сочетании с оптимизацией буферизированной записи отмечается существенно повышение производительности при нагрузках, связанных с параллельным выполнением операций записи. Например, на системе с 96 ядрами CPU отмечено повышение скорости прохождения теста fio.write_iops на 330.6%.
  • В реализацию файловой системы Btrfs внесены существенные оптимизации производительности, связанные с выполнением операций fsync(). Снижение конкуренции мьютексов для лога привело к увеличению пропускной способности на 4% и снижению задержек на 14% при прохождении теста dbench с 32 клиентами.

    Отбрасывание лишних коммитов для ссылок и переименований подняло пропускную способность на 6% и снизило задержки на 30%. Ограничение ожидания в fsync только операциями обратной записи повысило пропускную способность на 10-40%.
    Кроме того, реализация прямого ввода/вывода (direct io) в Btrfs переведена на инфраструктуру iomap.

    Добавлены новые sysfs-параметры с информацией о статусе эксклюзивных операций с ФС (балансировка, добавление/замена устройств) и версии send stream.
  • В XFS добавлены изменения в метаданные inode и квоты, решающие проблемы с переполнением 32-разрядного типа данных time_t в 2038 году.

    Внесённые изменения сдвинули переполнение счётчика времени до 2468 года. Формат XFS V4 объявлен устаревшим, пользователем рекомендовано обновить ФС до формата V5, но времени на обновление более чем достаточно, так как поддержка V4 будет сохранена до 2030 года.

    В XFS также изменён размер записи в inode btree, позволивший расширить проверки избыточности и сократить время монтирования.
  • В OverlayFS добавлен режим “volatile“, приводящий к игнорированию любых вызовов fsync().

    Новый режим позволяет существенно ускорить выполнение операций сборки образов для изолированных контейнеров, в которых выполняется большое число операций установки пакетов, за счёт отключения сброса состояния ФС после установки каждого пакета. В случае сбоя во время построения образа можно просто начать его сборку заново.

    В OverlayFS также продолжена подготовка к реализации поддержки монтирования непривилегированными пользователями.
  • В ZoneFS, ФС для зонированных устройств хранения, добавлена опция монтирования “explicit-open” при выставлении которой открытие файла на запись будет приводить к активации ассоциированной зоны на устройстве, что гарантирует, что успешное открытие зоны в дальнейшем позволит успешно выполнить операцию записи.
  • Предложена новая опция монтирования “nosymfollow”, запрещающая обработку символических ссылок при определении пути, но не мешающая приложениям использовать readlink() для самостоятельно раскрытия символических ссылок.

Память и системные сервисы

  • Добавлен системный вызов process_madvise(), позволяющий одному процессу выполнить системный вызов madvise() от имени другого процесса. При помощи madvise() можно информировать ядро об особенностях работы с памятью для оптимизации управления памятью процесса, например, на основе переданной информации ядро может инициировать высвобождение дополнительной свободной памяти.

    Вызов madvise() другим процессом может потребоваться на платформах, таких как Android, в которых информация, необходимая для оптимизации, неизвестна текущему процессу, а координируется отдельным фоновым управляющим процессом (ActivityManagerService в Android), который самостоятельно может инициировать изъятие у процессов неиспользуемой памяти.
  • В интерфейс асинхронного ввода/вывода io_uring добавлена возможность создания ограниченных ring-областей (restricted rings), которые можно безопасно совместно использовать с процессом, не заслуживающим доверия.

    Указанная возможность позволяет базовому приложению выборочно ограничить доступ только к отдельным своим файловым дескрипторам для их использования в сторонних приложениях через io_uring.
  • В системный вызов pidfd_open() добавлен флаг PIDFD_NONBLOCK для создания неблокируемого файлового дескриптора (аналог O_NONBLOCK для pidfd).
  • Реализована возможность приостановки выполнения BPF-программ через переход программы в режим сна. Режим сна осуществляется самой BPF-программой и активируется через установку флага BPF_F_SLEEPABLE во время запуска.

    Возможность пока реализована только для BPF-программ, осуществляющих трассировку и реализующих функции модулей обеспечения безопасности (сетевые обработчики в режим сна пока переходить не могут).
  • В системный вызов bpf() добавлена команда BPF_PROG_BIND_MAP, позволяющая прикрепить map-структуру к загруженной программе, которую можно использовать, например, для хранения метаданных.
  • Добавлены вспомогательные функции bpf_per_cpu_ptr() и bpf_this_cpu_ptr(), предоставляющие BPF-программам доступа к переменным, привязанным к определённым CPU.
  • Для архитектуры MIPS реализована поддержка загрузки ядер, сжатых алгоритмом ZSTD.
  • Для архитектуры RISC-V добавлена поддержка загрузки на системах с прошивками EFI.
  • Прекращена поддержка платформ i.MX без DeviceTree.
  • Необходимая для сборки ядра минимально поддерживаемая версия компилятора Clang поднята до выпуска 10.0.1.

Виртуализация и безопасность

  • Добавлена поддержка анклавов Nitro Enclave (NE), предлагаемых в Amazon Elastic Compute Cloud (EC2) для обработки конфиденциальных данных в VM, изолировано от других приложений.
  • Расширена поддержка технологии AMD SEV (secure encrypted virtualization), которая на аппаратном уровне обеспечивает прозрачное шифрование памяти виртуальных машин, при котором доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и гипервизор при попытке обращения к этой памяти получают зашифрованный набор данных.

    В новом выпуске помимо шифрования памяти реализована возможность шифрования регистров процессора, используемых в гостевой системе, что делает содержимое регистров недоступным для хост-окружения, если гостевая системе явно не предоставит к ним доступ.
  • Реализована поддержка расширения ARMv8.5 MTE (MemTag, Memory Tagging Extension), позволяющего привязать теги к каждой операции выделения памяти и организовать при доступе к памяти проверку указателя, который должен быть связан с корректным тегом.

    Расширение может применяться для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использования вне текущего контекста.
  • В LSM-модуль SafeSetID, позволяющий системным сервисам безопасно управлять пользователями без повышения привилегий (CAP_SETUID) и без получения полномочий пользователя root, добавлена поддержка управления изменением идентификаторов групп, помимо идентификаторов пользователей.
  • Из криптоподсистемы удалена реализация KerberosV-алгоритма RC4-HMAC-MD5, который когда-то был добавлен для совместимости с системами Windows NT/2000, обновление которых прекращено в 2008 году.
  • Добавлена поддержка криптографических хэшей SM2, стандартизированных для учреждений Китая.
  • Предоставлена возможность удаления из файлов расширенных атрибутов security.selinux, но только на стадии до загрузки правил SELinux (позволяет убрать метки с файлов, если SELinux не используется).
  • В гипервизоре KVM реализована возможность выноса в процесс в пространстве пользователя обработку доступа к неизвестным регистрам MSR.
  • Добавлена возможность использования статических вызовов (static calls) вместо глобальных указателей на функции для снижения негативного влияния на производительность механизмов защиты от атак класса Spectre, таких как retpoline. Суть оптимизации в замене в коде косвенных вызовов на прямые вызовы.

Сетевая подсистема

  • Для BPF-программ предоставлена возможность изменения и разбора опций в заголовках TCP-пакетов.
  • Продолжена интеграция в ядро MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. В новом выпуске появилась поддержка передачи данных одновременно в несколько потоков.
  • Добавлена возможность использования протоколов IGMPv3 и MLDv2 в режиме Multicast(RFC 4604).
  • Добавлена поддержка транспортного протокола ISO 15765-2:2016, используемого для передачи пакетов с данными поверх шины CAN (Controller Area Network).

Оборудование

  • В DRM-драйвере i915 для видеокарт Intel переработан код для работы с блокировками в GEM. Расширена поддержка чипов на базе микроархитектуры Rocket Lake. Началась подготовка к реализации поддержки чипов Alder Lake. Улучшена поддержка вывода через Type-C и DisplayPort на системах Tiger Lake (Gen12). Для дискретных карт Intel DG1 реализована поддержка вывода звука через HDMI.
  • В драйвере amdgpu продолжена работа по реализации поддержки GPU AMD Navi 21 (Navy Flounder) и Navi 22 (Sienna Cichlid).
  • Для чипов AMD Zen 3 в драйвере k10temp реализована поддержка мониторинга температуры.
  • Добавлена поддержка звуковых карт Creative Labs SoundBlaster AE-7.
  • В драйвере vc4 добавлена поддержка графической подсистемы плат Raspberry Pi 4 (BCM2711).
  • Добавлена поддержка игровых контроллеров Nintendo Switch, таких как Switch Joy-Cons и Switch Pro при подключении по USB и Bluetooth.
  • Добавлена поддержка ARM-плат, устройств и платформ: Librem 5, NVIDIA Tegra234, Hisilicon SD5203 (ARM926EJ-S), Cisco Meraki MR32 (BCM53016), BCM2711 (RPi4), Caninos Loucos Labrador, RoseapplePi, Allwinner A100, Libretch S905x CC V2, Hardkernel ODROID-N2+, Wistron Mowgli, Facebook Wedge400, Tolino Shine 2 HD, NanoPi R2S, Rockchip A95X-Z2, Odyssey, Toshiba Visconti и TPMV7708.

Залишити відповідь

Дякуємо, що поділились