Рэліз ядра Linux 5.16

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.16. Сярод найболей прыкметных змен: сістэмны выклік futex_waitv для падвышэння прадукцыйнасці Windows-гульняў у Wine, адсочванне памылак у ФС праз fanotify, канцэпцыя фаліянтаў у сістэме кіравання памяццю, падтрымка працэсарных інструкцый AMX, магчымасць рэзервавання памяці за сеткавымі сокетамі, падтрымка ў netfilter класіфікацыі пакетаў "egress", задзейнічанне падсістэмы DAMON для папераджальнага выцяснення незапатрабаваных абласцей памяці, паляпшэнне апрацоўкі перагрузак пры вялікім аб'ёме аперацый запісу, падтрымка шматпрывадных цвёрдых дыскаў.

У новую версію прынята 15415 выпраўленняў ад 2105 распрацоўшчыкаў, памер патча – 45 МБ (змены закранулі 12023 файлаў, дададзена 685198 радкоў кода, выдалена 263867 радкоў). Каля 44% усіх прадстаўленых у 5.16 змен злучаны з драйверамі прылад, прыкладна 16% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 16% злучана з сеткавым стэкам, 4% - з файлавымі сістэмамі і 4% c унутранымі падсістэмамі ядра.

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

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У механізм fanotify дададзены сродкі для маніторынгу за станам файлавай сістэмы і адсочванні ўзнікнення памылак. Інфармацыя пра памылкі перадаецца пры дапамозе новага тыпу падзей - FAN_FS_ERROR, якія могуць перахапляцца ў выкананых прасторы карыстальніка сістэмах маніторынгу для аператыўнага інфармавання адміністратара або запуску працэсаў аднаўлення. Пры каскадным узнікненні серыі памылак fanotify забяспечвае дастаўку паведамлення аб першай памылцы разам з агульным лічыльнікам праблем, для спрашчэння наступнага разбору прычын збою. Падтрымка адсочвання памылак пакуль рэалізавана толькі для ФС Ext4.
    • Палепшана апрацоўка перагрузак пры выкананні аперацый запісу (write congestion), якія ўзнікаюць калі аб'ём аперацый запісу перавышае прапускную здольнасць назапашвальніка і сістэма змушана блакаваць запыты працэсу на запіс да завяршэння выканання ўжо перададзеных запытаў. У новай версіі цалкам перароблены механізм ядра, выкарыстоўваны для атрымання інфармацыі аб узнікненні перагрузкі і блакаванні задач, бо ў старой рэалізацыі назіраліся праблемы з спалучэннем апрацоўкі перагрузкі запісу c выцясненнем старонак памяці ў частку падпампоўкі пры недахопе памяці ў сістэме.
    • У Btrfs рэалізавана падтрымка тэхналогіі занавання прылад (Zoned Namespace), якая ўжываецца ў цвёрдых дысках або NVMe SSD для падзелу прасторы для захоўвання на зоны, якія складаюць групы блокаў ці сектараў, у якія дапушчаецца толькі паслядоўнае даданне дадзеных з абнаўленнем цалкам усёй групы блокаў. Акрамя таго, унесены невялікія аптымізацыі лагагавання inode, якія дазволілі дабіцца павышэння прапускной здольнасці ў тэсце dbench на 3% і скараціць затрымкі на 11%. Перапрацаваны механізм лагіравання каталогаў, у якім для павышэння эфектыўнасці скарочана колькасць аперацый пошуку і блакіровак у дрэве. Паскорана ўстаўка элементаў у структуру btree у пакетным рэжыме (час масавай устаўкі элементаў скарацілася на 4%, а выдаленні на 12%). Дададзена абмежаваная падтрымка выкарыстання сціску пры запісе не поўных старонак, а таксама магчымасць дэфрагментацыі падстаронак (subpage). Праведзена падрыхтоўка для ўключэння падтрымкі другой версіі пратакола для каманды "send".
    • У файлавай сістэме XFS скарочана спажыванне памяці за рахунак выкарыстання асобных кэшаў slab для часта выкарыстоўваных элементаў і скарачэнні некаторых структур дадзеных.
    • У файлавай сістэме Ext4 адзначана толькі выпраўленні памылак і больш дакладнае вылічэнне параметраў адкладзенай ініцыялізацыі табліцы Inode.
    • На ўзроўні блокавых прылад рэалізаваны аптымізацыі, якія дазваляюць істотна павысіць эфектыўнасць прывязкі аперацый да ядраў CPU.
    • Дададзена пачатковая падтрымка цвёрдых дыскаў з некалькімі незалежнымі прывадамі (multi-actuator), якія даюць магчымасць адначасова звяртацца да некалькіх сектараў у розных зонах магнітнай пласціны.
    • Дададзена новая ioctl-каманда CDROM_TIMED_MEDIA_CHANGE для вызначэння падзей змены носьбіта ў прывадзе аптычных дыскаў.
    • У файлавую сістэму EROFS (Enhanced Read-Only File System) дададзеная магчымасць працы па-над некалькімі прыладамі захоўвання. Розныя прылады могуць быць адлюстраваны ў адну 32-разрадную адрасную прастору блокаў. Таксама дададзена падтрымка сціску з выкарыстаннем алгарытму LZMA.
    • У ФС F2FS дададзены опцыі мантавання для кіравання фрагментаваннем файлаў пры размяшчэнні ў сховішча (напрыклад, для адладкі аптымізацый працы з фрагментаваным сховішчамі).
    • У CEPH уключаны па змаўчанні аперацыі стварэння і выдаленні каталогаў у асінхронным рэжыме (для вяртання старых паводзін варта пры мантаванні выкарыстоўваць сцяг '-o wsync'). Дададзена вядзенне метрык, якія адсочваюць аперацыі капіявання вонкавых аб'ектаў.
    • У CIFS дададзены параметр мантавання tcpnodelay, пры якім для сеткавага сокета выстаўляецца рэжым tcp_sock_set_nodelay, які адключае чаканне запаўнення чаргі ў TCP-стэку. Дададзена падтрымка ўкладзеных DFS Link (Distributed File System) пры перамантаванні.
    • Дададзена падтрымка завяршэння запытаў да блокавай прылады ў пакетным рэжыме. Тэставанне змены паказала павелічэнне інтэнсіўнасці выканання аперацый выпадковага чытання з назапашвальнікаў Optane з 6.1/6.6 да XNUMX/XNUMX млн IOPS на адным ядры CPU.
  • Памяць і сістэмныя сэрвісы
    • Дададзены новы сістэмны выклік futex_waitv, які дазваляе адсочваць стан адразу некалькіх ф'ютэксаў пры дапамозе аднаго сістэмнага выкліку. Указаная магчымасць нагадвае даступную ў Windows функцыянальнасць WaitForMultipleObjects, эмуляцыя якой праз futex_waitv можа быць карыснай для павышэння прадукцыйнасці Windows-гульняў, якія запускаюцца пад кіраваннем Wine або Proton. Акрамя таго, адначасовае чаканне фьютэксаў можа прымяняцца і для аптымізацыі прадукцыйнасці родных зборак гульняў для Linux.
    • Рэалізавана канцэпцыя фаліянтаў старонак памяці (page folios), выкарыстанне якой у некаторых падсістэмах ядра дазволіць паскорыць кіраванне памяццю пры тыпавых нагрузках. У наш час на фаліянты ўжо перакладзена асноўная падсістэма кіравання памяццю ў ядры і рэалізацыя старонкавага кэша, а ў будучыні вызначаны пераклад файлавых сістэм. У далейшым у ядры таксама плануюцца дадаць падтрымку шматстаронкавых фаліянтаў.

      Фаліянты нагадваюць аб'яднаныя старонкі памяці (compound pages), але адрозніваюцца палепшанай семантыкай і больш зразумелай арганізацыяй працы. Для кіравання сістэмнай памяццю даступнае АЗП падзяляецца на старонкі памяці, памер якіх залежыць ад архітэктуры, але на сістэмах x86 вылічаецца кілабайтамі (звычайна 4096 байт). Сучасныя сістэмы камплектуюцца дзясяткамі гігабайт АЗП, што прыводзіць ускладненню кіравання памяццю з-за неабходнасці апрацоўкі велізарнага ліку старонак памяці. Для скарачэння колькасці старонак раней у ядры была рэалізавана канцэпцыя аб'яднаных старонак (compound pages) са структурамі, якія ахопліваюць больш за адну фізічную старонку памяці. Але API для маніпуляцыі аб'яднаных старонкамі памяці пакідаў жадаць лепшага і прыводзіў да дадатковых накладных выдаткаў.

    • У планавальнік задач дададзены апрацоўшчык, які ўлічвае кластарызацыю кэша ў CPU. У некаторых працэсарах, такіх як Kunpeng 920 (ARM) і Intel Jacobsville (x86), пэўны лік ядраў CPU, звычайна 4, можа сумяшчаць L3 ці L2 кэш. Улік падобных тапалогій можа значна падвысіць эфектыўнасць размеркавання задач па ядрах CPU у планавальніку задач, бо перасоўванне задач у рамках аднаго кластара CPU дазваляе падвысіць прапускную здольнасць звароту да памяці і зменшыць канкурэнцыю ў кэшы.
    • Дададзена падтрымка інструкцый AMX (Advanced Matrix Extensions), рэалізаваных у будучых серверных працэсарах Intel Xeon Scalable, якія развіваюцца пад кодавым імем Sapphire Rapids. AMX прапануе новыя наладжвальныя рэгістры TMM "TILE" і інструкцыі для маніпуляцыі з дадзенымі ў гэтых рэгістрах, такія як TMUL (Tile matrix MULtiply) для множання матрыц.
    • Рэалізавана некалькі новых магчымасцяў, заснаваных на дададзенай у мінулым выпуску падсістэме DAMON (Data Access MONitor), якая дазваляе адсочваць доступ да дадзеных у аператыўнай памяці, у прывязцы да абранага працэсу, які працуе ў прасторы карыстальніка. Напрыклад, падсістэма дае магчымасць прааналізаваць да якіх менавіта абласцей памяці звяртаўся працэс за ўвесь час сваёй працы, а якія вобласці памяці засталіся незапатрабаванымі.
      • DAMON_RECLAIM для выяўлення і выцяснення абласцей памяці, да якіх не было зваротаў. Механізм можна выкарыстоўваць для папераджальнага мяккага выцяснення старонак памяці ва ўмовах набліжэння да вычарпання вольнай памяці.
      • DAMOS (Data Access Monitoring-based Operation Schemes) для ўжывання зададзеных аперацыі madvise(), такіх як вызваленне дадатковай вольнай памяці, да абласцей памяці працэсу, для якіх фіксуецца вызначаная частата звароту да памяці. Настройка параметраў DAMOS ажыццяўляецца праз debugfs.
      • Магчымасць маніторынгу за фізічнай адраснай прасторай памяці (раней можна было адсочваць толькі віртуальныя адрасы).
    • Рэалізацыя алгарытму сціску zstd абноўлена да версіі 1.4.10, што дазволіла прыкметна падняць прадукцыйнасць розных падсістэм ядра, у якіх ужываецца сціск (напрыклад, распакаванне выявы ядра паскораная на 35%, прадукцыйнасць распакавання сціснутых дадзеных у Btrfs і SquashFS павысілася на ZRAM - на 15%). Першапачаткова ў ядры была скарыстана асобная рэалізацыя zstd, заснаваная на версіі 30, выпушчанай больш за тры гады назад і не ўлучальнай шматлікія важныя аптымізацыі. Акрамя пераходу на актуальную версію дададзены патч таксама спрашчае сінхранізацыю з upstream-галінкай zstd, дазваляючы генераваць код для ўключэння ў ядро ​​напроста з асноўнага рэпазітара zstd. У будучыні код zstd у ядры плануюць абнаўляць па меры выйсця новых версій бібліятэкі zstd.
    • Унесена вялікая порцыя паляпшэнняў у падсістэму eBPF. Дададзена магчымасць выкліку з BPF-праграм функцый модуляў ядра. Рэалізаваная функцыя bpf_trace_vprintk(), у адрозненне ад bpf_trace_printk() якая дазваляе выводзіць зараз больш за тры аргументы. Дададзена новая структура захоўвання дадзеных (BPF map) bloom filter, якая дазваляе выкарыстоўваць аднайменную імавернасную структуру дадзеных для вызначэння наяўнасці элемента ў наборы. Дададзены новы атрыбут BTF_KIND_TAG, які можа прымяняцца ў BPF-праграмах для прывязкі тэгаў да параметраў функцый, напрыклад, для спрашчэння выяўлення памылак у карыстацкіх праграмах. У libbpf дазволена стварэнне ўласных секцый .rodata.*/.data.*, рэалізавана падтрымка падзей трасіроўкі uprobe і kprobe, дададзены API для капіявання ўсіх тыпаў BTF з аднаго аб'екта ў іншы. Падтрымка AF_XDP вынесена з libbpf у асобную бібліятэку libxdp. Для архітэктуры MIPS рэалізаваны JIT-кампілятар для віртуальнай машыны BPF.
    • Для архітэктуры ARM64 рэалізавана падтрымка пашырэнняў ARMv8.6 для таймера, у тым ліку якія дазваляюць забяспечыць самасінхранізацыю падання сістэмных рэгістраў без ужывання інструкцый ISB.
    • Для архітэктуры PA-RISC рэалізавана магчымасць ужывання механізму KFENCE для выяўлення памылак пры працы з памяццю, а таксама дададзеная падтрымка дэтэктара станаў гонкі KCSAN.
    • Прадастаўлена магчымасць настройкі правоў доступу да tracefs на ўзроўні асобных карыстальнікаў і груп, напрыклад, зараз можна дазволіць доступ да сродкаў трасіроўкі толькі ўдзельнікам пэўнай групы.
  • Віртуалізацыя і бяспека
    • У падсістэмах io_uring і device-mapper рэалізавана падтрымка генерацыі падзей аўдыту. У io_uring прадстаўлена магчымасць кіравання доступам праз модулі LSM. Дададзена магчымасць аўдыту сістэмнага выкліку openat2().
    • Код ядра цалкам пазбаўлены ад бесперапынных выразаў casе ў switch (без return ці break пасля кожнага блока case). Пры зборцы ядра зараз можна будзе ўжываць рэжым "-Wimplicit-fallthrough".
    • Уключаны змены для ўзмацнення жорсткасці праверак межаў пры выкананні функцыі memcpy().
    • У інтэрфейсе асінхроннага ўводу/высновы io_uring рэалізаваная магчымасць ужывання да аперацый уводу/высновы палітык бяспекі, вызначаных модулямі SELinux і Smack.
    • У падсістэме IMA (Integrity Measurement Architecture), якая дазваляе вонкаваму сэрвісу верыфікаваць стан падсістэм ядра для таго каб пераканацца ў іх сапраўднасці, рэалізаваная магчымасць ужывання правіл на аснове ідэнтыфікатара групы (GID) да якой прыналежыць файл ці ў якую ўваходзіць карыстач, які звяртаецца да файла.
    • Адключаныя па змаўчанні некаторыя пашыраныя механізмы абароны струменяў seccomp() ад нападаў класа Spectre, якія былі расцэнены як залішнія і прыкметна не якія падвышаюць бяспеку, але негатыўна ўплываюць на прадукцыйнасць. Перагледжана ўжыванне абароны Retpoline.
    • Выдалена рэалізацыя механізму cryptoloop, на змену якому ў 2004 годзе прыйшоў dm-crypt і пры неабходнасці падтрымлівае тыя ж алгарытмы.
    • Па змаўчанні забаронены непрывілеяваны доступ да падсістэмы eBPF. Змена занесена для прадухілення выкарыстання BPF-праграм для абыходу абароны ад нападаў па іншых каналах. Пры неабходнасці адміністратар можа вярнуць магчымасць выкарыстання eBPF непрывілеяванымі карыстальнікамі.
    • У гіпервізор ACRN, разлічаны на выкананне задач рэальнага часу і выкарыстанне ў крытычна важных сістэмах, дададзена падтрымка стварэння/выдаленні віртуальных прылад і пракіда прылад MMIO.
    • У крыптарушок дададзена падтрымка азначэнняў KPP (Key-agreement Protocol Primitives), якія спрашчаюць логіку распрацоўкі драйвераў для крыптасістэм.
    • Для гіпервізара Hyper-V рэалізавана падтрымка рэжыму ізаляцыі віртуальных машын, які разумее шыфраванне змесціва памяці.
    • У гіпервізоры KVM дададзеная падтрымка архітэктуры RISC-V. Рэалізавана магчымасць міграцыі ўнутры хост-акружэння віртуальных машын, якія выконваюцца з выкарыстаннем пашырэнняў AMD SEV і SEV-ES. Дададзены API для live-міграцыі гасцявых сістэм, якія шыфруюцца пры дапамозе AMD SEV (Secure Encrypted Virtualization).
    • Для архітэктуры PowerPC па змаўчанні ўключаны рэжым STRICT_KERNEL_RWX, які блакуе выкарыстанне старонак памяці, адначасова даступных на запіс і выкананне.
    • На 32-разрадных сістэмах x86 спынена падтрымка гарачага падлучэння памяці (Memory hotplug), якая больш за год знаходзілася ў непрацоўным стане.
    • З ядра выключана бібліятэка liblockdep, якая зараз будзе суправаджацца асобна ад ядра.
  • Сеткавая падсістэма
    • Для сокетаў рэалізавана новая опцыя SO_RESERVE_MEM, пры дапамозе якой можна зарэзерваваць для сокета вызначаны аб'ём памяці, які заўсёды застанецца даступным для сокета і не будзе канфіскаваны. Выкарыстанне дадзенай опцыі дазваляе дамагчыся павелічэнні прадукцыйнасці за рахунак скарачэння ў сеткавым стэку аперацый вылучэння і вяртанні памяці, асабліва пры ўзнікненні ўмоў недахопу памяці ў сістэме.
    • Дададзена падтрымка пратаколу аўтаматычнага тунэлявання multicast-трафіку (Automatic Multicast Tunneling, RFC 7450), які дазваляе дастаўляць multicast-трафік з сетак, якія падтрымліваюць Мulticast, атрымальнікам у сетках без Multicast. Пратакол працуе праз інкапсуляцыю ў пакеты UDP.
    • Палепшана інкапсуляцыя дадзеных IOAM (In-situ Operations, Administration, and Maintenance) у транзітныя пакеты.
    • У ethtool netlink API дададзена магчымасць кіравання рэжымамі энергаспажывання прыёмаперадатчыкаў.
    • У падсістэме netfilter рэалізавана магчымасць класіфікацыі пакетаў на ўзроўні egress, г.зн. на стадыі калі драйвер атрымлівае пакет ад сеткавага стэка ядра. У nftables падтрымка якія адпавядаюць фільтраў з'явілася ў версіі 1.0.1. У netfilter дададзена магчымасць супастаўлення і змены ўнутраных загалоўкаў і дадзеных для UDP і TCP (inner header / payload), якія ідуць пасля транспартнага загалоўка (transport header).
    • Дададзены новыя sysctl-параметры arp_evict_nocarrier і ndisc_evict_nocarrier пры ўсталёўцы якіх кэш ARP і табліца ndisc (neighbor discovery) будуць чысціцца ў выпадку абрыву сувязі (NOCARRIER).
    • У механізм кіравання сеткавымі чэргамі fq_codel (Сontrolled Delay) дададзены рэжымы Low Latency, Low Loss і Scalable Throughput (L4S).
  • Абсталяванне
    • У драйверы amdgpu рэалізавана пачатковая падтрымка спецыфікацыі DP 2.0 (DisplayPort 2.0) і магчымасці тунэлявання DisplayPort праз USB4. Для APU Cyan Skillfish (абсталяваны GPU Navi 1x) дададзеная падтрымка кантролераў дысплея. Пашыраная падтрымка APU Yellow Carp (мабільныя працэсары Ryzen 6000 "Rembrandt").
    • У драйверы i915 стабілізаваная падтрымка чыпаў Intel Alderlake S і рэалізаваная падтрымка тэхналогіі Intel PXP (Protected Xe Path), якая дазваляе арганізаваць працу апаратна абароненага графічнага сеансу на сістэмах з чыпамі Intel Xe.
    • У драйверы nouveau праведзена праца па выпраўленні памылак і паляпшэнню стылю афармлення кода.
    • Дададзена падтрымка x86-сумяшчальных CPU Vortex (Vortex86MX). Linux на падобных працэсарах працаваў і раней, але відавочная ідэнтыфікацыя паказаных CPU запатрабавалася для адключэння абароны ад нападаў Spectre/Meltdown, якія не дастасавальныя да паказаных чыпаў.
    • Дададзена пачатковая падтрымка x86-платформаў Surface Pro 8 і Surface Laptop Studio.
    • Дададзены драйвер для падтрымкі гукавых чыпаў, выкарыстоўваных у APU AMD Yellow Carp, Van Gogh, таксама дададзеная падтрымка гукавых сістэм і кодэкаў Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA TePa210. ALC8I-VS, RT5682S, RT5682, Rockchip RV9120 і RK1126.
    • Дададзены драйвер ishtp_eclite для доступу да ўбудаваных кантролераў Intel PSE (Programmable Service Engine) пры дапамозе пратаколу ISHTP (Integratd Sensor Hub Transport Protocol), напрыклад, для атрымання дадзеных аб акумулятары, тэмпературы і інфармацыі, звязанай з UCSI (USB Type-C Connector System Software Interface).
    • Дададзены драйвер для гульнявых кантролераў Nintendo Switch, які падтрымлівае прылады Switch Pro і Joy-Cons. Дададзена падтрымка планшэтаў Wacom Intuos BT (CTL-4100WL/CTL-6100WL) і клавіятуры Apple 2021 Magic Keyboard. Палепшана падтрымка кантролераў Sony PlayStation DualSense. Дададзена падтрымка бакавых кнопак мышы Xiaomi Mi.
    • Дададзены драйвер RT89 з падтрымкай бесправадных чыпаў Realtek 802.11ax, а таксама драйверы для Ethernet-адаптараў Asix AX88796C-SPI і камутатараў Realtek RTL8365MB-VC.
    • Для чыпаў Apple M1 дададзены драйверы для PCI і PASemi i2c.
    • Дададзена падтрымка ARM SoС, прылад і поплаткаў Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5 Mi Mix, Mi 5 Plus і Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1, і Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAuto , RK9 Rock Pi 3566A +, RK3399 Rock Pi 4B +, Firefly ROC-RK3399-PC, Firefly ROC-RK4-PC-PLUS, ASUS Chromebook Tablet CT3328, Pine3399 Quartz100-A, Netgear GS64 64G110, Renesas R7040A32M* , Xilinx Kria, Radxa Zero, JetHub D2/H8, Netronix E779K1.

Крыніца: opennet.ru

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