Uvoľnenie jadra Linux 5.7

Po dvoch mesiacoch vývoja Linus Torvalds predstavil uvoľnenie jadra Linux 5.7. Medzi najvýraznejšie zmeny patrí: nová implementácia súborového systému exFAT, modul bareudp na vytváranie UDP tunelov, ochrana založená na autentifikácii ukazovateľov pre ARM64, možnosť pripevnenia BPF programov k LSM handlerom, nová implementácia Curve25519, detektor "split-lock", kompatibilita BPF s PREEMPT_RT, odstránenie obmedzenia na 80-znakové dĺžky riadkov v kóde, zohľadnenie teplotných parametrov CPU v plánovači úloh, a možnosť použitia clone() na generovanie procesov v inej cgroup, ako aj ochrana proti zápisu do pamäti pomocou userfaultfd.

Do novej verzie bolo prijatých 15033 opráv od 1961 vývojárov,
veľkosť patchu je 39 MB (zmeny sa dotkli 11590 súborov, pribudlo 570560 riadkov kódu,
bola odstránená 297401 riadkov). Približne 41% všetkých zmien v 5.7
sa týka ovládačov zariadení, približne 16% zmien má
vzťah k aktualizácii kódu, špecifického pre hardvérové architektúry, 13%
vztah k sieťovému stacku, 4% - k súborovým systémom a 4% k interným
pod systémami jadra.

