Linux kernel 5.14

Linux kernel 5.14

Nakon dva mjeseca razvoja, Linus Torvalds uveo izdanje kernela Linux 5.14. Među najznačajnijim promjenama: novi sistemski pozivi quotactl_fd() i memfd_secret(), uklanjanje ide i raw drajvera, novi I/O prioritetni kontroler za cgroup, SCHED_CORE režim raspoređivanja zadataka, infrastruktura za kreiranje verificiranih BPF programskih učitača.

Nova verzija uključuje 15883 popravka od 2002 programera, veličina zakrpe je 69 MB (promjene su uticale na 12580 fajlova, dodato je 861501 linija koda, 321654 linije je obrisano). Oko 47% svih promjena uvedenih u 5.14 odnosi se na drajvere uređaja, otprilike 14% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 13% se odnosi na mrežni stog, 3% se odnosi na sistem datoteka i 3% odnose se na interne podsisteme kernela.

Glavni inovacije:

  • diskovni podsistem, ulaz/izlaz i sistem datoteka:
    • za cgroup implementirano novi I/O prioritetni kontroler - rq-qos, koji može kontrolirati prioritet obrade zahtjeva za blokiranje uređaja koje generiraju članovi svake cgroup. Nova podrška za prioritetni kontroler je dodana u mq-deadline I/O planer;
    • na ext4 sistemu datoteka implementirano nova ioctl naredba EXT4_IOC_CHECKPOINT, koja prisiljava sve transakcije na čekanju iz dnevnika i povezanih bafera na disk, a također prepisuje područje koje koristi dnevnik u skladištu. Promjena je pripremljena kao dio inicijative za sprječavanje curenja informacija iz sistema datoteka;
    • Btrfs predstavljen Optimizacija performansi: Eliminacijom nepotrebnog evidentiranja proširenih atributa tokom fsync izvršenja, performanse intenzivnih operacija sa proširenim atributima povećane su do 17%. Dodatno, kada se izvode operacije trimovanja koje ne utiču na ekstente, potpuna sinhronizacija je onemogućena, što je smanjilo vreme rada za 12%. Sysfs-u je dodana postavka za ograničavanje I/O propusnog opsega prilikom provjere FS-a. Dodani ioctl pozivi za otkazivanje operacija promjene veličine i brisanja uređaja;
    • u XFS prerađeno implementacija keša bafera, koji se prenosi na dodjelu memorijskih stranica u batch modu. Poboljšana efikasnost keš memorije;
    • F2FS je dodao opciju za rad u režimu samo za čitanje i implementirao komprimirani režim keširanja blokova (compress_cache) kako bi poboljšao performanse nasumičnog čitanja. Implementirana je podrška za komprimiranje datoteka mapiranih u memoriju korištenjem mmap() operacije. Za selektivno onemogućavanje kompresije datoteke pomoću maske, predložena je nova opcija montiranja nocompress;
    • urađen je rad na exFAT drajveru kako bi se poboljšala kompatibilnost sa skladištenjem nekih digitalnih fotoaparata;
    • dodat sistemski poziv quotactl_fd(), koji vam omogućava da upravljate kvotama ne preko posebne datoteke uređaja, već navođenjem deskriptora datoteke povezanog sa sistemom datoteka za koji se kvota primjenjuje;
    • Stari drajveri za blok uređaje sa IDE interfejsom su uklonjeni iz kernela, već su dugo zamenjeni libata podsistemom. Podrška za stare uređaje je zadržana u potpunosti, promjene se odnose samo na mogućnost korištenja starih drajvera, pri korišćenju kojih su se drajvovi zvali /dev/hd*, a ne /dev/sd*;
    • “Raw” drajver je uklonjen iz kernela, pružajući nebaferovani pristup blok uređajima preko /dev/raw interfejsa. Ova funkcionalnost je dugo implementirana u aplikacijama koje koriste oznaku O_DIRECT;
  • memorijske i sistemske usluge:
    • novi način planiranja je implementiran u planer zadataka SCHED_CORE, što vam omogućava da kontrolišete koji procesi mogu da rade zajedno na istoj CPU jezgri. Svakom procesu se može dodijeliti identifikator kolačića koji definira opseg povjerenja između procesa (na primjer, pripadnost istom korisniku ili kontejneru). Prilikom organiziranja izvršavanja koda, planer može osigurati da se jedno CPU jezgro dijeli samo među procesima povezanim s istim vlasnikom, što se može koristiti za blokiranje nekih Spectre napada sprečavanjem pouzdanih i nepouzdanih zadataka da se izvode na istoj SMT (Hyper Threading) niti ;
    • za mehanizam cgroup implementirana je podrška za operaciju kill, koja vam omogućava da ukinete sve procese povezane sa grupom odjednom (pošaljite SIGKILL) pisanjem “1” u virtuelnu datoteku cgroup.kill;
    • proširene mogućnosti koje se odnose na reagovanje na detekciju podijeljenih zaključavanja („split locks”) koje se javljaju prilikom pristupa neusklađenim podacima u memoriji zbog činjenice da prilikom izvršavanja atomske instrukcije podaci prelaze dvije CPU keš linije. Takvo blokiranje dovodi do značajnog pada performansi, pa je ranije bilo moguće nasilno ukinuti aplikaciju koja je izazvala blokadu. Novo izdanje dodaje parametar komandne linije kernela “split_lock_detect=ratelimit:N”, koji vam omogućava da definišete sistemsko ograničenje brzine operacija zaključavanja u sekundi, nakon prekoračenja koje će bilo koji proces koji je postao izvor split zaključavanja biti prisiljen da se zaustavi na 20 ms umjesto prekida;
    • Cgroup bandwidth kontroler CFS (CFS bandwidth controller), koji određuje koliko vremena procesora može biti dodijeljeno svakoj cgroup, ima mogućnost definiranja ograničenja ograničenih datim trajanjem akcije, što omogućava 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;
    • dodano početna infrastruktura za kreiranje BPF programskih punjača, koja će dalje omogućiti preuzimanje samo BPF programa potpisanih pouzdanim digitalnim ključem;
    • dodana je nova futex operacija FUTEX_LOCK_PI2, koja koristi monotoni tajmer za izračunavanje timeouta, koji uzima u obzir vrijeme provedeno od strane sistema u režimu mirovanja;
    • za RISC-V arhitekturu, podršku za velike memorijske stranice (Transparent Huge-Pages) i mogućnost korištenja KFENCE identificirati greške pri radu s memorijom;
    • u sistemski poziv madvise(), koji pruža sredstva za optimizaciju upravljanja memorijom procesa, dodano MADV_POPULATE_READ i MADV_POPULATE_WRITE zastavice za generiranje "greške stranice" na svim memorijskim stranicama mapiranim za operacije čitanja ili pisanja, bez izvođenja stvarnog čitanja ili pisanja (prefault). Upotreba zastavica može biti korisna za smanjenje kašnjenja u izvršavanju programa, zahvaljujući proaktivnom izvršavanju “page fault” rukovaoca za sve nedodijeljene stranice odjednom, bez čekanja na stvarni pristup njima;
    • u sistemu za testiranje jedinica kunit dodano podrška za pokretanje testova u QEMU okruženju;
    • dodani novi traceri: "osnoise" za praćenje kašnjenja aplikacija uzrokovanih rukovanjem prekida, i " timerlat " za prikaz detaljnih informacija o kašnjenjima prilikom buđenja iz signala tajmera;
  • virtuelizacija i sigurnost:
    • dodano sistemski poziv memfd_secret(), koji vam omogućava da kreirate privatnu memorijsku oblast u izolovanom adresnom prostoru, vidljivu samo vlasničkom procesu, koja se ne odražava u drugim procesima i nije direktno dostupna kernelu;
    • u sistemu filtriranja sistemskih poziva seccomp, kada se premeštaju rukovaoci zaključavanja u korisnički prostor, moguće je koristiti jednu atomsku operaciju za kreiranje deskriptora fajla za izolovani zadatak i vraćanje ga prilikom obrade sistemskog poziva. Predložena operacija rješava problem sa prekidom rukovaoca u korisničkom prostoru kada stigne signal;
    • dodano novi mehanizam za upravljanje ograničenjem resursa u imenskom prostoru korisničkog ID-a, koji povezuje pojedinačne brojače rlimit za korisnika u "prostoru korisničkog imena". Promjena rješava problem sa korištenjem uobičajenih brojača resursa kada jedan korisnik pokreće procese u različitim kontejnerima;
    • KVM hipervizor za ARM64 sisteme je dodao mogućnost upotrebe ekstenzije MTE (MemTag, Memory Tagging Extension) u gostujućim sistemima, koja vam omogućava da povežete oznake sa svakom operacijom dodjele memorije i organizirate provjeru ispravne upotrebe pokazivača za blokiranje eksploatacije ranjivosti uzrokovane pristupom već oslobođenim memorijskim blokovima, prelivanjem bafera, pristupima prije inicijalizacije i korištenjem izvan trenutnog konteksta;
    • Provjera autentičnosti pokazivača koju pruža ARM64 platforma sada se može konfigurirati zasebno za kernel i korisnički prostor. Tehnologija vam omogućava da koristite specijalizovane ARM64 instrukcije za verifikaciju povratnih adresa koristeći digitalne potpise koji su pohranjeni u neiskorištenim gornjim bitovima samog pokazivača;
    • u korisničkom načinu Linuxa dodano podrška za upotrebu drajvera za PCI uređaje sa virtuelnom PCI magistralom, implementiranu od strane upravljačkog programa PCI-over-virtio;
    • za x86 sisteme, dodata podrška za virtio-iommu paravirtualizovani uređaj, koji vam omogućava da šaljete IOMMU zahteve, kao što su ATTACH, DETACH, MAP i UNMAP, preko virtio transporta bez emulacije tablica memorijskih stranica;
    • Za Intelove procesore, od porodice Skylake do Coffee Lake, upotreba Intel TSX (Transactional Synchronization Extensions), koji obezbeđuju alate za poboljšanje performansi aplikacija sa više niti dinamičkim eliminisanjem nepotrebnih operacija sinhronizacije, je podrazumevano onemogućena. Ekstenzije su onemogućene zbog mogućnosti napada Zombieload, manipulisanje curenjem informacija kroz kanale treće strane koje nastaje tokom rada mehanizma za asinhroni prekid operacija (TAA, TSX Asynchronous Abort);
  • mrežni podsistem:
    • nastavak integracije u jezgro MPTCP (MultiPath TCP), proširenje TCP protokola za organizovanje rada TCP veze sa isporukom paketa istovremeno duž nekoliko ruta kroz različite mrežne interfejse povezane sa različitim IP adresama. U novom broju dodano mehanizam za postavljanje vlastitih pravila raspršivanja prometa za IPv4 i IPv6 (višestruka hash politika), omogućavajući iz korisničkog prostora da odredite koja polja u paketima, uključujući one inkapsulirane, će se koristiti prilikom izračunavanja hash-a koji određuje izbor putanje za paket;
    • podrška za socket je dodana virtuelnom transportnom virtio SOCK_SEQPACKET (uredan i pouzdan prenos datagrama);
    • Proširene su mogućnosti mehanizma soketa SO_REUSEPORT, koji omogućava da se nekoliko prislušnih soketa spoje na jedan port odjednom kako bi primali veze sa distribucijom dolaznih zahtjeva istovremeno na sve utičnice povezane preko SO_REUSEPORT, što pojednostavljuje kreiranje višenitnih serverskih aplikacija . U novoj verziji dodano sredstvo za prenos kontrole na drugu utičnicu u slučaju kvara prilikom obrade zahteva od strane prvobitno izabrane utičnice (rešava problem sa gubitkom pojedinačnih konekcija prilikom ponovnog pokretanja servisa);
  • oprema:
    • u drajveru amdgpu implementirano podrška za novu AMD Radeon RX 6000 seriju GPU-a, kodnih naziva “Beige Goby” (Navi 24) i “Yellow Carp”, kao i poboljšana podrška za Aldebaran GPU (gfx90a) i Van Gogh APU. Dodata mogućnost istovremenog rada sa nekoliko eDP panela. Za APU Renoir implementirana je podrška za rad sa šifriranim baferima u video memoriji (TMZ, Trusted Memory Zone). Dodata podrška za grafičke kartice koje se mogu isključiti. 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 je podrazumevano omogućena, što je ranije bilo omogućeno samo za Navi 1x, Vega i Polaris GPU-ove;
    • za AMD čipove dodata je podrška za dijeljenu virtuelnu memoriju (SVM, dijeljena virtualna memorija) na osnovu HMM (Heterogeneous memory management) podsistema, koji omogućava korištenje uređaja s vlastitim jedinicama za upravljanje memorijom (MMU, memory management unit), koji može 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 radi poboljšanja performansi prilikom igranja igara, uređivanja videa i 3D renderiranja;
    • u i915 drajveru za Intel video kartice uključeno podrška za Intel Alderlake P čipove;
    • dodat drm/hyperv drajver za Hyper-V virtuelni grafički adapter;
    • dodano Simpledrm grafički drajver koji koristi EFI-GOP ili VESA framebuffer koji obezbeđuje UEFI firmver ili BIOS za izlaz. Glavna svrha drajvera je da obezbedi mogućnosti grafičkog izlaza tokom početnih faza pokretanja, pre nego što se može koristiti potpuni DRM drajver. Drajver se takođe može koristiti kao privremeno rešenje za opremu koja još nema izvorne DRM drajvere;
    • dodano računarska podrška sve u jednom Malina Pi 400;
    • Dodat dell-wmi-privacy drajver za podršku hardverskih prekidača kamere i mikrofona uključenih u Dell laptopove;
    • za Lenovo laptopove dodano WMI interfejs za promenu BIOS parametara preko sysfs /sys/class/firmware-attributes/;
    • prošireno podrška za uređaje sa USB4 interfejsom;
    • dodano 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 laptopovima. Dodano zakrpe za smanjenje kašnjenja prije nego što se zvuk počne reproducirati na uređajima s USB sučeljem.

Izvor – opennet.ru.

izvor: linux.org.ru