Linux 5.9 ядросунун чыгарылышы

эки ай иштеп кийин, Линус Torvalds берилген ядро чыгаруу Linux 5.9. Среди наиболее заметных изменений: ограничение импорта символов из проприетарных модулей в GPL-модули, ускорение операций переключения контекста при помощи процессорной инструкции FSGSBASE, поддержка сжатия образа ядра при помощи Zstd, переработка расстановки приоритетов для потоков в ядре, поддержка протокола PRP (Parallel Redundancy Protocol), планирование с учётом пропускной способности в планировщике deadline, упреждающая упаковка страниц памяти, capability-флаг CAP_CHECKPOINT_RESTOR, системный вызов close_range(), повышение производительности dm-crypt, удаление кода для 32-разрядных гостевых систем Xen PV, новый механизм управления памятью slab, опция «rescue» в Btrfs, поддержка inline-шифрования в ext4 и F2FS.

В новую версию принято 16074 исправления от 2011 разработчиков,
размер патча — 62 МБ (изменения затронули 14548 файлов, добавлено 782155 строк кода, удалено 314792 строки). Около 45% всех представленных в 5.9
өзгөртүүлөр түзмөк драйверлерине байланыштуу, өзгөрүүлөрдүн болжол менен 15%
Аппараттык архитектураларга мүнөздүү кодду жаңылоого карата мамиле, 13%
тармактык стек менен байланышкан, 3% файлдык системаларга жана 3% ички
ядронун подсистемалары.

