Linux kernel 5.14

Linux kernel 5.14

Nakon dva mjeseca razvoja Linus Torvalds podnijeti izdanje jezgre Linux 5.14. Među najznačajnijim promjenama: novi quotactl_fd() i memfd_secret() sistemski pozivi, uklanjanje ide i raw drajvera, novi I/O prioritetni kontroler za cgroup, SCHED_CORE način raspoređivanja zadataka, infrastruktura za kreiranje verificiranih BPF programa za učitavanje.

Nova verzija uključuje 15883 popravka od 2002 programera, veličina zakrpe je 69 MB (promjene su utjecale na 12580 datoteka, dodana je 861501 linija koda, 321654 linije su izbrisane). Oko 47% svih promjena uvedenih u 5.14 odnosi se na upravljačke programe uređaja, približno 14% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 13% se odnosi na mrežni stog, 3% se odnosi na sustave datoteka, a 3% povezani su s unutarnjim podsustavima jezgre.

Glavni inovacije:

  • diskovni podsustav, ulazno/izlazni i datotečni sustavi:
    • za cgroup implementiran novi kontroler I/O prioriteta - rq-qos, koji može kontrolirati prioritet obrade zahtjeva za blokiranje uređaja koje generiraju članovi svake cgroup. Nova podrška za kontroler prioriteta dodana je mq-deadline I/O planeru;
    • na ext4 datotečnom sustavu implementiran nova ioctl naredba EXT4_IOC_CHECKPOINT, koja prisiljava sve transakcije na čekanju iz dnevnika i povezanih međuspremnika na disk, a također prepisuje područje koje koristi dnevnik u pohrani. Promjena je pripremljena u sklopu inicijative za sprječavanje curenja informacija iz datotečnih sustava;
    • u Btrfs uveden Optimizacija performansi: Eliminacijom nepotrebnog bilježenja proširenih atributa tijekom izvođenja fsync-a, izvedba intenzivnih operacija s proširenim atributima porasla je do 17%. Dodatno, prilikom izvođenja operacija skraćivanja koje ne utječu na ekstente, potpuna sinkronizacija je onemogućena, što je smanjilo vrijeme operacije za 12%. Postavka je dodana u sysfs za ograničavanje I/O propusnosti prilikom provjere FS-a. Dodani ioctl pozivi za otkazivanje promjene veličine i brisanja operacija uređaja;
    • u XFS-u prerađeno implementacija međuspremnika, koji se prenosi na dodjelu memorijskih stranica u skupnom načinu rada. Poboljšana učinkovitost predmemorije;
    • F2FS je dodao opciju za rad u načinu rada samo za čitanje i implementirao način predmemoriranja komprimiranih blokova (compress_cache) kako bi se poboljšala izvedba nasumičnog čitanja. Implementirana je podrška za komprimiranje datoteka mapiranih u memoriju korištenjem operacije mmap(). Za selektivno onemogućavanje kompresije datoteke pomoću maske, predložena je nova opcija montiranja nocompress;
    • učinjen je rad na exFAT upravljačkom programu kako bi se poboljšala kompatibilnost s pohranom nekih digitalnih fotoaparata;
    • dodan sistemski poziv quotactl_fd(), koji vam omogućuje upravljanje kvotama ne putem posebne datoteke uređaja, već određivanjem deskriptora datoteke povezanog sa datotečnim sustavom za koji se kvota primjenjuje;
    • Stari upravljački programi za blok uređaje s IDE sučeljem uklonjeni su iz kernela; odavno su zamijenjeni podsustavom libata. Podrška za stare uređaje je zadržana u cijelosti, promjene se tiču ​​samo mogućnosti korištenja starih upravljačkih programa, pri čijoj su korištenju pogoni nazivani /dev/hd*, a ne /dev/sd*;
    • "Sirovi" upravljački program uklonjen je iz kernela, pružajući nespremnik pristup blok uređajima putem /dev/raw sučelja. Ova je funkcionalnost odavno implementirana u aplikacije koje koriste zastavu O_DIRECT;
  • usluge memorije i sustava:
    • novi način raspoređivanja implementiran je u planer zadataka SCHED_CORE, što vam omogućuje da kontrolirate koji se procesi mogu izvoditi zajedno na istoj CPU jezgri. Svakom procesu može se dodijeliti identifikator kolačića koji definira opseg povjerenja između procesa (na primjer, pripadanje istom korisniku ili spremniku). Prilikom organiziranja izvršavanja koda, planer može osigurati da se jedna CPU jezgra dijeli samo između procesa povezanih s istim vlasnikom, što se može koristiti za blokiranje nekih Spectre napada sprječavanjem pouzdanih i nepouzdanih zadataka da se izvode na istoj SMT (Hyper Threading) niti ;
    • za cgroup mehanizam, implementirana je podrška za kill operaciju, koja vam omogućuje da ubijete sve procese povezane s grupom odjednom (pošaljite SIGKILL) upisivanjem “1” u virtualnu datoteku cgroup.kill;
    • proširene mogućnosti koje se odnose na odgovor na otkrivanje razdvojenih zaključavanja ("split locks") koje se javljaju prilikom pristupa neusklađenim podacima u memoriji zbog činjenice da prilikom izvođenja atomske instrukcije podaci prelaze dvije linije CPU predmemorije. Takvo blokiranje dovodi do značajnog pada performansi, pa je ranije bilo moguće prisilno prekinuti aplikaciju koja je uzrokovala blokadu. Novo izdanje dodaje parametar naredbenog retka jezgre "split_lock_detect=ratelimit:N", koji vam omogućuje da definirate ograničenje stope zaključavanja u sekundi za cijeli sustav, nakon čijeg prekoračenja će svaki proces koji je postao izvorom podijeljenog zaključavanja biti prisiljen zaustaviti se na 20 ms umjesto prekida;
    • Kontroler propusnosti cgroup CFS (CFS bandwidth controller), koji određuje koliko procesorskog vremena može biti dodijeljeno svakoj cgroup, ima mogućnost definiranja ograničenja ograničenih zadanim trajanjem djelovanja, što omogućuje bolju regulaciju opterećenja osjetljivih na kašnjenje. Na primjer, postavljanje cpu.cfs_quota_us na 50000 i cpu.cfs_period_us na 100000 omogućit će grupi procesa da gubi 100 ms CPU vremena svakih 50 ms;
    • dodao početna infrastruktura za kreiranje BPF programa za učitavanje, što će dalje omogućiti preuzimanje samo BPF programa potpisanih pouzdanim digitalnim ključem;
    • dodana je nova futex operacija FUTEX_LOCK_PI2, koja koristi monotoni mjerač vremena za izračunavanje vremenskog ograničenja, što uzima u obzir vrijeme koje je sustav proveo u stanju mirovanja;
    • za RISC-V arhitekturu, podršku za velike memorijske stranice (Transparent Huge-Pages) i mogućnost korištenja OGRADA identificirati pogreške pri radu s memorijom;
    • u sistemski poziv madvise(), koji pruža sredstva za optimiziranje upravljanja memorijom procesa, dodao zastavice MADV_POPULATE_READ i MADV_POPULATE_WRITE za generiranje "pogreške stranice" na svim memorijskim stranicama mapiranim za operacije čitanja ili pisanja, bez izvođenja stvarnog čitanja ili pisanja (prefault). Korištenje zastavica može biti korisno za smanjenje kašnjenja u izvršavanju programa, zahvaljujući proaktivnom izvršavanju rukovatelja “page fault” za sve nedodijeljene stranice odjednom, bez čekanja na stvarni pristup njima;
    • u sustavu jediničnog testiranja kunit dodao podrška za izvođenje testova u QEMU okruženju;
    • dodani novi tragači: "osnoise" za praćenje kašnjenja aplikacije uzrokovanih rukovanjem prekidima i " timerlat " za prikaz detaljnih informacija o kašnjenjima prilikom buđenja iz signala mjerača vremena;
  • virtualizacija i sigurnost:
    • dodano sistemski poziv memfd_tajna(), koji vam omogućuje stvaranje privatnog memorijskog područja u izoliranom adresnom prostoru, vidljivog samo procesu vlasnika, koje se ne odražava u drugim procesima i nije izravno dostupno kernelu;
    • u sustavu filtriranja poziva sustava seccomp, prilikom premještanja rukovatelja zaključavanjem u korisnički prostor, moguće je upotrijebiti jednu atomsku operaciju za stvaranje deskriptora datoteke za izolirani zadatak i vratiti ga prilikom obrade sistemskog poziva. Predložena operacija rješava problem s prekidom rukovatelja u korisničkom prostoru kada stigne signal;
    • dodano novi mehanizam za upravljanje ograničavanjem resursa u prostoru imena korisničkog ID-a, koji povezuje pojedinačne rlimit brojače s korisnikom u "prostoru imena korisnika". Promjena rješava problem s korištenjem zajedničkih brojača resursa kada jedan korisnik pokreće procese u različitim spremnicima;
    • KVM hipervizor za ARM64 sustave dodao je mogućnost korištenja proširenja MTE (MemTag, Memory Tagging Extension) u sustavima za goste, što vam omogućuje da vežete oznake za svaku operaciju dodjele memorije i organizirate provjeru ispravne upotrebe pokazivača za blokiranje iskorištavanja ranjivosti uzrokovane pristupom već oslobođenim memorijskim blokovima, prelijevanjem međuspremnika, pristupima prije inicijalizacije i korištenjem izvan trenutnog konteksta;
    • Provjera autentičnosti pokazivača koju pruža platforma ARM64 sada se može zasebno konfigurirati za kernel i korisnički prostor. Tehnologija vam omogućuje korištenje specijaliziranih ARM64 instrukcija za provjeru povratnih adresa pomoću digitalnih potpisa koji su pohranjeni u neiskorištenim gornjim bitovima samog pokazivača;
    • u korisničkom načinu Linuxa dodao podrška za korištenje upravljačkih programa za PCI uređaje s virtualnom PCI sabirnicom, koju implementira PCI-over-virtio upravljački program;
    • za x86 sustave, dodana podrška za virtio-iommu paravirtualizirani uređaj, koji vam omogućuje slanje IOMMU zahtjeva, kao što su ATTACH, DETACH, MAP i UNMAP, preko virtio transporta bez emulacije tablica memorijskih stranica;
    • Za Intelove CPU-e, od obitelji Skylake do Coffee Lake, upotreba Intel TSX (Transactional Synchronization Extensions), koja pruža alate za poboljšanje performansi višenitnih aplikacija dinamičkim uklanjanjem nepotrebnih operacija sinkronizacije, onemogućena je prema zadanim postavkama. Ekstenzije su onemogućene zbog mogućnosti napada Zombieload, manipuliranje curenjem informacija kroz kanale trećih strana koje nastaje tijekom rada mehanizma za asinkroni prekid operacija (TAA, TSX Asynchronous Abort);
  • mrežni podsustav:
    • nastavak integracije u jezgru MPTCP (MultiPath TCP), proširenje TCP protokola za organiziranje rada TCP veze s dostavom paketa istovremeno duž nekoliko ruta kroz različita mrežna sučelja povezana s različitim IP adresama. U novom broju dodano mehanizam za postavljanje vlastitih pravila hashiranja prometa za IPv4 i IPv6 (multipath hash policy), čime se iz korisničkog prostora može odrediti koja će se polja u paketima, uključujući one enkapsulirane, koristiti pri izračunu hash-a koji određuje izbor puta za paket;
    • podrška za utičnice dodana je virtualnom transportnom virtu SOCK_SEQPACKET (uredan i pouzdan prijenos datagrama);
    • Mogućnosti mehanizma utičnice SO_REUSEPORT su proširene, što omogućuje da se nekoliko utičnica za slušanje spoji na jedan port odjednom za primanje veza s distribucijom dolaznih zahtjeva istovremeno preko svih utičnica spojenih putem SO_REUSEPORT, što pojednostavljuje stvaranje poslužiteljskih aplikacija s više niti . U novoj verziji dodao sredstva za prijenos kontrole na drugu utičnicu u slučaju kvara prilikom obrade zahtjeva od strane prvobitno odabrane utičnice (rješava problem s gubitkom pojedinačnih veza prilikom ponovnog pokretanja usluga);
  • oprema:
    • u amdgpu drajveru implementiran podrška za novu AMD Radeon RX 6000 seriju GPU-ova, kodnih naziva “Beige Goby” (Navi 24) i “Yellow Carp”, kao i poboljšana podrška za Aldebaran GPU (gfx90a) i Van Gogh APU. Dodana je mogućnost istovremenog rada s nekoliko eDP panela. Za APU Renoir implementirana je podrška za rad s šifriranim međuspremnicima u video memoriji (TMZ, Trusted Memory Zone). Dodana podrška za grafičke kartice s isključivanjem bez uključivanja. Za Radeon RX 6000 (Navi 2x) GPU-ove i starije AMD GPU-ove, podrška za ASPM (Active State Power Management) mehanizam za uštedu energije omogućen je prema zadanim postavkama, što je prije bilo omogućeno samo za Navi 1x, Vega i Polaris GPU-ove;
    • za AMD čipove dodana je podrška za dijeljenu virtualnu memoriju (SVM, shared virtual memory) temeljena na podsustavu HMM (Heterogeneous memory management) koji omogućuje korištenje uređaja s vlastitim jedinicama za upravljanje memorijom (MMU, memory management unit), koji mogu pristupiti glavnoj memoriji. Uključujući korištenje HMM-a, možete organizirati zajednički adresni prostor između GPU-a i CPU-a, u kojem GPU može pristupiti glavnoj memoriji procesa;
    • dodana početna tehnološka podrška AMD Smart Shift, koji dinamički mijenja parametre potrošnje energije CPU-a i GPU-a na prijenosnim računalima s čipsetom i AMD grafičkom karticom kako bi se poboljšala izvedba tijekom igranja, uređivanja videa i 3D renderiranja;
    • u i915 upravljačkom programu za Intel video kartice uključeni podrška za Intel Alderlake P čipove;
    • dodan drm/hyperv drajver za Hyper-V virtualni grafički adapter;
    • dodano grafički upravljački program simpledrm koji koristi EFI-GOP ili VESA okvirni međuspremnik koji pruža UEFI firmware ili BIOS za izlaz. Glavna svrha upravljačkog programa je pružiti mogućnosti grafičkog izlaza tijekom početnih faza pokretanja, prije nego što se može koristiti puni DRM upravljački program. Upravljački program također se može koristiti kao privremeno rješenje za opremu koja još nema izvorne DRM upravljačke programe;
    • dodao sveobuhvatna računalna podrška Raspberry Pi 400;
    • Dodan upravljački program dell-wmi-privacy za podršku hardverskih sklopki kamere i mikrofona uključenih u prijenosna računala Dell;
    • za prijenosna računala Lenovo dodano WMI sučelje za promjenu BIOS parametara preko sysfs /sys/class/firmware-attributes/;
    • proširena podrška za uređaje s USB4 sučeljem;
    • dodao podrška za zvučne kartice i kodeke AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 i Texas Instruments TAS2505. Poboljšana audio podrška na HP i ASUS prijenosnim računalima. Dodano zakrpe za smanjenje kašnjenja prije početka reprodukcije zvuka na uređajima s USB sučeljem.

Izvor – opennet.ru.

Izvor: linux.org.ru