Vydanie jadra Linux 5.7

Po dvoch mesiacoch vývoja Linus Torvalds predložené vydanie jadra Linux 5.7. Medzi najvýznamnejšie zmeny patrí nová implementácia súborového systému exFAT, modul bareudp na vytváranie tunelov UDP, ochrana založená na autentifikácii ukazovateľa pre ARM64, možnosť pripojiť programy BPF k obslužným programom LSM, nová implementácia Curve25519, split- detektor zámkov, kompatibilita BPF s PREEMPT_RT, odstránenie limitu na veľkosť riadku 80 znakov v kóde, zohľadnenie indikátorov teploty CPU v plánovači úloh, možnosť použiť clone() na spawnovanie procesov v inej cgroup, ochrana proti zápisu do pamäte pomocou userfaultfd.

Nová verzia obsahuje 15033 1961 opráv od XNUMX XNUMX vývojárov,
veľkosť opravy - 39 MB (zmeny ovplyvnili 11590 570560 súborov, pridaných XNUMX XNUMX riadkov kódu,
297401 odstránených riadkov). Asi 41 % zo všetkých prezentovaných v 5.7
zmeny sa týkajú ovládačov zariadení, približne 16 % zmien
postoj k aktualizácii kódu špecifického pre hardvérové ​​architektúry, 13 %
súvisiaci so sieťovým zásobníkom, 4 % so súborovými systémami a 4 % s internými
podsystémy jadra.

