Izdanje kernela Linux 5.7

Nakon dva mjeseca razvoja, Linus Torvalds uveo izdanje kernela Linux 5.7. Među najznačajnijim promjenama: nova implementacija exFAT sistema datoteka, bareudp modul za kreiranje UDP tunela, zaštita zasnovana na autentifikaciji pokazivača za ARM64, mogućnost pričvršćivanja BPF programa na LSM rukovaoce, nova implementacija Curve25519, split- detektor zaključavanja, BPF kompatibilnost sa PREEMPT_RT, uklanjanje ograničenja veličine linije od 80 znakova u kodu, uzimajući u obzir indikatore temperature procesora u rasporedu zadataka, mogućnost korištenja clone() za pokretanje procesa u drugoj cgrupi, zaštita od pisanja u memoriju koristeći userfaultfd.

Nova verzija uključuje 15033 popravki od 1961 programera,
veličina zakrpe - 39 MB (promjene su uticale na 11590 datoteka, dodano 570560 linija koda,
297401 red je uklonjen). Oko 41% svih predstavljenih u 5.7
promjene se odnose na drajvere uređaja, otprilike 16% promjena je
stav prema ažuriranju koda specifičnog za hardverske arhitekture, 13%
odnosi se na mrežni stog, 4% na sistem datoteka i 4% na interne
podsistemi kernela.

