Рэліз ядра Linux 7.2

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 7.2. Сярод найболей прыкметных змен: механізм струменевай перадачы дадзеных USB4STREAM, аптымізацыі прадукцыйнасці btrfs, xfs і ext4, працяг выдалення кода для падтрымкі CPU i486, магчымасць стварэння ўкладзеных планавальнікаў SCHED_EXT, паніжанае спажыванне памяці ў падсістэме падпампоўкі, паскораныя неназваныя каналы, падтрымка пашырэнняў AppleTalk, пачатковая падтрымка HDMI 2.1 FRL у драйверы AMDGPU.

Асноўныя навіны ў ядры 7.2 (1, 2, 3):

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У механізме iomap прыбраны лішні выклік функцыі memset для ўжо завершаных ітэрацый у функцыі iomap_iter(), што пры высокай інтэнсіўнасці ўвод/высновы на хуткіх назапашвальніках NVMe падвысіла ў праведзеных тэстах лік аперацый уводу/высновы ў секунду (IOPS) на 5% пры выкарыстанні ФС ext4 і xf.
    • У XFS абвешчана стабільнай падтрымка занаваных прылад захоўвання (падзел на зоны груп блокаў ці сектараў, у якія дапушчаецца толькі паслядоўнае даданне дадзеных з абнаўленнем цалкам усёй групы блокаў).
    • У Btrfs уключаная па змаўчанні падтрымка вялікіх фаліянтаў старонак памяці (large folios), якая дазваляе зменшыць накладныя выдаткі і падвысіць прадукцыйнасць пры інтэнсіўным паслядоўным уводзе/выснове. Дададзена эксперыментальная падтрымка велізарных фаліянтаў («huge folios»), памерам да 2 МБ. Дададзены новы ioctl GET_CSUMS для атрымання інфармацыі аб кантрольных сумах у карыстацкай прасторы, напрыклад, для ўтыліты mkfs і аптымізацыі дэдуплікацыі. Падвышаная прадукцыйнасць паслядоўнага запісу дадзеных на 15% і прамога ўводу/высновы на 59%.
    • У ФС Ext4 значна перапрацавана рэалізацыя механізму "fast commit" для выключэння ўзнікнення канкуруючых і ўзаемных блакіровак. Дададзены экспарт статыстыкі аб снапшотах inode праз /proc/fs/ext4/*/fc_info. Аптымізавана прадукцыйнасць вылічэння хэшаў дырэкторый (для імёнаў памерам 255 сімвалаў паскарэнне амаль у два разы, 64 сімвала 27%, 32 сімвала — 11%).
    • У F2FS дададзеная падтрымка вяртання памылак fserror, якія дазваляюць з карыстацкай прасторы адсочваць праблемы з ФС. Скарочаны час, які праводзіцца ў кантэксце апрацоўкі перапыненняў.
    • У Device Mapper (DM) дададзены новы апрацоўшчык dm-inlinecrypt для арганізацыі празрыстага шыфравання і расшыфроўкі блокавых прылад, выкарыстоўваючы апаратныя прылады з функцыяй inline-шыфравання.
    • Прапанавана дакументацыя па даданні ў ядро ​​новых файлавых сістэм.
    • У NFS памер блока па змаўчанні павялічаны да 4 МБ на сістэмах, мелых як мінімум 16 ГБ АЗП (для ручной змены памеру блока можна выкарыстаць /proc/fs/nfsd/max_block_size). Дададзена падтрымка дэлегавання кіравання дырэкторыяй кліенту (directory delegation), што дазваляе пэўны час выконваць аперацыі з дадзенай дырэкторыяй без праверкі змены стану на серверы.
    • У серверы SMB дададзена падтрымка файлаў, якія захоўваюцца ў сціснутым выглядзе, а таксама сціскі дадзеных пры іх перадачы па сетцы.
    • У новай рэалізацыі NTFS (ntfsplus) дададзена падтрымка сімвалічных спасылак Windows і забяспечана карэктная апрацоўка многіх відаў пашкоджанняў метададзеных.
    • Выдалены бэкенд fscache для кэшавання дадзеных ФС EROFS (Enhanced Read-Only File System), які быў абвешчаны састарэлым два гады таму.
    • У ФС Ceph дададзеная падтрымка ручнога скіду кліенцкіх сеансаў.
    • У файлавую сістэму 9P унесены аптымізацыі, якія паскорылі працу ў такіх сцэнарах, як зборка праектаў.
    • У сістэмны выклік file_getattr() дададзены сцягі для атрымання інфармацыі аб уліку рэгістра сімвалаў у файлавай сістэме. Сцяг FS_XFLAG_CASEFOLD сведчыць, што праверка імёнаў файлаў ажыццяўляецца без уліку рэгістра сімвалаў, а сцяг FS_XFLAG_CASENONPRESERVING аб тым, што пры стварэнні новых імёнаў файлаў не захоўваецца інфармацыя рэгістры сімвалаў. Указаныя флагі могуць прымяняцца ў NFS-кліентах, якія працуюць без уліку рэгістра сімвалаў.
    • У сістэмны выклік openat2() дададзены сцяг O_EMPTYPATH, які дапускае перадачу пустога файлавага шляху. У гэтым выпадку шлях да адчынянага файла вызначаецца на падставе перададзенага файлавага дэскрыптара.
    • У сістэмны выклік openat2() дададзены сцяг OPENAT2_REGULAR, які дапускае адкрыццё толькі звычайных файлаў (пры спробе адкрыцця адмысловага файла, напрыклад, сокета, канала ці прылады, будзе вернутая памылка EFTYPE).
  • Памяць і сістэмныя сэрвісы
    • Рэалізаваны механізм USB4STREAM для струменевай перадачы дадзеных паміж кампутарамі, злучанымі кабелем праз парты USB4. Дададзена прылада /dev/tbstreamX, пры дапамозе якога можна чытаць і запісваць дадзеныя, выкарыстаючы штатныя функцыі read() і write() па аналогіі з чытаннем і запісам у файлы. Напрыклад, на адным хасце можна адправіць інфармацыю камандай "echo hello> /dev/tbstream0", а на іншым прачытаць камандай "cat /dev/tbstream0". Механізм USB4STREAM можа сумяшчацца з магчымасцю ўсталёўкі сеткавага злучэння па кабелі USB4 (thunderbolt_net) або выкарыстоўвацца асобна пры неабходнасці перадачы дадзеных паміж прыкладаннямі, якія не падтрымліваюць сеткавыя сокеты.
    • Уключана другая серыя змен для спынення падтрымкі працэсараў i486. Выдалена больш за 13 радкоў кода, звязаных з эмуляцыяй блока для вылічэнняў з якая плавае коскі для працэсараў без FPU. Выдалена падтрымка працэсараў i486 без апаратных аперацый CX8 (параўнаць і абмяняць 8 байт) і TSC (лічыльнік цыклаў CPU, які выкарыстоўваецца ў планавальніку задач), код для эмуляцыі якіх выдалены.
    • Абвешчаная пакінутай без суправаджэння (orphaned) падтрымка працэсараў AMD Geode, якія выкарыстоўваюцца ў кампутары OLPC XO-1.
    • Дададзена падтрымка абнаўлення рэалізацыі механізму Intel TDX (Trusted Domain Extensions), які ўжываецца для шыфравання аператыўнай памяці гасцявых сістэм. TDX рэалізаваны ў форме спецыяльнага праграмнага runtime-модуля, які падчас пачатковай загрузкі пераносіцца BIOS з Flash-памяці ў аператыўную памяць. У ядро ​​дададзены магчымасці для кіравання гэтым модулем і замены на навейшую версію на якая працуе сістэме без неабходнасці выканання перазагрузкі.
    • Рэалізаваны новы планавальнік размеркавання рэсурсаў GPU (Fair GPU scheduler), які ўжываецца для вызначэння парадку выканання на GPU прац, якія адпраўляюцца працэсамі, выкарыстоўвалымі GPU. Замест ужывання традыцыйнай FIDO-чаргі запытаў да GPU у новым планавальніку задзейнічаныя механізмы справядлівага размеркавання рэсурсаў, рэалізаваныя з аглядкай на планавальнік задач CFS (Completely Fair Scheduler) ужывальны план запуску з часам пераходу да выканання чарговага працэсу. Найбольш прыкметны эфект ад выкарыстання новага планавальніка назіраецца пры паралельным выкананні інтэрактыўных задач, якія актыўна працуюць з GPU. У апошні момант перад рэлізам ядра 7.2 уключэнне Fair GPU scheduler было адменена і быў вернуты стары FIFO-планавальнік з-за неабходнасці адладкі рэгрэсіі, якая прыводзіць да зніжэння прадукцыйнасці і 100% нагрузцы на GPU пры запуску асобных гульняў у Proton.
    • Змены ў падсістэме eBPF: Дададзена магчымасць прымацавання адной BPF-праграмы некалькім кропкам трасіроўкі (tracepoint). У BPF-праграмы, прывязаныя да кропак трасіроўкі, дададзена магчымасць доступу да памяці кампанентаў, якія працуюць у карыстацкай прасторы, з карэктнай апрацоўкай звароту да нявыдзеленых старонак памяці (page fault). У сістэмны выклік bpf() дададзена падтрымка тыпавых атрыбутаў (log_buf, log_size, log_level і log_true_size), якая дазваляе ўніфікаваць перадачу метададзеных ва ўсіх камандах BPF, не абмяжоўваючыся камандамі BPF_PROG_LOAD, BPF_BTF_LOAD і BPF. Убрана абмежаванне на перадачу не больш за 5 параметраў у функцыі BPF. Дададзена магчымасць бяспечнага доступу да падзялянай памяці bpf_arena без асцярогі звароту да нявыдзеленых старонак памяці (page fault). Рэалізаваны новы варыянт структуры BPF hash map, які дапускае дынамічнае змяненне памеру.
    • Аптымізавана фарміраванне вываду "/proc/interrupts" са статыстыкай перапыненняў, а таксама мадэрнізаваны структуры для захоўвання лічыльнікаў перапыненняў і дададзена кэшаванне.
    • Паскорана генерацыя файла "/proc/filesystems", выкарыстоўванага ў libselinux.
    • У планавальніку задач рэалізаваная падтрымка балансавання нагрузкі паміж ядрамі CPU, якая ўлічвае станы ўнутранага кэша працэсара. Планавальнік зараз спрабуе групаваць працэсы, якія выкарыстоўваюць агульныя рэсурсы, напрыклад, струмені аднаго працэсу, для іх выкарыстання ў кантэксце аднаго і таго ж кэша верхняга ўзроўня, што падвышае эфектыўнасць звароту да дадзеных за кошт падвышэння верагоднасці знаходжання ў кэшы неабходных дадзеных.
    • У механізме SCHED_EXT, які дазваляе выкарыстоўваць BPF для стварэння планавальнікаў CPU, працягнута рэалізацыя магчымасці для стварэння ўкладзеных планавальнікаў (sub-scheduler), пры дапамозе якіх для кожнага cgroup можна задзейнічаць уласны планавальнік задач.
    • Працягнуты перанос змен з галінкі Rust-for-Linux, звязаных з выкарыстаннем мовы Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра (падтрымка Rust не актыўная па змаўчанні, і не прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра). Магчымасць выкарыстання Rust у ядры рэалізаваная для архітэктуры s390. У склад уключаны пакет "zerocopy" з хуткімі прымітывамі працы з памяццю для кода ў рэжыме "unsafe".
    • Мінімальная версія інструментара LLVM, неабходная для зборкі ядра, падвышана да 17.0.1.
    • У мінімалістычнай Сі-бібліятэцы nolibc, якая пастаўляецца ў складзе зыходных тэкстаў ядра Linux і якая прадстаўляе абвязку над базавымі сістэмнымі выклікамі, рэалізаваная падтрымка архітэктур OpenRISC і 32-bit PA-RISC.
    • У падсістэму падпампоўкі (swap) унесены аптымізацыі, якія падвышаюць прадукцыйнасць і якія зніжаюць спажыванне памяці ў самой падсістэме за кошт выключэння накладных выдаткаў пры захоўванні статычных метададзеных і ўніфікацыі працы з ананімнай і падзялянай памяццю пры выкарыстанні фаліянтаў. Зніжэнне спажывання памяці досыць істотна, напрыклад, пры мантаванні часткі падпампоўкі памерам 1 ТБ назіраецца паніжэнне спажывання памяці прыкладна на 512 МБ.
    • Падвышаная эфектыўнасць механізму выцяснення памяці, які выдаляе ці пераносіць у частку падпампоўкі вобласці памяці для вызвалення памяці пры яе недахопе ў сістэме. У некаторых відах нагрузкі, напрыклад, пры тэсціраванні MongoDB пры дапамозе YCSB (Yahoo! Cloud Serving Benchmark), назіраецца прырост прадукцыйнасці да 30%.
    • У зборачную сістэму дададзена каманда "make sbom" для генерацыі спісаў SBOM (Software Bill Of Materials), якія адлюстроўваюць задзейнічаныя ў бягучай зборцы ядра кампаненты, бібліятэкі і залежнасці, а таксама інфармацыю аб іх ліцэнзіях, атрыманую з загалоўкаў SPDX у файлах з кодам.
    • У рэалізацыі неназваных каналаў (pipe) праведзена аптымізацыя працы з блакіроўкамі (аперацыі вылучэння памяці вынесены за вобласць дзеяння блакавання), што на 21-48% павысіла прапускную здольнасць неназваных каналаў і на 17-33% знізіла затрымкі.
  • Віртуалізацыя і бяспека
    • У механізм размеркавання памяці slab (slab allocator) дададзена магчымасць выкарыстання токенаў вылучэння памяці (Allocation Token), рэалізаваных у кампілятары Clang 22. не так проста выкарыстоўваць для пашкоджання іншых тыпаў аб'ектаў).
    • Механізм AF_ALG, які эксплуатуецца ва ўразлівасці Copy Fail для мадыфікацыі дадзеных у старонкавым кэшы, абвешчаны састарэлым і вызначаны для выдалення ў адным з будучых выпускаў. AF_ALG дазваляе задзейнічаць апаратныя паскаральнікі для крыптаграфічных вылічэнняў у Crypto API ядра, але ўжываецца ў дастаткова спецыфічных сітуацыях. У ядры 7.2 у AF_ALG выдаленая падтрымка асінхроннага ўводу/высновы, старых драйвераў і механізму zero-copy у рэалізацыі skcipher і aead. Пакінутыя толькі праграмныя рэалізацыі крыптаалгарытмаў, а падтрымка апаратных крыптаўскарачальнікаў у crypto API ядра выдаленая, бо AF_ALG істотна пашырае паверхню нападу, але не дае выйгрышу ў прадукцыйнасці, у параўнанні ў рэалізацыяй крыптаграфіі ў карыстацкай прасторы. AF_ALG выкарыстоўваўся ў інструментары Cryptsetup, але яго падтрымка была выдалена ў нядаўнім выпуску 2.8.7.
    • У механізм IMA (Integrity Measurement Architecture), які дазваляе знешняму сэрвісу верыфікаваць стан падсістэм ядра для таго каб пераканацца ў іх сапраўднасці, дададзена падтрымка экспарту ўнутраных табліц з вынікамі вымярэнняў у карыстацкую прастору з выдаленнем з буфераў ядра для эканоміі памяці.
    • У модуль Landlock, які прадстаўляе непрывілеяваным праграмам сродкі для абмежавання выкарыстання аб'ектаў ядра Linux (іерархіі файлаў, сеткавыя сокеты, ioctl і да т.п), дададзеная падтрымка кіравання доступам да UDP-сокетаў, а таксама магчымасць выбарачнага адключэння высновы ў лог звестак аб блакаванні аб'ектаў для прадухілення захламлення лога неістотнай інфармацыяй.
    • Ядро пазбаўлена ад выкарыстання функцыі strncpy(), якая капіюе зададзены лік байт з уваходнага радка. Ужыванне strncpy() стварала небяспеку ўзнікнення памылак з-за пропуску нулявога знака ў канцы радка або дадатковага запаўнення нулямі. Замест strncpy() рэкамендавана выкарыстоўваць функцыі strscpy() і strscpy_pad() для капіявання радкоў, якія завяршаюцца нулявым сімвалам, а таксама strtomem_pad(), memcpy_and_pad() і memcpy() для капіявання радкоў вядомага фіксаванага памеру. Праца па збавенні ядра ад выкарыстання strncpy() была пачата ў 2020 годзе і запатрабавала прыняцця 362 змен ад 70 распрацоўнікаў.
    • У гіпервізор KVM дададзеная падтрымка пашырэнняў Intel MBEC (Mode-Based Execution Control) і AMD GMET (Guest-Mode Execution Trap), якія дазваляюць у табліцах трансляцыі памяці паасобна апрацоўваць правы на выкананне кода для ядра і прасторы карыстача ў гасцявых сістэмах. Раней пашырэнні апаратнай віртуалізацыі Intel і AMD дазвалялі пазначыць старонкі памяці даступнымі для выканання толькі адным бітам з праграмным падзелам мае рацыю для ядра і прасторы карыстача на ўзроўні гіпервізара. Выкарыстанне MBEC і GMET дае магчымасць выключыць праверкі паўнамоцтваў на боку гіпервізара і значна скараціць інтэнсіўнасць рэсурсаёмістай перадачы кіравання ад гасцявой сістэмы да гіпервізара VMexit.
  • Сеткавая падсістэма
    • Рэалізацыя пашырэння TCP-AO (TCP Authentication Option, RFC 5925) пераведзена на выкарыстанне новай крыптаграфічнай бібліятэкі libcrypto, што дазволіла спрасціць код і павысіць эфектыўнасць працы. TCP-AO дае магчымасць верыфікаваць TCP-загалоўкі па MAC-кодам (Message Authentication Code), выкарыстоўваючы больш сучасныя алгарытмы HMAC-SHA-1-96 і AES-128-CMAC-96 замест раней даступнай опцыі TCP-MD5 на базе састарэлага алгарытму MD5.
    • Колькасць субструменяў, якія падтрымліваюцца для злучэнняў Multipath TCP (MPTCP), павялічана з 8 да 64.
    • Прадоўжана праца па скарачэнні выкарыстання ў сеткавым стэку ядра глабальнага блакавання rtnl_lock.
    • З ядра выдалена рэалізацыя стэка пратаколаў AppleTalk, які выкарыстоўваўся ў кампутарах Apple з 1985 года і ў 1990-я гады быў заменены на TCP/IP. Акрамя гэтага выдаленыя кампаненты тэхналогіі перадач дадзеных ATM, не звязаныя з PPPoATM, а таксама сеткавыя інтэрфейсы ARCnet на базе шын ISA і PCMCIA, Bluetooth-адаптары з інтэрфейсам PCMCIA, TLS-паскаральнікі Chelsea, код для інтэграцыі TLS з sockmap і падтрымка дыяпазонаў частот 5/10 cfg80211/mac80211. З-за наяўнасці невырашальных праблем з блакіроўкамі і адсутнасці суправаджаючых выдаленая спецыфічная рэалізацыя паскарэння апрацоўкі TLS на базе TCP Offload Engine (больш распаўсюджаная рэалізацыя TLS offload захавана). Адключаны і запланаваны для выдалення код сумяшчальнасці з 32-разраднымі x_tables на 64-разрадных сістэмах.
    • У драйвер pppoe дададзеная падтрымка механізмаў GRO (Generic Receive Offload) і GSO (Generic Segmentation Offload) для апаратнага паскарэння перазборкі і сегментацыі пакетаў. Выкарыстанне GRO і GSO дазваляе істотна падвысіць прапускную здольнасць для ўваходнага трафіку, напрыклад, на прыладах MediaTek MT7621 у канфігурацыі з транслятарам адрасоў максімальная прапускная здольнасць падвысілася з 130 Mbit/s да 630 Mbit/s.
  • Абсталяванне
    • У драйверы AMDGPU з'явілася пачатковая падтрымка тэхналогіі HDMI 2.1 FRL (Fixed Rate Link), якая дазваляе перадаваць несціснутыя відэа з якасцю 4K/120Hz і 8K/60Hz. Раней падтрымку HDMI 2.1 доўгі час не ўдавалася рэалізаваць у адкрытых драйверах з-за ліцэнзійных патрабаванняў HDMI Forum, але зараз кампаніі AMD ўдалося ўзгадніць падобную рэалізацыю.
    • У драйвер i915 дададзеная падтрымка налады адлюстравання дысплейным кантролерам фонавага колеру. Рэалізаваны параметр pin_params.needs_low_address.
    • Прадоўжана праца над drm-драйверам (Direct Rendering Manager) Xe для GPU на базе архітэктуры Intel Xe, якая выкарыстоўваецца ў відэакартах Intel сямейства Arc і інтэграванай графіцы, пачынаючы з працэсараў Tiger Lake. Дададзена пачатковая падтрымка платформы CRI (Crescent Island). Для dGPU-платформаў Xe3p рэалізаваны сістэмны кантролер.
    • У драйверы Nouveau вырашаны праблемы з GPU NVIDIA GA100.
    • У драйвер v3d дададзена магчымасць кіравання энергаспажываннем v3D GPU на платах Raspberry Pi.
    • Працягнута інтэграцыя кампанентаў драйвера Nova для GPU NVIDIA, абсталяваных GSP-прашыўкамі, выкарыстоўванымі пачынальна з серыі NVIDIA GeForce RTX 2000 на базе мікраархітэктуры Turing. Драйвер напісаны на мове Rust. Дададзена падтрымка GPU NVIDIA GA100 і серый Hopper і Blackwell.
    • Дададзена падтрымка ARM-плат, SoC і прылад: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3 NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 7.2. Linux-libre 7.2-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У выпуску 7.2 праведзена чыстка ад блобаў новых драйвераў rt722-sdca і tac5xx2. Абноўлены код чысткі ў драйверах amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 і mt792x. Праведзена карэкціроўка інтэрфейсаў для загрузкі прашывак. Выканана чыстка імёнаў blob-ов у dts-файлах (devicetree) для ARM-чыпаў.

Крыніца: opennet.ru

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster