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
 Linux Kernel 2.6...2593 
 Clickhouse...316 
 Go Web ...307 
 Ethreal 4...284 
 C++ Patterns 3...273 
 Trees...267 
 William Gropp...239 
 Ext4 FS...239 
 Rodriguez 6...238 
 Стивенс 9...230 
 Secure Programming for Li...229 
 Максвелл 3...229 
 Steve Pate 1...228 
 Ethreal 3...224 
 Gary V.Vaughan-> Libtool...220 
 Ulrich Drepper...217 
 Assembler...215 
 Ethreal 1...215 
 Стивенс 10...214 
 DevFS...212 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org

Ядро 6.10

15.07.2024

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.10. Среди наиболее заметных изменений: драйвер ntsync c примитивами синхронизации Windows NT, компоненты DRM Panic для реализации аналога "синего экрана смерти", прекращение поддержки старых CPU Alpha, возможность верификации целостности в ФС на базе FUSE, ограничение доступа к ioctl через механизм Landlock, подсистема для профилирования операций выделения памяти, системный вызов mseal(), возможность шифрованного обмена данными с устройствами TPM, поддержка высокоприоритетных рабочих очередей в dm-crypt, драйвер panthor для десятого поколения GPU Mali.

В новую версию принято 14564 исправлений от 1989 разработчиков, размер патча - 41 МБ (изменения затронули 12509 файлов, добавлено 547663 строк кода, удалено 312464 строк). В прошлом выпуске было 15680 исправлений от 2106 разработчиков, размер патча - 54 МБ. Около 41% всех представленных в 6.10 изменений связаны с драйверами устройств, примерно 15% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% - с файловыми системами и 4% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Добавлена новая fcntl-операция F_DUPFD_QUERY, при помощи которой процесс может определить, что два разных файловых дескриптора ссылаются на один и тот же файл. В отличие от похожих возможностей, предоставляемых системным вызовом kcmp(), F_DUPFD_QUERY не приводит к раскрытию лишней информации и работает на системах с отключённым kcmp().
    • В подсистеме FUSE, применяемой для реализации файловых систем в пространстве пользователя, реализована возможность применения механизма fs-verity для проверки целостности и подлинности файлов.
    • В модуль dm-crypt, применяемый для шифрования блочных устройств, добавлена опция "high_priority", позволяющая задействовать высокоприоритетные рабочие очереди для повышения производительности на мощных серверах. По умолчанию режим выключен, так как он может приводить на обычных ПК к повышению задержек при выполнении работ не связанных с шифрованием, таких как обработка звука.
    • Добавлен основанный на netlink протокол для управления NFS-сервером в ядре. В пространстве пользователя на базе данного протокола подготовлена утилита nfsdctl. Отключена по умолчанию поддержка монтирования NFS v2 (в утилите mount.nfs поддержка NFS v2 была прекращена ещё в 2021 году).
    • В файловой системе XFS продолжена работа над реализацией возможности применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы. Добавлен ioctl XFS_IOC_EXCHANGE_RANGE для обмена байтовыми диапазонами между двумя файлами в атомарном режиме.
    • В Btrfs реализована поддержка урезания (shrinker) незакреплённых карт экстентов, что может оказаться полезным для сокращения потребления памяти в условиях нехватки памяти в системе. Код для сжатия данных и функция put_file_data() переведены на использование фолиантов страниц памяти (page folios). Переработан механизм блокировки экстентов при выполнении операций обратной записи.
    • В ФС Ext4 добавлена поддержка ioctl FS_IOC_GETFSSYSFSPATH для определения местоположения заданной примонтированной ФС в иерархии /sys/fs.
    • Файловые системы OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX и FREEVXFS переведены на использование нового API монтирования разделов.
    • В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, добавлена поддержка алгоритма сжатия Zstandard.
    • В Bcachefs проведена подготовка к выполнению fsck без отмонтирования раздела (online-проверка). Добавлены изменения и исправления для повышения надёжности работы. Реализована возможность обновления и отката формата ФС в режиме "nochanges", отключающем запись и хранящем метаданные только в памяти.
    • В файловую систему OverlayFS добавлена поддержка создания временных файлов, используя опцию O_TMPFILE.
    • Прекращена поддержка механизма ограничения пропускной способности блочных устройств "CONFIG_BLK_DEV_THROTTLING_LOW", который с 2017 года сохранил статус экспериментального, не получил распространения на практике и затрудняет сопровождения подсистемы блочных устройств.
  • Память и системные сервисы
    • Добавлен начальный вариант драйвера ntsync, реализующего символьное устройство /dev/ntsync и набор примитивов для синхронизации, применяемых в ядре Windows NT. Реализация подобных примитивов на уровне ядра позволяет существенно поднять производительность Windows-игр, запускаемых при помощи Wine. Прирост производительности достигается благодаря избавлению от накладных расходов, связанных с применением RPC в пространстве пользователя. Создание отдельного драйвера для ядра Linux объясняется проблематичностью корректной реализации API синхронизации NT поверх существующих примитивов в ядре. Драйвер пока отключён по умолчанию и помечен как неработоспособный ("broken"). Добавление недостающих частей и доведение до рабочего вида ожидается в следующей ветке ядра.
    • Добавлена подсистема для профилирования операций выделения памяти в ядре Linux, позволяющая выявлять утечки памяти в ядре и упрощающая проведение оптимизаций потребления памяти. Подсистема обеспечивает низкие накладные расходы, что позволяет использовать её не только в отладочных сборках ядра, но на рабочих системах.
    • Добавлена начальная реализация обработчика аварийных ситуаций в ядре - DRM Panic, использующего подсистему DRM (Direct Rendering Manager) для отображения наглядного цветного отчёта в стиле "синего экрана смерти". В следующем выпуске планируется добавить возможность показа логотипа и QR-кода на экране при возникновении аварийного состояния.
    • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Осуществлён переход на использование выпуска Rust 1.78, позволивший переключиться на использование штатной библиотеки alloc, вместо собственного ответвления. Добавлены абстракции для работы со временем в ядре (обвязка над структурой ktime_t). Добавлена поддержка использования компонентов ядра на языке Rust на системах с архитектурой RISC-V.
    • В BPF-программах реализована возможность использования очередей ожидания (wait queue) в ядре. Добавлены функции bpf_preempt_disable и bpf_preempt_enable, позволяющие создавать не прерываемые планировщиком задач секции с кодом. Предоставлена возможность доступа BPF-программ к криптографическим функциям ядра (crypto). Реализована поддержка JIT-компиляции BPF-программ на системах с 32-разрядными процессорами ARCv2.
    • Для 32-разрядных систем ARM реализована поддержка сборки ядра компилятором Clang с включённым режимом защиты CFI (Control Flow Integrity), блокирующим нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
    • Добавлена возможность прямого отражения через mmap() кольцевых буферов трассировки для передачи их содержимого в пространство пользователя без дополнительного копирования.
    • Добавлен системный вызов "mseal", позволяющий процессам выставлять блокировку на изменение определённых частей своего адресного пространства. На практике новый системный вызов планируется использоваться в браузере Chrome для усиления sandbox-изоляции.
    • Для субархитектуры x32, которая предоставляет гибридный x86_64 ABI, позволяющий использовать на 64-разрядных системах 32-разрядную модель адресации памяти (процессор работает в 64-разрядном режиме, но использует 32-разрядные указатели и арифметические операции), добавлена поддержка механизма Shadow Stack, который позволяет блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
    • На системах с архитектурой ARM64 в системном вызове userfaultfd(), дающем возможность создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя, реализованы возможности, связанные с защитой от записи областей памяти и элементов таблицы страниц памяти.
    • Удалён код для поддержки выпускаемых с 1995 года процессоров Alpha 21164 (EV5) и более ранних серий. Сопровождение кода для данных процессоров было усложнено из-за отсутствия в них возможности доступа к памяти на уровне отдельных байтов. Alpha была первой архитектурой, на которой было портировано ядро Linux, изначально доступное только для систем x86.
  • Виртуализация и безопасность
    • Добавлена поддержка шифрованного обмена данными с устройствами TPM (Trusted Platform Module) и проверки целостности транзакций.
    • В LSM-модуль Landlock, позволяющий ограничить взаимодействие группы процессов с внешним окружением, добавлена возможность применения правил для ограничения доступа к вызовам ioctl().
    • Предложена выставляемая на этапе загрузки опция init_mlocked_on_free, обеспечивающая обнуление содержимого памяти, защищённой от вытеснения в раздел подкачки при помощи вызова mlock(), если данная память будет освобождена без разблокировки вызовом munlock(). Использование данной опция позволяет исключить оседание криптографических ключей в памяти в случае аварийного завершения работающего с ними приложения.
    • В подсистеме crypto ускорено выполнение операций дискового шифрования с использованием алгоритма AES-XTS на системах x86_64 с процессорами Intel и AMD, поддерживающими расширения VAES, AVX2, VPCLMULQDQ, AVX10 или AVX512.
    • Удалена возможность сбора статистики об использовании криптоподсистемы ядра (CONFIG_CRYPTO_STATS). Данная возможность не использовалась на практике и приводила к значительному снижению производительности, а также создавала ощутимую дополнительную нагрузку на сопровождающих.
  • Сетевая подсистема
    • Значительно повышена производительность операций отправки данных в режиме zero-copy при использовании подсистемы io_uring. Добавлена возможность объединения ("bundle") нескольких буферов для операций отправки и приёма данных.
    • Переписан код сборки мусора, применяемый при отправке файловых дескрипторов через Unix-сокеты c использованием сообщений SCM_RIGHTS. Изменение позволяет решить проблему с накоплением зацикленных счётчиков ссылок.
    • Добавлена возможность установки фильтров для протокола PFCP (Packet Forwarding Control Protocol), используемого в сетях 4G и 5G.
    • Добавлена поддержка опции сетевых сокетов SO_PEEK_OFF, которая по аналогии с такой же опцией для Unix-сокетов позволяет определить смещение данных в очереди, используемое системным вызовом recv при указании флага MSG_PEEK (помечает данные непрочитанными и они будут опять выданы при следующем вызове recv).
    • В подсистему io_uring добавлена поддержка операции IORING_CQE_F_SOCK_NONEMPTY, позволяющей определить у сетевого сокета наличие запросов на соединение, ожидающих обработки.
    • Предложена реализация технологии PoE (Power over Ethernet), основанная на ранее доступном коде для поддержки PoDL (Power over Data Line) и совместимая с PoE-контроллерами Microchip PD692x0 и TI TPS23881.
    • Для протоколов TCP, DCCP и MPTC добавлена поддержка механизма rstreason, позволяющего определять причину отправки RST-пакетов (например, NO_SOCKET).
  • Оборудование
    • В состав включён драйвер panthor для десятого поколения GPU Mali (G310, G510, G710), в котором применяется технология CSF (Сommand Stream Frontend), выносящая на сторону прошивки некоторые функции драйвера для снижения нагрузки на CPU и предлагающая новую модель организации выполнения работ на GPU. Изменения для поддержки нового драйвера также приняты в Mesa и включены в состав Gallium-драйвера panfrost для GPU Mali.
    • В драйвер i915 добавлены PCI-идентификаторы новых дискретных видеокарт Intel Arc (DG2/Alchemist).
    • Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена поддержка CPU Arrow Lake H. Продолжена реализация поддержки процессоров Lunar Lake. Добавлена начальная поддержка механизма SR-IOV (Single Root I/O Virtualization).
    • В драйвере AMDGPU добавлена поддержка SMU 14.0 (System Management Unit). Добавлена возможность использования новых GPU AMD на системах с архитектурой RISC-V.
    • Добавлен драйвер для ускорителя криптографических операций Tegra Security Engine, который можно использовать для ускорения AES и различных алгоритмов хэширования.
    • Добавлена поддержка экранных панелей LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380,BOE NT116WHM-N44, CMN N116BCA-EA1 и AUO B120XAN01.0.
    • Добавлена поддержка звуковой подсистемы ноутбуков Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X и ASUS Zenbook 2024 HN7306W. Добавлена поддержка внешних звуковых карт Vocaster One и Vocaster Two. Добавлен драйвер для усилителей NAU8325 от компании Nuvoton Technology.
    • В драйвер HID-Steam добавлена поддержка IMU (Inertial Measurement Unit) игрового контроллера Steam Deck, позволяющая использовать отдельный узел evdev для доступа к данным гироскопа и акселерометра.
    • Включены изменения для поддержки ARM SoC Snapdragon X Elite, в котором используется собственный 12-ядерный CPU Qualcomm Oryon и GPU Qualcomm Adreno. Чип нацелен на использование в ноутбуках и ПК, и опережает во многих тестах производительности чипы Apple M3 и Intel Core Ultra 155H.
    • Добавлена поддержка ARM-плат, SoC и устройств: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
    • Добавлена поддержка плат Milk-V Mars, использующих SoC Starfive JH7110 на базе архитектуры RISC-V.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 6.10 - Linux-libre 6.10-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.10 обновлён код чистки блобов в драйверах Intel i915, rtl8xxxu, qla2xxx и QCAI sahara. Проведена чистка имён блобов в dts-файлах (devicetree) для архитектуры Aarch64. Очищены от блобов новые файлы, добавленные в драйверах Adreno, Intel IPU3 и PRUEth. Проведена чистка новых драйверов Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID и pcm6240. Прекращена чистка USB-драйвера Prism2.5/3 USB, который был удалён из ядра.



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

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

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