негизги инновациялар:

  • Эстутум жана система кызматтары
    • Тыюуланган защита от использования GPL-прослоек для связывания проприетарных драйверов с компонентами ядра, экспортируемыми только для модулей под лицензией GPL. Флаг TAINT_PROPRIETARY_MODULE теперь наследуются во всех модулях, импортирующих символы из модулей с данным флагом. Если GPL-модуль попытается импортировать символы из не-GPL модуля, то этот GPL-модуль унаследует метку TAINT_PROPRIETARY_MODULE и не сможет обращаться к компонентам ядра, доступным только для модулей под лицензией GPL, даже если модуль ранее импортировал символы из категории «gplonly». Обратная блокировка (экспорт только EXPORT_SYMBOL_GPL в модулях, импортировавших EXPORT_SYMBOL_GPL), которая могла нарушить работу проприетарных драйверов, не реализована (наследуется только флаг проприетарного модуля, но не GPL-привязки).
    • Кошулган поддержка механизма kcompactd для упреждающей упаковки страниц памяти в фоновом режиме, позволяющего увеличить число больших страниц памяти, доступных ядру. По предварительной оценке, фоновая упаковка ценой минимальных накладных расходов позволяет в 70-80 раз снизить задержки при выделении крупных страниц памяти (huge-page) по сравнению с ранее применяемым механизмом упаковки, запускаемым при возникновении необходимости (on-demand). Для задания границ внешней фрагментации, которую будет обеспечивать kcompactd, добавлен sysctl vm.compaction_proactiveness.
    • Кошулган поддержка сжатия образа ядра с использованием алгоритма zstandard (zstd).
    • Для систем x86 реализована поддержка процессорной инструкции FSGSBASE, позволяющей читать и изменять содержимое регистров FS/GS из пространства пользователя. В ядре FSGSBASE используется для ускорения операций переключения контекста за счёт исключения лишних операций записи MSR для GSBASE, а в пространстве пользователя позволяет обойтись без лишних системных вызовов для изменения FS/GS.
    • Кошулган параметр «allow_writes», позволяющий запретить изменения MSR-регистров процессора из пространства пользователя и ограничить доступ к содержимому данных регистров операциями чтения, так как изменение MSR может привести к проблемам. По умолчанию запись пока не запрещена, а изменение MSR отражается в логе, но в будущем планируется перевести доступ по умолчанию в режим только для чтения.
    • Асинхрондук киргизүү/чыгаруу интерфейсине io_uring добавлена полная поддержка асинхронных операций буферизированного чтения, не требующих привлечения потоков ядра. Поддержка записи ожидается в следующем выпуске.
    • В планировщике ввода/вывода deadline ишке ашырылган планирование с учётом пропускной способности, уруксат берүү принимать корректные решения на асимметричных системах, таких как системы ARM на базе архитектур DynamIQ и big.LITTLE, комбинирующие в одном чипе мощные и менее производительные энергоэффективные ядра CPU. В частности, новый режим позволяет избежать рассогласований при планировании, когда медленное ядро CPU не имеет должных ресурсов для выполнения задачи в назначенный срок.
    • Модель потребления энергии в ядре (фреймворк Energy Model) теперь айтылат не только поведение энергопотребления CPU, но и охватывает периферийные устройства.
    • Реализован системный вызов close_range(), позволяющий процессу разом закрыть целый диапазон открытых файловых дескрипторов.
    • Из реализации текстовой консоли и драйвера fbcon удалён код, обеспечивающий возможность программной прокрутки текста назад (CONFIG_VGACON_SOFT_SCROLLBACK) более чем на объем видеопамяти текстового режима VGA.
    • Кайра иштетилген алгоритм назначения приоритетов для потоков внутри ядра. Новый вариант обеспечивает лучшую согласованность во всех подсистемах ядра при назначении приоритетов для задач реального времени.
    • Добавлен sysctl sched_uclamp_util_min_rt_default для управления параметрами форсирования частоты CPU для задач реального времени (например, можно на лету менять поведение при выполнении задач реального времени для экономии энергии после перехода на питание от аккумулятора или на мобильных системах).
    • Проведена подготовка к реализации поддержки технологии Transparent Huge Pages в страничном кэше.
    • В механизме fanotify реализованы новые флаги FAN_REPORT_NAME и FAN_REPORT_DIR_FID для передачи сведений о родительском имени и уникальном идентификаторе FID при наступлении событий создания, удаления или перемещения элементов каталога и не связанных с каталогами объектов.
    • Для cgroups ишке ашырылган новый контроллер распределения памяти slab (slab memory controller), который примечателен переносом учёта slab с уровня страниц памяти на уровень объектов ядра, что даёт возможность совместно использовать slab-страницы в разных cgroup, вместо выделения отдельных кэшей slab для каждой cgroup. Предложенный подход позволяет повысить эффективность использования slab, на 30-45% сократить размер используемой для slab памяти, значительно уменьшить общее потребление памяти ядром и снизить фрагментацию памяти.
    • В звуковой подсистеме ALSA и USB-стеке, в соответствии с недавно принятыми рекомендациями по использованию инклюзивной терминологии в ядре Linux, проведена чистка неполиткорректных терминов. Код очищен от использования слов «slave», «master», «blacklist» и «whitelist».
  • Виртуалдаштыруу жана коопсуздук
    • При сборке ядра с использованием компилятора Clang пайда возможность настройки (CONFIG_INIT_STACK_ALL_ZERO) автоматической инициализации нулевым значением всех переменных, хранимых в стеке (при сборке указывается «-ftrivial-auto-var-init=zero») .
    • В подсистему seccomp, при использовании режима контроля процесса в пространстве пользователя, кошулду мүмкүнчүлүк подстановки в отслеживаемый процесс файловых дескрипторов для полной эмуляции системных вызовов, приводящих к созданию файловых дескрипторов. Функциональность востребована в системах изолированных контейнеров и реализации sandbox для Chrome.
    • Для архитектур xtensa и csky добавлена поддержка ограничения системных вызовов при помощи подсистемы seccomp. Для xtensa дополнительно реализована поддержка механизма аудита.
    • Кошулган новый capability-флаг CAP_CHECKPOINT_RESTORE, позволяющий без передачи дополнительных привилегий предоставить доступ к возможностям, связанным с заморозкой и восстановлением состояния процессов.
    • В GCC 11 реализованы все возможности, необходимые для
      отладочного инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра. Таким образом, KCSAN теперь может использоваться с ядрами, собранными в GCC.

    • Для AMD Zen и более новых моделей CPU кошулду поддержка технологии P2PDMA, позволяющей использовать DMA для прямой передачи данных между памятью двух устройств, подключенных к шине PCI.
    • В dm-crypt добавлен режим, позволяющий сократить задержки за счёт выполнения криптографической обработки данных без использования рабочих очередей. Указанный режим также необходим для корректной работы с зонированными блочными устройствами (устройства с областями, которые должны записываться последовательно с обновлением целиком всей группы блоков). Проведена работа по повышению пропускной способности и уменьшению задержек в dm-crypt.
    • Удалён код для поддержки 32-разрядных гостевых систем, работающих в режиме паравиртуализации под управлением гипервизора Xen. Пользователям подобных систем следует перейти на использование 64-разрядных ядер в гостевых окружениях или использовать для запуска окружений вместо паравиртуализации (PV) режимы полной (HVM) или комбинированной (PVH) виртуализации.
  • Диск подсистемасы, киргизүү/чыгаруу жана файл системалары
    • В файловой системе Btrfs ишке ашырылган опция монтирования «rescue», унифицирующая доступ ко всем другим опциям для восстановления. Удалена поддержка опций «alloc_start» и «subvolrootid», объявлена устаревшей опция «inode_cache». Проведена оптимизация производительности, особенно заметно ускорено выполнение операций fsync(). Кошулган возможность использования альтернативных типов контрольных сумм, отличных от CRC32c.
    • Кошулган возможность использования inline-шифрования (Inline Encryption) в файловых системах ext4 и F2FS, для включения которого предусмотрена опция монтирования «inlinecrypt». Режим inline-шифрования позволяет задействовать встроенные в контроллер накопителя механизмы шифрования, которые осуществляют прозрачное шифрование и расшифровку ввода/вывода.
    • XFSде обеспечен сброс inode (flush) в полностью асинхронном режиме, не блокирующем процессы при выполнении операции чистки памяти. Решена давняя проблема с квотами, из-за которой некорректно отслеживались предупреждения о превышении мягкого лимита и ограничений на число inode. Унифицирована реализация поддержки DAX для ext4 и xfs.
    • Ext4 ичинде ишке ашырылган упреждающая загрузка битовых карт распределения блоков. В сочетании с ограничением сканирования неинициализированных групп, оптимизация позволила сократить время монтирования очень больших разделов.
    • В F2FS кошулду ioctl F2FS_IOC_SEC_TRIM_FILE, позволяющий использовать команды TRIM/discard для физического обнуления указанных данных в файле, например, для удаления ключей доступа без оседания на накопителе остаточных данных.
      В F2FS также кошулду новый режим сборки мусора GC_URGENT_LOW, работающий более агрессивно за счёт исключения некоторых проверок нахождения в состоянии простоя (idle) перед запуском сборщика мусора.

    • В bcache размер bucket_size для экстентов увеличен с 16 до 32 бит в рамках подготовки к обеспечению возможности применения для кэша зонированных устройств.
    • В подсистему SCSI добавлена возможность использования inline-шифрования на базе встроенных средств аппаратного шифрования, предоставляемых UFS-контроллерами (Universal Flash Storage).
    • Добавлен новый параметр командной строки ядра «debugfs», позволяющий управлять доступностью одноимённой псевдо-ФС.
    • В клиенте NFSv4.2 обеспечена поддержка расширенных атрибутов файлов (xattr).
    • В dm-dust кошулду интерфейс для вывода разом списка всех выявленных bad-блоков на диске («dmsetup message dust1 0 listbadblocks»).
    • Для md/raid5 добавлен параметр /sys/block/md1/md/stripe_size для настройки размера STRIPE-блока.
    • Для устройств хранения NVMe кошулду поддержка команд для зонирования накопителя (ZNS, NVM Express Zoned Namespace), позволяющего разбить пространство для хранения на зоны, составляющие группы блоков, для более полного управления размещением данных на накопителе.
  • Тармактык подсистема
    • В Netfilter кошулду возможность отклонения пакетов на стадии до проверки маршрутизации (выражение REJECT теперь может использоваться не только в цепочках INPUT, FORWARD и OUTPUT, но и на стадии PREROUTING для icmp и tcp).
    • В nftables кошулду возможность аудита событий, связанных с изменением конфигурации.
    • В nftables в API netlink кошулду поддержка анонимных цепочек, имя которым назначается динамически ядром. При удалении связанного с анонимной цепочкой правила автоматически удаляется и сама цепочка.
    • В BPF добавлена поддержка итераторов для обхода, фильтрации и изменения элементов ассоциативных массивов (map) без копирования данных в пространство пользователя. Итераторы можно использовать для сокетов TCP и UDP, что позволяет BPF-программам перебирать списки открытых сокетов и извлекать из них необходимые сведения.
    • Добавлен новый тип BPF-программ BPF_PROG_TYPE_SK_LOOKUP, запускаемых в момент, когда ядро ищет подходящий слушающий сокет для входящего соединения. При помощи подобной BPF-программы можно создавать обработчики, принимающие решения о том, c каким сокетом следует ассоциировать соединение, не ограниченные рамками системного вызова bind(). Например, можно организовать связывание одного сокета с диапазоном адресов или портов. Кроме того, в bpf_setsockopt() добавлена поддержка флага SO_KEEPALIVE и реализована возможность установки обработчиков BPF_CGROUP_INET_SOCK_RELEASE, вызываемых при освобождении сокета.
    • Реализована поддержка протокола ЭРП (Parallel Redundancy Protocol), позволяющего на базе Ethernet реализовать прозрачное для приложений переключение на запасной канал в случае сбоя любых компонентов сети.
    • В стек mac80211 кошулду поддержка четырёхэтапного согласования канала WPA/WPA2-PSK в режиме точки доступа.
    • Добавлена возможность переключения планировщика qdisc (queuing discipline) на использование по умолчанию алгоритма управления сетевыми очередями FQ-PIE (Flow Queue PIE), нацеленного на снижение негативного влияния промежуточной буферизации пакетов на граничном сетевом оборудовании (bufferbloat) в сетях с кабельными модемами.
    • Добавлены новые возможности в MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Добавлена поддержка syn cookie, DATA_FIN, автонастройки буферов, диагностики сокетов и использования флагов REUSEADDR, REUSEPORT и V6ONLY в setsockopt.
    • Для виртуальных таблиц маршрутизации VRF (Virtual Routing and Forwarding), позволяющих организовать работу нескольких доменов маршрутизации на одной системе, реализован режим «strict». В данном режиме виртуальная таблица может быть ассоциирована только с таблицей маршрутизации, которая не используется в других виртуальных таблицах.
    • В беспроводной драйвер ath11k кошулду поддержка частоты 6GHz и спектрального сканирования.
  • жабдуулар
    • Удалён код для поддержки архитектуры UniCore, разработанной в микропроцессорном центре Пекинского университета и включённой в состав ядра Linux в 2011 году. Данная архитектура с 2014 года находится без сопровождения и не имеет поддержки в GCC.
    • Для архитектуры RISC-V реализована поддержка kcov (debugfs-интерфейс для анализа покрытия кода ядра), kmemleak (система выявления утечек памяти), защиты стека, меток перехода и tickless-операций (независимая от сигналов таймера многозадачность).
    • Для архитектуры PowerPC реализована поддержка очередей для spinlock, позволившая значительно поднять производительность в ситуациях конфликта блокировок.
    • Для архитектур ARM и ARM64 задействован по умолчанию механизм регулирования частоты процессора расписание (cpufreq governor), который для принятия решения об изменении частоты напрямую использует информацию от планировщика задач и может сразу обращаться к драйверам cpufreq для оперативного изменения частоты, мгновенно подгоняя параметры работы CPU к текущей нагрузке.
    • В DRM-драйвере i915 для видеокарт Intel включена поддержка чипов на базе микроархитектуры Ракета көлү и добавлена начальная поддержка дискретных карт Intel Xe DG1.
    • В драйвер amdgpu добавлена начальная поддержка GPU AMD Navi 21 (Navy Flounder) и Navi 22 (Sienna Cichlid). Добавлена поддержка движков ускорения кодирования и декодирования видео UVD/VCE для GPU Southern Islands (Radeon HD 7000).
      Добавлено свойство для поворота отображения на 90, 180 или 270 градусов.

      Интересно, что драйвер для GPU AMD Ал самым крупным драйвером в ядре — он насчитывает около 2.71 млн строк кода, что примерно 10% от общего размера ядра (27.81 млн строк). При этом 1.79 млн строк приходится на сгенерированные автоматически заголовочные файлы с данными для регистров GPU, а Си-код составляет 366 тысяч строк (для сравнения драйвер Intel i915 включает 209 тысяч строк, а Nouveau — 149 тысяч).

    • Nouveau айдоочу кошулду поддержка покадровой проверки целостности при помощи БУК (Cyclic Redundancy Checks) в дисплейных движках GPU NVIDIA. Реализация основана на документации, предоставленной компанией NVIDIA.
    • Добавлены драйверы для LCD-панелей: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 и Xingbangda XBD599.
    • В звуковой подсистеме ALSA реализована поддержка Intel Silent Stream (режим постоянного поддержания питания для внешних HDMI-устройств для исключения задержки при начале воспроизведения) и нового устройства для управления подсветкой кнопок активации микрофона и отключения звука, а также добавлена поддержка нового оборудования, включая контроллер Лонгсон 7A1000.
    • Добавлена поддержка ARM-плат, устройств и платформ: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (используется в Sony Xperia 10, 10 Plus, XA2, XA2 Plus и XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, пять новых плат на базе NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Ошол эле учурда Латын Америкасынын эркин программалык камсыздоо фонду түзүлгөн
тандоо толугу менен акысыз ядро ​​5.9 - Linux-libre 5.9-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах для WiFi rtw8821c и SoC MediaTek mt8183. Обновлён код чистки блобов в драйверах и подсистемах Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) и x86 touchscreen.

Source: opennet.ru

Комментарий кошуу