Izdanje jezgre Linuxa 5.7

Nakon dva mjeseca razvoja Linus Torvalds podnijeti izdanje jezgre Linux 5.7. Među najznačajnijim promjenama: nova implementacija exFAT datotečnog sustava, bareudp modul za stvaranje UDP tunela, zaštita temeljena na autentifikaciji pokazivača za ARM64, mogućnost pripajanja BPF programa LSM rukovateljima, nova implementacija Curve25519, split- detektor zaključavanja, BPF kompatibilnost s PREEMPT_RT, uklanjanje ograničenja na veličinu retka od 80 znakova u kodu, uzimanje u obzir pokazatelja CPU temperature u planeru zadataka, mogućnost korištenja clone() za stvaranje procesa u drugoj cgrupi, zaštita od pisanja u memoriju koristeći userfaultfd.

Nova verzija prihvatila je 15033 popravka od 1961 programera,
veličina zakrpe - 39 MB (promjene su zahvatile 11590 datoteka, dodano 570560 redaka koda,
297401 redaka uklonjeno). Oko 41% svih prikazanih u 5.7
promjene su povezane s upravljačkim programima uređaja, otprilike 16% promjena ima
stav prema ažuriranju koda specifičnog za hardverske arhitekture, 13%
odnosi se na mrežni stog, 4% na datotečne sustave i 4% na interne
podsustavi jezgre.

