Linux 6.19

След талантливата разработка на Линус Торвалдс представи е публикувана 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-клиент направи промени, свързани с тази директория, делегирането на управлението ще бъде отзовето от първия клиент.
    • За 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 (Разделяне и мониторинг на ресурсите на системата с памет), разширение на архитектурата на наборите от команди ARMv8-A за маркиране на всяко обращения към паметта с идентификатор на секция (PARTID, Идентификатор на секцията) и идентификатор на група за мониторинг (PMG, Идентификатор на групата за мониторинг). Връзката с PARTID може да наложи ограничения на потреблението на ресурси, като пропускна способност на паметта или размер на кеша, така че определена група задачи да не вземе всички ресурси. В контекста на мониторинга комбинацията PMG и PARTID може да се използва за проследяване на потреблението на паметта при определени видове натоварване.

    • В случай на аварийно прекратяване на процеса след получаване на сигнал, друг процес, притежаващ pidfd на приключилия процес, сега може да определи номера на сигнала, довел до прекратяването на процеса.

    • Преработена е реализацията на възобновяемите последователности (възобновяеми последователности), позволяващи на приложенията да организират псевдо-атомарно непрекъснато изпълнение на група инструкции (в случай на прекъсване от друг поток, се предприема повторна опит за изпълнение на последователността). Новата реализация е с по-висока производителност.

    • За 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.

    • Добавена е възможност за управление на големи страници на паметта (прозрачна огромна страница) в частната памет на зонираните устройства.

    • В устройството zram, използвано за компресирано съхранение на паметта за размяна, реализирана поддържа изтласкването на няколко структури «bio» (Block I/O) в пакетен режим (writeback batching).

    • Включен е шрифт «Terminus 10×18», подобряващ четимостта на информацията от конзолата на екраните на лаптопи със средна резолюция (1440×900).

    • Значително оптимизирана работа на подсистемата за одит — отбелязва се намаление на разходите с два пъти.

  • Виртуализация и безопасност
    • Добавена е поддръжка на възможността, предоставяна от процесорите Intel за разделяне на линейното адресно пространство (LASS, linear address-space separation), позволяващо хардуерно разделяне на диапазоните на адресите за пространството на потребителя и ядрото за повишаване на безопасността. Адресното пространство се разделя по старшия бит на адреса – половината от адресното пространство с установен старши бит се използва за ядрото, а долната – за пространството на потребителя. На ранния етап на изпълнение на инструкциите (в етапа преди спекулативното изпълнение) се осъществява проверка на допустимостта на достъпа от пространството на потребителя до адресите с установен старши бит и обратно. Такова разделение позволява блокиране на изтичането на памет от ядрото в пространството на потребителя по странични канали дори при спекулативно изпълнение на инструкциите, което позволява прилагането на 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), и парвизора, отговарящ за достъпа до устройства, обработващи конфиденциални данни.
    • Добавена е възможност за предаване на информация за аварийно завършил процес (за генериране на 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 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 е премахнат кодът за зареждане на бинарни фърмуери. Обновен е кодът за почистване на блоби в драйверите Intel XE, Nova-Core, Qualcomm Iris, Venus и Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 и звуковите кодеци TI tas2783. Извършено е почистване на имената на блоби в dts файловете (devicetree) за ARM чипове. Прекратено е почистването на драйвера STM C8SECTPFE DVB, премахнат от ядрото.

Източник: linux.org.ru

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