Ядро Linux 5.14

Ядро Linux 5.14

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў выпуск ядра Linux 5.14. Сярод найболей прыкметных змен: новыя сістэмныя выклікі quotactl_fd() і memfd_secret(), выдаленне драйвераў ide і raw, новы кантролер прыярытэтаў уводу/высновы для cgroup, рэжым планавання задач SCHED_CORE, інфраструктура для стварэння загрузнікаў верыфікаваных BPF-праграм.

У новую версію прынята 15883 выпраўленняў ад 2002 распрацоўшчыкаў, памер патча – 69 МБ (змены закранулі 12580 файлаў, дададзена 861501 радкоў кода, выдалена 321654 радкоў). Каля 47% усіх прадстаўленых у 5.14 змен злучаны з драйверамі прылад, прыкладна 14% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 13% злучана з сеткавым стэкам, 3% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

Асноўныя навіны:

  • дыскавая падсістэма, увод/вывад і файлавыя сістэмы:
    • для cgroup рэалізаваны новы кантролер прыярытэтызацыі ўводу/высновы — rq-qos, які можа кіраваць прыярытэтам апрацоўкі запытаў да блокавых прылад, якія генерыруюцца ўдзельнікамі кожнай cgroup. Падтрымка новага кантролера прыярытэту дададзеная ў планавальнік уводу/высновы mq-deadline;
    • у файлавай сістэме ext4 рэалізавана новая ioctl-каманда EXT4_IOC_CHECKPOINT, якая прымусова скідае на дыск усе якія чакаюць транзакцыі з часопіса і звязаныя з імі буферы, а таксама перазапісвае выкарыстоўваную часопісам вобласць у сховішча. Змена падрыхтавана ў рамках ініцыятывы па прадухіленні ўцечак інфармацыі з файлавых сістэм;
    • у Btrfs унесены аптымізацыі прадукцыйнасці: за рахунак выключэння лішняга часопісавання пашыраных атрыбутаў падчас выкананні fsync прадукцыйнасць інтэнсіўных аперацый з пашыранымі атрыбутамі павялічылася да 17%. Акрамя таго, пры выкананні аперацый ўсячэння, якія не закранаюць экстэнты, адключана выкананне поўнай сінхранізацыі, што скараціла час выканання аперацыі на 12 працэнтаў. У sysfs дададзена налада для абмежавання прапускной здольнасці ўводу/высновы пры праверцы ФС. Дададзеныя ioctl-выклікі для адмены аперацый змены памеру і выдаленні прылады;
    • у XFS перапрацавана рэалізацыя буфернага кэша, які перакладзены на вылучэнне старонак памяці ў пакетным рэжыме. Падвышаная эфектыўнасць працы кэша;
    • у F2FS дададзена опцыя для працы ў рэжыме толькі для чытання і рэалізаваны рэжым кэшавання сціснутых блокаў (compress_cache) для падвышэння прадукцыйнасці выпадковага чытання. Рэалізавана падтрымка сціску файлаў, адлюстраваных у памяць пры дапамозе аперацыі mmap(). Для выбарачнага адключэння сціску файлаў па масцы прапанавана новая опцыя мантавання nocompress;
    • у драйверы exFAT праведзена праца па паляпшэнні сумяшчальнасці са сховішчамі некаторых лічбавых камер;
    • дададзены сістэмны выклік quotactl_fd(), які дазваляе кіраваць квотамі не праз файл спецыяльнай прылады, а праз указанне файлавага дэскрыптара, звязанага з файлавай сістэмай для якой прымяняецца квота;
    • з ядра выдалены старыя драйверы для блокавых прылад з інтэрфейсам IDE, на змену якім ужо даўно прыйшла падсістэма libata. Падтрымка старых прылад захавана ў поўным аб'ёме, змены датычацца толькі магчымасці выкарыстання старых драйвераў, пры выкарыстанні якіх назапашвальнікі іменаваліся /dev/hd*, а не /dev/sd*;
    • з ядра выдалены драйвер «raw», які прадстаўляе небуферызаваны доступ да блокавых прылад праз інтэрфейс /dev/raw. Указаная функцыянальнасць даўно рэалізуецца ў дадатках пры дапамозе сцяга O_DIRECT;
  • памяць і сістэмныя службы:
    • у планавальніку задач рэалізаваны новы рэжым планавання SCHED_CORE, які дазваляе кіраваць тым, якія працэсы могуць сумесна выканаюцца на адным ядры CPU. Кожнаму працэсу можа быць прызначаны cookie-ідэнтыфікатар, які вызначае вобласць даверу паміж працэсамі (напрыклад, прыналежнасць аднаму карыстачу ці кантэйнеру). Пры арганізацыі выканання кода планавальнік можа забяспечыць сумеснае выкарыстанне аднаго ядра CPU толькі для працэсаў, злучаных з адным уладальнікам, што можа выкарыстоўвацца для блакавання некаторых нападаў класа Spectre за кошт прадухілення выканання ў адным струмені SMT (Hyper Threading) годных і не годных даверу задач;
    • для механізму cgroup рэалізаваная падтрымка аперацыі kill, якая дазваляе зараз завяршыць усе прывязаныя да групы працэсы (адправіць SIGKILL), праз запіс "1" у віртуальны файл cgroup.kill;
    • пашыраныя магчымасці, злучаныя з рэагаваннем на выяўленне расшчэпленых блакаванняў («split lock»), якія ўзнікаюць пры доступе да нявыраўнаваных дадзеных у памяці з-за таго, што пры выкананні атамарнай інструкцыі дадзеныя перасякаюць дзве лініі кэша CPU. Падобныя блакаванні прыводзяць да значнага падзення прадукцыйнасці, таму раней зацятам давалася магчымасць прымусовага завяршэння прыкладання, які выклікаў блакаванне. У новым выпуску дададзены параметр каманднага радка ядра "split_lock_detect=ratelimit:N", які дазваляе вызначыць агульнасістэмны ліміт інтэнсіўнасці аперацый блакавання ў секунду, пасля перавышэння якога любы працэс, які стаў крыніцай расшчэпленай блакавання, замест завяршэння будзе прымусова спынены на 20 мс;
    • у cgroup-кантролеры прапускной здольнасці CFS (CFS bandwidth controller), вызначальным як шмат працэсарнага часу можна вылучыць кожнай cgroup, рэалізаваная магчымасць вызначэння лімітаў, абмежаваных зададзеным часам дзеяння, што дазваляе лепш рэгуляваць нагрузкі, адчувальныя да затрымак. Напрыклад, усталёўка значэння cpu.cfs_quota_us у 50000 і cpu.cfs_period_us у 100000 дасць магчымасць групе працэсаў кожныя 100ms марнаваць 50ms часу CPU;
    • дададзена пачатковая інфраструктура для стварэння загрузнікаў BPF-праграм, якая ў далейшым дазволіць дазволіць загрузку толькі BPF-праграм, падпісаных годным даверу лічбавым ключом;
    • дададзена новая futex-аперацыя FUTEX_LOCK_PI2, якая выкарыстоўвае манатонны таймер для разліку таймаўту, які ўлічвае час праведзены сістэмай у спячым рэжыме;
    • для архітэктуры RISC-V рэалізавана падтрымка вялікіх старонак памяці (Transparent Huge-Pages) і магчымасць ужывання механізму KFENCE для выяўлення памылак пры рабоце з памяццю;
    • у сістэмны выклік madvise(), які прадстаўляе сродкі для аптымізацыі кіравання памяццю працэсу, дададзены сцягі MADV_POPULATE_READ і MADV_POPULATE_WRITE для генерацыі "page fault" ва ўсіх старонках памяці, адлюстраваных для аперацый чытання або запісу, без выканання фактычнага чытання або запісу (prefault). Ужыванне сцягоў можа быць карысным для зніжэння затрымак падчас працы праграмы, дзякуючы папераджальнаму выкананню апрацоўшчыка «page fault» зараз для ўсіх нявыдзеленых старонак, не чакаючы фактычнага звароту да іх;
    • у сістэме unit-тэставанні kunit дададзена падтрымка запуску тэстаў у асяроддзі QEMU;
    • дададзены новыя трасіроўшчыкі: «osnoise»для адсочвання затрымак у прыкладаннях, выкліканых апрацоўкай перапыненняў, і «timerlat» для вываду дэталёвай інфармацыі аб затрымках пры абуджэннях па сігнале таймера;
  • віртуалізацыя і бяспека:
    • дададзены сістэмны выклік memfd_secret(), які дазваляе стварыць прыватную вобласць памяці ў ізаляванай прасторы адрасоў, бачную толькі працэсу-ўладальніку, неадлюстроўваную ў іншыя працэсы і наўпрост недаступную ядру;
    • у сістэме фільтрацыі сістэмных выклікаў seccomp пры вынасе апрацоўшчыкаў блакавання ў прастору карыстальніка прадстаўлена магчымасць выкарыстання адной атамарнай аперацыі для стварэння файлавага дэскрыптара для ізаляванай задачы і яго вяртання пры апрацоўцы сістэмнага выкліку. Прапанаваная аперацыя вырашае праблему з перапыненнем апрацоўшчыка ў прасторы карыстальніка пры паступленні сігналу;
    • дададзены новы механізм для кіравання абмежаваннем рэсурсаў у прасторы імёнаў ідэнтыфікатараў карыстачоў, які прывязвае асобныя лічыльнікі rlimit да карыстача ў «user namespace». Змена вырашае праблему з ужываннем агульных лічыльнікаў рэсурсаў пры запуску адным карыстачом працэсаў у розных кантэйнерах;
    • у гіпервізор KVM для сістэм ARM64 дададзена магчымасць выкарыстання ў гасцявых сістэмах пашырэння MTE (MemTag, Memory Tagging Extension), які дазваляе прывязаць тэгі да кожнай аперацыі вылучэння памяці і арганізаваць праверку карэктнасці выкарыстання паказальнікаў для блакавання эксплуатацыі ўразлівасцяў, выкліканых зваротам да ўжо вызваленых блокаў. буфера, зваротамі да ініцыялізацыі і выкарыстаннем па-за бягучым кантэкстам;
    • якія прадстаўляюцца платформай ARM64 сродкі для аўтэнтыфікацыі паказальнікаў (Pointer Authentication) зараз могуць быць асобна настроены для ядра і прасторы карыстача. Тэхналогія дазваляе выкарыстоўваць спецыялізаваныя інструкцыі ARM64 для праверкі адрасоў звароту пры дапамозе лічбавых подпісаў, якія захоўваюцца ў невыкарыстоўваных верхніх бітах самога паказальніка;
    • у User-mode Linux дададзена падтрымка выкарыстання драйвераў да PCI-прыладам з віртуальнай шынай PCI, якая рэалізуецца драйверам PCI-over-virtio;
    • для сістэм x86 дададзеная падтрымка паравіртуалізаванай прылады virtio-iommu, які дазваляе адпраўляць IOMMU-запыты, такія як ATTACH, DETACH, MAP і UNMAP, па-над транспартам virtio без эмуляцыі табліц старонак памяці;
    • для CPU Intel, пачынальна з сямейства Skylake і заканчваючы Coffee Lake, па змаўчанні адключана выкарыстанне пашырэнняў Intel TSX (Transactional Synchronization Extensions), якія прадстаўляюць сродкі для павышэння прадукцыйнасці шматструменных прыкладанняў за кошт дынамічнага выключэння лішніх аперацый сінхранізацыі. Пашырэнні адключаныя з-за магчымасці здзяйснення нападаў Zombieload, якія маніпулююць уцечкай звестак па іншых каналах, якая ўзнікае пры працы механізму асінхроннага перапынення аперацый (TAA, TSX Asynchronous Abort);
  • сеткавая падсістэма:
    • працягнута інтэграцыя ў ядро ​​MPTCP (MultiPath TCP), пашырэнні пратаколу TCP для арганізацыі працы TCP-злучэнні з дастаўкай пакетаў адначасова па некалькіх маршрутам праз розныя сеткавыя інтэрфейсы, прывязаныя да розных IP-адрасоў. У новым выпуску дададзены механізм для задання ўласных палітык хэшавання трафіку для IPv4 і IPv6 (multipath hash policy), якія даюць магчымасць з прасторы карыстача вызначаць, якія з палёў у пакетах, у тым ліку інкапсуляваных, будуць скарыстаны пры вылічэнні хэша, вызначальнага выбар шляху для пакета;
    • у віртуальны транспарт virtio дададзена падтрымка сокетаў SOCK_SEQPACKET (упарадкаваная і надзейная перадача датаграм);
    • пашыраны магчымасці механізму сокетаў SO_REUSEPORT, які дазваляе адразу некалькім слухаючым сокетам падлучыцца да аднаго порце для прыёму злучэнняў з размеркаваннем паступаючых запытаў адначасова па ўсіх падлучаных праз SO_REUSEPORT сокетах, што спрашчае стварэнне шматструменных серверных прыкладанняў. У новай версіі дададзены сродкі для перадачы кіравання іншаму сокету ў выпадку збою пры апрацоўцы запыту першапачаткова абраным сокетам (вырашае праблему са стратай асобных злучэнняў пры перазапуску сэрвісаў);
  • абсталяванне:
    • у драйверы amdgpu рэалізавана падтрымка новых серый GPU AMD Radeon RX 6000, якія развіваюцца пад кодавымі імёнамі "Beige Goby" (Navi 24) і "Yellow Carp", а таксама палепшана падтрымка GPU Aldebaran (gfx90a) і APU Van Gogh. Дададзена магчымасць адначасовай працы з некалькімі панэлямі eDP. Для APU Renoir рэалізавана падтрымка працы з шыфраванымі буферамі ў відэапамяці (TMZ, Trusted Memory Zone). Дададзена падтрымка гарачага вымання графічных карт (hot-unplug). Для GPU Radeon RX 6000 (Navi 2x) і старых GPU AMD уключана па змаўчанні падтрымка механізму энергазберажэння ASPM (Active State Power Management), які раней быў актываваны толькі для GPU Navi 1x, Vega і Polaris;
    • для чыпаў AMD дададзеная падтрымка падзялянай віртуальнай памяці (SVM, shared virtual memory) на базе падсістэмы HMM (Heterogeneous memory management), якая дазваляе выкарыстоўваць прылады з уласнымі блокамі кіравання памяццю (MMU, memory management unit), якія могуць атрымліваць доступ да асноўнай памяці. У тым ліку пры дапамозе HMM можна арганізаваць сумесную адрасную прастору паміж GPU і CPU, у якім GPU можа атрымаць доступ да асноўнай памяці працэсу;
    • дададзена пачатковая падтрымка тэхналогіі AMD Smart Shift, дынамічна якая змяняе параметры энергаспажывання CPU і GPU на наўтбуках з чыпсэтам і відэакартай AMD для фарсіравання прадукцыйнасці пры гульнях, рэдагаванні відэа і 3D-рэндэрынгу;
    • у драйверы i915 для відэакарт Intel ўключаная падтрымка чыпаў Intel Alderlake P;
    • дададзены драйвер drm/hyperv для віртуальнага графічнага адаптара Hyper-V;
    • дададзены графічны драйвер simpledrm, які выкарыстоўвае для вываду фрэймбуфер EFI-GOP або VESA, які прадстаўляецца UEFI-прашыўкай або BIOS. Асноўным прызначэннем драйвера з'яўляецца прадастаўленне магчымасці графічнага вываду на пачатковых стадыях загрузкі, да таго як стане магчымым выкарыстанне паўнавартаснага DRM-драйвера. Драйвер таксама можа выкарыстоўвацца як часовае рашэнне для абсталявання, для якога пакуль адсутнічаюць родныя DRM-драйверы;
    • дададзена падтрымка кампутара-манаблока Raspberry Pi 400;
    • дададзены драйвер dell-wmi-privacy для падтрымкі пастаўляюцца ў наўтбуках Dell апаратных выключальнікаў камеры і мікрафона;
    • для наўтбукаў Lenovo дададзены WMI-інтэрфейс для змены параметраў BIOS праз sysfs /sys/class/firmware-attributes/;
    • пашырана падтрымка прылад з інтэрфейсам USB4;
    • дададзена падтрымка гукавых карт і кодэкаў AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 і Texas Instruments TAS2505. Палепшана падтрымка гуку на наўтбуках HP і ASUS. Дададзены патчы для зніжэння затрымак перад пачаткам прайгравання гуку на прыладах з інтэрфейсам USB.

Крыніца - opennet.ru.

Крыніца: linux.org.ru