Glavni inovacije:

  • Diskovni podsustav, I/O i datotečni sustavi
    • Dodana implementacija novog exFAT drajvera, osnovanaâ temeljeno na trenutnoj bazi koda "sdfat" (2.x) koju je razvio Samsung za svoje Android pametne telefone. Upravljački program koji je prethodno dodan u jezgru temeljio se na naslijeđenom Samsungovom kodu (verzija 1.2.9) i bio je oko 10% iza novog upravljačkog programa u performansama. Podsjetimo se da je dodavanje exFAT podrške u kernel postalo moguće nakon Microsofta опубликовала javne specifikacije i exFAT patente učinio dostupnima za korištenje bez naknade na Linuxu.
    • Btrfs implementira novu naredbu ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, koja vam omogućuje brisanje pododjeljka prema njegovom identifikatoru. Osigurana je puna podrška za kloniranje inline ekstenta. Proširen je broj točaka otkazivanja za redistribucijske operacije, čime su smanjena duga čekanja pri izvršavanju naredbe 'balance cancel'. Ubrzano je određivanje povratnih poveznica u opseg (primjerice, vrijeme izvršavanja testne skripte smanjeno je sa sat vremena na nekoliko minuta). Dodana je mogućnost pripajanja ekstenta datoteke svakom inodu stabla. Shema blokiranja koja se koristi prilikom pisanja u podparticije i kada se isključuje NOCOW je redizajnirana. Poboljšana učinkovitost izvršavanja fsync za raspone.
    • XFS je poboljšao provjeru metapodataka i fsck za aktivne particije. Predložena je biblioteka za ponovnu izgradnju struktura btree, koja će se u budućnosti koristiti za preradu xfs_repair i implementaciju mogućnosti oporavka bez demontaže particije.
    • Eksperimentalna podrška za postavljanje swap particije u SMB3 pohranu dodana je u CIFS. Implementirana POSIX proširenja za readdir, definirana u specifikaciji SMB3.1.1. Poboljšana izvedba pisanja za stranice od 64 KB kada je omogućen cache=strict način i koriste se verzije protokola 2.1+.
    • FS EXT4 prebačen je s bmapa i iopolla na korištenje iomapa.
    • F2FS pruža dodatnu podršku za kompresiju podataka korištenjem zstd algoritma. Prema zadanim postavkama za kompresiju se koristi algoritam LZ4. Dodana podrška za naredbu "chattr -c commit". Prikaz vremena montaže je osiguran. Dodan ioctl F2FS_IOC_GET_COMPRESS_BLOCKS za dobivanje informacija o broju komprimiranih blokova. Dodan izlaz podataka kompresije putem statx-a.
    • Datotečni sustav Ceph dodao je mogućnost lokalnog izvođenja operacija stvaranja i brisanja datoteka (unlink) bez čekanja na odgovor poslužitelja (rad u asinkronom načinu). Promjena, na primjer, može značajno poboljšati performanse prilikom pokretanja uslužnog programa rsync.
    • Mogućnost korištenja virtiofs kao datotečnog sustava najviše razine dodana je u OVERLAYFS.
    • Prepisano kod za prolaženje staze u VFS-u, kod za raščlanjivanje simboličke veze je prerađen, a prolazak kroz točku montiranja je unificiran.
    • U podsustavu scsi neprivilegiranim korisnicima dozvoljen izvršavanje ZBC naredbi.
    • U dm_writecache implementiran mogućnost postupnog brisanja predmemorije na temelju parametra max_age, koji postavlja maksimalni životni vijek bloka.
    • U dm_integrity dodao podrška za operaciju "odbaci".
    • U null_blk dodao podrška za zamjenu pogreške radi simulacije kvarova tijekom testiranja.
    • Dodano mogućnost slanja udev obavijesti o promjenama veličine blok uređaja.
  • Mrežni podsustav
    • Netfilter uključen promjena, značajno ubrzavajući obradu velikih popisa podudaranja (nftables setovi), koji zahtijevaju provjeru kombinacije podmreža, mrežnih portova, protokola i MAC adresa.
      Optimizacije uveden u modul nft_set_pipapo (PIle PAcket POlicies), koji rješava problem podudaranja sadržaja paketa s proizvoljnim rasponima stanja polja koji se koriste u pravilima filtriranja, kao što su IP i rasponi mrežnih priključaka (nft_set_rbtree i nft_set_hash manipuliraju podudaranjem intervala i izravnim odrazom vrijednosti ). Verzija pipapo vektorizirana korištenjem 256-bitnih AVX2 instrukcija na sustavu s procesorom AMD Epyc 7402 pokazala je povećanje performansi od 420% pri raščlanjivanju 30 tisuća zapisa uključujući kombinacije port-protokol. Povećanje pri usporedbi kombinacije podmreže i broja priključka pri raščlanjivanju 1000 zapisa bilo je 87% za IPv4 i 128% za IPv6.

    • Dodano bareudp modul, koji vam omogućuje enkapsulaciju različitih L3 protokola, kao što su MPLS, IP i NSH, u UDP tunel.
    • Nastavljena je integracija komponenti MPTCP (MultiPath TCP), proširenja TCP protokola za organiziranje rada TCP veze uz isporuku paketa istovremeno na nekoliko ruta kroz različita mrežna sučelja vezana za različite IP adrese.
    • Dodano podrška za mehanizme hardverskog ubrzanja za enkapsulaciju Ethernet okvira u 802.11 (Wi-Fi).
    • Prilikom premještanja uređaja iz jednog mrežnog imenskog prostora u drugi, prava pristupa i vlasništvo nad odgovarajućim datotekama u sysfs se prilagođavaju.
    • Dodana je mogućnost korištenja oznake SO_BINDTODEVICE za korisnike koji nisu root.
    • Treći dio zakrpa je prihvaćen, pretvarajući ethtool toolkit iz ioctl() u korištenje netlink sučelja. Novo sučelje olakšava dodavanje ekstenzija, poboljšava rukovanje pogreškama, omogućuje slanje obavijesti kada se stanje promijeni, pojednostavljuje interakciju između kernela i korisničkog prostora i smanjuje broj imenovanih popisa koje je potrebno sinkronizirati.
    • Dodana je mogućnost korištenja posebnih hardverskih akceleratora za izvođenje operacija praćenja veze.
    • U netfilteru dodano hook za spajanje klasifikatora odlaznih paketa (egress), koji je nadopunio prethodno prisutni hook za dolazne pakete (ingress).
  • Virtualizacija i sigurnost
    • Dodana hardverska implementacija provjere autentičnosti pokazivača (Provjera autentičnosti pokazivača), koji koristi specijalizirane ARM64 CPU instrukcije za zaštitu od napada pomoću tehnika povratno orijentiranog programiranja (ROP), u kojima napadač ne pokušava smjestiti svoj kod u memoriju, već djeluje na dijelovima strojnih instrukcija koje su već dostupne u učitanim bibliotekama, završavajući s instrukcijom vraćanja kontrole. Sigurnost se svodi na korištenje digitalnih potpisa za provjeru povratnih adresa na razini kernela. Potpis je pohranjen u neiskorištenim gornjim bitovima samog pokazivača. Za razliku od softverskih implementacija, stvaranje i provjera digitalnih potpisa provodi se pomoću posebnih CPU instrukcija.
    • Dodano mogućnost zaštite memorijskog područja od pisanja pomoću sistemskog poziva userfaultfd(), dizajniranog za rukovanje greškama stranice (pristup nedodijeljenim memorijskim stranicama) u korisničkom prostoru. Ideja je koristiti userfaultfd() i za otkrivanje povreda pristupa stranicama označenim kao zaštićenim od pisanja i za pozivanje rukovatelja koji može odgovoriti na takve pokušaje pisanja (na primjer, za rukovanje promjenama tijekom stvaranja živih snimaka pokrenutih procesa, stanje snimanje pri izbacivanju ispisa memorije na disk, implementacija zajedničke memorije, praćenje promjena u memoriji). Funkcionalnost ekvivalent koristeći mprotect() u kombinaciji sa SIGSEGV rukovateljem signala, ali radi osjetno brže.
    • SELinux je zastario parametar "checkreqprot", koji vam omogućuje 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čke veze smiju naslijediti kontekst svojih nadređenih direktorija.
    • Struktura uključen modul KRSI, koji vam omogućuje pripajanje BPF programa na bilo koje LSM kuke u kernelu. Promjena omogućuje stvaranje LSM modula (Linux Security Module) u obliku BPF programa za rješavanje problema revizije i obvezne kontrole pristupa.
    • Izvedeno Optimizira izvedbu /dev/random skupljanjem CRNG vrijednosti umjesto pojedinačnog pozivanja RNG instrukcija. Poboljšana izvedba getrandoma i /dev/randoma na ARM64 sustavima koji pružaju RNG upute.
    • Implementacija eliptične krivulje Curve25519 zamijenio za opciju iz knjižnice HACL, za koji zadržan matematički dokaz formalne provjere pouzdanosti.
    • Dodano mehanizam za obavještavanje o slobodnim memorijskim stranicama. Koristeći ovaj mehanizam, gostujući sustavi mogu prenijeti informacije o stranicama koje se više ne koriste glavnom sustavu, a domaćin može preuzeti podatke o stranici.
    • U vfio/pci dodao podrška za SR-IOV (Single-Root I/O virtualization).
  • Memorija i usluge sustava
    • Od 80 do 100 znakova povećana ograničenje maksimalne duljine retka u izvornim tekstovima. U isto vrijeme, programerima se i dalje preporučuje da ostanu unutar 80 znakova po retku, ali to više nije teško ograničenje. Nadalje, prekoračenje ograničenja veličine retka 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ćati se slobodnije prilikom usklađivanja koda, kao i spriječit će pretjerano lomljenje linija, uznemirujući razumijevanje koda i pretraživanje.
    • Dodano podrška za EFI mješoviti način pokretanja, koji vam omogućuje učitavanje 64-bitnog kernela iz 32-bitnog firmvera koji radi na 64-bitnom CPU-u bez korištenja specijaliziranog pokretača.
    • Uključeno sustav za identifikaciju i otklanjanje pogrešaka dvostrukih brava ("razdvojena brava"), što se događa kada se pristupa neusklađenim podacima u memoriji zbog činjenice da prilikom izvođenja atomske instrukcije podaci prelaze dvije linije CPU predmemorije. Takvo blokiranje rezultira značajnim smanjenjem performansi (1000 ciklusa sporije od atomske operacije na podacima koji padnu u jednu liniju predmemorije). 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ćuje praćenje temperaturnih senzora (Toplinski tlak) i provodi se uzimajući u obzir pregrijavanje prilikom postavljanja zadataka. Koristeći pruženu statistiku, termalni regulator može prilagoditi maksimalnu frekvenciju CPU-a kada se pregrije, a planer zadataka sada uzima u obzir smanjenje računalne snage zbog takvog smanjenja učestalosti prilikom raspoređivanja pokretanja zadataka (ranije je planer odgovarao na promjene učestalo s određenim kašnjenjem, neko vrijeme donoseći odluke na temelju prenapuhanih pretpostavki o raspoloživim računalnim resursima).
    • Planer zadataka uključuje nepromjenljivi pokazatelji praćenje opterećenja, što vam omogućuje ispravnu procjenu opterećenja, bez obzira na trenutnu radnu frekvenciju procesora. Promjena vam omogućuje točnije predviđanje ponašanja zadataka u uvjetima dinamičkih promjena napona i frekvencije CPU-a. Na primjer, zadatak koji je trošio 1/3 CPU resursa na 1000 MHz potrošit će 2/3 resursa kada frekvencija padne na 500 MHz, što je prethodno stvorilo lažnu pretpostavku da radi punim kapacitetom (tj. zadaci su se pojavljivali veći planeru samo smanjenjem učestalosti, što je dovelo do netočnih odluka u regulatoru schedutil cpufreq).
    • Upravljački program Intel P-state, koji je odgovoran za odabir načina rada, prebačen je u upotrebu raspored.
    • Implementirana je mogućnost korištenja BPF podsustava kada kernel radi u stvarnom vremenu (PREEMPT_RT). Prethodno, kada je PREEMPT_RT bio omogućen, BPF je morao biti onemogućen.
    • Dodan je novi tip BPF programa - BPF_MODIFY_RETURN, koji se može pridružiti funkciji u kernelu i promijeniti vrijednost koju ta funkcija vraća.
    • Dodano prilika Korištenje sistemskog poziva clone3() za stvaranje procesa u cgrupi koja se razlikuje od nadređene cgrupe, dopuštajući nadređenom procesu da primijeni ograničenja i omogući računovodstvo odmah nakon pokretanja novog procesa ili niti. Na primjer, upravitelj usluga može izravno dodijeliti nove usluge odvojenim cgrupama, a novi procesi, kada se stave u "zamrznute" cgrupe, odmah će biti zaustavljeni.
    • u Kbuildu dodao podrška za varijablu okruženja "LLVM=1" za prebacivanje na Clang/LLVM alat prilikom izgradnje kernela. Zahtjevi za verziju binutils su podignuti (2.23).
    • Odjeljak /sys/kernel/debug/kunit/ dodan je u debugfs s rezultatima kunit testova.
    • Dodan parametar pokretanja kernela pm_debug_messages (analogno /sys/power/pm_debug_messages), koji omogućuje ispis informacija o ispravljanju pogrešaka o radu sustava za upravljanje napajanjem (korisno pri otklanjanju pogrešaka s problemima hibernacije i stanja mirovanja).
    • Na asinkrono I/O sučelje io_uring dodatnu podršku spoj() и izbor atomskog međuspremnika.
    • Poboljšano profiliranje cgroup-a korištenjem perf alata. Prethodno je perf mogao samo profilirati zadatke u određenoj cgrupi i nije mogao saznati kojoj cgrupi pripada trenutni uzorak. perf sada dohvaća informacije o cgroupu za svaki uzorak, omogućujući vam da profilirate više od jedne cgroup i primijenite sortiranje po
      cgroup u izvješćima.

    • cgroupfs, pseudo-FS za upravljanje cgroups, ima dodatu podršku za proširene atribute (xattrs), s kojima, na primjer, možete ostaviti dodatne informacije za rukovatelje u korisničkom prostoru.
    • U kontroleru memorije cgroup dodanoi podrška za rekurzivnu zaštitu vrijednosti "memory.low", koja regulira minimalnu količinu RAM-a koja se daje članovima grupe. Prilikom montiranja hijerarhije cgroup s opcijom "memory_recursiveprot", vrijednost "memory.low" koja je postavljena za niže čvorove automatski će se distribuirati na sve podređene čvorove.
    • Dodano Uacce (Unified/User-space-access-intended Accelerator Framework) okvir za dijeljenje virtualnih adresa (SVA, Shared Virtual Addressing) između CPU-a i perifernih uređaja, omogućujući hardverskim akceleratorima pristup strukturama podataka u glavnom CPU-u.
  • Hardverske arhitekture
    • Za ARM arhitekturu, implementirana je mogućnost dohvaćanja memorije bez prekida.
    • Za RISC-V arhitekturu, dodana je podrška za vruće uključivanje i uklanjanje CPU-a (CPU hotplug). Za 32-bitni RISC-V implementiran je eBPF JIT.
    • Uklonjena je mogućnost korištenja 32-bitnih ARM sustava za pokretanje KVM gostujućih okruženja.
    • Uklonjena je "dummy" NUMA implementacija za s390 arhitekturu, za koju nisu pronađeni slučajevi upotrebe za postizanje poboljšanja performansi.
    • Za ARM64, dodana podrška za proširenje AMU (Activity Monitors Unit), definirano u ARMv8.4 i pružanje brojača performansi koji se koriste za izračunavanje korekcijskih faktora skaliranja frekvencije u planeru zadataka.
  • Оборудование
    • Dodano podrška za vDPA uređaje koji koriste kanal za razmjenu podataka koji je u skladu s virtio specifikacijama. vDPA uređaji mogu biti ili fizički povezana oprema ili softverski emulirani virtualni uređaji.
    • U podsustavu GPIO pojavio nova ioctl() naredba za praćenje promjena, koja vam omogućuje da informirate proces o promjenama u stanju bilo koje GPIO linije. Kao primjer korištenja nove naredbe zaprosio uslužni program gpio-watch.
    • U i915 DRM upravljačkom programu za Intel video kartice uključeni zadana podrška za Tigerlake (“Gen12”) čipove i dodana početna podrška za OLED kontrolu pozadinskog osvjetljenja. Poboljšana podrška za Ice Lake, Elkhart Lake, Baytrail i Haswell čipove.
    • U upravljačkom programu amdgpu dodao mogućnost učitavanja firmware-a u USBC čip za ASIC. Poboljšana podrška za AMD Ryzen 4000 "Renoir" čipove. Sada postoji podrška za upravljanje OLED panelima. Omogućen prikaz statusa firmvera u debugfovima.
    • Mogućnost korištenja OpenGL 4 u gostujućim sustavima dodana je u vmwgfx DRM upravljački program za VMware virtualizacijske sustave (prethodno je OpenGL 3.3 bio podržan).
    • Dodan je novi DRM upravljački program za sustav prikaza platforme TI Keystone.
    • Dodani drajveri za LCD panele: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Sustavu upravljanja električnom energijom dodao podrška za Intel Jasper Lake (JSL) platformu temeljenu na Atomu.
    • Dodana podrška za prijenosno računalo Pinebook Pro temeljeno na Rockchipu RK3399, Pine64 PineTab tablet i pametni telefon PinePhone baziran na Allwinner A64.
    • Dodana 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.

    • Dodana podrška za ARM ploče i platforme Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 opcija ploča i.MX6 TechNexion Pico, tri nove opcije Toradex Colibri, Samsung S7710 Galaxy Xcover 2 temeljen na ST -Ericsson u8500, DH Electronics DHCOM SoM i PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Izvor: opennet.ru

Dodajte komentar