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...6501 
 Linux Kernel 2.6...5278 
 Trees...1112 
 Максвелл 3...1046 
 William Gropp...984 
 Go Web ...953 
 Ethreal 3...921 
 Gary V.Vaughan-> Libtool...911 
 Ethreal 4...908 
 Ext4 FS...898 
 Clickhouse...896 
 Rodriguez 6...896 
 Ethreal 1...888 
 Steve Pate 1...877 
 C++ Patterns 3...858 
 Assembler...845 
 Ulrich Drepper...838 
 DevFS...779 
 MySQL & PosgreSQL...761 
 Стивенс 9...752 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org

Ядро 6.4

26.06.2023

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.4. Среди наиболее заметных изменений: возможность создания kernel worker из пространства пользователя, продолжение интеграции поддержки языка Rust, поддержка механизма Intel LAM (Linear Address Masking), дедупликация страниц памяти на уровне процессов, поддержка привычных итераторов в BPF, поддержка перехода в спящий режим для систем RISC-V, возможность трассировки пользовательских процессов, новый механизм управления памятью модулей ядра, запрет отключения SELinux во время работы, поддержка шифрования RPC-пакетов NFS, удаление SLOB slab allocator.

В новую версию принято 16012 исправлений от 2080 разработчиков, размер патча - 81 МБ (изменения затронули 14220 файлов, добавлено 1006924 строк кода, удалено 597615 строк). Около 43% всех представленных в 6.4 изменений связаны с драйверами устройств, примерно 14% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 10% связано с сетевым стеком, 4% - с файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества в ядре 6.4:

  • Память и системные сервисы
    • Предоставлена возможность создания работающих на уровне ядра обработчиков (kernel worker) из процессов в пространстве пользователя. В отличие от использования API kthread, создаваемые из пространства пользователя обработчики наследуют свойства процессов и выполняются с учётными данными процесса пространства пользователя, что позволяет более жёстко изолировать их и применять к ним ограничения RLIMIT. Реализация оптимизирована для совместного использования с io_uring.
    • Из ветки Rust-for-Linux продолжен перенос дополнительной функциональности, связанной с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Добавлен API pin-init для безопасной инициализации прикреплённых структур данных. Добавлены примитивы блокировок LockClassKey, Lock/Guard, Mutex и SpinLock. Реализованы типы: ARef (always-refcounted) для ссылок на объект, к которому применяется механизм подсчёта ссылок, Task для работы со структурой task_struct и LockedBy для защиты данных через внешние блокировки. Добавлена поддержка условных переменных (CondVar). Реализован crate-пакет UAPI для взаимодействия с пространством пользователя. Добавлены функции для манипуляции с ioctl().
    • Добавлена поддержка предоставляемого в процессорах Intel режима LAM_U57 (Linear Address Masking), позволяющего использовать часть битов 64-разрядных указателей (c 57 по 62 биты) для хранения не связанных с адресацией метаданных. Для обычных программ не требуется столько памяти, что могут адресовать 64-разрядные указатели, поэтому верхние биты могут быть задействованы, например, для проверок, связанных с обеспечением безопасности.
    • Реализован вариант механизма объединения идентичных страниц памяти, работающий на уровне процессов и позволяющий значительно снизить потребление памяти за счёт дедупликации страниц с одинаковым содержимым. В отличие от ранее предложенного механизма KSM (Kernel Samepage Merging) в новой реализации включение поддержки дедупликации осуществляется через prctl(PR_SET_MEMORY_MERGE) для процесса целиком и наследуется для дочерних процессов, без необходимости активации для каждого диапазона памяти при помощи вызова madvise(MADV_MERGEABLE), что значительно упрощает применение.
    • Непривилегированным процессам разрешено получение информации от подсистемы ядра PSI (Pressure Stall Information), позволяющей в пространстве пользователя проанализировать сведения о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для точной оценки уровня загруженности системы и характера замедления работы. Для непривилегированных процессов опрос PSI допускается не чаще чем каждые две секунды.
    • Добавлен механизм "User trace events", позволяющий создавать события трассировки из пользовательских процессов для отслеживания активности в пространстве пользователя.
    • В BPF добавлена поддержка типовых итераторов, упрощающих создание циклов в BPF-программах, используя шаблон организации цикла, состоящий из шагов "начать итерацию", "перейти к следующему элементу" и "закончить итерацию".

      В BPF также реализовано заполнение в режиме ротации буфера с логом проблем, выявляемых верификатором BPF-кода, т.е. теперь если данные не вмещаются в буфер, в логе сохраняются последние записи, а не начальные. Добавлена возможность сохранения указателей kptr в привязанных к CPU hashmap, LRU hashmap и локальных map-типах (sk, cgrp, task, inode). Улучшено использование kptr-типов с буферами пакетов и XDP. В функции bpf_timer_start() разрешено указание абсолютных значений времени.

    • Добавлена новая виртуальная файловая система /sys/kernel/tracing/touched_functions, позволяющая определить все функции ядра, доступные для трассировки и прикрепления BPF-программ.
    • В механизм ptrace добавлены новые операции PTRACE_GET_SYSCALL_USER_DISPATCH и PTRACE_SET_SYSCALL_USER_DISPATCH, позволяющими одному процессу управлять настройками диспетчеризации системных вызовов в другом процессе, что будет использовано в инструментарии CRIU, предназначенном для сохранения и восстановления состояния процессов в пространстве пользователя.
    • Добавлена поддержка механизма определения и коррекции ошибок EDAC (Error Detection And Correction) в серверах на базе процессоров Intel Sierra Forest.
    • В интерфейсе асинхронного ввода/вывода io_uring появилась возможность одновременной прямой записи в файл в несколько потоков (поддерживается в ext4 и XFS). В io_uring также добавлена опция "multishot" для повторяющейся генерации таймаутов без необходимости промежуточной перенастройки таймера.
    • В минимальной стандартной Си-библиотеке Nolibc реализована поддержка архитектуры LoongArch (в дополнение к поддержке ARM, AArch64, i386, x86_64, s390, RISC-V и MIPS).
    • Добавлено руководство по быстрой сборке урезанного варианта ядра.
    • Удалён SLOB (slab allocator), устаревший механизм распределения памяти slab, который был спроектирован для систем с небольшим объёмом памяти. Вместо SLOB следует использовать SLUB или SLAB.
    • Для систем на базе архитектуры RISC-V реализована поддержка перехода в спящий режим (hibernation) и предоставлена возможность сборки ядра в виде файла, скомпонованного в режиме PIE (Position-independent executables). Добавлен новый системный вызов riscv_hwprobe() для предоставления информации о производителе и архитектуре доступного оборудования. Для RISC-V также добавлена поддержка расширения Svnapot, позволяющего связывать группы страниц памяти, размером 4K, для создания более крупных страниц памяти.
    • Для архитектуры S390 реализована поддержка GCC-плагина STACKLEAK, обеспечивающего инициализацию всех хранимых в стеке переменных для предотвращения утечки информации из ядра через неинициализированные переменные, которые могут содержать остатки ранее сохранённых в стеке данных.
    • В системный вызов userfaultfd(), позволяющий создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя, добавлены новые флаги: UFFD_FEATURE_WP_UNPOPULATED для защиты от записи незаполненных анонимных областей памяти и UFFDIO_CONTINUE_MODE_WP для частичной защиты от записи элементов таблицы страниц памяти.
    • Проведена работа по удалению макроса MODULE_LICENSE() из кода, который не может быть собран как модуль ядра.
    • Предложен более гибкий механизм управления памятью загружаемых модулей ядра - module_memory, также примечательный улучшениями, связанными с производительностью и безопасностью.
    • В драйвер amd-pstate добавлена поддержка управляемого автономного режима (Guided Autonomous Mode), при котором частота процессора выбирается автоматически, но не может выходить за пределы указанного диапазона.
    • В планировщике задач устранено регрессивное изменение, из-за которого в ядрах 6.2 и 6.3 снизилась производительность высоконагруженных систем с СУБД PostgreSQL.
  • Дисковая подсистема, ввод/вывод и файловые системы
    • В файловой системе tmpfs реализована опция монтирования "noswap", запрещающая использование системного раздела подкачки для хранения данных.
    • В XFS добавлены изменения, необходимые для реализации проверки ФС на лету (online scrub), включение которой ожидается в одном из следующих выпусков (при этом уже добавлена документация на online fsck).
    • В файловой системе Ext4 упрощена огранизация записи журнала (data=journal). Внесены оптимизации, связанные с предварительным распределением inode, позволившие ускорить работу в системах, в которых выполняется большое число случайных операций записи. Операции чтения и записи страниц памяти переведены на использование фолиантов страниц памяти (page folios).
    • В Btrfs переписан код для проверки ФС, который переведён на использование scrub_stripe, поддерживает проверку RAID56 и выполняется примерно на 10% быстрее. Повышена производительность журналирования каталогов (исключение перебора индексов при журналировании позволило в 4 раза сократить время, затрачиваемое на выполнение fsync).
    • В драйвере NTFS3 удалена опция монтирования "noacsrules", которая была некорректно реализована.
    • В сервер NFS добавлена поддержка RFC 9289, определяющего механизм TLS-шифрования RPC-вызовов.
    • В системном вызове open() запрещено одновременное указание флагов O_DIRECTORY и O_CREAT, которое теперь будет приводить к выводу ошибки EINVAL.
    • В файловой системе F2FS добавлена поддержка зонированных блочных устройств, в которых размер зон не кратен степени двойки.
    • Изменено кодирование ioctl-команд для драйвера ublk, выносящего специфичную логику на сторону процесса в пространстве пользователя. Для обеспечения совместимости со старыми обработчиками добавлена сборочная настройка UBLK_LEGACY_OPCODES.
  • Виртуализация и безопасность
    • В хранилище ключей (keyring) ".machine" реализован режим, допускающий размещения только ключей, заверенных цифровой подписью известного системе удостоверяющего центра. Хранилище ".machine" содержит ключи владельца системы (MOK, Machine Owner Keys), используемые в shim-загрузчике и применяемых для заверения цифровой подписью компонентов ядра, загружаемых на стадии после начальной загрузки, например, модулей ядра. Новый режим нацелен на предоставление возможности размещения в хранилище ".machine" ключей, используемых в подсистеме IMA (Integrity Measurement Architecture), предназначенной для проверки целостности компонентов операционной системы по цифровым подписям и хэшам.
    • Запрещено отключение и выгрузка модуля SELinux во время работы. Отключение SELinux теперь может производиться только на начальной стадии загрузки через передачу параметра "selinux=0" в командной строке ядра. В большинстве дистрибутивов Linux уже применяется подобный запрет, поэтому изменение не отразится на рабочих процессах.
    • В SELinux прекращена поддержка параметра "checkreqprot", позволявшего отключить проверку защиты памяти при обработке правил (параметр разрешал использование исполняемых областей памяти, независимо от предписаний, заданных в правилах).
    • Добавлена поддержка гипервызовов Hyper-V, применяемых для проброса PCI-устройств в гостевые системы с драйверами для Hyper-V. Добавлена начальная поддержка виртуальных уровней доверия Hyper-V (VTL, Virtual Trust Level).
    • В гипервизоре KVM реализован фреймворк для выноса обработки запросов SMCCC (Secure Monitor Call Calling Conventions) в пространство пользователя, что позволяет реализовывать многие операции, связанные с виртуализацией, в пространстве пользователя, без их добавления в ядро.
    • В драйвере AMD IOMMU (amd_iommu) появилась поддержка 5-уровневых таблиц страниц памяти, что позволяет выделять до 4 ПБ физической памяти гостевым системам.
  • Сетевая подсистема
    • Реализован универсальный программный интерфейс для управления светодиодными индикаторами на сетевых коммутаторах или сетевых платах. В структуру данных DeviceTree добавлены отдельные поля для привязки светодиодных индикаторов к устройствам.
    • Добавлен новый API на основе протокола Netlink, предназначенный для организации вызова ядром вспомогательных функций, выполняемых в пространстве пользователя. Новый API может использоваться для вызова обработчиков согласования соединения TLSv1.3 и установки сетевого сеанса, используя для этого функциональность из внешних библиотек.
    • Для протокола SCTP реализована поддержка планировщиков для справедливого распределения пропускной способности между потоками (Fair Capacity Scheduler) и справедливого заполнения очереди с учётом весовых коэффициентов (Weighted Fair Queueing Scheduler).
    • Добавлена возможность прикрепления BPF-программ для обработки хуков NetFilter, например, для создания обработчика, принимающего решение о перенаправлении пакетов (FORWARD) или выполнения действий на стадии до маршрутизации (PREROUTING).
  • Оборудование
    • В драйвере i915 (Intel) продолжена реализация поддержки GPU Meteor Lake.
    • В драйвер AMDGPU внесены изменения для управления энергопотреблением на системах на базе APU AMD Van Gogh.
    • Добавлен драйвер QAIC для PCIe-карты Qualcomm Cloud AI 100 (AIC100) с ускорителем операций для систем машинного обучения.
    • Удалены символьные драйверы для устаревших устройств с интерфейсом PCMCIA, такие как cm4000_cs, cm4040_cs и scr24x_cs.
    • Прекращена поддержка SoC Intel Thunder Bay (выпуск данного SoC был отменён Intel).
    • Добавлена поддержка игровых контроллеров Turtle Beach.
    • Добавлена начальная поддержка звука на системах с CPU Intel Lunar Lake. Добавлен драйвер AMD SoundWire Manager для управления звуковым сопроцессорами AMD.
    • Добавлена поддержка мониторинга состояния датчиков температуры через API hwmon для около 100 моделей плат ASUS.
    • В драйвере MediaTek MT76 добавлена поддержка WiFi 7.
    • Добавлена начальная поддержка систем Apple на базе ARM-чипа M2.
    • Добавлен драйвер msi-ec, позволяющий из пространства пользователя управлять расширенными функциями ноутбуков MSI, такими как выбор профиля энергопотребления, изменение скорости кулера, управление светодиодными индикаторами и задание уровней зарядки.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 6.4 - Linux-libre 6.4-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.4 обновлён код чистки блобов в документации к микрокоду x86, x86-драйверах для планшетов Android, криптодрайверах QAT, а также в новых файлах devicetree для устройств qcom на базе архитектуры AArch64. Прекращена чистка драйвера vs6624, который был удалён из ядра. Улучшена очистка загрузчиков блобов в коде op-tee, rtl8710b и qcom Cloud AI. Проведена чистка реализации протокола bluetooth nxp.



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

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

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