Рэліз ядра Linux 6.1

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 6.1. Сярод найболей прыкметных змен: падтрымка распрацоўкі драйвераў і модуляў на мове Rust, мадэрнізацыя механізму вызначэння выкарыстоўваных старонак памяці, спецыяльны мэнэджар памяці для BPF-праграм, сістэма дыягностыкі праблем з памяццю KMSAN, механізм абароны KCFI (Kernelk Control-Flow Integrity), укараненне структуры Maple tree.

У новую версію прынята 15115 выпраўленняў ад 2139 распрацоўшчыкаў, памер патча – 51 МБ, што прыкладна ў 2 разы менш памеру патчаў ад ядраў 6.0 і 5.19. Змены закранулі 13165 файлаў, дададзена 716247 радкоў кода, выдалена 304560 радкоў. Каля 45% усіх прадстаўленых у 6.1 змен злучаны з драйверамі прылад, прыкладна 14% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 14% злучана з сеткавым стэкам, 3% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

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

  • Памяць і сістэмныя сэрвісы
    • Дададзена магчымасць выкарыстання мовы Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра. Асноўным матывам падтрымкі Rust з'яўляецца спрашчэнне напісання бяспечных і якасных драйвераў прылад за кошт зніжэння верагоднасці здзяйснення памылак пры працы з памяццю. Падтрымка Rust неактыўная па змаўчанні і не прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра. У ядро ​​пакуль прыняты мінімальны зрэзаны варыянт патчаў, які скарочаны з 40 да 13 тысяч радкоў кода і забяспечвае толькі неабходны мінімум, дастатковы для зборкі простага модуля ядра, напісанага на мове Rust. У далейшым плануецца паступова нарошчваць наяўную функцыянальнасць, пераносячы і іншыя змены з галінкі Rust-for-Linux. Паралельна развіваюцца праекты па выкарыстанні прапанаванай інфраструктуры для распрацоўкі на мове Rust драйвераў назапашвальнікаў NVMe, сеткавага пратакола 9p і GPU Apple M1.
    • Для сістэм на базе архітэктур AArch64, RISC-V і LoongArch з EFI рэалізавана магчымасць прамой загрузкі сціснутых выяў ядра. Дададзеныя апрацоўшчыкі для загрузкі, запуску і выгрузкі выяў ядра, выкліканыя напроста з EFI zboot. Таксама дададзены апрацоўшчыкі ўстаноўкі і выдалення пратаколаў з БД пратаколаў EFI. Раней распакаванне ажыццяўлялася асобным загрузнікам, а зараз гэта можа рабіць апрацоўшчык у самім ядры - выява ядра фармуецца ў выглядзе EFI-прыкладанні.
    • У склад прынята частка патчаў з рэалізацыяй шматузроўневай мадэлі кіравання памяццю, якая дазваляе падзяляць банкі памяці з рознымі характарыстыкамі прадукцыйнасці. Напрыклад, найболей інтэнсіўна выкарыстоўваныя старонкі могуць размяшчацца ў найболей хуткай памяці, а рэдка выкарыстоўваныя старонкі могуць захоўваецца ў адносна павольнай памяці. У ядро ​​6.1 прыняты механізм для вызначэння знаходжання інтэнсіўна выкарыстоўваных старонак у павольнай памяці для іх пасоўвання ў хуткую памяць, а таксама рэалізаваная агульная канцэпцыя ўзроўняў памяці і іх адноснай прадукцыйнасці.
    • У склад уключаны механізм MGLRU (Multi-Generational LRU), які замяніў сабой старую рэалізацыю LRU (Least Recently Used) на аснове двух чэргаў на шматступенную структуру, лепш вызначальную якія старонкі памяці па-сапраўднаму выкарыстоўваюцца, а якія можна выцесніць у раздзел падпампоўкі.
    • Дададзена падтрымка прапанаванай інжынерамі Oracle структуры дадзеных "maple tree", якая пазіцыянуецца як больш эфектыўная замена структуры "red-black tree". Maple tree уяўляе сабой варыянт B-tree, які падтрымлівае індэксацыю па дыяпазонах значэнняў і спраектаваны для эфектыўнага выкарыстання кэша сучасных працэсараў. На maple tree ужо перакладзены некаторыя падсістэмы кіравання памяццю, што дадатна адбілася на іх прадукцыйнасці. У будучыні maple tree можа выкарыстоўвацца для рэалізацыі блакіровак па дыяпазонах (range locking).
    • У падсістэму BPF дададзена магчымасць стварэння "дэструктыўных" BPF-праграм, спецыяльна разлічаных на ініцыяванне аварыйнага завяршэння працы праз выклік crash_kexec(). Падобныя BPF-праграмы могуць запатрабавацца ў адладкавых мэтах для ініцыявання стварэння crash-дампа ў вызначаны момант часу. Для доступу да дэструктыўных аперацый пры загрузцы BPF-праграмы патрабуецца ўказанне сцяга BPF_F_DESTRUCTIVE, актывацыя sysctl kernel.destructive_bpf_enabled і наяўнасць правоў CAP_SYS_BOOT.
    • Для BPF-праграм прадстаўлена магчымасць перабору элементаў cgroup, а таксама перабору рэсурсаў (файлы, vma, працэсы і да т.п.) вызначанага струменя ці задачы. Рэалізаваны новы map-тып для стварэння карыстацкіх колцавых буфераў (user ring buffer).
    • Дададзены спецыяльны выклік для вылучэння памяці ў BPF-праграмах (memory allocator), які забяспечвае больш бяспечнае размеркаванне памяці ў кантэксце BPF, чым штатны kmalloc().
    • Інтэграваная першая частка змен, якія забяспечваюць магчымасць стварэння драйвераў для прылад уводу з інтэрфейсам HID (Human Interface Device), якія рэалізуюцца ў форме BPF-праграм.
    • З ядра цалкам выдалены код для падтрымкі фармату выкананых файлаў a.out, які быў пераведзены ў разрад састарэлых у выпуску 5.1, а пачынальна з версіях 5.18 і 5.19 быў адключаны для асноўных архітэктур. Фармат a.out даўно не прымяняецца на сістэмах з Linux, а генерацыя файлаў a.out не падтрымліваецца сучаснымі інструментальнымі сродкамі ў канфігурацыях для Linux па змаўчанні. Загрузнік для a.out файлаў можа быць рэалізаваны цалкам у прасторы карыстальніка.
    • Для сістэм на базе архітэктуры набору каманд LoongArch, якая ўжываецца ў працэсарах Loongson 3 5000 і рэалізуе новы RISC ISA, падобны на MIPS і RISC-V, рэалізаваная падтрымка падзей вымярэння прадукцыйнасці (perf event), kexec, kdump і JIT-кампіляцыі BPF.
    • У інтэрфейсе асінхроннага ўводу/высновы io_uring прапанаваны новы рэжым IORING_SETUP_DEFER_TASKRUN, які дазваляе часова адкласці выкананне звязаных з колцавым буферам прац да моманту, пакуль не паступіць запыт ад прыкладання, што можа выкарыстоўвацца для арганізацыі выканання прац у пакетным рэжыме і прадухіленні праблем з затрымкамі. прыкладанні ў непрыдатны момант.
    • Працэсам у прасторы карыстача прадстаўлена магчымасць ініцыявання пераўтварэння дыяпазону звычайных старонак памяці ў набор вялікіх старонак памяці (Transparent Huge-Pages).
    • Дададзена рэалізацыя прылады /dev/userfaultfd, які дазваляе арганізаваць доступ да функцыянальнасці сістэмнага выкліку userfaultfd() з выкарыстаннем правоў доступу ў ФС. Функцыянальнасць userfaultfd дазваляе ствараць апрацоўшчыкі зваротаў да нявыдзеленых старонак памяці (page faults) у прасторы карыстальніка.
    • Падвышаныя патрабаванні да версіі ўтыліты GNU Make - для зборкі ядра зараз патрабуецца прынамсі версія 3.82.
  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У файлавую сістэму Btrfs унесены істотныя аптымізацыі прадукцыйнасці, сярод іншага на парадкі павялічана прадукцыйнасць ioctl-выкліку FIEMAP. Дададзена падтрымка асінхроннага буферызаванага запісу для прыкладанняў, якія выкарыстоўваюць io_uring. У аперацыю "send" дададзена падтрымка файлаў, абароненых пры дапамозе fs-verity.
    • У ФС ext4 дададзены аптымізацыі прадукцыйнасці, звязаныя з падтрыманнем часопіса і працай у рэжыме толькі для чытання.
    • У файлавай сістэме EROFS (Enhanced Read-Only File System), прызначанай для выкарыстання на частках, даступных у рэжыме толькі для чытання, рэалізаваная магчымасць сумеснага захоўвання дадзеных, якія дублююцца ў розных ФС.
    • У сістэмны выклік statx() дададзена магчымасць вываду звестак аб магчымасці прымянення да файла прамога ўводу/высновы.
    • У падсістэму FUSE (Filesystems in User Space) дададзена падтрымка стварэння часавых файлаў са сцягам O_TMPFILE.
  • Віртуалізацыя і бяспека
    • Заменена рэалізацыя механізму абароны CFI (Control Flow Integrity), які дадае перад кожным ускосным выклікам функцыі праверкі для выяўлення некаторых формаў нявызначаных паводзін, якія патэнцыйна могуць прывесці да парушэння нармальнага парадку выканання (control flow) у выніку прымянення эксплоітаў, якія змяняюць захоўваюцца ў памяці паказальнікі на функцыі. . Штатная рэалізацыя CFI ад праекту LLVM заменена на варыянт, таксама заснаваны на выкарыстанні Clang, але адмыслова адаптаваны для абароны нізкаўзроўневых падсістэм і ядраў аперацыйных сістэм. У LLVM новая рэалізацыя будзе прапанавана ў выпуску Clang 16 і будзе ўключацца опцыяй "-fsanitize=kcfi". Ключавым адрозненнем новай рэалізацыі з'яўляецца тое, што яна не прывязана да аптымізацый на этапе звязвання (LTO) і не прыводзіць да замены паказальнікаў функцый на спасылкі ў табліцы пераходаў.
    • Для LSM-модуляў (Linux Security Module) прадстаўлена магчымасць стварэння апрацоўшчыкаў, якія перахапляюць аперацыі па стварэнні прастор імёнаў.
    • Прадастаўлены сродкі для верыфікацыі лічбавых подпісаў PKCS#7 у BPF-праграмах.
    • У /dev/random вернутая магчымасць адкрыцця ў неблакавальным рэжыме (O_NONBLOCK), якая была па недаглядзе выдаленая ў ядры 5.6.
    • На сістэмах з архітэктурай x86 дададзеная выснова папярэджання ў выпадку мапінга падсістэмамі ядра старонак памяці, адначасова дапушчальнымі выкананне і запіс. У далейшым разглядаецца магчымасць поўнасцю забараніць падобны мапінг памяці.
    • Дададзены адладкавы механізм KMSAN (Kernel Memory Sanitizer) для выяўлення выкарыстання неініцыялізаванай памяці ў ядры, а таксама ўцечак неініцыялізаванай памяці паміж прасторай карыстальніка і прыладамі.
    • Унесены паляпшэнні ў крыптанадзейны генератар псеўдавыпадковых лікаў CRNG, які выкарыстоўваецца ў выкліку getrandom. Змены падрыхтаваны Джэйсанам Даненфілдам (Jason A. Donenfeld), аўтарам VPN WireGuard і нацэлены на павышэнне бяспеку здабывання псеўдавыпадковых цэлых лікаў.
  • Сеткавая падсістэма
    • У TCP-стэке рэалізаваная магчымасць (адключаная па змаўчанні) паасобнага выкарыстання хэш-табліц сокетаў для кожнай прасторы імёнаў, што дазваляе падвысіць прадукцыйнасць сістэм з вялікай колькасцю прастор імёнаў.
    • Выдалены код для падтрымкі састарэлага пратакола DECnet. Для прасторы карыстача пакінутыя заглушкі API, якія дазваляюць кампіляваць прыкладанні, якія выкарыстоўваюць DECnet, але дадзеныя прыкладанні не змогуць падлучыцца да сеткі.
    • Дакументаваны пратакол netlink.
  • Абсталяванне
    • У драйверы amdgpu дададзеная падтрымка пракіду DSC (Display Stream Compression) для сціску дадзеных без страт пры абмене інфармацыяй з экранамі, якія падтрымліваюць вельмі вялікі дазвол. Прадоўжана праца па забеспячэнні падтрымкі платформаў AMD RDNA3 (RX 7000) і CDNA (Instinct). Дададзена падтрымка IP-кампанентаў DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x і GMC 11.x. У драйверы amdkfd (для дыскрэтных GPU AMD, такіх як Polaris) рэалізавана падтрымка GFX 11.0.3.
    • У драйверы i915 (Intel) уключана падтрымка GPU Meteor Lake. Для Meteor Lake і навейшых GPU забяспечана падтрымка інтэрфейсу DP 2.0 (DisplayPort). Дададзены ідэнтыфікатары для відэакартай на базе мікраархітэктуры Alder Lake S.
    • Дададзена падтрымка гукавых падсістэм, рэалізаваных у працэсарах Apple Silicon, Intel SkyLake і Intel KabyLake. У гукавым драйверы CS35L41 HDA забяспечана падтрымка пераходу ў спячы рэжым. Дададзена падтрымка ASoC (ALSA System on Chip) для ўбудаваных гукавых чыпаў Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake і Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qual SM8280 і Texas Instruments SRC8250
    • Дададзена падтрымка LCD-панэляў Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120. 1WHM-N116, INX N01.6BCA-EA116 , INX N21BCN-EA116, Multi-Inno Technology MI2FT-116.
    • Дададзена падтрымка AHCI SATA-кантролераў, якія выкарыстоўваюцца ў SoC Baikal-T1.
    • Дададзена падтрымка Bluetooth-чыпаў MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE і RTL8761BUV (Edimax BT-8500).
    • У драйвер ath11k для бесправадных модуляў Qualcomm дададзеная падтрымка спектральнага сканавання ў дыяпазоне 160 MHz, рэалізаваны шматструменны NAPI, палепшана падтрымка Wi-Fi чыпаў Qualcomm WCN6750.
    • Дададзеныя драйверы для клавіятуры да PinePhone, тачпадаў InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, кіраўнікоў панэляў IBM (IBM Operation Panel), пультаў XBOX One Elite, XP-PEN Deco Pro S і Intuos Pro Small (PTH-460).
    • Дададзены драйвер для крыптаграфічных паскаральнікаў Aspeed HACE (Hash and Crypto Engine).
    • Дададзена падтрымка інтэграваных Thunderbolt/USB4 кантролераў Intel Meteor Lake.
    • Дададзена падтрымка смартфонаў Sony Xperia 1 IV, Samsung Galaxy E5, E7 і Grand Max, Pine64 Pinephone Pro.
    • Дададзена падтрымка ARM SoC і поплаткаў: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 і RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, i.MX8062MM OSM-S, MT8065 (Acer Tomato), Radxa ROCK 8C +, NanoPi R8195S Enterprise Edition, JetHome JetHub D4p. Абноўлены драйверы для SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom і NXP.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 6.1 – Linux-libre 6.1-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць несвабодныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску праведзена чыстка новага драйвера rtw8852b і DTS-файлаў для розных SoC Qualcomm і MediaTek з працэсарамі на базе архітэктуры AArch64. Абноўлены код чысткі блобаў у драйверах і падсістэмах amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Адкарэктавана чыстка састарэлых драйвераў tm6000 TV cards, cpia2 v4l, sp8870, av7110.

Крыніца: opennet.ru

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