Glavni inovacije:

  • Diskovni podsistem, I/O i sistemi datoteka
    • Dodata nova implementacija exFAT drajvera, osnovanaâ baziran na trenutnoj bazi kodova „sdfat“ (2.x) koju je razvio Samsung za svoje Android pametne telefone. Drajver koji je prethodno dodat kernelu bio je zasnovan na zastarelom Samsung kodu (verzija 1.2.9) i zaostajao je oko 10% za novim drajverom u performansama. Podsjetimo da je dodavanje exFAT podrške kernelu postalo moguće nakon Microsofta objavljeno javne specifikacije i omogućili exFAT patente za besplatnu upotrebu na Linuxu.
    • Btrfs implementira novu naredbu ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, koja vam omogućava da izbrišete pododjeljak prema njegovom identifikatoru. Osigurana je potpuna podrška za kloniranje inline ekstenata. Proširen je broj tačaka otkazivanja za operacije preraspodjele, što je smanjilo dugo čekanje pri izvršavanju naredbe 'poništavanje stanja'. Ubrzano je određivanje opsega povratnih veza (na primjer, vrijeme izvršavanja test skripte je smanjeno sa jednog sata na nekoliko minuta). Dodata je mogućnost pričvršćivanja ekstenata datoteke svakom inodu stabla. Šema blokiranja koja se koristi prilikom pisanja na podparticije i kada se isključuje NOCOW je redizajnirana. Poboljšana efikasnost izvršavanja fsync za opsege.
    • XFS je poboljšao provjeru metapodataka i fsck za aktivne particije. Predložena je biblioteka za rekonstrukciju btree struktura, koja će se u budućnosti koristiti za preradu xfs_repair-a i implementaciju mogućnosti oporavka bez demontaže particije.
    • Eksperimentalna podrška za postavljanje swap particije u SMB3 memorije dodata je CIFS-u. Implementirane POSIX ekstenzije za readdir, definirane u SMB3.1.1 specifikaciji. Poboljšane performanse pisanja za stranice od 64 KB kada je omogućen cache=strict mod i koriste se verzije protokola 2.1+.
    • FS EXT4 je prebačen sa bmap-a i iopoll-a na korištenje iomap-a.
    • F2FS pruža opcionu podršku za kompresiju podataka koristeći zstd algoritam. Podrazumevano, LZ4 algoritam se koristi za kompresiju. Dodata podrška za komandu "chattr -c commit". Omogućen je prikaz vremena montaže. Dodan ioctl F2FS_IOC_GET_COMPRESS_BLOCKS za dobivanje informacija o broju komprimiranih blokova. Dodan izlaz podataka kompresije putem statxa.
    • Ceph sistem datoteka je dodao mogućnost lokalnog izvođenja operacija kreiranja i brisanja datoteka (unlink) bez čekanja odgovora od servera (radi u asinhronom načinu). Promjena, na primjer, može značajno poboljšati performanse pri pokretanju uslužnog programa rsync.
    • Mogućnost korištenja virtiofs-a kao sistema datoteka najvišeg nivoa je dodana u OVERLAYFS.
    • Prepisano kod prelaska putanje u VFS, kod za raščlanjivanje simboličke veze je prerađen, a prelazak preko tačke montiranja je ujedinjen.
    • U scsi podsistemu neprivilegiranim korisnicima dozvoljeno izvršavanje ZBC komandi.
    • U dm_writecache implementirano mogućnost postepenog brisanja keša na osnovu parametra max_age, koji postavlja maksimalni životni vijek bloka.
    • U dm_integrity dodano podrška za operaciju "odbaci".
    • U null_blk dodano podrška za zamjenu grešaka za simulaciju kvarova tokom testiranja.
    • Dodano mogućnost slanja udev obavijesti o promjenama veličine blok uređaja.
  • Mrežni podsistem
    • Netfilter uključen promjena, značajno ubrzavajući obradu velikih lista podudaranja (nftables skupova), koji zahtijevaju provjeru kombinacije podmreža, mrežnih portova, protokola i MAC adresa.
      Optimizacije predstavljen u modul nft_set_pipapo (PIle PAcket POlicies), koji rješava problem usklađivanja sadržaja paketa sa proizvoljnim opsezima stanja polja koji se koriste u pravilima filtriranja, kao što su rasponi IP i mrežnih portova (nft_set_rbtree i nft_set_hash manipuliraju podudaranjem intervala i direktnim odrazom vrijednosti ). Verzija pipapo vektorizovana korišćenjem 256-bitnih AVX2 instrukcija na sistemu sa AMD Epyc 7402 procesorom pokazala je povećanje performansi od 420% kada se analizira 30 hiljada zapisa uključujući kombinacije port-protokola. Povećanje kada se uporedi kombinacija podmreže i broja porta pri raščlanjivanju 1000 zapisa bilo je 87% za IPv4 i 128% za IPv6.

    • Dodano bareudp modul, koji vam omogućava da inkapsulirate različite L3 protokole, kao što su MPLS, IP i NSH, u UDP tunel.
    • Nastavljena je integracija MPTCP (MultiPath TCP) komponenti, proširenja TCP protokola za organizovanje rada TCP veze sa isporukom paketa istovremeno duž nekoliko ruta kroz različite mrežne interfejse vezane za različite IP adrese.
    • Dodano podrška za mehanizme hardverskog ubrzanja za inkapsuliranje Ethernet okvira u 802.11 (Wi-Fi).
    • Prilikom premještanja uređaja iz jednog mrežnog imenskog prostora u drugi, prilagođavaju se prava pristupa i vlasništvo nad odgovarajućim datotekama u sysf-u.
    • Dodata mogućnost korištenja SO_BINDTODEVICE zastavice za korisnike koji nisu root.
    • Treći dio zakrpa je prihvaćen, pretvarajući ethtool komplet alata iz ioctl() u korištenje netlink interfejsa. Novo sučelje olakšava dodavanje ekstenzija, poboljšava rukovanje greškama, omogućava slanje obavijesti kada se stanje promijeni, pojednostavljuje interakciju između kernela i korisničkog prostora i smanjuje broj imenovanih lista koje treba sinkronizirati.
    • Dodata mogućnost korištenja posebnih hardverskih akceleratora za obavljanje operacija praćenja veze.
    • U netfilteru dodano kuka za povezivanje klasifikatora odlaznih paketa (egress), koja je nadopunila prethodno prisutna kuka za dolazne pakete (ingress).
  • Virtuelizacija i sigurnost
    • Dodata hardverska implementacija provjere autentičnosti pokazivača (Pointer Authentication), koji koristi specijalizirane ARM64 CPU instrukcije za zaštitu od napada korištenjem tehnika programiranja orijentiranog na povratak (ROP), u kojima napadač ne pokušava smjestiti svoj kod u memoriju, već radi na dijelovima strojnih instrukcija koje su već dostupne u učitanim bibliotekama, završavajući sa kontrolnim povratnim uputom. Sigurnost se svodi na korištenje digitalnih potpisa za provjeru povratnih adresa na nivou kernela. Potpis je pohranjen u neiskorištenim gornjim bitovima samog pokazivača. Za razliku od softverskih implementacija, kreiranje i verifikacija digitalnih potpisa vrši se pomoću posebnih CPU instrukcija.
    • Dodano mogućnost zaštite memorijskog područja od pisanja korištenjem sistemskog poziva userfaultfd(), dizajniranog za rukovanje greškama stranica (pristup nedodijeljenim memorijskim stranicama) u korisničkom prostoru. Ideja je da se koristi userfaultfd() i za otkrivanje kršenja pristupa stranicama označenim kao zaštićene od pisanja i za pozivanje rukovatelja koji može odgovoriti na takve pokušaje pisanja (na primjer, za rukovanje promjenama tokom kreiranja živih snimaka pokrenutih procesa, stanja hvatanje prilikom dampinga memorijskih dumpova na disk, implementacija dijeljene memorije, praćenje promjena u memoriji). Funkcionalnost ekvivalentno koristeći mprotect() u kombinaciji sa SIGSEGV signalom za rukovanje, ali radi znatno brže.
    • SELinux je zastario parametar "checkreqprot", koji vam omogućava da onemogućite provjere zaštite memorije prilikom obrade pravila (dopuštajući korištenje izvršnih memorijskih područja, bez obzira na pravila navedena u pravilima). Kernfs simboličnim vezama je dozvoljeno da naslijede kontekst svojih roditeljskih direktorija.
    • Sastav uključeno modul KRSI, koji vam omogućava da prikačite BPF programe na bilo koje LSM kuke u kernelu. Promjena vam omogućava da kreirate LSM module (Linux Security Module) u obliku BPF programa za rješavanje problema revizije i obavezne kontrole pristupa.
    • Izvršeno Optimizira performanse /dev/random skupljanjem CRNG vrijednosti umjesto pojedinačnog pozivanja RNG instrukcija. Poboljšane performanse getrandom i /dev/random na ARM64 sistemima koji pružaju RNG instrukcije.
    • Implementacija eliptične krive Curve25519 zamijenjen za opciju iz biblioteke HACL, za koji dato matematički dokaz formalne verifikacije pouzdanosti.
    • Dodano mehanizam za obavještavanje o slobodnim memorijskim stranicama. Koristeći ovaj mehanizam, sistemi za goste mogu prenijeti informacije o stranicama koje se više ne koriste na host sistem, a domaćin može vratiti podatke stranice.
    • U vfio/pci dodano podrška za SR-IOV (single-root I/O virtualization).
  • Memorijski i sistemski servisi
    • Od 80 do 100 znakova povećana ograničenje maksimalne dužine reda u izvornim tekstovima. Istovremeno, programerima se i dalje preporučuje da ostanu unutar 80 znakova po redu, ali to više nije teško ograničenje. Osim toga, prekoračenje ograničenja veličine linije sada će rezultirati upozorenjem o izgradnji samo ako se checkpatch pokrene s opcijom '--strict'. Promjena će omogućiti da se programeri ne ometaju manipulacija s razmacima i osjećajte se slobodnije prilikom poravnavanja koda, kao i će spriječiti prekomjerno lomljenje linije, uznemirujuće razumijevanje koda i pretraživanje.
    • Dodano podrška za EFI mešoviti režim pokretanja, koji vam omogućava da učitate 64-bitni kernel sa 32-bitnog firmvera koji radi na 64-bitnom CPU-u bez korišćenja specijalizovanog pokretača.
    • Uključeno sistem za identifikaciju i otklanjanje grešaka u split bravama (“split lock"), koji se javlja 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 smanjenja performansi (1000 ciklusa sporije od atomske operacije nad podacima koji padaju u jednu liniju keša). Ovisno o parametru pokretanja "split_lock_detect", kernel može otkriti takva zaključavanja u hodu i izdati upozorenja ili poslati SIGBUS signal aplikaciji koja uzrokuje zaključavanje.
    • Planer zadataka omogućava praćenje senzora temperature (Toplotni pritisak) i implementirano uzimajući u obzir pregrijavanje prilikom postavljanja zadataka. Koristeći priloženu statistiku, termoregulator može podesiti maksimalnu frekvenciju CPU-a kada se pregrije, a planer zadataka sada uzima u obzir smanjenje računske snage zbog takvog smanjenja frekvencije kada planira izvršavanje zadataka (ranije je planer odgovarao na promjene učestalost sa određenim zakašnjenjem, već neko vrijeme donošenje odluka na osnovu prenapuhanih pretpostavki o raspoloživim računarskim resursima).
    • Planer zadataka uključuje invarijantni indikatori praćenje opterećenja, što vam omogućava da ispravno procijenite opterećenje, bez obzira na trenutnu radnu frekvenciju procesora. Promjena vam omogućava da preciznije predvidite ponašanje zadataka u uvjetima dinamičkih promjena napona i frekvencije procesora. Na primjer, zadatak koji je potrošio 1/3 CPU resursa na 1000 MHz će potrošiti 2/3 resursa kada frekvencija padne na 500 MHz, što je prethodno stvorilo pogrešnu pretpostavku da je radio punim kapacitetom (tj. pojavili su se zadaci veća za planer samo smanjenjem frekvencije, što je dovelo do donošenja pogrešnih odluka u schedutil cpufreq guvernoru).
    • Intel P-state drajver, koji je odgovoran za odabir načina rada, prebačen je na upotrebu scheduletil.
    • Implementirana je mogućnost korištenja BPF podsistema kada kernel radi u realnom vremenu (PREEMPT_RT). Ranije, kada je PREEMPT_RT bio omogućen, BPF je trebao biti onemogućen.
    • Dodan je novi tip BPF programa - BPF_MODIFY_RETURN, koji se može priključiti funkciji u kernelu i promijeniti vrijednost koju vraća ova funkcija.
    • Dodano prilika Korištenje sistemskog poziva clone3() za kreiranje procesa u cgroup-u koji se razlikuje od roditeljske cgroup, omogućavajući roditeljskom procesu da primijeni ograničenja i omogući računovodstvo odmah nakon pokretanja novog procesa ili niti. Na primjer, menadžer servisa može direktno dodijeliti nove usluge odvojenim cgrupama, a novi procesi, kada se smjeste u „zamrznute“ cgrupe, bit će odmah zaustavljeni.
    • Kbuild dodano podrška za varijablu okruženja "LLVM=1" za prebacivanje na Clang/LLVM komplet alata prilikom izgradnje kernela. Zahtjevi za binutils verziju su podignuti (2.23).
    • Odjeljak /sys/kernel/debug/kunit/ je dodat u debugfs sa rezultatima kunit testova.
    • Dodan parametar za pokretanje kernela pm_debug_messages (analogno /sys/power/pm_debug_messages), koji omogućava izlaz informacija za otklanjanje grešaka o radu sistema za upravljanje napajanjem (korisno pri otklanjanju grešaka u hibernaciji i režimu mirovanja).
    • Na asinhroni I/O interfejs io_uring podrška dodata spoj () и odabir atomskog pufera.
    • Poboljšano profiliranje cgroup koristeći perf toolkit. Ranije je perf mogao samo profilirati zadatke u određenoj cgrupi i nije mogao saznati kojoj cgrupi pripada trenutni uzorak. perf sada prima cgroup informacije za svaki uzorak, omogućavajući vam da profilišete više od jedne cgrupe i primenite sortiranje po
      cgroup u izvještajima.

    • cgroupfs, pseudo-FS za upravljanje cgroupovima, je dodao podršku za proširene atribute (xattrs), pomoću kojih, na primjer, možete ostaviti dodatne informacije za rukovaoce u korisničkom prostoru.
    • U cgroup kontroleru memorije dodanoi podršku za rekurzivnu zaštitu vrijednosti “memory.low”, koja reguliše minimalnu količinu RAM-a koja se daje članovima grupe. Kada montirate hijerarhiju cgroup sa opcijom "memory_recursiveprot", vrijednost "memory.low" koja je postavljena za niže čvorove će se automatski distribuirati na sve podređene čvorove.
    • Dodano Uacce (Unified/User-space-accelerator Framework namijenjen pristupu) okvir za dijeljenje virtuelnih adresa (SVA, Shared Virtual Addressing) između CPU-a i perifernih uređaja, omogućavajući hardverskim akceleratorima pristup strukturama podataka u glavnom CPU-u.
  • Hardverske arhitekture
    • Za ARM arhitekturu, implementirana je mogućnost hot-fetch memorije.
    • Za RISC-V arhitekturu, dodata je podrška za hot plugging i uklanjanje CPU-a (CPU hotplug). Za 32-bitni RISC-V implementiran je eBPF JIT.
    • Mogućnost korištenja 32-bitnih ARM sistema za pokretanje KVM gostujućih okruženja je uklonjena.
    • Uklonjena "lažna" implementacija NUMA za arhitekturu s390, za koju nisu pronađeni slučajevi upotrebe za postizanje poboljšanja performansi.
    • Za ARM64, dodata je podrška za ekstenziju AMU (Activity Monitors Unit), definisanu u ARMv8.4 i koja pruža brojače performansi koji se koriste za izračunavanje faktora korekcije skaliranja frekvencije u planeru zadataka.
  • Oprema
    • Dodano podrška za vDPA uređaje koji koriste kanal za razmjenu podataka koji je u skladu sa virtio specifikacijama. vDPA uređaji mogu biti ili fizički povezana oprema ili softverski emulirani virtuelni uređaji.
    • U GPIO podsistemu pojavila nova ioctl() naredba za praćenje promjena, koja vam omogućava da informišete proces o promjenama u stanju bilo koje GPIO linije. Kao primjer korištenja nove naredbe predložio gpio-watch uslužni program.
    • U i915 DRM drajveru za Intel video kartice uključeno podrazumevana podrška za Tigerlake (“Gen12”) čipove i dodata početna podrška za kontrolu OLED pozadinskog osvetljenja. Poboljšana podrška za čipove Ice Lake, Elkhart Lake, Baytrail i Haswell.
    • U drajveru amdgpu dodano mogućnost učitavanja firmvera u USBC čip za ASIC. Poboljšana podrška za AMD Ryzen 4000 "Renoir" čipove. Sada postoji podrška za kontrolu OLED panela. Omogućen prikaz statusa firmvera u debugfs-u.
    • Mogućnost korištenja OpenGL 4 u gostujućim sistemima dodata je vmwgfx DRM drajveru za VMware virtuelizacijske sisteme (ranije je bio podržan OpenGL 3.3).
    • Dodano je novo DRM drajver tidss za sistem prikaza TI Keystone platforme.
    • Dodati drajveri za LCD panele: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II Frida F01D350
    • Na sistem upravljanja energijom dodano podrška za Atom-baziranu platformu Intel Jasper Lake (JSL).
    • Dodata podrška za Pinebook Pro laptop baziran na Rockchip RK3399, Pine64 PineTab tabletu i pametnom telefonu PinePhone baziran na Allwinner A64.
    • Dodata podrška za nove audio kodeke i čipove:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Dodata podrška za ARM ploče i platforme Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 i.MX6 TechNexion Pico opcije ploče, tri nove Toradex Colibri opcije, Samsung S7710 zasnovan na Galaxy STcover-u -Ericsson u2, DH Electronics DHCOM SoM i PDK8500, Renesas M2ULCB, Hoperun HiHope, Linutronix Testbox v3, PocketBook Touch Lux 2.

izvor: opennet.ru

Dodajte komentar