Издание на ядрото на Linux 6.19. Следващото ядро ще бъде обозначено с номер 7.0

След два месеца разработка, Линус Торвалдс представи изданието на ядрото на Linux 6.19. Сред най-забележителните промени: подсистемата Live Update Orchestrator, поддръжка на PCIe Link Encryption, системен повик listns, режим Zero-Copy Receive в io_uring, поддръжка на ARM разширението MPAM, klp-build за генериране на live пачове, поддръжка на архитектурата LoongArch32, QoS за s2idle, оптимизация на подсистемата за одит, Intel LASS за защита от Spectre, поддръжка на хешове SHA-3 и BLAKE2b, механизъм Confidential VMBus, TX оптимизации в мрежовата подсистема, протокол CAN XL, API за хардуерно ускорение на HDR изхода.

В анонса на новата версия Линус съобщи, че на следващото издание на ядрото ще бъде присвоен номер 7.0, тъй като в клон 6.x се натрупаха достатъчно издания, за да се смени първото число в номера на версията (по време на издаването на 6.0 следваше 5.19). Смяната на номерацията се извършва от естетически съображения и е формален процес, който премахва дискомфорта от натрупването на голям брой издания в серията. Линус се пошегува, че големите числа, за които не му стигат пръстите на ръцете и краката, го объркват. Важно е да се отбележи, че формално има основание за значителна промяна на номера на версия, тъй като от следващото издание поддръжката на Rust ще бъде преместена от експерименталната в основната функционалност на ядрото.

В новата версия са приети 15657 поправки от 2237 разработчици, размерът на пача е 52 MB (промените засягат 13682 файла, добавени 794649 реда код, изтрити 335498 реда). В предишното издание имаше 15035 поправки от 2217 разработчици, размерът на пача беше 45 MB. Около 40% от всички представени промени в 6.19 са свързани с драйвери за устройства, приблизително 13% от промените имат отношение към обновлението на код, специфичен за хардуерни архитектури, 12% са свързани с мрежовия стек, 5% - с файловите системи и 3% с вътрешните подсистеми на ядрото.

