След като работи два месеца, Линус Торвалдс представи новата версия на ядрото 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. Подобренa е производителността при работа с блокировки при изпълнение на операции, свързани с резервиране на място. Добавено поддръжка на ioctl операция shutdown, позволяваща да се преведе ФС в състояние, при което се прави опит за завършване на вече стартирали операции, но всички нови операции са блокирани.
- В файловата система Ext4 е включена поддръжка на блокове, чийто размер надвишава размера на страницата в паметта (>4KB на системи x86). Използването на големи блокове позволява увеличава производителността на буферираните операции за запис средно с 50%, но понижава производителността при директен вход/изход поради увеличеното време за изчисление на контролни суми. В новата версия също добавени оптимизации, увеличаващи пропускната способност при извършване на онлайн дефрагментация.
- В подсистемата FUSE подобренa е поддръжката на буферирано четене при използване на големи листи от страници за памет (large folios). Чрез iomap е реализирана възможността за проследяване на частично актуални фолианти за зареждане само на данни, липсващи в буфера.
- В VFS е добавена поддръжка на отзивано делегиране на управление на директорията (recallable directory delegation), позволяващо реализирането на NFS предаване на управлението на директорията от сървъра на клиента, така че NFS клиентът без запитвания към NFS сървъра самостоятелно да проследява състоянието на директорията на базата на локален кеш. Ако друг NFS клиент направи промени, свързани с тази директория, делегирането на управление ще бъде отзовано от първия клиент.
- За NFS е добавена поддръжка на четене в режим на директен вход/изход (direct I/O). Реализирани настройки /sys/kernel/debug/nfsd/io_cache_read и /sys/kernel/debug/nfsd/io_cache_write за управление на включването на кеширане и операции на директен вход/изход; манипулацията с тези настройки позволява да се намалят разходите на страна на NFS клиента при извършване на големи операции вход/изход.
- В NTFS реализирана е поддръжка на ioctl операция shutdown, е активирано по подразбиране опциите за монтиране acl и prealloc, е добавена поддръжка за време до 1 януари 1970 година.
- За блокови устройства и ФС е включено по подразбиране независимо кеширане на обекти за всяко CPU "bio" (Block I/O), определящи активни операции за вход-изход.
- Памет и системни услуги
-
В ядрото е включена подсистема 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-А за маркиране на всяко достъпване на паметта с идентификатор на секция (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 (Input-Output Memory Management Unit), извършващи транслация на виртуални адреси, видими за хардуерното устройство, в физически адреси, с възможност за филтриране на DMA операции по виртуални адреси, както и за ограничаване и изолиране на операции за вход-изход.
В събитията за проследяване на системни повиквания е реализирана възможност за четене на буфери от потребителското пространство и включване на съдържанието им (например, имена на файлове) в резултата от проследяването.
-
**Странични страници на паметта(( (guard page), достъпът до които предизвиква изключение и аварийно приключване на процеса (SIGSEGV), сега се маркират с особен знак в файла /proc/PID/smaps.
-
Добавено възможност за управление на големи страници памет (transparent huge page) в частната памет на зонални устройства. В устройството
-
В устройството zram, използвано за компресирано съхранение на дял за разширение в паметта, е реализирана поддръжка на изместването на няколко структури «bio» (Block I/O) в пакетен режим (writeback batching).
Включен е шрифт «Terminus 10×18», подобряващ четимостта на информацията от конзолата на екрани на лаптопи със средно разрешение (1440×900).
-
Значително оптимизирана работа на подсистемата за одит — забелязва се намаление на разходите наполовина.
-
- Виртуализация и сигурност
- Добавена е поддръжка на възможността, предоставяна от процесорите на Intel за разделение на линейното адресно пространство (LASS, разделяне на линейното адресно пространство), което позволява хардуерно отделяне на адресните диапазони на пространството на потребителя и на ядрото за повишаване на сигурността. Адресното пространство се разделя по старшия бит на адреса – половината от адресното пространство с включен старши бит се използва за ядрото, а долната – за пространството на потребителя. На ранния етап на изпълнение на инструкциите (преди спекулативното изпълнение) се извършва проверка на допустимостта на достъпа от пространството на потребителя до адреси с включен старши бит и обратно. Подобно разделение позволява блокирането на изтичания на паметта на ядрото в пространството на потребителя по странични канали дори при спекулативно изпълнение на инструкциите, което дава възможност за прилагане на 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 позволи да се увеличи производителността 4 пъти при висока натовареност и да се удвои интензивността на изпращане на пакети при двойно намаляване на натоварването на 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 Mbps и нагоре.
- Добавено подкрепа за структура 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 7790).
- В драйвера 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, който е премахнат от ядрото.
Източник: linux.org.ru
