Рэліз ядра Linux 5.19

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.19. Сярод найболей прыкметных змен: падтрымка працэсарнай архітэктуры LoongArch, інтэграцыя патчаў "BIG TCP", рэжым "on-demand" у fscache, выдаленне кода для падтрымкі фармату a.out, магчымасць ужывання ZSTD для сціску прашывак, інтэрфейс для кіравання выцясненнем памяці з прасторы карыстача , павышэнне надзейнасці і прадукцыйнасці генератара псеўдавыпадковых лікаў, падтрымка пашырэнняў Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) і ARM SME (Scalable Matrix Extension).

У анонсе Лінус паведаміў, што хутчэй за ўсё наступнаму выпуску ядра будзе прысвоены нумар 6.0, бо ў галінцы 5.x назапасілася дастатковага выпускаў для змены першага чысла ў нумары версіі. Змена нумарацыі ажыццяўляецца з эстэтычных меркаванняў і з'яўляецца фармальным крокам, якія здымаюць дыскамфорт з-за назапашванні вялікай колькасці выпускаў у серыі.

Таксама Лінус згадаў, што выкарыстаў для фармавання рэлізу наўтбук Apple на базе архітэктуры ARM64 (Apple Silicon) з Linux-асяроддзем на базе дыстрыбутыва Asahi Linux. Гэта не асноўная працоўная станцыя Лінуса, але ён выкарыстоўваў дадзеную платформу, каб праверыць яе прыдатнасць для працы над ядром і быць упэўненым у тым, што зможа фармаваць выпускі ядра ў паездцы, маючы пад рукой лёгкі наўтбук. Да гэтага шмат гадоў таму Лінус меў досвед выкарыстання абсталявання Apple для распрацоўкі – калісьці ён карыстаўся кампутарам на базе CPU ppc970 і наўтбукам Macbook Air.