Основни нововъведения в ядрото 6.19 (1, 2, 3):

  • Дискова подсистема, вход/изход и файлови системи
    • В Btrfs процесите на проверка на файловата система (scrub) и замяна на устройства вече не блокират преминаването на системата в спящ режим (преди да заспи, състоянието на scrub-проверка се запазва; след събуждане, scrub-проверка продължава, а операцията за замяна на устройства се стартира отново). В реализацията на RAID56 е добавена поддръжка на блокове, чийто размер надвишава размера на страница в паметта. Извършена е подготовка за поддръжка на fscrypt. Повишена е производителността при работа с блокировки, свързани с резервиране на пространство. Добавена е поддръжка на ioctl-операция „shutdown“, позволяваща да се постави файловата система в състояние, при което се предприемат опити за приключване на вече стартирани операции, но блокират всички нови операции.
    • В файловата система Ext4 е реализирана поддръжка на блокове, чийто размер надвишава размера на страница в паметта (>4KB на системи x86). Използването на големи блокове позволява да се увеличи производителността на буферираните операции по запис в средно с 50%, но намалява производителността на директния вход/изход поради увеличаването на времето за изчисляване на контролни суми. В новата версия също са добавени оптимизации, повишаващи пропускната способност при извършване на online-дефрагментация.
    • В подсистемата FUSE е подобрена поддръжката на буферирано четене при използване на големи фолианти на страниците в паметта (large folios). Чрез iomap е реализирана възможност за проследяване на частично актуални фолианти за зареждане само на данните, които липсват в буфера.
    • В VFS е добавена поддръжка на отзиваемо делегиране на управление на директории (recallable directory delegation), позволяваща реализиране в NFS на предаване на управление на директория от сървър клиента, така че клиентът на NFS без обращения към NFS-сервера самостоятелно да проследява състоянието на директорията на базата на локалния кеш. Ако друг NFS-клиент извърши промени, свързани с тази директория, делегирането на управление ще бъде отзовато от първия клиент.
    • Добавена е поддръжка на четене в режим на директен вход/изход (direct I/O) за NFS. Реализирани са настройки /sys/kernel/debug/nfsd/io_cache_read и /sys/kernel/debug/nfsd/io_cache_write за управление на кеширане и операции с директен вход/изход; манипулацията с тези настройки позволява намаляване на разходите за NFS клиента при извършване на големи вход/изход операции.
    • В NTFS е реализирана поддръжка на ioctl операцията shutdown, включени са по подразбиране опциите за монтиране "acl" и "prealloc", добавена е поддръжка на времето до 1 януари 1970 година.
    • За блоковите устройства и файловите системи по подразбиране е включено разделно кеширане на обекти "bio" (Block I/O), определящи активните вход/изход операции за всеки CPU.
  • Памет и системни услуги
    • В ядрото е включена подсистемата Live Update Orchestrator (LUO), която позволява пълно презареждане и обновление на ядрото без прекъсване на работата и без загуба на състоянието на системата, устройствата и процесите. Подсистемата LUO се основава на вече добавения в ядрото механизъм KHO (Kexec HandOver) и в допълнение на възможността за стартиране на ново ядро от старо без загуба на състоянието на системата решава задачи като запазване на състоянието на устройствата и оперативната памет, както и осигуряване на непрекъснатост на операциите, свързани с DMA и обработка на прекъсвания. Състоянието се запазва до преминаване на новото ядро и се възстановява след активиране на новото ядро без нарушаване на непрекъснатите операции с устройствата, извършвани от системата и приложенията в пространството на потребителя.
    • Добавен е системен повик listns() за извеждане на списък на съществуващите в системата имена на пространства без необходимост от обход на /proc//ns/ за всички процеси.
    • В системата за асинхронен вход/изход io_uring е добавена поддръжка за разполагане на елементи с различен размер в опашката за подаване (SQE, Submission Queue Entry), по аналогия с това как в предишното издание беше разрешено смесването на размера на съдържанието на опашката за резултати (CQE, Completion Queue Event). Преди това всички елементи в опашката трябваше да имат един размер, което водеше до прекомерно потребление на памет поради необходимостта от използване на максималния размер за всички елементи в опашката.

      В io_uring е добавена поддръжка на механизма zcrx (Zero-Copy Receive) за получаване на данни без копиране между ядрото и пространството на потребителя. Добавена е поддръжка на заявки за подреждане на паметта за опашките SQ (Submission Queue) и CQ (Completion Queue), позволяваща получаване на информация за размера на пръстеновия буфер, необходима при потребителското разпределение на паметта с флаговете IORING_SETUP_NO_MMAP и IORING_MEM_REGION_TYPE_USER.

    • За бързо трасирване на стека с помощта на утилити, като perf, е добавена поддръжка на формата SFrame с информация за разплитането на стека на извиквания (unwind). SFrame вече се поддържа в GCC и binutils, не води до намаляване на производителността и, в отличие от формата DWARF, съдържа само минимален набор от информация, необходима за трасирването на стека.
    • В утилитата perf е добавена поддръжка за унифицирани описания на метрики и събития във формат JSON, както и отложено разплитане (deferred unwinding) на стека на извиквания в пространството на потребителя.
    • За процесорите AMD е реализиран механизъм за подмяна на данни в кеша, позволяващ на входно/изходните устройства директно да подменят данни в L3 кеша на CPU без предварителното им поставяне в RAM.
    • Добавена е поддръжка на MPAM (Memory System Resource Partitioning and Monitoring), разширение на архитектурния набор от команди ARMv8-A за маркиране на всяко обращение към паметта с идентификатор на секция (PARTID, Partition ID) и идентификатор на група за мониторинг (PMG, Monitoring Group ID). В зависимост от PARTID може да се ограничи потреблението на ресурси, като пропускна способност на паметта или размер на кеша, така че определена група задачи да не заема всички ресурси. В контекста на мониторинга, комбинацията PMG и PARTID може да се използва за проследяване на потреблението на ресурси на паметта при определени видове натоварване.
    • В случай на аварийно приключване на процеса след получаване на сигнал, друг процес, който има pidfd на приключилия процес, сега може да определи номера на сигнала, довел до приключването на процеса.
    • Реализацията на повторяемите последователности (restartable sequences) е преработена, позволяваща на приложенията да организират псевдо-атомарно непрекъснато изпълнение на група инструкции (в случай на прекъсване от друг поток, се предприема повторна опит за изпълнение на последователността). Новата реализация се отличава с по-добра по-висока производителност..
    • За BPF програми са реализирани инструкциите BPF_JMP, BPF_X и BPF_JA за извършване на непреки преходи на определена позиция от таблицата за преходи. Добавена е концепцията за динамични указатели (dynptr), които позволяват четене на данни от структурани файлове. Добавена е възможността за прикрепяне на множество байтове с метаданни към мрежови пакети.
    • Модулите на Python, използвани за обработка на документацията към ядрото, бяха преместени в отделна директория tools/lib/python.
    • Добавена е функцията mempool_alloc_bulk() за безопасно разпределение на елементи от пул за памет под формата на множество обекти.
    • Продължи прехвърлянето на промени от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активна по подразбиране и не води до включване на Rust сред задължителните зависимости за компилиране на ядрото). В новата версия е вградена библиотека "syn" с парсер за Rust код, който опростява написването на сложни макроси. Разширени са възможностите на библиотеките kernel, pin-init и rbtree. Добавена е библиотека 'num' с тип Integer за манипулация на цели числа. В макроса "module!" е добавена поддръжка за цели параметри. Реализирана е възможността за задаване на параметри при зареждане на модули на ядрото, написани на Rust. Реализирани са абстракции за подсистемите I2C и PWM (импулсна широчинна модулация).
    • Добавен е макрос "at_least" (например, "param[at_least 7]", който информира за минимално допустимия размер на масива, предаван на функцията. Ако на функцията бъде предаден масив с по-малко елементи, компилаторът ще изведе предупреждение.
    • Включен е скрипт klp-build за генериране на модули на ядрото, които внасят промени в работещото ядро (livepatch), на базата на файл с пач. В утилитата objtool са внесени необходимите промени за създаване на live пачове.
    • В User-mode Linux (старт на ядрото като потребителски процес) е добавена ограничена поддръжка на многопроцесорност, но нишките в един и същ процес все още не могат да се изпълняват едновременно. Започна портирование на User-mode Linux на библиотеката nolibc.
    • Добавена е поддръжка за архитектурата LoongArch32 (LA32R, LA32S) в допълнение към LoongArch64.
    • Добавена възможност за задаване на QoS лимити за интензивност на събуждане на процесора в режим на енергийна икономия s2idle (Suspend-To-Idle), замразяваща изпълнението на процесите в пространството на потребителя, но оставяща активни някои обработчици в ядрото.
    • Добавена поддръжка за управление на таблиците за страници с памет за контролерите IOMMU (Управление на паметта за вход-изход), извършващи транслация на виртуални адреси, видими на хардуерното устройство, в физически адреси, с възможност да се филтрират операции DMA по виртуални адреси, както и да се ограничават и изолират операции по вход-изход.
    • В събитията на трасировка на системни повиквания е реализирана възможността за четене на буфери от пространството на потребителя и включване на тяхното съдържание (например, имена на файлове) в резултатите от трасировката.
    • Стражевите страници с памет (guard page), достъпът до които предизвиква изключение и аварийно приключване на процеса (SIGSEGV), вече се обозначават с особен етикет в файла /proc/PID/smaps.
    • Добавена възможност за управление на големи страници памет (transparent huge page) в частната памет на зонирани устройства.
    • В устройството zram, използвано за компресирано съхранение на дяла за подкачване в паметта, е реализирана поддръжка за изгонване на множество структури „bio“ (Block I/O) в пакетен режим (writeback batching).
    • Включен е шрифтът „Terminus 10×18“, който подобрява четимостта на информацията от конзолата на екрани на лаптопи със средна разделителна способност (1440×900).
    • Работата на подсистемата за одит е значително оптимизирана — отбелязва се намаляване на разходите на два пъти.
  • Виртуализация и безопасност
    • Добавена поддръжка на възможността за разделяне на линейното адресно пространство (LASS, linear address-space separation), предоставяна от процесорите Intel, което позволява хардуерно разделяне на адресните диапазони на потребителското и ядрото пространство за повишаване на сигурността. Адресното пространство се разделя по старшия бит на адреса — половината адресно пространство с включен старши бит се използва за ядрото, а долната — за потребителското пространство. На ранния етап на изпълнение на инструкциите (преди спекулативното изпълнение) се извършва проверка на допустимостта на достъпа от потребителското пространство до адресите с включен старши бит и обратно. Такова разделяне позволява да се блокират изтичанията на ядрото в потребителското пространство по странични канали дори при спекулативно изпълнение на инструкциите, което дава възможност за прилагане на LASS за защита от атаки от класовете Meltdown и Spectre, без големи разходи.
    • Добавена е възможността за включване на разширенията за усилване на сигурността на PCI Express шина — PCIe Link Encryption и PCIe Device Authentication, които позволяват потвърждаване на автентичността и криптиране на комуникационния канал между PCIe устройствата и виртуалната машина, защитена чрез механизмите Intel TDX (Trusted Domain Extensions) и AMD SEV-SNP (Secure Nested Paging). Реализираните технологии не позволяват перехващане, анализиране и подмяна на данни в DMA трафика при наличие на достъп до хост системата или други устройства.
    • Вградена криптографска библиотека добавя поддръжка на алгоритми SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 и BLAKE2b.
    • За LSM-модулите (Linux Security Modules) и по-специално за SELinux, е реализирана възможността за проследяване на създаването на дескриптори memfd за прилагане на политиките за сигурност към свързаните с тях обекти.
    • В LSM модула IPE (Integrity Policy Enforcement), определящ общата политика за осигуряване на целостта на системата, е добавена поддръжка на флага AT_EXECVE_CHECK в функцията execveat(), която включва проверка на целостта на скрипта преди изпълнението му от интерпретатора.
    • Добавени са примитиви scoped_user_read_access(), scoped_user_write_access и scoped_user_rw_access() за ограничен достъп до данни в потребителското пространство с защита срещу спекулативни атаки.
    • Добавена поддръжка на механизма Confidential VMBus, използван в хипервизора HyperV за защитено от намеса взаимодействие между гостоприемна система, работеща в конфиденциален режим (с шифроване на паметта и изолация на регистрите на базата на технологии AMD SNP и Intel TDX), и paravisor, отговорен за достъпа до устройства, обработващи конфиденциални данни.
    • Добавена е възможността за предаване на информация за аварийно прекратен процес (за генериране на coredump) чрез механизма pidfd. Идентификаторът PIDFD е свързан с конкретен процес и не се променя, докато PID може да бъде свързан с друг процес след приключване на текущия процес, асоцииран с този PID. Използването на pidfd позволява блокиране на атаки за подмяна на аварийно прекратен suid-процес с друг процес, постигайки състояние на състезание в момента след стартиране на обработката на ядрото при аварийно приключване, но преди проверка от обработчика в пространството на потребителя на параметрите на процеса.
  • Мрежовата подсистема
    • Оптимизации в мрежовата подсистема за повишаване на ефективността на предаването на данни (TX). Премахването на spin-блокировката от функцията __dev_queue_xmit() и използването на работеща без блокировки структура llist позволи четири пъти повишаване на производителността при голямо натоварване и удвоение на интензивността на изпращане на пакети при намаляване на натоварването на CPU.
    • Предоставя се възможност за изключване на системните лимити за използване на паметта за отделни мрежови сокети (в този случай ще бъдат използвани общите лимити за памет, зададени за отделни контейнери). За управление на изключването на лимитите е предложен sysctl net.core.bypass_prot_mem и флагът SK_BPF_BYPASS_PROT_MEM в функцията bpf_setsockopt.
    • Добавена е поддръжка на разширение RFC 5837, което добавя в ICMP-сообщенията „Time Exceeded“, връщани при изтичане на времето на живот (TTL) на пакета, информация за входящите мрежови интерфейси за получаване на по-подробна информация при трасировка на маршрути с помощта на утилитата traceroute.
    • Добавена е поддръжка на непрекъснато активно полинг (busy polling) в отделен поток на ядрото с цел извличане на дескриптори от RX/TX-опашки за приложения, изискващи минимални закъснения.
    • Добавена поддръжка на протокола CAN XL (Controller Area Network eXtended Length), при който размерът на полето с данни е увеличен до 2048 байта, за да се осигури интеграция с TCP/IP мрежи. Осъществена е възможност за тунелиране на Ethernet кадри и е добавена поддръжка на широтно-импулсна модулация, което позволява предаване на данни с скорости от 20 Мбит/с и по-високи.
    • Добавена е поддръжка на структурата sockaddr_unsized, вариант на структурата sockaddr, която използва масив с гъвкави елементи вместо масив с фиксиран размер (sa_data[] вместо sa_data[14], който по същество е използван за препратки към други структури с по-голям размер).
    • Добавена е възможността за използване на функционалността getsockname и getpeername чрез подсистемата io_uring.
    • Добавени са sysctl net.ipv4.tcp_rcvbuf_low_rtt и net.ipv4.tcp_comp_sack_rtt_percent за оптимизация на TCP.
    • Добавена е поддръжка на линкове с пропускна способност 1600 Gbps (1.6T).
  • Оборудване
    • В подсистемата DRM (Direct Rendering Manager) е добавен API за използване на хардуерните възможности за преобразуване на цветове, позволяващи избягване на изпълнението на подобни преобразувания през шейдери или при изпълнение на код на CPU. За извеждане на съдържание на HDR монитор сложните цветови преобразувания сега могат да се извършват от дисплейния контролер на етапа преди и след смесването на слоевете (blending), а не чрез софтуерно композиране на съдържанието във финалния буфер за показване. Освен намаляване на разходите и енергийното потребление при организиране на извеждане в HDR, предложената функционалност може да се използва за коректна цветопредаване в редактори на видео или изображения.
    • Добавен е драйверът «ethosu» за NPU Arm Ethos U65 и U85, предназначени за хардуерно ускорение на изпълнението на AI модели.
    • В драйвера i915 за GPU Lunar Lake и новите е добавена поддръжка на хардуерно повишаване на яснотата на изображението (Sharpening).
    • Продължена е работата над drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектурата Intel Xe, която се използва в графичните карти Intel от семейството Arc и интегрираната графика, започвайки от процесорите Tiger Lake. Добавена е начална поддръжка на архитектурата Xe3P, използвана в GPU Crescent Island и семейството на процесорите с интегрирана графика Nova Lake.
    • В драйвера AMDGPU е реализирана пълна поддръжка на графични карти AMD от семейство GCN 1.0 «Southern Island» и 1.1 «Sea Islands», за които по-рано се използваше драйверът Radeon. Драйверът AMDGPU е доведен до паритет по възможности с драйвера Radeon и е активиран за посочените GPU по подразбиране. Картите GCN 1.x бяха пуснати от 2012 до 2019 година и обхващат такива модели, като Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 и други графични карти от семейства Radeon Rx 200/Rx 300. В допълнение на увеличението на производителността с около 24%, преминаването на AMDGPU позволи внедряването на поддръжка на графичния API Vulkan 1.3 за тези GPU. Освен това, в AMDGPU е добавена поддръжка на аналогови конектори и Video Coding Engine 1.0, а стекът DC (Display Core) е задействан по подразбиране за GPU на базата на микроархитектурата Bonaire (Radeon HD 7700).
    • В драйвера Nouveau е реализирана поддръжка на хардуерен ускорител NVJPG, присъстващ в SoC Tegra210.
    • В драйвера Panthor е добавена поддръжка на GPU Mali-G1 и начална поддръжка за чипа MediaTek MT8196.
    • Добавена е поддръжка на звуковата подсистема на чиповете Intel Nova Lake S, лаптопи HP с HDA CS35L41, както и звукови интерфейси CIX IPBLOQ HD и Onkyo SE-300PCIE.
    • Продължава интеграцията на компонентите на драйвера Nova за GPU NVIDIA, оборудвани с GSP фърмуер, използвани от серията NVIDIA GeForce RTX 2000, базирана на микроархитектура Turing. Драйверът е написан на езика Rust. В новата версия започна работа по RPC и е завършена реализацията на зареждането на спомагателния процесор GSP (GPU System Processor).
    • Добавена е поддръжка на ARM платформи, SoC и уреди: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 варианта плат Enclustra Mercury.
    • Добавена е поддръжка за смартфони и таблети на базата на SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) и Qualcomm MSM8939 (ASUS ZenFone 2). Добавена е поддръжка за лаптопи на SoC Qualcomm sdm850, като Huawei MateBook E 2019.
    • Добавена е поддръжка на SoC и платформи, базирани на архитектурата RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

В същото време латиноамериканският Фонд за свободен софтуер създаде версия на напълно свободно ядро 6.19 — Linux-libre 6.19-gnu, почистена от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или код, чиято употреба е ограничена от производителя. В версия 6.19 от звуковата подсистема SDCA е премахнат кодът за зареждане на бинарни фърмуери. Актуализиран е кодът за почистване на blob-овете в драйверите Intel XE, Nova-Core, Qualcomm Iris, Venus и Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 и звуковите кодеци TI tas2783. Извършено е почистване на имената на blob-овете в dts файловете (devicetree) за ARM чипове. Приключи почистването на драйвера STM C8SECTPFE DVB, който е премахнат от ядрото.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster