Рэліз ядра Linux 6.3

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 6.3. Сярод найболей прыкметных змен: чыстка састарэлых ARM-платформаў і графічных драйвераў, працяг інтэграцыі падтрымкі мовы Rust, утыліта hwnoise, падтрымка дрэвападобных структур red-black у BPF, рэжым BIG TCP для IPv4, убудаваны тэст прадукцыйнасці Dhrystone, магчымасць забароны выканання ў memfd, стварэння HID-драйвераў, выкарыстоўваючы BPF, у Btrfs прыняты змены для памяншэння фрагментацыі груп блокаў.

У новую версію прынята 15637 выпраўленняў ад 2055 распрацоўшчыкаў; памер патча – 76 МБ (змены закранулі 14296 файлаў, дададзена 1023183 радкоў кода, выдалена 883103 радкоў). Для параўнання ў мінулай версіі было прапанавана 16843 выпраўленняў ад 2178 распрацоўшчыкаў; памер патча - 62 МБ. Каля 39% усіх прадстаўленых у ядры 6.3 змен злучаны з драйверамі прылад, прыкладна 15% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 10% злучана з сеткавым стэкам, 5% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

Асноўныя навіны ў ядры 6.3:

  • Памяць і сістэмныя сэрвісы
    • Праведзена значная чыстка кода, злучанага са старымі і не выкарыстоўванымі ARM-платамі, што дазволіла скараціць памер зыходных тэкстаў ядра на 150 тысяч радкоў. Выдалена больш за 40 старых ARM-платформ.
    • Рэалізаваная магчымасць стварэння драйвераў для прылад уводу з інтэрфейсам HID (Human Interface Device), якія рэалізуюцца ў форме BPF-праграм.
    • Працягнуты перанос з галінкі Rust-for-Linux дадатковай функцыянальнасці, звязанай з выкарыстаннем мовы Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра. Падтрымка Rust не актыўная па змаўчанні, і не прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра. Прапанаваная ў мінулых выпусках функцыянальнасць пашырана падтрымкай тыпаў Arc (рэалізацыя паказальнікаў са лічыльнікам спасылак), ScopeGuard (выконваецца чыстку пры выхадзе за вобласць бачнасці) і ForeignOwnable (забяспечвае перамяшчэнне паказальнікаў паміж кодам на Сі і Rust). З пакета 'alloc' выдалены модуль 'borrow' (тып 'Cow' і тыпаж 'ToOwned'). Адзначаецца, што стан падтрымкі Rust у ядры ўжо блізка да таго, каб пачаць прымаць у ядро ​​першыя модулі, напісаныя на Rust.
    • У User-mode Linux (запуск ядра як карыстацкага працэсу) на сістэмах x86-64 рэалізавана падтрымка кода, напісанага на мове Rust. Дададзена падтрымка зборкі User-mode Linux пры дапамозе clang з уключэннем аптымізацый на этапе звязвання (LTO).
    • Дададзена ўтыліта hwnoise для адсочвання затрымак, выкліканых асаблівасцямі працы апаратнага забеспячэння. Вызначаюцца адхіленні часу выканання аперацый (jitter) пры адключэнні апрацоўкі перапыненняў, якія перавышаюць адну мікрасекунду за 10 хвілін вылічэнняў.
    • Дададзены модуль ядра з рэалізацыяй тэсту прадукцыйнасці Dhrystone, які можна выкарыстоўваць для адзнакі прадукцыйнасці CPU у канфігурацыях без кампанентаў прасторы карыстача (напрыклад, на стадыі партавання для новых SoC, на якіх рэалізаваная толькі загрузка ядра).
    • Дададзены параметр каманднага радка ядра "cgroup.memory=nobpf", які адключае ўлік спажывання памяці для BPF-праграм, што можа быць карысна для сістэм з ізаляванымі кантэйнерамі.
    • Для BPF-праграм прапанавана рэалізацыя структуры дадзеных red-black tree, у якой выкарыстоўваюцца kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) замест дадання новага тыпу мапінга.
    • У механізм перазапускальных паслядоўнасцяў (rseq, restartable sequences) дададзеная магчымасць перадачы працэсам ідэнтыфікатараў раўналежнага выканання (memory-map concurrency ID), атаясамляльных з нумарам CPU. Rseq дае сродкі для хуткага атамарнага выканання аперацый, якія ў выпадку перапынення іншым струменем чысцяцца і прадпрымаецца паўторная спроба выканання.
    • На працэсарах ARM забяспечана падтрымка інструкцый SME 2 (Scalable Matrix Extension).
    • Для архітэктур s390x і RISC-V RV64 рэалізавана падтрымка механізму "BPF trampoline", які дазваляе мінімізаваць накладныя выдаткі пры перадачы выклікаў паміж ядром і праграмамі BPF.
    • На сістэмах з працэсарамі на базе архітэктуры RISC-V рэалізавана выкарыстанне інструкцый "ZBB" для паскарэння аперацый з радкамі.
    • Для сістэм на базе архітэктуры набору каманд LoongArch (якая прымяняецца ў працэсарах Loongson 3 5000 і рэалізуе новы RISC ISA, падобны на MIPS і RISC-V) рэалізавана падтрымка рандомизации адраснай прасторы ядра (KASLR), змены размяшчэння ядра ў памяці (relocation), . спыну і механізму kprobe.
    • У механізме DAMOS (Data Access Monitoring-based Operation Schemes), які дазваляе вызваляць памяць з улікам частаты звароту да памяці, рэалізавана падтрымка фільтраў для выключэння з апрацоўкі ў DAMOS пэўных абласцей памяці.
    • У мінімальнай стандартнай Сі-бібліятэцы Nolibc рэалізавана падтрымка архітэктуры s390 і набору інструкцый Arm Thumb1 (у дадатак да падтрымкі ARM, AArch64, i386, x86_64, RISC-V і MIPS).
    • Праведзена аптымізацыя objtool для паскарэння зборкі ядра і зніжэнні пікавага спажывання памяці пры зборцы (пры зборцы ядра ў рэжыме "allyesconfig" зараз не ўзнікае праблем з прымусовым завяршэннем працэсаў на сістэмах з 32 ГБ АЗП).
    • Спыненая падтрымка зборкі ядра кампілятарам Intel ICC, якая ўжо працяглы час знаходзілася ў непрацоўным выглядзе і ніхто не выявіў жаданне гэта выправіць.
  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У tmpfs рэалізаваная падтрымка мапінга ідэнтыфікатараў карыстачоў прымантаваных файлавых сістэм, ужывальнага для супастаўлення файлаў вызначанага карыстача на прымантаванай чужой частцы з іншым карыстачом у бягучай сістэме.
    • У Btrfs для памяншэння фрагментацыі груп блокаў забяспечана падзел экстэнтаў па памеры пры вылучэнні блокаў, г.зн. любая група блокаў зараз абмяжоўваецца дробнымі (да 128KB), сярэднімі (да 8 МБ) і буйнымі экстэнтамі. Праведзены рэфактарынг рэалізацыі raid56. Перапрацаваны код для праверкі кантрольных сум. Унесены аптымізацыі прадукцыйнасці, якія дазволілі да 10 раз паскорыць аперацыю send за кошт кэшавання utime для каталогаў і выкананні каманд толькі пры неабходнасці. У тры разы паскорана выкананне аперацый fiemap за кошт пропуску праверак зваротных спасылак для сумесна выкарыстоўваюцца даных (снапшотаў). На 10% паскораны аперацыі з метададзенымі за кошт аптымізацыі пошуку ключоў у структурах b-tree.
    • Падвышаная прадукцыйнасць ФС ext4 за рахунак магчымасці адначасовага выканання некалькімі працэсамі аперацый прамога ўводу/высновы ў загадзя вылучаныя блокі, выкарыстаючы сумесныя блакаванні inode замест эксклюзіўнага блакавання.
    • У f2fs праведзена праца па паляпшэнні чытальнасці кода. Вырашаны важныя праблемы, звязаныя з атамарным запісам і новым кэшам экстэнтаў.
    • У файлавай сістэме EROFS (Enhanced Read-Only File System), прызначанай для выкарыстання ў частках, даступных у рэжыме толькі для чытання, рэалізаваная магчымасць прывязкі да CPU аперацый распакавання сціснутага змесціва файлаў для скарачэння затрымак пры доступе да дадзеных.
    • У планавальнік уводу/высновы BFQ дададзеная падтрымка прасунутых назапашвальнікаў на якія верцяцца кружэлках, напрыклад, такіх у якіх выкарыстоўваецца некалькі паасобна кіраваных прывадаў галовак (Multi Actuator).
    • У рэалізацыю кліента і сервера NFS дададзена падтрымка шыфравання дадзеных з выкарыстаннем алгарытму AES-SHA2.
    • У падсістэму FUSE (Filesystems In User Space) дададзеная падтрымка механізму пашырэння запытаў, які дазваляе змяшчаць у запыт дадатковую інфармацыю. На базе дадзенай магчымасці рэалізавана даданне ідэнтыфікатараў груп да запыту ФС, неабходных для ўліку правоў доступу пры стварэнні аб'ектаў у ФС (create, mkdir, symlink, mknod).
  • Віртуалізацыя і бяспека
    • У гіпервізор KVM для сістэм x86 дададзеная падтрымка пашыраных гіпервыклікаў Hyper-V і забяспечаны іх пракід у апрацоўшчык, які працуе ў хост-акружэнні ў прасторы карыстача. Змена дазволіла рэалізаваць падтрымку ўкладзенага запуску гіпервізара Hyper-V.
    • У KVM спрошчана абмежаванне доступу гасцявой сістэмы да падзей PMU (Performance Monitor Unit), злучаным з вымярэннем прадукцыйнасці.
    • У механізм memfd, які дазваляе ідэнтыфікаваць вобласць памяці праз які перадаецца паміж працэсамі файлавы дэскрыптар, дададзеная магчымасць стварэння абласцей, у якіх забаронена выкананне кода (non-executable memfd) і немагчыма ў будучыні выставіць правы на выкананне.
    • Дададзена новая prctl-аперацыя PR_SET_MDWE, якая блакуе спробы ўключэння правоў доступу да памяці, адначасова дазваляючых запіс і выкананне.
    • Дададзена і ўключана па змаўчанні абарона ад нападаў класа Spectre, рэалізаваная на аснове прапанаванага ў працэсарах AMD Zen 4 аўтаматычнага рэжыму IBRS (Enhanced Indirect Branch Restricted Speculation), які дазваляе адаптыўна дазваляць і забараняць спекулятыўнае выкананне інструкцый падчас апрацоўкі перапыненняў, сістэм Прапанаваная абарона прыводзіць да меншых накладных выдаткаў у параўнанні з абаронай Retpoline.
    • Ухіленая ўразлівасць, якая дазваляе абыйсці абарону ад нападаў Spectre v2 пры ўжыванні тэхналогіі адначасовай шматструменнасці (SMT або Hyper-Threading) і выкліканая адключэннем механізму STIBP (Single Thread Indirect Branch Predictors) пры выбары рэжыму абароны IBRS.
    • Для сістэм на базе архітэктуры ARM64 дададзена новая зборачная мэта "virtconfig", пры выбары якой актывуецца толькі мінімальны набор кампанентаў ядра, неабходны для загрузкі ў сістэмах віртуалізацыі.
    • Для архітэктуры m68k дададзена падтрымка фільтрацыі сістэмных выклікаў пры дапамозе механізму seccomp.
    • Дададзена падтрымка убудаваных у працэсары AMD Ryzen прылад CRB TPM2 (Command Response Buffer), заснаваных на тэхналогіі Microsoft Pluton.
  • Сеткавая падсістэма
    • Дададзены netlink-інтэрфейс для налады падузроўня прадухілення калізій PLCA (Physical Layer Collision Avoidance), вызначанага ў спецыфікацыі IEEE 802.3cg-2019 і выкарыстоўванага ў Ethernet-сетках 802.3cg (10Base-T1S)-аптэмій. Ужыванне PLCA дазваляе падвысіць прадукцыйнасць у Ethernet-сетках з падзяляным асяроддзем (shared media).
    • Спыненая падтрымка API "wireless extensions" для кіравання бесправаднымі інтэрфейсамі WiFi 7 (802.11be) бо дадзены API не ахапляе ўсе неабходныя налады. Пры спробе выкарыстання API "wireless extensions", які працягвае падтрымлівацца як эмуляваны пласт, для большасці актуальных прылад зараз будзе выводзіцца папярэджанне.
    • Падрыхтавана падрабязная дакументацыя па API netlink (для распрацоўшчыкаў ядра і для распрацоўшчыкаў дадаткаў у прасторы карыстальніка). Рэалізавана ўтыліта ynl-gen-c для генерацыі Сі-кода на аснове YAML-спецыфікацый пратаколу Netlink.
    • У сеткавыя сокеты дададзена падтрымка опцыі IP_LOCAL_PORT_RANGE для спрашчэння налады выходных злучэнняў праз транслятары адрасоў без ужывання SNAT. Пры выкарыстанні аднаго IP-адрасы на некалькіх хастах IP_LOCAL_PORT_RANGE дае магчымасць выкарыстоўваць на кожным хасце свой дыяпазон выходных сеткавых партоў, а на шлюзе перанакіроўваць пакеты на аснове нумароў партоў.
    • Для MPTCP (MultiPath TCP) рэалізавана магчымасць апрацоўкі змешаных патокаў, у якіх выкарыстоўваюцца пратаколы IPv4 і IPv6. MPTCP уяўляе сабой пашырэнні пратаколу TCP для арганізацыі працы TCP-злучэнні з дастаўкай пакетаў адначасова па некалькіх маршрутам праз розныя сеткавыя інтэрфейсы, прывязаныя да розных IP-адрасоў.
    • Для IPv4 рэалізавана магчымасць выкарыстання пашырэння BIG TCP, які дазваляе павялічыць максімальны памер TCP-пакета да 4ГБ для аптымізацыі працы высакахуткасных унутраных сетак дата-цэнтраў. Падобнае павелічэнне памеру пакета пры 16-бітным памеры поля ў загалоўку дасягаецца праз рэалізацыю "jumbo"-пакетаў, памер у IP-загалоўку якіх выстаўляецца ў 0, а фактычны памер перадаецца ў асобным 32-разрадным полі ў асобным прымацаваным загалоўку.
    • Дададзены новы sysctl-параметр default_rps_mask, праз які можна задаць ужывальную па змаўчанні канфігурацыю RPS (Receive Packet Steering), якая адказвае за размеркаванне апрацоўкі ўваходнага трафіку па ядрах CPU на ўзроўні апрацоўшчыкаў перапыненняў.
    • Спынена падтрымка дысцыплін апрацоўкі чэргаў для абмежавання трафіку CBQ (class-based queuing), ATM (ATM virtual circuits), dsmark (differentiated service marker), tcindex (traffic-control index) і RSVP (resource reservation protocol). Гэтыя дысцыпліны працяглы час знаходзяцца ў закінутым выглядзе і не знайшлося жадаючых прадоўжыць іх суправаджэнне.
  • Абсталяванне
    • Выдалены ўсе графічныя драйверы на базе DRI1: i810 (старыя інтэграваныя відэакарты Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, уключаючы карты Rage Fury, XPERT 99 і XPERT 128), savage (S3 Savage GPU) (Crusty SiS GPU), tdfx (3dfx Voodoo) і via (VIA IGP), якія былі абвешчаныя састарэлымі ў 2016 годзе і не падтрымліваюцца ў Mesa з 2012 года.
    • Выдалены састарэлыя драйверы фрэймбуфера (fbdev) omap1, s3c2410, tmiofb і w100fb.
    • Дададзены DRM-драйвер для інтэграваных у CPU Intel Meteor Lake (14 пакаленне) блокаў VPU (Versatile Processing Unit), прызначаных для паскарэння аперацый, злучаных з кампутарным зрокам і машынным навучаннем. Драйвер рэалізаваны з выкарыстаннем падсістэмы "accel", накіраванай на забеспячэнне падтрымкі паскаральнікаў вылічэнняў, якія могуць пастаўляцца як у форме асобных ASIC, так і выглядзе IP-блокаў усярэдзіне SoC і GPU.
    • У драйверы i915 (Intel) пашырана падтрымка дыскрэтных відэакарт Intel Arc (DG2/Alchemist), рэалізавана папярэдняя падтрымка GPU Meteor Lake, уключана падтрымка GPU Intel Xe HP 4tile.
    • У драйверы amdgpu дададзеная падтрымка тэхналогіі AdaptiveSync і магчымасць выкарыстання з некалькімі дысплеямі рэжыму абароны ад перахопу выводных на экран дадзеных (Secure Display). Абноўлена падтрымка DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x і DP 2.1.
    • У драйвер msm (GPU Qualcomm Adreno) дададзена падтрымка платформаў SM8350, SM8450 SM8550, SDM845 і SC8280XP.
    • У драйверы Nouveau спынена падтрымка старых выклікаў ioctl.
    • У драйвер etnaviv дададзена эксперыментальная падтрымка NPU VerSilicon (VeriSilicon Neural Network Processor).
    • Рэалізаваны драйвер pata_parport для IDE-назапашвальнікаў, якія падключаюцца праз раўналежны порт. Дададзены драйвер дазволіў выдаліць з ядра стары драйвер PARIDE і мадэрнізаваць падсістэму ATA. Абмежаваннем новага драйвера з'яўляецца немагчымасць адначасовага падлучэння друкаркі і дыска праз паралельны порт.
    • Дададзены драйвер ath12k для бесправадных карт на чыпах Qualcomm з падтрымкай Wi-Fi 7. Дададзена падтрымка бесправадных карт на чыпах RealTek RTL8188EU.
    • Дададзена падтрымка 46 поплаткаў з працэсарамі на базе архітэктуры ARM64, сярод якіх Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD таксама прылады на базе SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 і SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 AM3328/AM3/AM642 /AM654).

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 6.3 – Linux-libre 6.3-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У выпуску 6.3 праведзена чыстка блобаў у новых драйверах ath12k, aw88395 і peb2466, а таксама ў новых файлах devicetree для прылад qcom на базе архітэктуры AArch64. Абноўлены код чысткі блобаў у драйверах і падсістэмах amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, а таксама ў драйверах для DVB-карт з праграмным дэкадаваннем і ў прадкампіляваных BPF-файлах. Спынена чыстка драйверах mga, r128, tm6000, cpia2 і r8188eu, бо яны былі выдаленыя з ядра. Палепшана ачыстка ад блобаў драйвера i915.

Крыніца: opennet.ru

Дадаць каментар