Hlavné inovácie:

  • Diskový subsystém, I/O a súborové systémy
    • Pridaná nová implementácia ovládača exFAT, založil založené na aktuálnej kódovej základni „sdfat“ (2.x) vyvinutej spoločnosťou Samsung pre jej smartfóny so systémom Android. Ovládač, ktorý bol predtým pridaný do jadra, bol založený na starom kóde Samsung (verzia 1.2.9) a vo výkone zaostával za novým ovládačom približne o 10 %. Pripomeňme si, že pridanie podpory exFAT do jadra bolo možné po Microsofte опубликовала verejné špecifikácie a sprístupnili patenty exFAT na bezplatné použitie v systéme Linux.
    • Btrfs implementuje nový príkaz ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, ktorý vám umožňuje vymazať podsekciu podľa jej identifikátora. Poskytuje sa plná podpora pre klonovanie inline rozsahov. Rozšíril sa počet stornovacích bodov pre operácie prerozdeľovania, čím sa skrátilo dlhé čakanie pri vykonávaní príkazu „zrušenie zostatku“. Zrýchlilo sa určovanie spätných odkazov v rozsahu (napríklad čas vykonania testovacieho skriptu sa skrátil z hodiny na niekoľko minút). Pridaná možnosť pripojiť rozsahy súborov ku každému inode stromu. Schéma blokovania používaná pri zapisovaní do pododdielov a pri vylúčení NOCOW bola prepracovaná. Vylepšená účinnosť vykonávania fsync pre rozsahy.
    • XFS zlepšilo kontrolu metadát a fsck pre aktívne oddiely. Na prebudovanie btree štruktúr bola navrhnutá knižnica, ktorá bude v budúcnosti slúžiť na prepracovanie xfs_repair a implementáciu možnosti obnovy bez odpojenia oddielu.
    • Do CIFS bola pridaná experimentálna podpora pre umiestnenie odkladacieho oddielu v úložiskách SMB3. Implementované rozšírenia POSIX do readdir, definované v špecifikácii SMB3.1.1. Vylepšený výkon zápisu pre stránky s veľkosťou 64 kB, keď je povolený režim cache=strict a používajú sa verzie protokolu 2.1+.
    • FS EXT4 bol prenesený z bmap a iopoll na používanie iomap.
    • F2FS poskytuje voliteľnú podporu pre kompresiu údajov pomocou algoritmu zstd. Štandardne sa na kompresiu používa algoritmus LZ4. Pridaná podpora pre príkaz "chattr -c commit". K dispozícii je zobrazenie času montáže. Pridaný ioctl F2FS_IOC_GET_COMPRESS_BLOCKS na získanie informácií o počte komprimovaných blokov. Pridaný výstup údajov o kompresii cez statx.
    • Súborový systém Ceph pridal možnosť lokálne vykonávať operácie vytvárania a odstraňovania súborov (odpojenie) bez čakania na odpoveď zo servera (pracuje v asynchrónnom režime). Zmena môže napríklad výrazne zlepšiť výkon pri spustení pomôcky rsync.
    • Do OVERLAYFS bola pridaná možnosť používať virtiofs ako systém súborov najvyššej úrovne.
    • Prepísané kód prechodu cesty vo VFS, kód na analýzu symbolického odkazu bol prepracovaný a prechod cez bod pripojenia bol zjednotený.
    • V podsystéme scsi neprivilegovaným používateľom povolené vykonávanie príkazov ZBC.
    • V dm_writecache implementovaná možnosť postupného vyčistenia vyrovnávacej pamäte na základe parametra max_age, ktorý nastavuje maximálnu životnosť bloku.
    • V dm_integrity pridané podpora operácie „zahodiť“.
    • V null_blk pridané podpora nahrádzania chýb na simuláciu zlyhaní počas testovania.
    • Pridané schopnosť odosielať upozornenia udev o zmenách veľkosti blokovaných zariadení.
  • Sieťový subsystém
    • Vrátane sieťového filtra zmeny, čím sa výrazne zrýchli spracovanie veľkých zoznamov zhôd (súborov nftables), ktoré vyžadujú kontrolu kombinácie podsietí, sieťových portov, protokolu a MAC adries.
      Optimalizácie predstavený do modulu nft_set_pipapo (PIle PAcket POlicies), ktorý rieši problém zosúladenia obsahu paketu s ľubovoľnými rozsahmi stavu poľa používanými v pravidlách filtrovania, ako sú rozsahy IP a sieťových portov (nft_set_rbtree a nft_set_hash manipulujú s intervalovým porovnávaním a priamym odrazom hodnôt ). Verzia pipapo vektorizovaná pomocou 256-bitových inštrukcií AVX2 na systéme s procesorom AMD Epyc 7402 vykázala 420% nárast výkonu pri analýze 30 tisíc záznamov vrátane kombinácií port-protokol. Nárast pri porovnaní kombinácie podsiete a čísla portu pri analýze 1000 záznamov bol 87 % pre IPv4 a 128 % pre IPv6.

    • Pridané modul bareudp, ktorý umožňuje zapuzdrenie rôznych protokolov L3, ako sú MPLS, IP a NSH, do tunela UDP.
    • Pokračovala integrácia komponentov MPTCP (MultiPath TCP), rozšírenie protokolu TCP pre organizáciu prevádzky TCP spojenia s doručovaním paketov súčasne po niekoľkých trasách cez rôzne sieťové rozhrania viazané na rôzne IP adresy.
    • Pridané podpora mechanizmov hardvérovej akcelerácie na zapuzdrenie ethernetových rámcov v 802.11 (Wi-Fi).
    • Pri presune zariadenia z jedného sieťového menného priestoru do druhého sa upravia prístupové práva a vlastníctvo príslušných súborov v sysfs.
    • Pridaná možnosť používať príznak SO_BINDTODEVICE pre používateľov bez oprávnenia root.
    • Bola prijatá tretia časť opráv, ktorá konvertuje sadu nástrojov ethtool z ioctl() na používanie rozhrania netlink. Nové rozhranie uľahčuje pridávanie rozšírení, zlepšuje spracovanie chýb, umožňuje odosielanie upozornení pri zmene stavu, zjednodušuje interakciu medzi jadrom a užívateľským priestorom a znižuje počet pomenovaných zoznamov, ktoré je potrebné synchronizovať.
    • Pridaná možnosť používať špeciálne hardvérové ​​akcelerátory na vykonávanie operácií sledovania pripojenia.
    • V sieťovom filtri dodal háčik na pripojenie klasifikátorov odchádzajúcich paketov (egress), ktorý dopĺňal predtým prítomný hák pre prichádzajúce pakety (ingress).
  • Virtualizácia a bezpečnosť
    • Pridaná hardvérová implementácia autentizácie ukazovateľa (Autentifikácia ukazovateľa), ktorý používa špecializované inštrukcie CPU ARM64 na ochranu pred útokmi pomocou techník návratovo orientovaného programovania (ROP), pri ktorých sa útočník nesnaží umiestniť svoj kód do pamäte, ale operuje s časťami strojových inštrukcií, ktoré sú už dostupné v načítaných knižniciach, končiac s kontrolným návratovým pokynom. Bezpečnosť spočíva v používaní digitálnych podpisov na overenie návratových adries na úrovni jadra. Podpis je uložený v nepoužitých horných bitoch samotného ukazovateľa. Na rozdiel od softvérových implementácií sa vytváranie a overovanie digitálnych podpisov vykonáva pomocou špeciálnych inštrukcií CPU.
    • Pridané schopnosť chrániť pamäťovú oblasť pred zápisom pomocou systémového volania userfaultfd(), ktorý je navrhnutý tak, aby riešil chyby stránok (prístup k neprideleným stránkam pamäte) v užívateľskom priestore. Myšlienkou je použiť userfaultfd() ako na detekciu narušenia prístupu na stránky označené ako chránené proti zápisu, tak aj na zavolanie obsluhy, ktorá dokáže reagovať na takéto pokusy o zápis (napríklad na spracovanie zmien počas vytvárania živých snímok bežiacich procesov, stavu zachytávanie pri ukladaní výpisov pamäte na disk, implementácia zdieľanej pamäte, sledovanie zmien v pamäti). Funkčnosť ekvivalent pomocou mprotect() v spojení s obsluhou signálu SIGSEGV, ale funguje to výrazne rýchlejšie.
    • SELinux zavrhol parameter „checkreqprot“, ktorý umožňuje zakázať kontroly ochrany pamäte pri spracovávaní pravidiel (umožňujúce použitie oblastí spustiteľnej pamäte bez ohľadu na pravidlá špecifikované v pravidlách). Symbolické odkazy Kernfs môžu dediť kontext svojich nadradených adresárov.
    • Štruktúra zapnuté modul KRSI, ktorý vám umožňuje pripojiť programy BPF k ľubovoľným háčikom LSM v jadre. Zmena umožňuje vytvárať moduly LSM (Linux Security Module) vo forme programov BPF na riešenie problémov auditu a povinného riadenia prístupu.
    • Vykonané Optimalizuje výkon /dev/random dávkovaním hodnôt CRNG namiesto individuálneho volania pokynov RNG. Vylepšený výkon getrandom a /dev/random na systémoch ARM64 poskytujúcich inštrukcie RNG.
    • Implementácia eliptickej krivky Curve25519 vymenené pre možnosť z knižnice HACL, pre ktoré daný matematický dôkaz formálneho overenia spoľahlivosti.
    • Pridané mechanizmus informovania o voľných pamäťových stránkach. Pomocou tohto mechanizmu môžu hosťujúce systémy prenášať informácie o stránkach, ktoré sa už nepoužívajú, do hostiteľského systému a hostiteľ môže prevziať údaje o stránke.
    • Vo vfio/pci pridané podpora SR-IOV (Single-Root I/O Virtualization).
  • Pamäťové a systémové služby
    • Od 80 do 100 znakov zvýšená obmedzenie maximálnej dĺžky riadkov v zdrojových textoch. Zároveň sa vývojárom stále odporúča, aby sa držali maximálne 80 znakov na riadok, ale to už nie je pevný limit. Navyše, prekročenie limitu veľkosti riadku bude mať za následok upozornenie na zostavenie iba vtedy, ak je checkpatch spustený s voľbou '--strict'. Zmena umožní nerozptyľovať vývojárov manipulácia s medzerami a cítiť sa voľnejšie pri zarovnávaní kódu, ako aj zabráni nadmerné lámanie čiar, znepokojujúce porozumenie kódu a vyhľadávanie.
    • Pridané podpora zmiešaného bootovacieho režimu EFI, ktorý umožňuje načítať 64-bitové jadro z 32-bitového firmvéru bežiaceho na 64-bitovom CPU bez použitia špecializovaného zavádzača.
    • Zahrnuté systém na identifikáciu a ladenie rozdelených zámkov (“rozdelený zámok"), ku ktorému dochádza pri prístupe k nezarovnaným údajom v pamäti v dôsledku skutočnosti, že pri vykonávaní atómovej inštrukcie údaje prechádzajú dvoma riadkami vyrovnávacej pamäte CPU. Takéto blokovanie má za následok významný zásah do výkonu (o 1000 cyklov pomalšie ako atómová operácia s údajmi, ktoré spadajú do jedného riadku vyrovnávacej pamäte). V závislosti od zavádzacieho parametra „split_lock_detect“ môže jadro takéto zámky za behu zistiť a vydať varovania alebo poslať SIGBUS signál do aplikácie, ktorá spôsobila uzamknutie.
    • Plánovač úloh poskytuje sledovanie teplotných senzorov (Tepelný tlak) a implementované s prihliadnutím na prehriatie pri zadávaní úloh. Pomocou poskytnutých štatistík môže tepelný regulátor upraviť 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í spúšťania úloh (predtým plánovač reagoval na zmeny vo frekvencii s určitým oneskorením, po určitú dobu rozhodovaním na základe nafúknutých predpokladov o dostupných výpočtových zdrojoch).
    • Plánovač úloh obsahuje invariantné ukazovatele sledovanie záťaže, čo vám umožní správne odhadnúť záťaž bez ohľadu na aktuálnu frekvenciu prevádzky procesora. Zmena umožňuje presnejšie predpovedať správanie úloh v podmienkach dynamických zmien napätia a frekvencie CPU. Napríklad úloha, ktorá spotrebovala 1/3 zdrojov CPU pri 1000 MHz, spotrebuje 2/3 zdrojov, keď frekvencia klesne na 500 MHz, čo predtým vytváralo falošný predpoklad, že beží na plnú kapacitu (t.j. úlohy sa objavili väčšie pre plánovač iba znížením frekvencie, čo viedlo k nesprávnym rozhodnutiam v regulátore schedutil cpufreq).
    • Ovládač Intel P-state, ktorý je zodpovedný za výber režimov výkonu, bol prepnutý do používania rozvrh.
    • Bola implementovaná schopnosť používať podsystém BPF, keď jadro beží v reálnom čase (PREEMPT_RT). Predtým, keď bolo povolené PREEMPT_RT, bolo potrebné vypnúť BPF.
    • Bol pridaný nový typ programu BPF - BPF_MODIFY_RETURN, ktorý je možné pripojiť k funkcii v jadre a zmeniť hodnotu vrátenú touto funkciou.
    • Pridané príležitosť Použitie systémového volania clone3() na vytvorenie procesu v cgroup, ktorý sa líši od rodičovskej cgroup, čo umožňuje rodičovskému procesu aplikovať obmedzenia a povoliť účtovanie ihneď po vytvorení nového procesu alebo vlákna. Napríklad správca služieb môže priamo alokovať nové služby do samostatných cgroups a nové procesy, keď sú umiestnené do „zmrazených“ cgroups, budú okamžite zastavené.
    • v Kbuild pridané podpora pre premennú prostredia "LLVM=1" na prepnutie na sadu nástrojov Clang/LLVM pri zostavovaní jadra. Požiadavky na verziu binutils boli zvýšené (2.23).
    • Do debugfs bola pridaná sekcia /sys/kernel/debug/kunit/ s výsledkami testov kunit.
    • Pridaný bootovací parameter jadra pm_debug_messages (analogicky k /sys/power/pm_debug_messages), ktorý umožňuje výstup ladiacich informácií o činnosti systému správy napájania (užitočné pri ladení problémov s hibernáciou a pohotovostným režimom).
    • Do asynchrónneho I/O rozhrania io_uring pridaná podpora spojiť () и výber atómového pufra.
    • Vylepšené profilovanie cgroup pomocou súpravy nástrojov perf. Predtým mohol perf profilovať úlohy iba v konkrétnej cgroup a nemohol zistiť, do ktorej cgroup patrí aktuálna vzorka. perf teraz získava informácie o cgroup pre každú vzorku, čo vám umožňuje profilovať viac ako jednu cgroup a použiť triedenie podľa
      cgroup v prehľadoch.

    • cgroupfs, pseudo-FS na správu cgroups, má pridanú podporu pre rozšírené atribúty (xattrs), pomocou ktorých môžete napríklad v užívateľskom priestore ponechať dodatočné informácie pre handlery.
    • V radiči pamäte cgroup dodala podpora rekurzívnej ochrany hodnoty „memory.low“, ktorá reguluje minimálne množstvo pamäte RAM poskytovanej členom skupiny. Keď pripájate hierarchiu cgroup pomocou voľby "memory_recursiveprot", hodnota "memory.low", ktorá je nastavená pre nižšie uzly, bude automaticky distribuovaná do všetkých podriadených uzlov.
    • Pridané Rámec Uacce (Unified/User-space-access-intended Accelerator Framework) na zdieľanie virtuálnych adries (SVA, Shared Virtual Addressing) medzi CPU a periférnymi zariadeniami, čo umožňuje hardvérovým akcelerátorom pristupovať k dátovým štruktúram v hlavnom CPU.
  • Hardvérové ​​architektúry
    • Pre architektúru ARM je implementovaná možnosť hot-fetch pamäte.
    • Pre architektúru RISC-V bola pridaná podpora pripájania a odstraňovania CPU (CPU hotplug). Pre 32-bitový RISC-V je implementovaný eBPF JIT.
    • Schopnosť používať 32-bitové systémy ARM na spustenie hosťujúceho prostredia KVM bola odstránená.
    • Odstránená „fiktívna“ implementácia NUMA pre architektúru s390, pre ktorú sa nenašli žiadne prípady použitia na dosiahnutie zlepšenia výkonu.
    • Pre ARM64 bola pridaná podpora pre rozšírenie AMU (Activity Monitors Unit), definované v ARMv8.4 a poskytujúce počítadlá výkonu, ktoré sa používajú na výpočet korekčných faktorov frekvenčného škálovania v plánovači úloh.
  • Оборудование
    • Pridané podpora pre zariadenia vDPA, ktoré používajú kanál na výmenu údajov, ktorý vyhovuje špecifikáciám virtio. Zariadenia vDPA môžu byť buď fyzicky pripojené zariadenia alebo virtuálne zariadenia emulované softvérom.
    • V subsystéme GPIO objavil nový príkaz ioctl() na sledovanie zmien, ktorý vám umožní informovať proces o zmenách stavu ľubovoľnej GPIO linky. Ako príklad použitia nového príkazu navrhované nástroj gpio-watch.
    • V ovládači i915 DRM pre grafické karty Intel v cene predvolená podpora pre čipy Tigerlake („Gen12“) a pridaná počiatočná podpora pre ovládanie podsvietenia OLED. Vylepšená podpora pre čipy Ice Lake, Elkhart Lake, Baytrail a Haswell.
    • V ovládači amdgpu pridané schopnosť načítať firmvér do čipu USBC pre ASIC. Vylepšená podpora pre čipy AMD Ryzen 4000 „Renoir“. Teraz je tu podpora ovládania OLED panelov. Poskytnuté zobrazenie stavu firmvéru v debugfs.
    • Do ovládača vmwgfx DRM pre virtualizačné systémy VMware bola pridaná možnosť používať OpenGL 4 v hosťujúcich systémoch (predtým bol podporovaný OpenGL 3.3).
    • Pridaný nový ovládač DRM 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 RK101II01DRD350
    • Do systému správy napájania pridané podpora platformy Intel Jasper Lake (JSL) na báze Atom.
    • Pridaná podpora pre laptop Pinebook Pro založený na Rockchip RK3399, tablete Pine64 PineTab a smartfóne PinePhone založené na Allwinner A64.
    • Pridaná podpora pre nové zvukové kodeky a čipy:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Pridaná podpora pre ARM dosky a platformy Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 i.MX6 TechNexion Pico možnosti dosky, tri nové Toradex Colibri možnosti, Samsung S7710 Galaxy Xcover 2 založený na ST -Ericsson u8500, DH Electronics DHCOM SoM a PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Zdroj: opennet.ru

Pridať komentár