Jedro Linuxa 5.14

Jedro Linuxa 5.14

Po dveh mesecih razvoja, Linus Torvalds uveden izdaja jedra Linux 5.14. Med najbolj opaznimi spremembami: novi sistemski klici quotactl_fd() in memfd_secret(), odstranitev ide in neobdelanih gonilnikov, nov I/O prednostni krmilnik za cgroup, način razporejanja opravil SCHED_CORE, infrastruktura za ustvarjanje preverjenih programskih nalagalnikov BPF.

Nova različica vključuje 15883 popravkov 2002 razvijalcev, velikost popravka je 69 MB (spremembe so vplivale na 12580 datotek, dodanih je bilo 861501 vrstic kode, izbrisanih je bilo 321654 vrstic). Približno 47 % vseh sprememb, uvedenih v 5.14, je povezanih z gonilniki naprav, približno 14 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 13 % je povezanih z omrežnim skladom, 3 % je povezanih z datotečnimi sistemi in 3 % so povezani z notranjimi podsistemi jedra.

Glavni inovacije:

  • diskovni podsistem, vhodno/izhodni in datotečni sistemi:
    • za cgroup izvajati nov I/O prednostni krmilnik - rq-qos, ki lahko nadzira prioriteto obdelave zahtev za blokiranje naprav, ki jih generirajo člani vsake cgroup. V razporejevalnik V/I mq-deadline je bila dodana nova podpora za prednostni krmilnik;
    • v datotečnem sistemu ext4 izvajati nov ukaz ioctl EXT4_IOC_CHECKPOINT, ki vsili vse čakajoče transakcije iz dnevnika in povezanih vmesnih pomnilnikov na disk ter prepiše tudi območje, ki ga uporablja dnevnik v pomnilniku. Sprememba je bila pripravljena v okviru pobude za preprečevanje uhajanja informacij iz datotečnih sistemov;
    • v Btrfs narejeno Optimizacije zmogljivosti: Z odpravo nepotrebnega beleženja razširjenih atributov med izvajanjem fsync se je zmogljivost intenzivnih operacij z razširjenimi atributi povečala za do 17 %. Poleg tega je pri izvajanju operacij obrezovanja, ki ne vplivajo na obsege, onemogočena popolna sinhronizacija, kar je zmanjšalo čas operacije za 12 %. V sysfs je bila dodana nastavitev za omejitev V/I pasovne širine pri preverjanju FS. Dodani klici ioctl za preklic spreminjanja velikosti in brisanja operacij naprave;
    • v XFS predelan izvedba vmesnega predpomnilnika, ki se prenese na dodelitev pomnilniških strani v paketnem načinu. Izboljšana učinkovitost predpomnilnika;
    • F2FS je dodal možnost za delo v načinu samo za branje in implementiral način predpomnjenja stisnjenih blokov (compress_cache) za izboljšanje zmogljivosti naključnega branja. Izvedena je bila podpora za stiskanje datotek, preslikanih v pomnilnik z operacijo mmap(). Za selektivno onemogočanje stiskanja datoteke z masko je bila predlagana nova možnost priklopa nocompress;
    • v gonilniku exFAT je bilo opravljeno delo za izboljšanje združljivosti s pomnilnikom nekaterih digitalnih fotoaparatov;
    • dodan sistemski klic quotactl_fd(), ki vam omogoča upravljanje kvot ne prek posebne datoteke naprave, temveč z navedbo deskriptorja datoteke, povezanega z datotečnim sistemom, za katerega se uporablja kvota;
    • Stari gonilniki za blokovne naprave z vmesnikom IDE so bili odstranjeni iz jedra; že dolgo jih je nadomestil podsistem libata. Podpora za stare naprave je v celoti ohranjena, spremembe zadevajo le možnost uporabe starih gonilnikov, pri uporabi katerih so se pogoni imenovali /dev/hd* in ne /dev/sd*;
    • Gonilnik »neobdelani« je bil odstranjen iz jedra, kar zagotavlja neomejen dostop do blokovnih naprav prek vmesnika /dev/raw. Ta funkcionalnost je že dolgo implementirana v aplikacije z uporabo zastavice O_DIRECT;
  • pomnilniške in sistemske storitve:
    • v razporejevalniku opravil je implementiran nov način razporejanja SCHED_CORE, ki vam omogoča nadzor nad tem, kateri procesi se lahko izvajajo skupaj v istem jedru CPU. Vsakemu procesu je mogoče dodeliti identifikator piškotka, ki določa obseg zaupanja med procesi (na primer pripadnost istemu uporabniku ali vsebniku). Pri organiziranju izvajanja kode lahko razporejevalnik zagotovi, da je eno jedro CPU v skupni rabi samo med procesi, povezanimi z istim lastnikom, kar se lahko uporabi za blokiranje nekaterih napadov Spectre, tako da prepreči izvajanje zaupanja vrednih in nezanesljivih nalog v isti niti SMT (Hyper Threading). ;
    • za mehanizem cgroup je implementirana podpora za operacijo kill, ki vam omogoča, da naenkrat ubijete vse procese, povezane s skupino (pošljete SIGKILL), tako da v virtualno datoteko cgroup.kill zapišete »1«;
    • razširjene zmožnosti v zvezi z odzivom na zaznavanje deljenih zaklepov (»split locks«), ki se pojavijo pri dostopu do neporavnanih podatkov v pomnilniku zaradi dejstva, da pri izvajanju atomskega ukaza podatki prečkajo dve liniji predpomnilnika procesorja. Takšna blokada vodi do občutnega padca zmogljivosti, zato je bilo prej mogoče prisilno prekiniti aplikacijo, ki je povzročila blokado. Nova izdaja dodaja parameter ukazne vrstice jedra »split_lock_detect=ratelimit:N«, ki vam omogoča, da določite sistemsko omejitev hitrosti operacij zaklepanja na sekundo, po prekoračitvi katere bo vsak proces, ki je postal vir deljenega zaklepanja biti prisiljen ustaviti za 20 ms namesto prekinitve;
    • Krmilnik pasovne širine cgroup CFS (CFS bandwidth controller), ki določa, koliko procesorskega časa se lahko dodeli posamezni cgroup, ima možnost definiranja omejitev, omejenih z danim trajanjem delovanja, kar omogoča boljšo regulacijo obremenitev, občutljivih na zakasnitev. Če na primer nastavite cpu.cfs_quota_us na 50000 in cpu.cfs_period_us na 100000, bo skupina procesov omogočila, da vsakih 100 ms izgubi 50 ms CPU časa;
    • dodano začetna infrastruktura za ustvarjanje nalagalnikov programov BPF, ki bo nadalje omogočala prenos samo programov BPF, podpisanih z zaupanja vrednim digitalnim ključem;
    • dodana nova futex operacija FUTEX_LOCK_PI2, ki uporablja monotoni časovnik za izračun časovne omejitve, ki upošteva čas, ki ga sistem porabi v načinu mirovanja;
    • za arhitekturo RISC-V, podporo za velike pomnilniške strani (Transparent Huge-Pages) in možnost uporabe OGRAJA prepoznati napake pri delu s pomnilnikom;
    • v sistemski klic madvise(), ki zagotavlja sredstvo za optimizacijo upravljanja pomnilnika procesa, dodano Oznaki MADV_POPULATE_READ in MADV_POPULATE_WRITE za ustvarjanje "napake strani" na vseh pomnilniških straneh, preslikanih za operacije branja ali pisanja, brez izvedbe dejanskega branja ali pisanja (prednapaka). Uporaba zastavic je lahko uporabna za zmanjšanje zamud pri izvajanju programa, zahvaljujoč proaktivnemu izvajanju obdelovalca »napake strani« za vse nedodeljene strani hkrati, brez čakanja na dejanski dostop do njih;
    • v sistemu testiranja enote kunit dodano podpora izvajanju testov v okolju QEMU;
    • dodani novi sledilci: "osnoise" za sledenje zakasnitvam aplikacij, ki jih povzroča obdelava prekinitve, in " timerlat " za prikaz podrobnih informacij o zakasnitvah ob prebujanju iz signala časovnika;
  • virtualizacija in varnost:
    • dodano sistemski klic memfd_secret(), ki vam omogoča, da ustvarite zasebno pomnilniško območje v izoliranem naslovnem prostoru, vidno samo procesu lastnika, ki se ne odraža v drugih procesih in ni neposredno dostopno jedru;
    • v sistemu za filtriranje sistemskih klicev seccomp je pri premikanju obdelovalcev zaklepanja v uporabniški prostor mogoče uporabiti eno atomsko operacijo za ustvarjanje deskriptorja datoteke za izolirano nalogo in ga vrniti pri obdelavi sistemskega klica. Predlagana operacija rešuje problem s prekinitvijo upravljalnika v uporabniškem prostoru ob prihodu signala;
    • dodano nov mehanizem za upravljanje omejevanja virov v imenskem prostoru ID-ja uporabnika, ki posamezne števce rlimit veže na uporabnika v "imenskem prostoru uporabnika". Sprememba rešuje težavo z uporabo skupnih števcev virov, ko en uporabnik izvaja procese v različnih vsebnikih;
    • hipervizor KVM za sisteme ARM64 je dodal možnost uporabe razširitve MTE (MemTag, Memory Tagging Extension) v gostujočih sistemih, ki vam omogoča, da vežete oznake na vsako operacijo dodeljevanja pomnilnika in organizirate preverjanje pravilne uporabe kazalcev za blokiranje izkoriščanja ranljivosti zaradi dostopanja do že sproščenih pomnilniških blokov, prelivanja medpomnilnikov, dostopov pred inicializacijo in uporabe izven trenutnega konteksta;
    • Preverjanje pristnosti kazalca, ki ga zagotavlja platforma ARM64, je zdaj mogoče konfigurirati ločeno za jedro in uporabniški prostor. Tehnologija vam omogoča uporabo specializiranih navodil ARM64 za preverjanje povratnih naslovov z uporabo digitalnih podpisov, ki so shranjeni v neuporabljenih zgornjih bitih samega kazalca;
    • v uporabniškem načinu Linux dodano podpora za uporabo gonilnikov za naprave PCI z virtualnim vodilom PCI, ki jih izvaja gonilnik PCI-over-virtio;
    • za sisteme x86 dodana podpora za paravirtualizirano napravo virtio-iommu, ki omogoča pošiljanje zahtev IOMMU, kot so ATTACH, DETACH, MAP in UNMAP, prek transporta virtio brez posnemanja tabel pomnilniških strani;
    • Za procesorje Intel, od družine Skylake do Coffee Lake, je privzeto onemogočena uporaba Intel TSX (Transactional Synchronization Extensions), ki zagotavljajo orodja za izboljšanje zmogljivosti večnitnih aplikacij z dinamičnim odpravljanjem nepotrebnih operacij sinhronizacije. Razširitve so onemogočene zaradi možnosti napadov Zombieload, manipulacija uhajanja informacij preko kanalov tretjih oseb, ki nastane med delovanjem mehanizma za asinhrono prekinitev operacij (TAA, TSX Asynchronous Abort);
  • omrežni podsistem:
    • nadaljnja integracija v jedro MPTCP (MultiPath TCP), razširitev protokola TCP za organizacijo delovanja povezave TCP z dostavo paketov hkrati po več poteh prek različnih omrežnih vmesnikov, povezanih z različnimi naslovi IP. V novi številki dodano mehanizem za nastavitev lastnih politik zgoščevanja prometa za IPv4 in IPv6 (politika zgoščevanja več poti), ki omogoča iz uporabniškega prostora določitev, katera polja v paketih, vključno z enkapsuliranimi, bodo uporabljena pri izračunu zgoščevanja, ki določa izbiro poti za paket;
    • podpora za vtičnice je bila dodana virtualni transportni virtio SOCK_SEQPACKET (urejen in zanesljiv prenos datagramov);
    • Zmogljivosti mehanizma vtičnic SO_REUSEPORT so bile razširjene, kar omogoča, da se več poslušajočih vtičnic poveže z enimi vrati hkrati, da prejmejo povezave z distribucijo dohodnih zahtev hkrati po vseh vtičnicah, povezanih prek SO_REUSEPORT, kar poenostavlja ustvarjanje večnitnih strežniških aplikacij . V novi različici dodano sredstva za prenos nadzora na drugo vtičnico v primeru napake pri obdelavi zahteve s strani prvotno izbrane vtičnice (rešuje težavo z izgubo posameznih povezav pri ponovnem zagonu storitev);
  • oprema:
    • v gonilniku amdgpu izvajati podpora za novo serijo grafičnih procesorjev AMD Radeon RX 6000 s kodnim imenom »Beige Goby« (Navi 24) in »Yellow Carp«, kot tudi izboljšana podpora za GPU Aldebaran (gfx90a) in Van Gogh APU. Dodana možnost hkratnega dela z več ploščami eDP. Za APU Renoir je bila implementirana podpora za delo s šifriranimi medpomnilniki v video pomnilniku (TMZ, Trusted Memory Zone). Dodana podpora za grafične kartice z vročim odklopom. Za grafične procesorje Radeon RX 6000 (Navi 2x) in starejše grafične procesorje AMD je privzeto omogočena podpora za mehanizem varčevanja z energijo ASPM (Active State Power Management), ki je bil prej omogočen samo za grafične procesorje Navi 1x, Vega in Polaris;
    • za čipe AMD je dodana podpora za deljeni virtualni pomnilnik (SVM, shared virtual memory) na osnovi podsistema HMM (Heterogeneous memory management), ki omogoča uporabo naprav z lastnimi enotami za upravljanje pomnilnika (MMU, memory management unit), ki lahko dostopa do glavnega pomnilnika. Vključno z uporabo HMM lahko organizirate skupni naslovni prostor med GPE in CPE, v katerem lahko GPE dostopa do glavnega pomnilnika procesa;
    • dodana začetna tehnološka podpora AMD Smart Shift, ki dinamično spreminja parametre porabe energije CPE in GPE na prenosnikih s čipsetom in grafično kartico AMD za povečanje zmogljivosti pri igranju iger, urejanju videa in 3D upodabljanju;
    • v gonilniku i915 za grafične kartice Intel vključena podpora za čipe Intel Alderlake P;
    • dodan gonilnik drm/hyperv za virtualni grafični adapter Hyper-V;
    • dodano grafični gonilnik simpledrm, ki za izhod uporablja okvirni medpomnilnik EFI-GOP ali VESA, ki ga zagotavlja vdelana programska oprema UEFI ali BIOS. Glavni namen gonilnika je zagotoviti grafične izhodne zmogljivosti v začetnih fazah zagona, preden je mogoče uporabiti polni gonilnik DRM. Gonilnik je mogoče uporabiti tudi kot začasno rešitev za opremo, ki še nima izvornih gonilnikov DRM;
    • dodano računalniška podpora vse v enem Raspberry Pi 400;
    • Dodan gonilnik dell-wmi-privacy za podporo stikalom strojne opreme kamere in mikrofona, vključenih v prenosnike Dell;
    • za prenosnike Lenovo dodano vmesnik WMI za spreminjanje parametrov BIOS-a preko sysfs /sys/class/firmware-attributes/;
    • razširjeno podpora za naprave z vmesnikom USB4;
    • dodano podpora za zvočne kartice in kodeke AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 in Texas Instruments TAS2505. Izboljšana zvočna podpora na prenosnikih HP in ASUS. Dodano popravki za zmanjšanje zamud, preden se zvok začne predvajati na napravah z vmesnikom USB.

Vir – opennet.ru.

Vir: linux.org.ru