У новую версію прынята 16401 выпраўленняў ад 2190 распрацоўнікаў (у мінулым выпуску было 16206 выпраўленняў ад 2127 распрацоўнікаў), памер патча – 90 МБ (змены закранулі 13847 файлаў, дададзена 1149456 радкоў кода, выдалена 349177). Каля 39% усіх прадстаўленых у 5.19 змен злучаны з драйверамі прылад, прыкладна 21% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 11% злучана з сеткавым стэкам, 4% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

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

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • Файлавая сістэма EROFS (Enhanced Read-Only File System), прызначаная для выкарыстання на раздзелах, даступных у рэжыме толькі для чытання, пераведзена на выкарыстанне падсістэмы fscache, якая забяспечвае кэшаванне дадзеных. Змена дазволіла прыкметна падняць прадукцыйнасць сістэм, у якіх з выявы на базе EROFS запускаецца вялікі лік кантэйнераў.
    • У падсістэму fscache дададзены рэжым чытання па патрабаванні ("on-demand"), які задзейнічаны для аптымізацыі EROFS. Новы рэжым дазваляе арганізаваць кэшаванне чытання з выяваў ФС, змешчаных у лакальнай сістэме. У адрозненне ад першапачаткова даступнага рэжыму працы, арыентаванага на кэшавання ў лакальнай файлавай сістэме дадзеных, якія перадаюцца праз сеткавыя файлавыя сістэмы, рэжым «on-demand» дэлегуе функцыі вымання дадзеных і іх запісы ў кэш асобнаму фонаваму працэсу, выкананаму ў прасторы карыстача.
    • У XFS забяспечана магчымасць захоўвання мільярдаў пашыраных атрыбутаў у i-node. Максімальная колькасць экстэнтаў для аднаго файла павялічана з 4 мільярдаў да 247. Рэалізаваны рэжым для атамарнага абнаўлення адразу некалькіх пашыраных атрыбутаў файла.
    • У файлавай сістэме Btrfs аптымізавана праца з блакіроўкамі, што дазволіла дамагчыся павелічэнні прадукцыйнасці прыкладна на 7% пры прамым запісе ў рэжыме nowait. Прадукцыйнасць аперацый у рэжыме NOCOW (без copy-on-write) падвышана прыблізна на 3%. Зніжана нагрузка на старонкавы кэш пры працы каманды "send". Мінімальны памер падстаронак паніжаны з 64К да 4K (можна выкарыстоўваць падстаронкі памерам менш старонак ядра). Ажыццёўлены пераход з выкарыстання базіснага дрэва (radix tree) на алгарытм XArrays.
    • У NFS-сервер дададзены рэжым падаўжэння захавання стану блакавання, выстаўленай кліентам, які перастаў адказваць на запыты. Новы рэжым дазваляе затрымаць ачыстку блакавання аж да сутак, калі іншы кліент не запытае канкуруючую блакіроўку. У штатным рэжыме блакіроўка чысціцца праз 90 секунд пасля таго як кліент перастаў адказваць.
    • У падсістэме адсочвання падзей у ФС fanotify рэалізаваны сцяг FAN_MARK_EVICTABLE, пры дапамозе якога можна адключыць замацаванне мэтавых i-node у кэшы, напрыклад, для ігнаравання падветак без замацавання іх частак у кэшы.
    • У драйвер для ФС FAT32 дададзеная падтрымка атрымання звестак аб часе стварэння файла праз сістэмны выклік statx c рэалізацыяй больш эфектыўнага і функцыянальнага варыянту stat(), які вяртае пашыраную інфармацыю аб файле.
    • Унесены значныя аптымізацыі ў драйвер exFAT, звязаныя з забеспячэннем адначасовай ачысткі групы сектараў пры актыўным рэжыме 'dirsync', замест паслядоўнай пасектарнай ачысткі. За кошт скарачэння колькасці запытаў блокаў пасля занясення аптымізацыі прадукцыйнасць стварэння вялікай колькасці каталогаў на SD-карце ўзрасла больш за на 73-85% у залежнасці ад памеру кластара.
    • У склад ядра ўключана першае якое карэктуе абнаўленне драйвера ntfs3. З моманту ўключэння ntfs3 у склад ядра 5.15 у кастрычніку мінулага гады драйвер не абнаўляўся, а з распрацоўнікамі была страчаная сувязь, але зараз распрацоўнікі аднавілі публікацыю змен. У прапанаваных патчах ухілены памылкі, якія прыводзяць да ўцечак памяці і аварыйным завяршэнням, вырашаныя праблемы з выкананнем xfstests, праведзена чыстка невыкарыстоўванага кода і выпраўленыя памылкі друку.
    • Для OverlayFS рэалізаваная магчымасць мапінга ідэнтыфікатараў карыстачоў прымантаваных файлавых сістэм, ужывальнага для супастаўлення файлаў вызначанага карыстача на прымантаванай чужой частцы з іншым карыстачом у бягучай сістэме.
  • Памяць і сістэмныя сэрвісы
    • Дададзена пачатковая падтрымка архітэктуры набору каманд LoongArch, якая прымяняецца ў працэсарах Loongson 3 5000 і рэалізуе новы RISC ISA, падобны на MIPS і RISC-V. Архітэктура LoongArch даступная ў трох варыянтах: зрэзаны 32-разрадны (LA32R), звычайны 32-разрадны (LA32S) і 64-разрадны (LA64).
    • Выдалены код для падтрымкі фармату выкананых файлаў a.out, які быў пераведзены ў разрад састарэлых у выпуску 5.1. Фармат a.out даўно не прымяняецца на сістэмах з Linux, а генерацыя файлаў a.out не падтрымліваецца сучаснымі інструментальнымі сродкамі ў канфігурацыях для Linux па змаўчанні. Загрузнік для a.out файлаў можа быць рэалізаваны цалкам у прасторы карыстальніка.
    • Спынена падтрымка загрузных опцый, спецыфічных для архітэктуры x86: nosep, nosmap, nosmep, noexec і noclflush).
    • Спыненая падтрымка састарэлай архітэктуры CPU h8300 (Renesas H8/300), даўно пакінутай без суправаджэння.
    • Пашыраныя магчымасці, злучаныя з рэагаваннем на выяўленне расшчэпленых блакаванняў («split lock»), якія ўзнікаюць пры доступе да нявыраўнаваных дадзеных у памяці з-за таго, што пры выкананні атамарнай інструкцыі дадзеныя перасякаюць дзве лініі кэша CPU. Падобныя блакаванні прыводзяць да значнага падзення прадукцыйнасці. Калі раней па змаўчанні ядро ​​выдавала папярэджанне з інфармацыяй аб які выклікаў блакаванне працэсе, то зараз праблемны працэс дадаткова будзе запаволены, каб захаваць прадукцыйнасць астатняй сістэмы.
    • Дададзена падтрымка рэалізаванага ў працэсарах Intel механізму IFS (In-Field Scan), які дазваляе запускаць нізкаўзроўневыя дыягнастычныя тэсты CPU, здольныя выяўляць праблемы, не вызначаныя штатнымі сродкамі на аснове кодаў карэкцыі памылак (ECC) або бітаў цотнасці. Выконваемыя тэсты афармляюцца ў форме загружанай прашыўкі, аформленай па аналогіі з абнаўленнямі мікракода. Вынікі тэсціравання даступныя праз sysfs.
    • Дададзена магчымасць убудавання ў ядро ​​файла bootconfig, які дазваляе апроч опцый каманднага радка вызначаць параметры працы ядра праз файл з наладамі. Убудаванне ажыццяўляецца пры дапамозе зборачнай опцыі 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. Раней bootconfig вызначаўся праз прымацаванне да выявы initrd. Убудаванне ў ядры дазваляе выкарыстоўваць bootconfig у канфігурацыях без initrd.
    • Рэалізавана магчымасць загрузкі прашывак, сціснутых выкарыстаннем алгарытму Zstandard. У sysfs дададзены набор кіраўнікоў файлаў /sys/class/firmware/*, які дазваляе ініцыяваць загрузку прашывак з прасторы карыстача.
    • У інтэрфейсе асінхроннага ўводу/высновы io_uring прапанаваны новы сцяг IORING_RECVSEND_POLL_FIRST, пры выстаўленні якога сеткавая аперацыя спачатку будзе перададзена для апрацоўкі з выкарыстаннем полінга (polling), што можа зэканоміць рэсурсы ў сітуацыях, калі дапушчальная апрацоўка аперацыі з некаторай затрымкай. У io_uring таксама дададзена падтрымка сістэмнага выкліку socket(), прапанаваны новы сцягі для спрашчэння кіравання файлавымі дэскрыптарамі, дададзены рэжым «multi-shot» для прыёму ў выкліку accept() разам некалькіх злучэнняў, дададзеныя аперацыі для пракіду каманд NVMe напроста ў прыладу.
    • Для архітэктуры Xtensa забяспечана падтрымка адладкавай прылады KCSAN (Kernel Concurrency Sanitizer), прызначанага для дынамічнага выяўлення станаў гонкі ўсярэдзіне ядраў. Таксама дададзена падтрымка спячага рэжыму і супрацэсараў.
    • Для архітэктуры m68k (Motorola 68000) рэалізавана віртуальная машына (сімулятар платформы), заснаваная на эмулятары Android Goldfish.
    • Для архітэктуры AArch64 рэалізавана падтрымка пашырэнняў Armv9-A SME (Scalable Matrix Extension).
    • У падсістэме eBPF дазволена захоўванне тыпізаваных паказальнікаў у map-структурах, а таксама дададзена падтрымка дынамічных паказальнікаў.
    • Прапанаваны новы папераджальны механізм выцяснення памяці, які падтрымлівае кіраванне з прасторы карыстача пры дапамозе файла memory.reclaim. Запіс ліку ў паказаны файл прывядзе да спробы выцяснення адпаведнага ліку байт з набору, злучанага з cgroup.
    • Падвышаная дакладнасць уліку выкарыстання памяці пры сціску дадзеных у падзеле падпампоўкі пры дапамозе механізму zswap.
    • Для архітэктуры RISC-V забяспечана падтрымка запуску 32-разрадных выкананых файлаў на 64-разрадных сістэмах, дададзены рэжым для прывязкі абмяжоўвалых атрыбутаў да старонак памяці (напрыклад, для забароны кэшавання) і рэалізаваная функцыя kexec_file_load().
    • Рэалізацыя падтрымкі 32-разрадых сістэм Armv4T і Armv5 адаптаваная для выкарыстання ва ўніверсальных шматплатформавых зборках ядра, падыходных для розных ARM-сістэм.
  • Віртуалізацыя і бяспека
    • У падсістэме EFI рэалізаваная магчымасць канфідэнцыйнай перадачы гасцявым сістэмам сакрэтнай інфармацыі без яе раскрыцця хост-сістэме. Дадзеныя прадастаўляюцца праз каталог security/coco у securityfs.
    • У рэжыме абароны Lockdown, які абмяжоўвае доступ карыстача root да ядра і блакуе шляхі абыходу UEFI Secure Boot, ухіленая шчыліна, якая дазваляла абыходзіць абарону праз маніпуляцыі з адладчыкам ядра.
    • Уключаны патчы, нацэленыя на павышэнне надзейнасці і прадукцыйнасці генератара псеўдавыпадковых лікаў.
    • Пры зборцы пры дапамозе Clang 15 рэалізавана падтрымка механізму рандомизации структур ядра.
    • У механізм Landlock, які дазваляе абмежаваць узаемадзеянне групы працэсаў з вонкавым асяроддзем, прадстаўлена падтрымка правіл, якія дазваляюць кантраляваць выкананне аперацый перайменавання файлаў.
    • Падсістэма IMA (Integrity Measurement Architecture), прызначаная для праверкі цэласнасці кампанентаў аперацыйнай сістэмы па лічбавых подпісах і хэшах, пераведзена на выкарыстанне модуля fs-verity для верыфікацыі файлаў.
    • Зменена логіка дзеянняў пры адключэнні непрывілеяванага доступу да падсістэмы eBPF – раней адключаліся ўсе каманды, звязаныя з сістэмным выклікам bpf(), а пачынаючы з версіі 5.19 пакінуты доступ да каманд, якія не прыводзяць да стварэння аб'ектаў. Пры падобных паводзінах для загрузкі BPF-праграмы патрабуецца прывілеяваны працэс, але затым непрывілеяваныя працэсы могуць узаемадзейнічаць з гэтай праграмай.
    • Дададзена падтрымка пашырэння AMD SEV-SNP (Secure Nested Paging), які забяспечвае бяспечную працу з укладзенымі табліцамі старонак памяці і які абараняе ад нападаў "undeSErVed" і "SEVerity" на працэсары AMD EPYC, якія дазваляюць абыйсці механізм абароны AMD SEV (Secure Encrypted Virtu.
    • Дададзена падтрымка механізму Intel TDX (Trusted Domain Extensions), які дазваляе блакаваць спробы іншага доступу да зашыфраванай памяці віртуальных машын.
    • У драйвер virtio-blk, выкарыстоўваны для эмуляцыі блокавых прылад, дададзеная падтрымка ўводу/высновы з выкарыстаннем полінга (polling), што па праведзеным тэстах дазволіла скараціць затрымкі прыкладна на 10%.
  • Сеткавая падсістэма
    • У склад уключаная серыя патчаў BIG TCP якія дазваляюць павялічыць максімальны памер пакета TCP-пакета да 4ГБ для аптымізацыі працы высакахуткасных унутраных сетак дата-цэнтраў. Падобнае павелічэнне памеру пакета пры 16-бітным памеры поля ў загалоўку дасягаецца праз рэалізацыю "jumbo"-пакетаў, памер у IP-загалоўку якіх выстаўляецца ў 0, а фактычны памер перадаецца ў асобным 32-разрадным полі ў асобным прымацаваным загалоўку. Пры тэставанні прадукцыйнасці выстаўленне памеру пакета ў 185 КБ дазволіла павялічыць прапускную здольнасць на 50% і значна скараціць затрымкі перадачы дадзеных.
    • Прадоўжана работа па інтэграцыі ў сеткавы стэк сродкаў для адсочвання прычын адкідвання пакетаў (коды reason). Код прычыны перадаецца падчас вызвалення памяці, звязанай з пакетам, і дазваляе ўлічваць такія сітуацыі, як адкідванне пакета з-за памылак запаўнення палёў у загалоўку, выяўленне спуфінгу фільтрам rp_filter, няслушная кантрольная сума, недахоп памяці, спрацоўванне правіл IPSec XFRM, няправільны нумар паслядоўнасці TCP і да т.п.
    • Дададзена падтрымка адкату злучэнняў MPTCP (MultiPath TCP) на выкарыстанне звычайнага TCP, у сітуацыях, калі пэўныя магчымасці MPTCP не могуць быць скарыстаны. MPTCP уяўляе сабой пашырэнні пратаколу TCP для арганізацыі працы TCP-злучэнні з дастаўкай пакетаў адначасова па некалькіх маршрутам праз розныя сеткавыя інтэрфейсы, прывязаныя да розных IP-адрасоў. Дададзены API для кіравання патокамі MPTCP з прасторы карыстальніка.
  • Абсталяванне
    • Дададзена больш за 420 тысяч радкоў кода, звязаных з драйверам amdgpu, з якіх каля 400 тысяч радкоў прыпадае на аўтаматычна згенераваныя загалоўкавыя файлы з дадзенымі для рэгістраў ASIC у драйверы для GPU AMD, а яшчэ 22.5 тысяч радкоў забяспечваюць пачатковую рэалізацыю падтрымкі AMD SoC21. Агульны памер драйвера для GPU AMD перавысіў 4 млн радкоў кода. Акрамя SoC21 у драйверы AMD уключана падтрымка SMU 13.x (System Management Unit), абноўлена падтрымка USB-C і GPUVM, праведзена падрыхтоўка да падтрымкі наступных пакаленняў платформаў RDNA3 (RX 7000) і CDNA (AMD Instinct).
    • У драйверы i915 (Intel) пашыраны магчымасці, звязаныя з кіраваннем энергаспажываннем. Дададзеныя ідэнтыфікатары GPU Intel DG2 (Arc Alchemist), якія выкарыстоўваюцца на наўтбуках, забяспечана пачатковая падтрымка платформы Intel Raptor Lake-P (RPL-P), дададзена інфармацыя аб графічных картах Arctic Sound-M), рэалізаваны ABI для вылічальных рухавічкоў, для карт DG2 дададзена падтрымка фармату Tile4, для сістэм на базе мікраархітэктуры Haswell рэалізавана падтрымка DisplayPort HDR.
    • У драйверы Nouveau ажыццёўлены пераход на выкарыстанне апрацоўшчыка drm_gem_plane_helper_prepare_fb, для некаторых структур і зменных ужыта статычнае вылучэнне памяці. Што да выкарыстання ў Nouveau адчыненых кампаніяй NVIDIA зыходных тэкстаў модуляў ядра, то праца пакуль зводзіцца да выяўлення і ўхіленню памылак. У далейшым апублікаваную прашыўку плануецца выкарыстоўваць для павышэння прадукцыйнасці драйвера.
    • Дададзены драйвер для кантролера NVMe, які выкарыстоўваецца ў кампутарах Apple на базе чыпа M1.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 5.19 – Linux-libre 5.19-gnu, вычышчанага ад элементаў прашывак і драйвераў, утрымоўвальных нявольныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску праведзена чыстка драйвераў для pureLiFi X/XL/XC і TI AMx3 Wkup-M3 IPC. Абноўлены код чысткі блобаў у драйверах і падсістэмах Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu drivers. Рэалізавана апрацоўка devicetree-файлаў Qualcomm AArch64. Дададзена падтрымка новай схемы наймення кампанентаў Sound Open Firmware. Спынена чыстка драйвера ATM Ambassador, выдаленага з ядра. Кіраванне чысткай блобаў у HDCP і Mellanox Core перанесена ў асобныя тэгі kconfig.

Крыніца: opennet.ru

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