Релиз на ядрото Linux 6.12 с поддръжка на Realtime режим

След две месечна разработка, Линус Торвалдс представи версия 6.12 на ядрото Linux. Сред най-забележителните промени са: възможност за включване на режим Realtime, sched_ext за създаване на планировчици на CPU чрез eBPF, извеждане на QR код при авариен статус, механизъм Device Memory TCP, механизъм за резервиране на ресурси SCHED_DEADLINE server, подобрение на планировчика на задачи EEVDF и модул IPE за определяне на политики за осигуряване на цялостност.

В новата версия са направени 14607 корекции от 2167 разработчици, размерът на пача е 37 МБ (промените засягат 13087 файла, добавени са 507913 реда код, изтрити са 234083 реда). В предишното издание имаше 15130 корекции от 2078 разработчици, размерът на пача беше 85 МБ (в ядрото 6.10 пачът беше с размер 41 МБ). Около 45% от всички изменения в 6.12 са свързани с драйвери на устройства, приблизително 12% от промените са свързани с обновление на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 6% — с файловите системи и 3% с вътрешните подсистеми на ядрото.

Основните нововъведения в ядрото 6.12:

  • Памет и системни услуги
    • Предоставена е възможност за компилиране на ядрото с опцията PREEMPT_RT без допълнителни пачове за работа в режим на реално време. Последната липсваща възможност в ядрото, която не позволяваше активирането на режима PREEMPT_RT, беше поддръжката на неблокиращ атомарен изход чрез функцията printk, която също е приета в състава на ядрото. Поддръжката на PREEMPT_RT е налична за архитектурите x86, x86_64, ARM64 и RISC-V. До сега реализацията на режима PREEMPT_RT се предоставяше под формата на външни пачове, на базата на които някои дистрибуции, като RHEL, SUSE и Ubuntu, създаваха отделни Realtime версии на своите продукти, които са търсени в области като финансови системи, устройства за обработка на звук и видео, авиация, медицина, роботика, телекомуникации и индустриални системи, където е необходимо да се осигури предсказуемо време за обработка на събития.
    • Добавен е механизмът „sched_ext“ (SCX), който позволява използването на eBPF за създаване на планировчици на CPU, обхващащи почти всички аспекти на планирането на изпълнението на задачи и разпределението на ресурсите на CPU. Подобни планировчици могат да бъдат динамично зареждани и изпълнявани вътре в ядрото Linux. виртуална машина eBPF. Механизм sched_ext опростява създаването на специфични за определени задачи планировчици, позволява експериментиране с различни техники и стратегии за планиране, а също така дава възможност за бързо създаване на работещи прототипи и подмяна на планировчици в работната инфраструктура. Например, с помощта на sched_ext може да се създаде планировчик, който отчита спецификата на определено приложение и динамично променя стратегията за планиране на неговото изпълнение в зависимост от състоянието на системата и други допълнителни фактори.
    • Включени са останалите патчове, необходими за работата на механизма SCHED_DEADLINE server, който решава проблема с недополучаването на ресурси от CPU от обикновените задачи в условия на монополизация на CPU от високоприоритетни (реално времеви) задачи. За предотвратяване на монополизацията на CPU в ядрото по-рано се използваше механизмът Realtime throttling, който се опитваше да резервира 5% за нископриоритетни задачи, оставяйки 95% от времето за realtime задачи. Този механизъм оставяше желателно, тъй като обикновените задачи в много ситуации не получаваха достатъчно процесорно време. SCHED_DEADLINE server реализира по-ефективен механизъм за резервиране на ресурси.
    • Завършена е интеграцията на планировчика на задачи EEVDF (Earliest Eligible Virtual Deadline First), който замени планировчика CFS (Completely Fair Scheduler), доставян от ядрото 2.6.23. Новият планировчик при избора на следващия процес за изпълнение отчита процесите, които не са получили достатъчно ресурси от CPU или са получили незаслужено много процесорно време. В първия случай се форсира предаването на управление на процеса, а във втория, обратното, се отлага. Старият планировчик CFS е използвал хевристика и тънки настройки за определяне на процесите, изискващи специално внимание, докато новият планировчик ги следи по-очевидно и не изисква тънка настройка. Очаква се EEVDF да намали забавянията при изпълнението на задачи, с които CFS е имал проблеми с планирането.
    • В обработчика за аварийни ситуации в ядрото — DRM Panic, който използва подсистемата DRM (Direct Rendering Manager) за показване на визуален отчет в стил „син екран на смъртта“, е добавена възможност за показване на екрана на логото и QR-код с отчета kmsg при възникване на аварийно състояние. Тъй като QR-кодът може да съхранява само 2953 байта, е предвидена опция DRM_PANIC_SCREEN_QR_CODE_URL, при която отчетът kmsg се компресира с помощта на zlib и се добавя като параметър към URL, което позволява чрез QR-код V40 да се предадат около 7500 байта. При изграждане на пакети с ядрото дистрибутивите могат да задават основна референция за URL, което ще организира преминаването към страницата за докладване на проблеми. За избор на формата на QR-кода е предвидена настройка DRM_PANIC_SCREEN_QR_VERSION.
    • Добавена е поддръжка за разширението ARM POE (Permission Overlay Extension), което позволява задаване на права за достъп до области на паметта. С помощта на това разширение в системи с ARM64 процесори може да бъде реализиран механизмът Memory Protection Keys, използван за ограничаване на достъпа до страници на паметта, без да се променя таблицата със страниците на паметта.
    • За архитектурите Loongarch, ARM64, PowerPC и s390 е пренесена реализацията на системния извикване getrandom(), оптимизирана с помощта на механизма vDSO (virtual dynamic shared object), който позволява пренасяне на обработчика на системния извикване от ядрото в пространството на потребителя и избягване на превключвания на контекста. Оптимизацията позволява до 15 пъти по-бързо получаване на случайни числа.
    • В подсистемата за асинхронен вход/изход io_uring е добавена възможност за използване на абсолютни таймаути, задействащи се при достигане на определено време на системните часовници (по-рано можеха да се задават само относителни таймаути, при които се посочваше продължителността от началото на операцията).
    • Добавени са файлове за генериране на биндинги за библиотеката libcpupower с помощта на инструмента SWIG, който позволява формиране на биндинги от код на C/C++ за различни програмни езици. Биндингите позволяват създаване на скриптове на Python и други езици, и тяхното използване за разширяване на функционалността на библиотеката libcpupower, предоставяща API за управление на cpufreq и драйвери от пространството на потребителя.
    • В утилитата cpuidle е реализирано показването на стойността на състоянието на простоя „residency“, прилагана за системи с реално време и вземаща предвид минималното време, което процесорът трябва да прекара в състояние на простоя, за да оправдае разходите за енергия при преминаване в това състояние и излизане от него.
    • Добавена е възможността да се използва компилаторът Clang за компилиране на стандартната Си библиотека nolibc, която е част от изходния код на ядрото на Linux и предоставя обвивка над основните системни повици. При компилиране на nolibc с Clang е позволено използването на оптимизация при свързването (LTO).
    • Обявени са за остарели някои интерфейси на cgroup1, като счетоводството на TCP, първата версия на меките ограничения (soft limit) и управлението на изчерпването на свободната памет. Подкрепата за посочените функции все още се запазва в пълния си обем, а предупреждението е направено, за да се проучи броят на потребителите, които продължават да използват тези възможности.
    • Добавена възможност за конфигуриране на ринговия буфер за проследяване за запазване на акумулираните данни след рестартиране, което ще позволи да не се загуби натрупаната информация за отстраняване на грешки в случай на аварийно прекратяване на работата на ядрото. Данните се съхраняват в паметта. Включването се извършва чрез параметъра на командния ред на ядрото trace_instance, например, задаването на «trace_instance=boot_map@0x285400000:12M» ще резервира 12 MB памет на адрес 0x285400000 за буфера «boot_map», който ще бъде достъпен през файла /sys/kernel/tracing/instances/boot_map.
    • Продължава прехвърлянето на промените от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активирана по подразбиране и не води до включването му в задължителните зависимости за компилация на ядрото). Добавени са модулите 'list' и 'rbtree' за работа с двусвързани свързани списъци и червено-черни дървета за търсене. Разширени са възможностите на модулите 'init', 'sync', 'types' и 'error'. Предоставена е възможност за използване на код на Rust при компилация на ядрото с защита от атаки Spectre (опции MITIGATION_{RETHUNK, RETPOLINE, SLS}), използването на системата за отстраняване на грешки KASAN, механизмите за защита kCFI (kernel Control Flow Integrity) и Shadow Call, а също и при използването на допълнителни приставки на GCC. Добавен е драйвер за Ethernet контролера Applied Micro QT2025 PHY, написан на Rust. Подготовен е отделен сайт с документация — rust.docs.kernel.org.
    • В състава на изходния код на ядрото е добавен инструментът xdrgen за преобразуване на XDR спецификации (eXternal Data Representation) в функции за кодиране и декодиране на XDR, написани с използване на Си стил, приет в ядрото на Linux.
    • В ядрото е прието изменение с реализация на механизма за маскиране на указатели за намаляване на броя на бавните извиквания barrier_nospec() в 64-битовата функция copy_from_user(), използвана за копиране на данни в ядрото от потребителското пространство. Използването на маскиране ускорява с 2.6% изпълнението на теста «per_thread_ops», оценяващ броя операции, които могат да бъдат извършени в един поток.
    • Добавен е нов USB драйвер, който позволява използването на протокол 9pfs като транспорт за предаване и приемане на данни от USB устройство, при монтиране на ФС 9p върху USB (например, «mount -t 9p -o trans=usbg,aname=/path/to/fs /mnt/9»). Като пример за приложение на новия драйвер се споменава използването вместо NFS за организиране на зареждане на кореновия дял при разработка на вградени устройства.
  • Дисковата подсистема, вход/изход и файловите системи
    • В подсистемата VFS е добавена възможност за работа с устройства за съхранение, при които размерът на блоковете е по-голям от размера на страницата памет в системата. В файловите системи тази възможност засега се поддържа само в XFS.
    • В подсистемата FUSE, която позволявя създаването на реализации на файлови системи, работещи в потребителското пространство, е добавена поддръжка за мапинг на идентификатори на потребители на монтирани файлови системи, използвана за свързване на файлове на определен потребител на монтиран чужд дял с друг потребител в текущата система.
    • Реализирана е нова fcntl операция F_CREATED_QUERY, която дава на приложението възможност да определи дали файл, отворен с флага O_CREAT, е създаден или е съществувал преди това.
    • В системния повик name_to_handle_at() е добавена възможност за използване на уникални 64-битови идентификатори на точки на монтаж за избягване на състояние на състезание при парсинга на /proc/mountinfo.
    • Размерът на структурата «file» в ядрото е намален от 232 до 184 байта, което позволява да се намали потреблението на памет на системи, които активно работят с файлове.
    • Монтирането на файлови системи на точки на монтаж в йерархията /proc е забранено, например в /proc/PID/fd, което създаваше потенциални проблеми със сигурността.
    • В псевдо-ФС NSFS (NameSpace FS), използвана за работа с пространства на имена, е реализирано предоставяне на допълнителна информация за пространствата на имена на точките на монтаж.
    • В файловата система EROFS (Extendable Read-Only File System), предназначена за използване на дялове, достъпни в режим само за четене, е добавена поддръжка за монтиране на файлови системи директно от дискови образи, запазени във файлове.
    • В XFS са добавени нови ioctl команди XFS_IOC_START_COMMIT и XFS_IOC_COMMIT_RANGE за обмен на съдържание между два файла.
    • В NFS е добавена поддръжка на протокола «LOCALIO», който позволява да се определи дали клиентът и сървър NFS са на един и същи хост, за да се приложат съответните оптимизации.
    • В файловата система Btrfs са предложени оптимизации за производителност, проведен е рефакторинг на кода, намалена е областта на блокиране на екземплярите при операции на четене, продължава работата по прехода към използване на фолианти на страниците с памет, реализирано е автоматично освобождаване на паметта за структурата btrfs_path.
    • В файловата система Ext4 са отстранени грешки, свързани с разпределението на блокове, управлението на екстентите, механизма за «fast commit» и журнализацията.
  • Виртуализация и сигурност
    • Добавен LSM-модул IPE (Integrity Policy Enforcement), разработен от Microsoft за разширяване на съществуващата система за мандатно управление на достъпа. Модулът позволява да се определи обща политика за осигуряване на целостта на системата, указваща какви операции са допустими и как трябва да се верифицира автентичността на компонентите. Например, с помощта на IPE може да се укаже кои изпълними файлове е позволено да се стартират, след като се провери тяхното съответствие с еталонната версия чрез криптографски хешове, предоставени от системата dm-verity.
    • На етапа на компилация на ядрото е предоставена възможност за отделно активиране на наличните методи за защита от различни уязвимости от класа Spectre в CPU. В Kconfig са предложени нови параметри: MITIGATE_MDS (защита от уязвимостта Microarchitectural Data Sampling), MITIGATE_TAA (защита от уязвимостта TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (защита от уязвимостта MMIO Stale Data), MITIGATE_L1TF (защита от уязвимостта L1 Terminal Fault), MITIGATE_RETBLEED (защита от уязвимостта Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (защита от уязвимостите Spectre), MITIGATE_SRBDS (защита от уязвимостта Special Register Buffer Data Sampling), MITIGATE_SSB (защита от уязвимостта Speculative Store Bypass).
    • Добавен е параметър в командния ред proc_mem.force_override и набор от конфигурационни настройки в Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE и PROC_MEM_FORCE_NEVER), позволяващи забрана за промяна на паметта чрез /proc/pid/mem.
    • Подсистемата LSM (Linux security module) е премината на употреба на статични извиквания, което позволи да се засили безопасността и да се увеличи производителността.
    • Осигурена е възможност за използване на стандартни ядра за архитектура ARM64 в гостуващи среди, работещи на Android системи с модифициран хипервизор KVM (protected KVM).
    • В LSM-модула Landlock, който позволява да се ограничи взаимодействието на група процеси с външната среда, е реализирана концепцията за «IPC scoping» за селективно ограничаване на взаимодействието с sandbox-окружения, използвайки Unix-сокети и сигнали. Например, може да се забрани установяването на връзки с Unix-сокети от sandbox-окружение към процеси, при които не се прилага изолация, но да се разрешат връзки с процеси в същата scope-област.
    • В хипервизора KVM в CPUID за гостуващи системи е добавен флаг, сигнализиращ за поддръжка на разширения AVX10.1.
  • Мрежова подсистема
    • Добавен е механизъм Device Memory TCP, който позволява използването на мрежови сокети за директно изпращане на съдържанието на паметта на периферийни устройства през мрежата (режим zero-copy) и директно разполагане на съдържанието на мрежовите пакети в паметта на устройството от страната на получателя. Данните, предавани в пакетите, преминават от мрежовата карта в паметта на периферийното устройство или от паметта на устройството в мрежовата карта директно, заобикаляйки CPU, а заглавията на пакетите попадат в обикновените буфери на ядрото.
    • Разширени са възможностите на много Ethernet и безжични драйвери. Например, в драйвера Intel iwlwifi е добавена поддръжка за изнасяне на операции RLC/SMPS на страната на фърмуера, в драйвера RealTek rtw89 е увеличена производителността и добавена поддръжка на чипове RTL8852BT/8852BE-VT (WiFi 6), в Ethernet драйвера microchip е добавена поддръжка на спецификациите IEEE 802.3bw (100BASE-T1) и IEEE 802.3bp, подобрени са реализирането на виртуални Ethernet Microsoft vNIC и IBM veth. Добавени са нови драйвери за Ethernet чипове Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 и Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • В MPTCP (MultiPath TCP), разширение на протокола TCP за организиране на доставката на TCP пакети едновременно през няколко маршрута чрез различни мрежови интерфейси, размерът на използваните при маршрутизация тегловни коефициенти е увеличен от 8 на 16 бита. Реализирано е определяне на загубен (blackhole) трафик и временно спиране на опитите за установяване на връзки със системи, водещи до загуба на трафик.
    • За IPv6 е реализирана поддръжка на флага «p» в PIO (Prefix Information Option), използван в анонсите RA (IPv6 Router Advertisements) за избор на модел на разгръщане на клиентите чрез DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) вместо присвояването на отделни адреси на база префикси, използвайки SLAAC (Stateless Address Autoconfiguration). В IPv6 IOAM6 е добавена поддръжка на нов режим на инкапсулация tunsrc, позволяващ постигането на по-висока производителност.
    • Повишена е производителността при обработката на управляващи пакети IPsec.
    • Повишена е производителността на изчистването (flush) на големи набори от правила nftables. В nfnetlink_queue е подобрена поддръжката на протокола SCTP.
    • В API ethtool е добавена поддръжка за свързване на няколко мрежови карти към един мрежови интерфейс.
  • Оборудване
    • В драйвера AMDGPU е продължена работата по реализиране на поддръжка на GPU AMD RDNA4 («GFX12»). Добавена е възможност за нулиране на отделни опашки задачи без нулиране на състоянието на целия GPU.
    • Продължена е работата по drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектурата Intel Xe, която се използва в видеокартите Intel от семейството Arc и интегрираната графика, започвайки от процесорите Tiger Lake. В новата версия е включена поддръжка за GPU на базата на микроархитектурите Battlemage и Lunar Lake. Представена е поддръжка на CCS-модификатори (Color Control Surface) Xe2 за управление на параметрите на вградените и дискретните GPU.
    • В драйвера i915 е реализирана възможността за изход през интерфейса HWMON или sysfs (атрибут «fan1_input») за информация за скоростта на въртене на охладителя. Обявен е за остарял параметърът «i915.modeset», вместо «i915.modeset=0» следва да се използва параметърът «i915.nomodeset».
    • В DRM-драйвера msm (GPU Qualcomm Adreno) е добавена поддръжка за GPU A615, A306 и A621.
    • В драйвера Nouveau е проведена преработка и почистване на вътрешните структури.
    • В драйвера intel_pstate, управляващ параметрите на енергопотреблението (P-state) на системи с Intel процесори, е добавена поддръжка за хибридни системи с асиметрични (различаващи се по характеристики) CPU, както и поддръжка на управлението на захранването на процесори, базирани на микроархитектурите Granite Rapids и Sierra Forest. В драйвера intel_idle е добавена поддръжка за CPU Xeon Granite Rapids. В драйвера intel_rapl е осигурено разпознаване на процесите на AMD от семейството 1Ah и на Intel ArrowLake-U процесорите.
    • Продължава внедряването на промени за поддръжка на ARM SoC Snapdragon X Elite, в който се използва собствен 12-ядрен CPU Qualcomm Oryon и GPU Qualcomm Adreno. Чипът е насочен към използване в лаптопи и PC, и превъзхожда в много тестове чиповете Apple M3 и Intel Core Ultra 155H.
    • Добавена е поддръжка за ARM платформи, SoC и устройства: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
    • Добавена е поддръжка за екранни панели Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
    • В звуковата подсистема е добавена поддръжка на чипове и кодекове RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Обявени са за остарели старите звукови драйвери за ASoC Intel, вместо които се препоръчва да се използват драйвери AVS. Направени са много подобрения в драйвера SoundWire.

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

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