Рэліз ядра Linux 6.7

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 6.7. Сярод найболей прыкметных змен: інтэграцыя ФС Bcachefs, спыненне падтрымкі архітэктуры Itanium, магчымасць працы Nouvea з прашыўкамі GSP-R, падтрымка TLS-шыфравання ў NVMe-TCP, магчымасць выкарыстання выключэнняў у BPF, падтрымка futex у io_uring, аптымізацыя прадукцыйнасці планавальніка fq (Fa ), падтрымка пашырэння TCP-AO (TCP Authentication Option) і магчымасць абмежавання сеткавых злучэнняў у механізме абароны Landlock, дададзена кіраванне доступам да user namespace і io_uring праз AppArmor.

У новую версію прынята 18405 выпраўленняў ад 2066 распрацоўшчыкаў, памер патча – 72 МБ (змены закранулі 13467 файлаў, дададзена 906147 радкоў кода, выдалена 341048 радкоў). У мінулым выпуску было 15291 выпраўленняў ад 2058 распрацоўшчыкаў, памер патча – 39 МБ. Каля 45% усіх прадстаўленых у 6.7 змен злучаны з драйверамі прылад, прыкладна 14% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 13% злучана з сеткавым стэкам, 5% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

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

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У склад ядра прыняты код файлавай сістэмы Bcachefs, у якой зроблена спроба дамагчыся ўзроўня прадукцыйнасці, надзейнасці і маштабаванасці, уласцівага XFS, у спалучэнні з элементамі пашыранай функцыянальнасці, наяўнай у Btrfs і ZFS. Напрыклад, Bcachefs падтрымлівае такія магчымасці, як уключэнне ў падзел некалькіх прылад, шматслаёвыя раскладкі назапашвальнікаў (ніжні пласт з часта выкарыстоўванымі дадзенымі на базе хуткіх SSD, а верхні пласт з меней запатрабаванымі дадзенымі з цвёрдых дыскаў), рэплікацыя (RAID 1/10), кэшаванне , празрысты сціск дадзеных (рэжымы LZ4, gzip і ZSTD), зрэзы стану (снапшоты), верыфікацыя цэласнасці па кантрольных сумах, магчымасць захоўвання кодаў карэкцыі памылак Рыда-Саламона (RAID 5/6), захоўванне інфармацыі ў зашыфраваным выглядзе (выкарыстоўваюцца ChaCha20 ). Па прадукцыйнасці Bcachefs апярэджвае Btrfs і іншыя ФС на базе механізму Copy-on-Write, і дэманструе хуткасць працы, блізкую да Ext1305 і XFS.
    • У файлавай сістэме Btrfs з'явіўся спрошчаны рэжым квот, які дазваляе дамагчыся больш высокай прадукцыйнасці за кошт адсочвання экстэнтаў толькі ў тым падраздзеле, у якім яны створаны, што істотна спрашчае вылічэнні і падвышае прадукцыйнасць, але не дазваляе ўлічваць экстэнты, сорамна выкарыстоўваныя ў некалькіх падраздзелах.
    • У Btrfs дададзена новая структура дадзеных "stripe tree", прыдатная для лагічнага мапінгу экстэнтаў у сітуацыях, калі фізічных мапінг не супадае на розных прыладах. Структура пакуль задзейнічана ў рэалізацыях RAID0 і RAID1 для занаваных блокавых прылад. У будучыні дадзеную структуру плануюць выкарыстоўваць і ў RAID больш высокага ўзроўню, што дазволіць вырашыць шэраг наяўных у бягучай рэалізацыі праблем.
    • У файлавай сістэме Ceph рэалізаваная падтрымка мапінга ідэнтыфікатараў карыстачоў прымантаваных файлавых сістэм, ужывальнага для супастаўлення файлаў вызначанага карыстача на прымантаванай чужой частцы з іншым карыстачом у бягучай сістэме.
    • У efivarfs дададзеная магчымасць указання uid і gid пры мантаванні для прадастаўлення магчымасці змены зменных UEFI працэсамі, запушчанымі без мае рацыю root.
    • У exFAT дададзены ioctl-выклікі для чытання і змены атрыбутаў ФС. Дададзена апрацоўка каталогаў нулявога памеру.
    • У F2FS рэалізаваная магчымасць выкарыстання блокаў памерам 16K.
    • Механізм аўтамантавання autofs пераведзены на выкарыстанне новага API мантавання раздзелаў.
    • У OverlayFS прапанаваны опцыі мантавання "lowerdir +" і "datadir +". Дададзена падтрымка ўкладзенага мантавання OverlayFS з xattrs.
    • У XFS праведзена аптымізацыя нагрузкі на CPU у кодзе размеркавання блокаў у рэальным часе. Забяспечана магчымасць адначасовага выканання аперацый чытання і FICLONE.
    • Код EXT2 пераведзены на выкарыстанне фаліянтаў старонак памяці (page folios).
  • Памяць і сістэмныя сэрвісы
    • Спынена падтрымка архітэктуры ia64, якая прымяняецца ў працэсарах Intel Itanium, продажы якіх былі цалкам спынены ў 2021 годзе. Працэсары Itanium былі прадстаўлены кампаніяй Intel у 2001 году, але архітэктура ia64 не вытрымала канкурэнцыі з AMD64, галоўнай выявай з-за больш высокай прадукцыйнасці AMD64 і гладчэйшага пераходу з 32-разрадных працэсараў x86. У выніку, інтарэсы Intel зрушыліся ў карысць працэсараў x86-64, а доляй Itanium заставаліся серверы HP Integrity, прыём заказаў на якія быў спынены тры гады таму. Код для падтрымкі ia64 выдалены з ядра ў асноўным з-за працяглай адсутнасці суправаджэння дадзенай платформы, пры гэтым Лінус Торвальдс выказаў гатоўнасць вярнуць падтрымку ia64 у ядро, але толькі калі знойдзецца суправаджальны, які прадэманструе якаснае суправаджэнне дадзенай платформы па-за асноўным ядром як мінімум на працягу года .
    • Дададзены параметр камандай радка ядра "ia32_emulation", які дазваляе на стадыі загрузкі ўключаць і адключаць падтрымку эмуляцыі 32-разраднага рэжыму ў ядрах, сабраных для архітэктуры x86-64. З практычнага боку новы параметр дазваляе збіраць ядро ​​з падтрымкай сумяшчальнасці з 32-разраднымі прыкладаннямі, але па змаўчанні адключаць гэты рэжым для зніжэння вектара нападу на ядро, бо API для забеспячэння сумяшчальнасці меней пратэставана, чым асноўныя інтэрфейсы ядра.
    • Працягнуты перанос змен з галінкі Rust-for-Linux, злучаных з выкарыстаннем мовы Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра (падтрымка Rust не актыўная па змаўчанні, і не прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра). У новай версіі ажыццёўлены пераход на выкарыстанне выпуску Rust 1.73 і прапанаваны набор прывязак для працы з працоўнымі чэргамі (workqueues).
    • Прадастаўлена магчымасць выкарыстання механізму binfmt_misc для дададзена падтрымкі новых фарматаў выкананых файлаў (напрыклад, для запуску скампіляваных прыкладанняў на Java або Python) усярэдзіне асобных непрывілеяваных прастор імёнаў (namespace).
    • У cgroup-кантролеры cpuset, які дазваляе кіраваць задзейнічаннем ядраў CPU пры выкананні задачы, забяспечаны падзел на лакальнае і выдаленае секцыянаванне (remote partition), якія адрозніваюцца тым, ці з'яўляецца бацькоўскі cgroup карэктнай каранёвай секцыяй ці не. У cpuset таксама дададзены новыя налады "cpuset.cpus.exclusive" і "cpuset.cpus.excluisve.effective" для эксклюзіўнай прывязкі да CPU.
    • У падсістэме BPF рэалізавана падтрымка выключэнняў, якія апрацоўваюцца як неадкладнае выйсце з BPF-праграмы з магчымасцю бяспечнага раскручвання кадраў стэка. Акрамя таго, у BPF-праграмах дазволена выкарыстанні паказальнікаў kptr у прывязцы да CPU.
    • У падсістэму io_uring дададзена падтрымка аперацый з futex-амі, а таксама рэалізаваны новыя аперацыі: IORING_OP_WAITID (асінхронная версія waitid), SOCKET_URING_OP_GETSOCKOPT (варыянт getsockoptand), SOCKET_URING_OP_SETSOCKOPT (варыянт sets чытання, якія не спыняюцца пакуль ёсць дадзеныя ці не запоўнены буфер).
    • Дададзена рэалізацыя легкаважных аднасувязных FIFO-чэргаў, якія патрабуюць спін-блакіроўкі толькі для выдалення з чаргі ў кантэксце працэсу і абыходзячайся без спін-блакіроўкі для атамарнага дадання ў чаргу ў любым кантэксце.
    • Дададзены кальцавы буфер «objpool» з маштабаванай рэалізацыяй высокапрадукцыйнай чаргі для вылучэння і вяртання аб'ектаў.
    • Дададзеная пачатковая частка змен для рэалізацыі новага API futex2, які адрозніваецца больш высокай прадукцыйнасцю на NUMA-сістэмах, падтрымлівае памеры, выдатныя ад 32 біт, і можа выкарыстоўвацца замест мультыплексаванага сістэмнага выкліку futex().
    • Для архітэктур ARM32 і S390x дададзена падтрымка актуальнага набору (cpuv4) інструкцый BPF.
    • Для архітэктуры RISC-V рэалізавана магчымасць выкарыстання даступнага ў Clang 17 рэжыму праверкі Shadow-Call Stack, прызначанага для абароны ад перазапісу адрасу звароту з функцыі ў выпадку перапаўнення буфера ў стэку. Сутнасць абароны ў захаванні пасля перадачы кіравання функцыі адрасу звароту ў асобным "ценявым" стэку і выманні дадзенага адрасу перад вынахадам з функцыі.
    • У механізм зліцця ідэнтычных старонак памяці (KSM: Kernel Samepage Merging) дададзены новы разумны рэжым сканавання старонак памяці, які адсочвае няўдала адсканаваныя старонкі і зніжае інтэнсіўнасць іх паўторнага сканавання. Для ўключэння новага рэжыму дададзена настройка /sys/kernel/mm/ksm/smart_scan.
    • Дададзена новая ioctl-каманда PAGEMAP_SCAN, якая пры выкарыстанні з userfaultfd(), дазваляе вызначаць факты запісу ў вызначаны дыяпазон памяці. Новая магчымасць, напрыклад, можа выкарыстоўвацца ў сістэме для захавання і ўзнаўленні стану працэсаў CRIU ці ў гульнявых антычыт-сістэмах.
    • У зборачнай сістэме пры наяўнасці кампілятара Clang па змаўчанні ўключана зборка прыкладаў выкарыстання падсістэмы perf, напісаных у выглядзе BPF-праграм.
    • Выдалены стары пласт videobuf, які выкарыстоўваўся для кіравання фрэймвбуферамі ў медыяпадсістэме і больш за 10 гадоў таму заменены на новую рэалізацыю videobuf2.
  • Віртуалізацыя і бяспека
    • У падсістэму fscrypt дададзеная магчымасць шыфравання дадзеных блокамі, памерам менш, чым памер блока ў файлавай сістэме. Падобнае можа запатрабавацца для задзейнічання апаратных механізмаў шыфравання, якія падтрымліваюць толькі невялікія блокі (напрыклад, кантролеры UFS, якія падтрымліваюць толькі памер блока 4096, змогуць выкарыстоўвацца з ФС з памерам блока 16K).
    • У падсістэму "iommufd", якая дазваляе кіраваць табліцамі старонак памяці ўводу/высновы IOMMU (I/O Memory-Management Unit) праз файлавыя дэскрыптары з прасторы карыстача, дададзена адсочванне яшчэ не скінутых з кэша дадзеных (dirty) для аперацый DMA, што неабходна для вызначэння памяці з няскінутымі дадзенымі пры міграцыі працэсаў.
    • У механізм Landlock, які дазваляе абмежаваць узаемадзеянне групы працэсаў з вонкавым асяроддзем, дададзеная падтрымка вызначэння правіл кіравання доступам да TCP-сокетаў. Напрыклад, можна стварыць правіла, якое дазваляе толькі зварот па сеткавым порце 443 для ўсталёўкі HTTPS-злучэнняў.
    • У падсістэму AppArmor дададзеная магчымасць кіравання доступам да механізму io_uring і стварэнню прастор імёнаў ідэнтыфікатараў карыстача (user namespaces), што дазваляе выбарачна дазваляць доступ да дадзеных магчымасцяў толькі вызначаным працэсам.
    • Дададзены API атэстацыі віртуальных машын для пацверджання цэласнасці працэсу іх загрузкі.
    • На сістэмах LoongArch рэалізавана падтрымка віртуалізацыі з выкарыстаннем гіпервізара KVM.
    • Пры выкарыстанні гіпервізара KVM на сістэмах RISC-V з'явілася падтрымка пашырэння Smstateen, блакавальнага зварот віртуальнай машыны да рэгістраў CPU, якія відавочна не падтрымліваюцца гіпервізарам. Таксама дададзена падтрымка выкарыстання ў гасцявых сістэмах пашырэння Zicond, які дазваляе выкарыстоўваць некаторыя ўмоўныя цэлалікавыя аперацыі.
    • У выкананых пад кіраваннем KVM гасцявых сістэмах на базе архітэктуры x86 дазволена выкарыстанне да 4096 віртуальных CPU.
  • Сеткавая падсістэма
    • У драйвер NVMe-TCP (NVMe over TCP), які дазваляе звяртацца да NVMe-назапашвальнікам па сетцы (NVM Express over Fabrics), выкарыстаючы пратакол TCP, дададзеная падтрымка шыфравання канала перадачы дадзеных з выкарыстаннем TLS (выкарыстоўваецца KTLS і фонавы працэс у прасторы карыстача tlshd для ўзгаднення злучэння).
    • Праведзена аптымізацыя прадукцыйнасці планавальніка пакетаў fq (Fair Queuing), якая дазволіла падняць прапускную здольнасць на 5% пры вялікіх нагрузках у цесцю tcp_rr (TCP Request / Response) і на 13% пры неабмежаваным струмені UDP-пакетаў.
    • У пратакол TCP дададзена апцыянальная магчымасць выкарыстання часавых пазнак (TCP TS) з мікрасекунднай дакладнасцю (RFC 7323), што дазваляе больш дакладна ацэньваць затрымкі і ствараць больш прасунутыя модулі кіравання перагрузкай. Для ўключэння можна выкарыстоўваць каманду "ip route add 10/8 … features tcp_usec_ts".
    • У TCP-стэк дададзена падтрымка пашырэння TCP-AO (TCP Authentication Option, RFC 5925), якое дае магчымасць верыфікаваць TCP-загалоўкі па MAC-кодам (Message Authentication Code), выкарыстаючы больш сучасныя алгарытмы HMAC-SHA1 і CMAC-AES-128 раней даступнай опцыі TCP-MD5 на базе састарэлага алгарытму MD5.
    • Дададзены новы тып віртуальных сеткавых прылад "netkit", логіка перадачы дадзеных у якіх задаецца пры дапамозе BPF-праграмы.
    • У KSMBD, якая працуе на ўзроўні ядра рэалізацыю SMB-сервера, дададзеная падтрымка пераўтварэння імёнаў файлаў, утрымоўвальных сурагатныя пары складовых знакаў.
    • У NFS палепшана рэалізацыя патокаў з RPC-сэрвісамі. Дададзена падтрымка дэлегавання запісу (для NFSv4.1+). У NFSD дададзена падтрымка netlink-апрацоўшчыка rpc_status. Палепшана падтрымка кліентаў NFSv4.x пры паўторным экспартаванні ў knfsd.
  • Абсталяванне
    • У модуль ядра Nouveau дададзеная пачатковая падтрымка прашывак GSP-RM, якія выкарыстоўваецца ў GPU NVIDIA RTX 20+ для вынасу аперацый ініцыялізацыі і кіраванні GPU на бок асобнага мікракантролера GSP (GPU System Processor). Падтрымка GSP-RM дазваляе драйверу Nouveau працаваць праз зварот да прашыўкі, замест прамога праграмавання аперацый узаемадзеяння з абсталяваннем, што значна спрашчае даданне падтрымкі новых GPU NVIDIA дзякуючы выкарыстанню ўжо гатовых выклікаў для ініцыялізацыі і кіраванні энергаспажываннем.
    • У драйверы AMDGPU рэалізавана падтрымка GC 11.5/7.11, NBIO 14/13.0, SMU 3.5, SMU 6.1/2 OD, DCN XNUMX/XNUMX, VPE XNUMX/XNUMX і DMLXNUMX. Палепшана падтрымка бясшвоўнай загрузкі (без мігацення пры пераключэнні відэарэжыму).
    • У драйверы i915 рэалізавана падтрымка чыпаў Intel Meteor Lake і дададзена пачатковая рэалізацыя Intel LunarLake (Xe 2).
    • Дададзена падтрымка асіметрычных каналаў перадачы, дададзеных у спецыфікацыі USB4 v2 (120/40G).
    • Дададзена падтрымка ARM SoC: Qualcomm Snapdragon 720G (ужываецца ў смартфонах Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (ужываецца ў маршрутызатарах і NAS).
    • Дададзена падтрымка смартфона Fairphone 5 і ARM-плат Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powk.
    • Дададзена падтрымка RISC-V поплаткаў Milk-V Pioneer і Milk-V Duo.
    • Дададзена падтрымка гукавых інтэрфейсаў наўтбукаў HUAWEI, якія пастаўляюцца з CPU AMD. Дададзена падтрымка дадатковых гучнагаварыцеляў, усталёўваных на наўтбукі Dell Oasis 13/14/16. Дададзена падтрымка ўбудаваных гучнагаварыцеляў ASUS K6500ZC. Дададзена падтрымка індыкатара адключэння гуку на наўтбуках HP 255 G8 і G10. Дададзена падтрымка гукавых драйвераў acp6.3. Дададзена падтрымка прафесійных інтэрфейсаў гуказапісу Focusrite Clarett+ 2Pre і 4Pre.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 6.7 – Linux-libre 6.7-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У выпуску 6.7 абноўлены код чысткі блобаў у розных драйверах і падсістэмах, напрыклад, у драйверах amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs і btqca. Выдалены код чысткі драйвераў localtalk і rtl8192u з-за іх выключэння са складу ядра. Прыбраныя лішнія кампаненты чысткі драйвераў xhci-pci, rtl8xxxu і rtw8822b, раней дададзеныя па памылцы. Праведзена чыстка імёнаў блобаў у dts-файлах для архітэктуры Aarch64. Выдалены блобы ў новых драйверах mt7925, tps6598x, aw87390 і aw88399.

Крыніца: opennet.ru

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