Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Secure Programming for Li...6507 
 Linux Kernel 2.6...5279 
 Trees...1119 
 Максвелл 3...1051 
 William Gropp...990 
 Go Web ...963 
 Ethreal 3...930 
 Ethreal 4...918 
 Gary V.Vaughan-> Libtool...914 
 Ext4 FS...905 
 Clickhouse...901 
 Rodriguez 6...900 
 Ethreal 1...897 
 Steve Pate 1...886 
 C++ Patterns 3...864 
 Assembler...854 
 Ulrich Drepper...844 
 DevFS...788 
 MySQL & PosgreSQL...774 
 Стивенс 9...758 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org

Ядро 5.7

01.06.2020

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.7. Среди наиболее заметных изменений: новая реализация ФС exFAT, модуль bareudp для создания UDP-туннелей, защита на основе аутентификации указателей для ARM64, возможность прикрепления BPF-программ к LSM-обработчикам, новая реализация Curve25519, детектор "split-lock", совместимость BPF с PREEMPT_RT, снятие ограничения на 80-символьный размер строки в коде, учёт показателей температуры CPU в планировщике задач, возможность использования clone() для порождения процессов в другом cgroup, защита от записи в память при помощи userfaultfd.

В новую версию принято 15033 исправлений от 1961 разработчиков, размер патча - 39 МБ (изменения затронули 11590 файлов, добавлено 570560 строк кода, удалено 297401 строк). Около 41% всех представленных в 5.7 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 4% - с файловыми системами и 4% c внутренними подсистемами ядра.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Добавлена новая реализация драйвера exFAT, основанная на актуальной кодовой базе "sdfat" (2.x), развиваемой компанией Samsung для своих Android-смартфонов. Ранее добавленный в ядро драйвер был основан на устаревшем коде Samsung (версия 1.2.9) и отставал по производительности от нового драйвера примерно на 10%. Напомним, что добавление поддержки exFAT в ядро стало возможным после того, как компания Microsoft опубликовала общедоступные спецификации и предоставила возможность безвозмездного использования патентов на exFAT в Linux.
    • В Btrfs реализована новая команда ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, позволяющая удалять подраздел по его идентификатору. Обеспечена полная поддержка клонирования inline-экстентов. Расширено число точек отмены операций перераспределения, что позволило сократить длительные ожидания при выполнении команды 'balance cancel'. Ускорено определение обратных ссылок на экстенты (например, время выполнения тестового сценария уменьшилось с часа до нескольких минут). Добавлена возможность прикрепления к каждому inode дерева экстентов файла. Переработана схема блокировки, используемая при записи в подразделы и при исключении NOCOW. Повышена эффективность выполнения fsync для диапазонов.
    • В XFS улучшена проверка метаданных и выполнение fsck для активных разделов. Предложена библиотека для перестроения структур btree, которая в будущем будет использована для переработки xfs_repair и реализации возможности восстановления без отмонтирования раздела.
    • В CIFS добавлена экспериментальная поддержка размещения раздела подкачки в SMB3-хранилищах. Реализованы POSIX-расширения в readdir, определённые в спецификации SMB3.1.1. Повышена производительность записи для страниц размером 64KB при включении режима cache=strict и использовании версий протокола 2.1+.
    • ФС EXT4 переведена с bmap и iopoll на использование iomap.
    • В F2FS реализована опциональная поддержка сжатия данных с использованием алгоритма zstd. По умолчанию для сжатия задействован алгоритм LZ4. Добавлена поддержка команды "chattr -c commit". Обеспечено отображение времени монтирования. Добавлен ioctl F2FS_IOC_GET_COMPRESS_BLOCKS для получения сведений о числе сжатых блоков. Добавлены данные о сжатии, выводимые через statx.
    • В файловой системе Ceph добавлена возможность локального выполнения операций создания и удаления (unlink) файла без ожидания ответа от сервера (работа в асинхронном режиме). Изменение, например, позволяет заметно поднять производительность при работе утилиты rsync.
    • В OVERLAYFS добавлена возможность использования virtiofs в качестве ФС верхнего уровня.
    • Переписан код обхода путей в VFS, переделан код разбора символических ссылок и унифицирован обход точек монтирования.
    • В подсистеме scsi непривилегированным пользователям разрешено выполнение команд ZBC.
    • В dm_writecache реализована возможность постепенной очистки кеша на основании параметра max_age, задающего максимальное время жизни блока.
    • В dm_integrity добавлена поддержка операции "discard".
    • В null_blk добавлена поддержка подстановки ошибок для симуляции сбоев при проведении тестирования.
    • Добавлена возможность отправки udev-уведомлений об изменении размера блочного устройства.
  • Сетевая подсистема
    • В Netfilter включены изменения, значительно ускоряющие обработку больших списков сопоставления (nftables set), в которых требуется проверка сочетания подсетей, сетевых портов, протокола и MAC-адресов. Оптимизации внесены в модуль nft_set_pipapo (PIle PAcket POlicies), решающий задачу сопоставления содержимого пакета с применяемыми в правилах фильтрации произвольными диапазонами состояния полей, такими как диапазоны IP и сетевых портов (nft_set_rbtree и nft_set_hash манипулируют сопоставлением интервалов и прямым отражением значений). Векторизированная при помощи 256-разрядных инструкций AVX2 верcия pipapo на системе с процессором AMD Epyc 7402 показала прирост производительности на 420% при разборе 30 тысяч записей, включающих связки порт-протокол. Прирост при сопоставлении связки из подсети и номера порта при разборе 1000 записей составил 87% для IPv4 и 128% для IPv6.
    • Добавлен модуль bareudp, позволяющий инкапсулировать в UDP-туннель различные L3-протоколы, такие как MPLS, IP и NSH.
    • Продолжена интеграция компонентов MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
    • Добавлена поддержка механизмов аппаратного ускорения инкапсуляции Ethernet-кадров в 802.11 (Wi-Fi).
    • При перемещении устройства из одного пространства имён сетевой подсистемы (network namespace) в другое обеспечена корректировка прав доступа и владельца соответствующих файлов в sysfs.
    • Предоставлена возможность использования флага SO_BINDTODEVICE пользователями, не имеющими прав root.
    • Принята третья часть патчей, переводящих инструментарий ethtool с ioctl() на использование интерфейса netlink. Новый интерфейс упрощает добавление расширений, улучшает обработку ошибок, позволяет отправлять уведомления при изменении состояния, упрощает взаимодействие между ядром и пространством пользователя и сокращает число синхронизируемых именованных списков.
    • Добавлена возможность использования специальных аппаратных ускорителей для выполнения операций отслеживания соединений.
    • В netfilter добавлен хук для подключения классификаторов исходящих пакетов (egress), дополнивший собой ранее присутствовавший хук для входящих пакетов (ingress).
  • Виртуализация и безопасность
    • Добавлена аппаратная реализация аутентификации указателей (Pointer Authentication), использующая специализированные инструкции CPU ARM64 для защиты от атак, использующих приёмы возвратно-ориентированного программирования (ROP) при которых атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления. Защита сводится к использованию цифровых подписей для проверки адресов возврата на уровне ядра. Подпись хранится в неиспользуемых верхних битах самого указателя. В отличие от программных реализаций создание и проверка цифровых подписей производится при помощи специальных инструкций CPU.
    • Добавлена возможность защиты области памяти от записи при помощи системного вызова userfaultfd(), предназначенного для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя. Идея в том, чтобы использовать userfaultfd() и для отслеживания нарушения доступа к страницам, помеченным защищёнными от записи, и вызова обработчика, который может реагировать на подобные попытки записи (например, для обработки изменений в процессе создания live-снапшотов работающих процессов, фиксации состояния при сбросе дампов памяти на диск, реализации разделяемой памяти, отслеживания изменений в памяти). Функциональность эквивалентна применению mprotect() в связке с обработчиком сигнала SIGSEGV, но работает заметно быстрее.
    • В SELinux объявлен устаревшим параметр "checkreqprot", позволяющий отключить проверку защиты памяти при обработке правил (допускал использование исполняемых областей памяти, независимо от предписаний, заданных в правилах). Символическим ссылкам kernfs разрешено наследование контекста родительских каталогов.
    • В состав включён модуль KRSI, позволяющий прикреплять BPF-программы к любым LSM-хукам в ядре. Изменение позволяет создавать LSM-модули (Linux Security Module) в форме BPF-программ для решения задач аудита и мандатного контроля доступа.
    • Проведена оптимизация производительности /dev/random за счёт пакетной передачи значений CRNG вместо отдельного вызова инструкций RNG. Улучшена работа getrandom и /dev/random на системах ARM64, предоставляющих инструкции RNG.
    • Реализация эллиптической кривой Curve25519 заменена на вариант из библиотеки HACL, для которого приведено математическое доказательство формальной верификации надёжности.
    • Добавлен механизм информирования о свободных страницах памяти. При помощи данного механизма гостевые системы могут передавать хост-системе сведения о страницах, которые больше не используются, и данные страницы хост может забрать обратно.
    • В vfio/pci добавлена поддержка SR-IOV (Single-Root I/O Virtualization).
  • Память и системные сервисы
    • C 80 до 100 символов увеличено ограничение на максимальную длину строки в исходных текстах. При этом разработчикам по-прежнему рекомендуется держаться в границах 80 символов в строке, но это теперь не является жёстким лимитом. Кроме того, превышение лимита на размер строки теперь будет приводить к выводу предупреждения при сборке только если утилита checkpatch запущена с опцией "--strict'. Изменение даст возможность не отвлекать разработчиков на манипуляции с пробелами и более свободно чувствовать себя при выравнивании кода, а также предотвратит излишнее разбиение строк, мешающее восприятию кода и поиску.
    • Добавлена поддержка смешанного режима загрузки EFI, позволяющего без применения специализированного загрузчика загрузить 64-разрядное ядро из 32-разрядной прошивки, выполняемой на 64-разрядном CPU.
    • Включена система выявления и отладки расщеплённых блокировок ("split lock"), возникающих при доступе к невыровненным данным в памяти из-за того, что при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Подобные блокировки приводят к значительному падению производительности (на 1000 циклов медленнее, чем атомарная операция с данными, попадающими в одну линию кеша). В зависимости от загрузочного параметра "split_lock_detect" ядро может на лету выявлять подобные блокировки и выводить предупреждения или отправлять сигнал SIGBUS приложению, вызвавшему блокировку.
    • В планировщике задач обеспечено отслеживание показателей датчиков температуры (Thermal Pressure) и реализован учёт перегрева при размещении задач. Пользуясь выдаваемой статистикой обработчик температуры (thermal governor) может корректировать максимальную частоту CPU при перегреве, а планировщик задач теперь учитывает снижение вычислительной мощности из-за подобного урезания частоты при планировании запуска задач (раньше планировщик реагировал на изменение частоты с определённой задержкой, какое-то время принимая решения на основе завышенных предположениях о доступных вычислительных ресурсах).
    • В планировщике задач задействованы инвариантные показатели отслеживания нагрузки, позволяющие корректно оценить нагрузку, независимо от текущей частоты работы CPU. Изменение позволяет более точно прогнозировать поведение задач в условиях динамического изменения вольтажа и частоты CPU. Например, задача, которая потребляла 1/3 ресурсов CPU при частоте 1000 MHz, станет потреблять 2/3 ресурсов при снижении частоты до 500 MHz, что раньше создавало ложное предположение о работе на полную мощность (т.е. задачи для планировщика казались более крупными только за счёт снижения частоты, что приводило к принятию неверных решений в schedutil cpufreq governor).
    • Драйвер Intel P-state, отвечающий за выбор режимов производительности, переведён на использование schedutil.
    • Реализована возможность использования подсистемы BPF при работе ядра в режиме реального времени (PREEMPT_RT). Ранее при включении PREEMPT_RT предписывалось отключение BPF.
    • Добавлен новый тип BPF-программ - BPF_MODIFY_RETURN, которые могут прикрепляться к функции в ядре и изменять возвращаемое данной функцией значение.
    • Добавлена возможность использования системного вызова clone3() для создания процесса в cgroup, отличающемся от родительского cgroup, что позволяет родительскому процессу применить ограничения и включить аккаунтинг сразу после порождения нового процесса или потока. Например, сервисный менеджер может напрямую выделять новые сервисы в отдельные cgroup, а новые процессы при помещении в "замороженные" cgroup и будут сразу остановлены.
    • в Kbuild добавлена поддержка переменной окружения "LLVM=1" для переключения на инструментарий Clang/LLVM при сборке ядра. Подняты требования к версии binutils (2.23).
    • В debugfs добавлена секция /sys/kernel/debug/kunit/ с результатами тестов kunit.
    • Добавлен параметр загрузки ядра pm_debug_messages (аналог/sys/power/pm_debug_messages), включающий вывод отладочной информации о работе системы управления питанием (полезно при отладке проблем со спящим и ждущим режимом).
    • В интерфейс асинхронного ввода/вывода io_uring добавлена поддержка splice() и атомарного выбора буферов.
    • Улучшено профилирование cgroup при помощи инструментария perf. Ранее perf мог профилировать задачи только в определённом cgroup и не мог узнать к какой cgroup принадлежит текущий образец. Теперь perf получает сведения о cgroup для каждой выборки, что позволяет профилировать более одного cgroup и применять сортировку по cgroup в отчётах.
    • В cgroupfs, псевдо-ФС для управления cgroups, добавлена поддержка расширенных атрибутов (xattrs) при помощи которых, например, можно оставлять дополнительную информацию для обработчиков в пространстве пользователя.
    • В cgroup memory controller добавлена поддержка рекурсивной защиты значения "memory.low", регулирующего минимальный объём оперативной памяти, предоставленной участникам группы. При монтировании иерархии cgroup с опцией "memory_recursiveprot" значение "memory.low", которое установлено для нижних узлов, автоматически будет распределяться для всех дочерних узлов.
    • Добавлен фреймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для совместного использования виртуальных адресов (SVA, Shared Virtual Addressing) между CPU и периферийными устройствами, позволяющий аппаратным ускорителям получить доступ к структурам данных в основном CPU.
  • Аппаратные архитектуры
    • Для архитектуры ARM реализована возможность горячего извлечения памяти.
    • Для архитектуры RISC-V добавлена поддержка горячего подключения и извлечения CPU (CPU hotplug). Для 32-разрядных RISC-V реализован eBPF JIT.
    • Убрана возможность использования 32-разрядных ARM-систем для запуска гостевых окружений KVM.
    • Удалена "фиктивная" реализация NUMA для архитектуры s390, для которой так и не найдены сценарии использования, позволяющие добиться повышения производительности.
    • Для ARM64 добавлена поддержка расширения AMU (Activity Monitors Unit), определённого в ARMv8.4 и предоставляющего счётчики производительности, которые использованы для расчёта коэффициентов коррекции масштабирования частоты в планировщике задач.
  • Оборудование
    • Добавлена поддержка устройств vDPA, в которых используется канал обмена данных, соответствующий спецификациям virtio. vDPA-устройства могут быть как физически подключённым оборудованием, так и эмулируемыми программно виртуальными устройствами.
    • В подсистеме GPIO появилась новая команда ioctl() для мониторинга изменений, позволяющая наладить информирование процесса об изменении состояния любой линии GPIO. В качестве примера использования новой команды предложена утилита gpio-watch.
    • В DRM-драйвере i915 для видеокарт Intel включена по умолчанию поддержки чипов Tigerlake ("Gen12") и добавлена начальная поддержка управления подсветкой OLED. Улучшена поддержка чипов Ice Lake, Elkhart Lake, Baytrail и Haswell.
    • В драйвере amdgpu добавлена возможность загрузки прошивок в чип USBC для ASIC. Улучшена поддержка чипов AMD Ryzen 4000 "Renoir". Появилась поддержка управления OLED-панелями. Обеспечено отображение состояния прошивки в debugfs.
    • В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 4 в гостевых системах (раннее поддерживался OpenGL 3.3).
    • Добавлен новый DRM-драйвер tidss для дисплейной системы платформы TI Keystone.
    • Добавлены драйверы для LCD-панелей: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • В систему управления питанием добавлена поддержка платформы Intel Jasper Lake (JSL) на базе Atom.
    • Добавлена поддержка ноутбука Pinebook Pro на базе Rockchip RK3399, планшета Pine64 PineTab и смартфона PinePhone на базе Allwinner A64.
    • Добавлены поддержка новых звуковых кодеков и чипов: Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Добавлена поддержка ARM-плат и платформ Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 вариантов платы i.MX6 TechNexion Pico, три новых варианта Toradex Colibri, Samsung S7710 Galaxy Xcover 2 на базе ST-Ericsson u8500, DH Electronics DHCOM SoM и PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

    Оставьте свой комментарий !

    Ваше имя:
    Комментарий:
    Оба поля являются обязательными

     Автор  Комментарий к данной статье