Hlavné novinky:

  • Diskový subsystém, I/O a súborové systémy
    • Bola pridaná nová implementácia ovládača exFAT, založená na aktuálnom kóde "sdfat" (2.x), ktorý vyvíja spoločnosť Samsung pre svoje Android smartfóny. Predtým pridaný ovládač do jadra bol založený na zastaranom kóde Samsung (verzia 1.2.9) a zaostával výkonom za novým ovládačom o približne 10%. Pripomeňme, že pridanie podpory exFAT do jadra sa stalo možným po tom, ako spoločnosť Microsoft publikovala zverejnila špecifikácie a poskytla možnosť bezodplatného používania patentov na exFAT v Linuxe.
    • V Btrfs bola implementovaná nová príkazová ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, ktorá umožňuje odstrániť podúroveň podľa jej identifikátora. Zabezpečená úplná podpora klonovania inline extentov. Rozšírilo sa množstvo bodov na zrušenie operácií redistribúcie, čo umožnilo skrátiť dlhé čakacie doby pri vykonávaní príkazu 'balance cancel'. Urýchlilo sa určenie spätných odkazov na extentov (napríklad čas vykonania testovacieho scénára sa znížil z hodiny na niekoľko minút). Bola pridaná možnosť pripevniť k každej inode stromu extentov súboru. Prepracovaný bol systém zamykania, ktorý sa používa pri zápise do podúrovní a pri výnimke NOCOW. Zlepšila sa efektívnosť vykonávania fsync pre rozsahy.
    • V XFS bola vylepšená kontrola metadát a vykonávanie fsck pre aktívne oddiely. Navrhnutá knižnica na prestavbu štruktúr btree, ktorá sa v budúcnosti využije pri prepracovaní xfs_repair a implementácii možnosti obnovenia bez odmontovania oddielu.
    • V CIFS bola pridaná experimentálna podpora umiestnenia oddielu pre swap v SMB3 úložiskách. Implementované POSIX rozšírenia v readdir, definované v špecifikácii SMB3.1.1. Zlepšený výkon zápisu pre stránky veľkosti 64KB pri aktivovaní režimu cache=strict a použití verzií protokolu 2.1+.
    • FS EXT4 bola prevedená z bmap a iopoll na použitie iomap.
    • V F2FS bola implementovaná voliteľná podpora kompresie dát s použitím algoritmu zstd. Predvolene je pre kompresiu použitý algoritmus LZ4. Pridaná podpora príkazu "chattr -c commit". Zabezpečené zobrazenie času montovania. Pridané ioctl F2FS_IOC_GET_COMPRESS_BLOCKS na získanie informácií o počte komprimovaných blokov. Pridané údaje o kompresii, ktoré sú zobrazované prostredníctvom statx.
    • Vo súborovom systéme Ceph bola pridaná možnosť lokálneho vykonávania operácií vytvárania a odstraňovania (unlink) súboru bez čakania na odpoveď zo servera (práca v asynchrónnom režime). Táto zmena napríklad umožňuje výrazne zvýšiť výkon pri práci s utilitou rsync.
    • V OVERLAYFS bola pridaná možnosť použitia virtiofs ako FS horného levelu.
    • Prepis kódu prechádzania ciest v VFS, prepracovaný kód na analýzu symbolických odkazov a unifikované prechádzanie bodmi montovania.
    • V subsystéme scsi majú nepriviligovaní používatelia je povolené vykonávanie príkazov ZBC.
    • V dm_writecache bola implementovaná možnosť postupného čistenia cache na základe parametra max_age, ktorý určuje maximálny čas životnosti bloku.
    • V dm_integrity bola pridaná podpora operácie "discard".
    • V null_blk bola pridaná podpora pre substitúciu chýb pre simuláciu porúch počas testovania.
    • Pridaná možnosť odosielania udev oznámení o zmene veľkosti blokového zariadenia.
  • Sieťový subsystém
    • V Netfilter boli zahrnuté zmeny, ktoré výrazne urýchľujú spracovanie veľkých zoznamov zhodnocovania (nftables set), v ktorých sa vyžaduje overenie kombinácie podsietí, sieťových portov, protokolu a MAC adries.
      Optimalizácie boli pridané V module nft_set_pipapo (PIle PAcket POlicies), ktorý rieši úlohu zodpovedania obsahu paketu s pravidlami filtrovania v rámci akýchkoľvek rozsahov stavových polí, ako sú rozsahy IP a sieťových portov (nft_set_rbtree a nft_set_hash manipulujú s porovnávaním intervalov a priamym odrazom hodnôt). Vektorovaná pomocou 256-bitových inštrukcií AVX2 verzia pipapo na systéme s procesorom AMD Epyc 7402 ukázala nárast výkonu o 420 % pri analýze 30 tisíc záznamov, vrátane kombinácií port-protokol. Nárast pri zodpovedaní kombinácie z podsiete a čísla portu pri analýze 1000 záznamov dosiahol 87 % pre IPv4 a 128 % pre IPv6.
    • Pridané Modul bareudp, ktorý umožňuje enkapsuláciu rôznych L3 protokolov, ako sú MPLS, IP a NSH do UDP tunela.
    • Pokračuje integrácia komponentov MPTCP (MultiPath TCP), rozšírenia protokolu TCP pre organizovanie TCP spojenia s doručovaním paketov súčasne po viacerých trasách cez rôzne sieťové rozhrania viazané na rôzne IP adresy.
    • Pridaná Podpora mechanizmov hardvérovej akcelerácie enkapsulácie Ethernet rámcov v 802.11 (Wi-Fi).
    • Pri presune zariadenia z jedného menného priestoru sieťového subsystému (network namespace) do druhého sa zabezpečila korekcia prístupových práv a vlastníka príslušných súborov v sysfs.
    • Poskytla sa možnosť používania flagu SO_BINDTODEVICE používateľmi, ktorí nemajú práva root.
    • Schválená tretia časť patchov, ktoré prevádzajú nástroje ethtool z ioctl() na používanie rozhrania netlink. Nové rozhranie zjednodušuje pridávanie rozšírení, zlepšuje spracovanie chýb, umožňuje zasielanie oznámení pri zmene stavu, zjednodušuje interakciu medzi jadrom a používateľským priestorom a znižuje počet synchronizovaných pomenovaných zoznamov.
    • Pridaná možnosť používania špeciálnych hardvérových akcelerátorov na vykonávanie operácií sledovania spojení.
    • V netfilter bol pridaný hook na pripojenie klasifikátorov odchádzajúcich paketov (egress), ktorý doplnil predtým existujúci hook pre prichádzajúce pakety (ingress).
  • Virtualizácia a bezpečnosť
    • Pridaná hardvérová implementácia autenticity ukazovateľov (Pointer Authentication), využívajúca špecializované inštrukcie CPU ARM64 na ochranu proti útokom, ktoré využívajú techniky návratovo orientovaného programovania (ROP), pri ktorých sa útočník nesnaží umiestniť svoj kód do pamäte, ale operuje s už existujúcimi v načítaných knižniciach časťami strojových inštrukcií, končiacich príkazom na návrat riadenia. Ochrana spočíva v používaní digitálnych podpisov na overovanie návratových adries na úrovni jadra. Podpis sa ukladá v nepoužívaných horných bitoch samotného ukazovateľa. Na rozdiel od softvérových realizácií tvorba a overenie digitálnych podpisov sa vykonáva pomocou špecializovaných inštrukcií CPU.
    • Pridaná možnosť ochrany oblasti pamäte pred zápisom pomocou systémového volania userfaultfd(), ktoré je určené na spracovanie page faults (prístup k neprideleným stránkam pamäte) v užívateľskom priestore. Myšlienka spočíva v tom, aby sa použilo userfaultfd() aj na sledovanie porušení prístupu k stránkam označeným ako chránené pred zápisom a volanie obsluhy, ktorá môže reagovať na takéto pokusy o zápis (napríklad na spracovanie zmien pri vytváraní live-snapshotov bežiacich procesov, fixáciu stavu pri ukladaní výpisov pamäte na disk, realizáciu zdieľanej pamäte, sledovanie zmien v pamäti). Funkcionalita je ekvivalentná použitiu mprotect() v spojení s obslužným signálom SIGSEGV, ale funguje výrazne rýchlejšie.
    • V SELinux bol vyhlásený za zastaraný parameter „checkreqprot“, ktorý umožňuje vypnúť kontrolu ochrany pamäte pri spracovaní pravidiel (dovoľoval používanie vykonateľných oblastí pamäte bez ohľadu na predpisy stanovené v pravidlách). Symbolickým odkazom kernfs je povolené zdedenie kontextu rodičovských adresárov.
    • Súčasťou je zapnutý modul KRSI, ktorý umožňuje pripojiť BPF programy k akýmkoľvek LSM hákom v jadre. Zmena umožňuje vytvárať LSM moduly (Linux Security Module) vo forme BPF programov na riešenie úloh auditu a mandátnej kontroly prístupu.
    • Bola vykonaná optimalizácia výkonu /dev/random prostredníctvom dávkového prenášania hodnôt CRNG namiesto samostatného volania inštrukcií RNG. Bola vylepšená práca getrandom a /dev/random na systémoch ARM64, poskytujúcich inštrukcie RNG.
    • Realizácia eliptickej krivky Curve25519 bola nahradená na variant z knižnice HACL, pre ktorý bola poskytnutá matematické dôkazy formálnej verifikácie spoľahlivosti.
    • Pridané mechanizmus informovania o voľných stránkach pamäte. Pomocou tohto mechanizmu môžu hosťovské systémy prenášať hostiteľskému systému informácie o stránkach, ktoré sa už nepoužívajú, a dané stránky môže hostiteľ vrátiť späť.
    • Vo vfio/pci bola pridaná podpora SR-IOV (Single-Root I/O Virtualization).
  • Pamäť a systémové služby
    • Od 80 do 100 znakov bolo zvýšené obmedzenie maximálnej dĺžky riadku v pôvodných textoch. Pri tom sa vývojárom stále odporúča držať sa v medziach 80 znakov na riadok, ale to už nie je striktne záväzné. Okrem toho prekročenie limitu na veľkosť riadku teraz vyvolá varovanie pri zostavovaní, iba ak bola utilita checkpatch spustená s voľbou "--strict". Zmena umožní neodvádzať vývojárov od manipulácie medzi medzerami a pocítiť väčšiu voľnosť pri zarovnávaní kódu, ako aj zabráni nadmernému rozdeľovaniu riadkov, ktoré bráni vnímaniu kódu a hľadaniu.
    • Pridaná podpora zmiešaného režimu zavádzania EFI, ktorý umožňuje bez použitia špecializovaného zavádzača načítať 64-bitové jadro z 32-bitového firmvéru, ktorý sa vykonáva na 64-bitovom CPU.
    • Povolene systém na identifikáciu a ladenie rozdelených zámkov ("split lock"), ktoré vznikajú pri prístupe k nevyrovnaným údajom v pamäti, pretože pri vykonávaní atomárnej inštrukcie údaje presahujú dva cache riadky CPU. Takéto zámky vedú k výnimočnému poklesu výkonu (o 1000 cyklov pomalšie ako atomárna operácia s údajmi, ktoré sa nachádzajú v jednom cache riadku). V závislosti od zavádzacieho parametra "split_lock_detect" môže jadro dynamicky identifikovať takéto zámky a vydať varovania alebo poslať signál SIGBUS aplikácii, ktorá zámok vyvolala.
    • V plánovači úloh je zabezpečené sledovanie ukazovateľov teploty (Thermal Pressure) a zavedené sledovanie prehriatia pri umiestnení úloh. Na základe poskytovanej štatistiky môže spracovateľ teploty (thermal governor) upravovať maximálnu frekvenciu CPU pri prehriatí, a plánovač úloh teraz zohľadňuje zníženie výpočtového výkonu v dôsledku takéhoto zníženia frekvencie pri plánovaní spustenia úloh (predtým plánovač reagoval na zmenu frekvencie s určitou latenciou, nejaký čas prijímajúc rozhodnutia na základe prenadstavených predpokladov o dostupných výpočtových zdrojoch).
    • V plánovači úloh sú zapojené invariantné ukazovatele sledovania zaťaženia, ktoré umožňujú správne oceniť zaťaženie, nezávisle od aktuálnej frekvencie práce CPU. Zmena umožňuje presnejšie predpovedať správanie úloh v podmienkach dynamickej zmeny napätia a frekvencie CPU. Napríklad úloha, ktorá spotrebovávala 1/3 prostriedkov CPU pri frekvencii 1000 MHz, bude spotrebovávať 2/3 prostriedkov pri znížení frekvencie na 500 MHz, čo predtým vytváralo falošný predpoklad o práci na plnú kapacitu (t.j. úlohy pre plánovač sa zdali byť väčšími len vďaka zníženiu frekvencie, čo viedlo k prijímaniu nesprávnych rozhodnutí v schedutil cpufreq governor).
    • Ovládač Intel P-state, zodpovedný za výber režimov výkonnosti, bol prevedený na používanie schedutil.
    • Realizovaná možnosť využitia subsystému BPF pri práci jadra v reálnom čase (PREEMPT_RT). Predtým sa pri zapnutí PREEMPT_RT predpisovalo vypnutie BPF.
    • Pridaný nový typ BPF-programov — BPF_MODIFY_RETURN, ktoré môžu byť pripojené k funkcii v jadre a meniť návratovú hodnotu danej funkcie.
    • Pridaná možnosť využitia systémového volania clone3() na vytvorenie procesu v cgroup, odlišnom od rodičovského cgroup, čo umožňuje rodičovskému procesu uplatniť obmedzenia a zapnúť účtovanie ihneď po vzniku nového procesu alebo vlákna. Napríklad správcovský manažér môže priamo prideľovať nové služby do samostatných cgroup, a nové procesy pri umiestnení do 'zmrazených' cgroup budú okamžite zastavené.
    • v Kbuild bola pridaná podpora premennej prostredia 'LLVM=1' na prechod na nástroje Clang/LLVM pri kompilácii jadra. Zvýšené požiadavky na verziu binutils (2.23).
    • Do debugfs bola pridaná sekcia /sys/kernel/debug/kunit/ s výsledkami testov kunit.
    • Bol pridelený parameter načítania jadra pm_debug_messages (analog /sys/power/pm_debug_messages), ktorý zahŕňa výstup ladenia o práci systémového riadenia napájania (užitočné pri ladení problémov so spánkovým a čakacím režimom).
    • V rozhraní asynchrónneho vstupu/výstupu io_uring bola pridaná podpora splice() a atomárne vyberanie bufferov.
    • Zlepšené profilovanie cgroup pomocou nástroja perf. Predtým mohol perf profilovať úlohy iba v určitej cgroup a nedokázal zistiť, do ktorej cgroup patrí aktuálna vzorka. Teraz perf získava informácie o cgroup pre každú vzorku, čo umožňuje profilovať viac ako jednu cgroup a aplikovať triedenie podľa
      cgroup v správach.
    • V cgroupfs, pseudofilesysteme pre správu cgroups, bola pridana podpora rozšírených atribútov (xattrs), pomocou ktorých je možné napríklad nechať dodatočné informácie pre spracovateľov v priestore používateľa.
    • V cgroup memory controller bol pridanýbola pridaná podpora rekurzívnej ochrany hodnoty „memory.low“, ktorá reguluje minimálne množstvo operačnej pamäte poskytovanej členom skupiny. Pri montovaní hierarchie cgroup s voľbou „memory_recursiveprot“ sa hodnota „memory.low“, ktorá je nastavená pre dolné uzly, automaticky rozdeľuje pre všetky dcérske uzly.
    • Pridané framework Uacce (Unified/User-space-access-intended Accelerator Framework) na zdieľané virtuálne adresy (SVA, Shared Virtual Addressing) medzi CPU a periférnymi zariadeniami, ktorý umožňuje hardvérovým akcelerátorom prístup k štruktúram dát v hlavnom CPU.
  • Hardvérové architektúry
    • Pre architektúru ARM bola implementovaná funkcia horúceho vyňatia pamäte.
    • Pre architektúru RISC-V bola pridaná podpora horúceho pripojenia a vyňatia CPU (CPU hotplug). Pre 32-bitový RISC-V bol implementovaný eBPF JIT.
    • Bola odstránená možnosť používania 32-bitových ARM systémov na spúšťanie hosťujúcich prostredí KVM.
    • Odstránená bola „fiktívna“ implementácia NUMA pre architektúru s390, pre ktorú neboli nájdené scenáre použitia, ktoré by umožnili zvýšenie výkonu.
    • Pre ARM64 bola pridaná podpora rozšírenia AMU (Activity Monitors Unit), definovaného v ARMv8.4, poskytujúceho počítače výkonu, ktoré sú použité na výpočet koeficientov korekcie škálovania frekvencie v plánovači úloh.
  • Zariadenie
    • Pridaná podpora zariadení vDPA, ktoré používajú dátový kanál zodpovedajúci špecifikáciám virtio. vDPA zariadenia môžu byť buď fyzicky pripojené hardvérové zariadenia, alebo emulované softvérovo virtuálne zariadenia.
    • V subsystéme GPIO sa objavila nový príkaz ioctl() na sledovanie zmien, ktorý umožňuje informovať proces o zmene stavu akéhokoľvek riadku GPIO. Ako príklad použitia nového príkazu navrhnutá nástroj gpio-watch.
    • V DRM ovládači i915 pre grafické karty Intel je zahrnutá predvolene podporuje čipy Tigerlake („Gen12“) a bola pridaná základná podpora riadenia podsvietenia OLED. Vylepšená podpora čipov Ice Lake, Elkhart Lake, Baytrail a Haswell.
    • V ovládači amdgpu bola pridaná možnosť nahrávania firmvéru do čipu USBC pre ASIC. Vylepšená podpora čipov AMD Ryzen 4000 „Renoir“. Pridaná podpora riadenia OLED panelov. Zabezpečené zobrazenie stavu firmvéru v debugfs.
    • V DRM ovládači vmwgfx pre systémy virtualizácie VMware bola pridaná možnosť používania OpenGL 4 v hosťujúcich systémoch (predtým sa podporovalo OpenGL 3.3).
    • Bol pridaný nový DRM ovládač tidss pre zobrazovací systém platformy TI Keystone.
    • Pridané ovládače pre LCD panely: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • V systéme riadenia napájania bola pridaná podpora platformy Intel Jasper Lake (JSL) založenej na Atome.
    • Pridaná podpora laptopu Pinebook Pro založeného na Rockchip RK3399, tabletu Pine64 PineTab a smartfónu PinePhone založeného na Allwinner A64.
    • Pridaná podpora nových zvukových kodekov a čipov:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Pridaná podpora ARM platforiem a platforiem Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 variantov dosky i.MX6 TechNexion Pico, tri nové varianty Toradex Colibri, Samsung S7710 Galaxy Xcover 2 založeného na ST-Ericsson u8500, DH Electronics DHCOM SoM a PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster