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

След като завърши два месеца разработка, Линус Торвалдс представи изданието на ядро Linux 6.12. Сред най-забележителните промени са: възможността за включване на 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 от високоприоритетни (realtime) задачи. За предотвратяване на монополизацията на CPU в ядрото по-рано се използваше механизмът Realtime throttling, който се опитваше да резервира 5% за низкоприоритетни задачи, оставяйки 95% време за realtime задачи. Този механизъм не даваше желаните резултати, тъй като обикновените задачи в много ситуации не получаваха достатъчно процесорно време. SCHED_DEADLINE server реализира по-ефективен механизъм за резервиране на ресурси.
    • Завършена е интеграцията на планировчика на задачи EEVDF (Earliest Eligible Virtual Deadline First), който дойде на мястото на планировчика CFS (Completely Fair Scheduler), предоставян от ядрото 2.6.23. Новият планировчик при избора на следващия процес за изпълнение взема предвид процесите, които са недополучили процесорни ресурси или са получили незаслужено много процесорно време. В първия случай се налага предаване на управление на процеса, а във втория, обратно, се отлага. Старият планировчик 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“, използвана за realtime системи и отчитаща минималното време, през което процесорът трябва да бъде в състояние на бездействие, за да оправдае разходите за енергия при преминаването в това състояние и излизането от него.
    • Добавена е възможността за използване на компилатора Clang за създаване на стандартната C библиотека 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 не е активна по подразбиране и не налага Rust да бъде задължителна сборочна зависимост за ядрото). Добавени са модулите 'list' и 'rbtree' за работа с двусвързани списъци и червено-черни дървета за търсене (red-black tree). Разширени са възможностите на модулите '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 са предложени оптимизации на производителността, извършен е рефакторинг на кода, намалена е областта на блокировка на екстентите при операции за четене, продължава работата по превод на използването на фолианти на страниците памет (page folios), реализирано е автоматично освобождаване на паметта за структурата btrfs_path.
    • В файловата система Ext4 са отстранени грешки, свързани с разпределението на блоковете, управлението на екстентите, механизма 'fast commit' и журналирането.
    • В файловата система 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.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. Чипът е насочен за използване в лаптопи и компютри и в много тестове надминава чиповете 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