Izdaja jedra Linux 5.9

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.9. Med najbolj opaznimi spremembami so: omejitev uvoza simbolov iz lastniških modulov v GPL module, pospešitev operacij preklapljanja konteksta z uporabo procesorske instrukcije FSGSBASE, podpora za stiskanje jedrskih slik s pomočjo Zstd, prenova razporeditve prioritet za niti v jedru, podpora protokolu PRP (Parallel Redundancy Protocol), načrtovanje ob upoštevanju širine pasu v načrtovalniku deadline, proaktivno pakiranje pomnilniških strani, zastavica capability CAP_CHECKPOINT_RESTOR, sistemski klic close_range(), izboljšanje zmogljivosti dm-crypt, odstranitev kode za 32-bitne gostiteljske sisteme Xen PV, nov mehanizem upravljanja s pomnilnikom slab, možnost „rescue“ v Btrfs, podpora za inline šifriranje v ext4 in F2FS.

V novo različico je bilo sprejetih 16074 popravkov od 2011 razvijalcev,
velikost popravka je 62 MB (spremembe so se dotaknile 14548 datotek, dodanih je bilo 782155 vrstic kode, 314792 vrstic je bilo odstranjenih). Približno 45 % vseh sprememb v 5.9
je povezanih z gonilniki naprav, približno 15 % sprememb se nanaša
na posodabljanje kode, specifične za strojne arhitekture, 13 %
je povezanih z omrežnim stebrom, 3 % z datotečnimi sistemi in 3 % z notranjimi
podsystemi jedra.

Glavne novosti:

  • Pomnilnik in sistemske storitve
    • Zaostrena zaščita pred uporabo GPL-ploskev za povezovanje lastniških gonilnikov s komponentami jedra, ki so na voljo le za module pod GPL licenco. Zastavica TAINT_PROPRIETARY_MODULE zdaj podeduje vse module, ki uvozijo simbole iz modulov s to zastavico. Če GPL modul poskusi uvoziti simbole iz ne-GPL modula, ta GPL modul podeduje oznako TAINT_PROPRIETARY_MODULE in ne more dostopati do komponent jedra, dostopnih samo za module pod GPL licenco, celo če je modul prej uvozil simbole iz kategorije „gplonly“. Nazaj blokiranje (izvoz samo EXPORT_SYMBOL_GPL v modulih, ki so uvozili EXPORT_SYMBOL_GPL), kar bi lahko motilo delovanje lastniških gonilnikov, ni realizirano (podeduje se samo zastavica lastniškega modula, vendar ne GPL-prikaz).
    • Dodana podpora mehanizmu kcompactd za proaktivno pakiranje pomnilniških strani v ozadju, ki omogoča povečanje števila velikih strani pomnilnika, dostopnih jedru. Predvideva se, da ozadnje pakiranje s minimalnimi prevoznimi stroški zmanjša zakasnitve pri dodeljevanju velikih strani pomnilnika (huge-page) za 70–80-krat v primerjavi z prej uporabljenim mehanizmom pakiranja, ki se zažene po potrebi (on-demand). Za določitev meja zunanje fragmentacije, ki jo bo zagotavljal kcompactd, je bila dodana sysctl vm.compaction_proactiveness.
    • Dodana podpora za stiskanje jedrskih slik z uporabo algoritma Zstandard (zstd).
    • Za sisteme x86 je bila uvedena podpora za procesorsko ukazno četico FSGSBASE, ki omogoča branje in spreminjanje vsebine registrov FS/GS iz uporabniškega prostora. V jedru se FSGSBASE uporablja za pospeševanje operacij preklapljanja kontekstov s črpanjem odvečnih zapisov MSR za GSBASE, medtem ko v uporabniškem prostoru omogoča obvladovanje brez nepotrebnih sistemskih klicev za spremembo FS/GS.
    • Dodano parameter »allow_writes«, ki preprečuje spremembe MSR-register z procesorja iz uporabniškega prostora in omejuje dostop do vsebine teh registrov z operacijami branja, saj lahko sprememba MSR povzroči težave. Privzeto zapis še ni prepovedan, spremembe MSR pa se beležijo v dnevniku, a v prihodnosti je načrtovano, da se privzeti dostop prevede v način samo za branje.
    • V vmesnik asinhronega vnosa/izvoda io_uring je bila dodana popolna podpora za asinhrone operacije predpomnjenega branja, ki ne zahtevajo vključitve jeder. Podpora za zapis je predvidena v naslednji izdaji.
    • V načrtovalniku vnosa/izvoda deadline je bila načrtovanje ob upoštevanju propustnosti, koja omogućava sprejemati pravilne odločitve na asimetričnih sistemih, kot so ARM sistemi na osnovi arhitektur DynamIQ in big.LITTLE, ki kombinirajo močna in manj zmogljiva energetsko učinkovita CPU jedra v eni čipu. Še posebej, nov način omogoča izogibanje neskladjem pri načrtovanju, ko počasno jedro CPU nima dovolj virov za opravljanje naloge v določenem času.
    • Model porabe energije v jedru (Okvir Energy Model) zdaj opisuje ne samo vedenje porabe energije CPU, temveč zajema tudi periferne naprave.
    • Uveden je sistemski poziv close_range(), koji omogućava procesu da zatvori ceo opseg otvorenih deskriptora datoteka odjednom.
    • Iz implementacije tekstualne konzole i drajvera fbcon uklonjen je kod, koji omogućava programsko pomeranje teksta unazad (CONFIG_VGACON_SOFT_SCROLLBACK) za više od veličine video memorije tekstualnog moda VGA.
    • Redo algoritam dodeljivanja prioriteta za niti unutar jezgra. Nova verzija pruža bolju konzistentnost u svim podsystemima jezgra prilikom dodeljivanja prioriteta zadacima u realnom vremenu.
    • Dodana je sysctl sched_uclamp_util_min_rt_default za upravljanje parametrima forsiranja frekvencije CPU za zadatke u realnom vremenu (na primer, moguće je u hodu menjati ponašanje prilikom izvršavanja zadataka u realnom vremenu radi uštede energije nakon prelaska na napajanje iz baterije ili na mobilnim sistemima).
    • Pripremljena je podrška za implementaciju tehnologije Transparent Huge Pages u stranici keša.
    • U mehanizmu fanotify implementirane su nove zastavice FAN_REPORT_NAME i FAN_REPORT_DIR_FID za prenosenje informacija o roditeljskom imenu i jedinstvenom identifikatoru FID prilikom nastanka događaja kreiranja, brisanja ili premestanja elemenata direktorijuma, kao i objekata koji nisu povezani sa direktorijumima.
    • Za cgroups je realiziran novi kontroler raspodele memorije slab (slab memory controller), koji se ističe prebacivanjem računanja slab sa nivoa stranica memorije na nivo objekata jezgra, što omogućava zajedničko korišćenje slab-stranica u različitim cgroup, umesto dodeljivanja odvojenih kešova slab za svaku cgroup. Predloženi pristup omogućava povećanje efikasnosti korišćenja slab, smanjenje za 30-45% veličine korišćene memorije za slab, značajno smanjenje ukupne potrošnje memorije od strane jezgra i smanjenje fragmentacije memorije.
    • U zvučnoj podsistemu ALSA in USB-steku, u skladu sa nedavno sprejetimi preporukama za korišćenje inkluzivne terminologije u jezgru Linux, izvršena je pročišćenje nepoličkih termina. Kod je očišćen od upotrebe reči „slave“, „master“, „blacklist“ i „whitelist“.
  • Virtualizacija in varnost
    • Pri kompajliranju jezgra koristeći kompajler Clang vykoukly omogućena je opcija (CONFIG_INIT_STACK_ALL_ZERO) automatske inicijalizacije svim varijablama koje se čuvaju na steku sa nulom (prilikom kompajliranja se navodi „-ftrivial-auto-var-init=zero“).
    • U podsistem seccomp, pri korišćenju režima kontrole procesa u korisničkom prostoru, je dodana možnost nadomestki v sledenem procesu datotečnih descriptorjev za popolno emulacijo sistemskih klicev, ki vodijo do ustvarjanja datotečnih descriptorjev. Funkcionalnost je iskana v izoliranih kontejnerskih sistemih in implementaciji peskovnika za Chrome.
    • Za arhitekturi xtensa in csky je dodana podpora za omejevanje sistemskih klicev s pomočjo podsystema seccomp. Za xtensa je dodatno implementirana podpora za mehanizem audita.
    • Dodano nov capability-flag CAP_CHECKPOINT_RESTORE, ki omogoča dostop do možnosti, povezanih z zamrznitvijo in obnovitvijo stanja procesov, brez prenosa dodatnih privilegijev.
    • V GCC 11 so implementirane vse možnosti, potrebne za
      oddebuggerskega orodja KCSAN (Kernel Concurrency Sanitizer), namenjenega dinamičnemu odkrivanju stanj dirke znotraj jedra. Tako se lahko KCSAN zdaj uporablja z jedri, sestavljenimi v GCC.
    • Za AMD Zen in novejše modele CPU je dodana podpora tehnologiji P2PDMA, ki omogoča uporabo DMA za neposredno prenos podatkov med pomnilnikom dveh naprav, povezanih z vodilom PCI.
    • V dm-crypt je dodan način, ki omogoča zmanjšanje zakasnitev s pomočjo izvajanja kriptografskega obdelovanja podatkov brez uporabe delovnih vrst. Ta način je prav tako potreben za pravilno delovanje z zoniranimi bloki naprav (naprave z območji, ki jih je treba zapisovati zaporedno s posodobitvijo celotne skupine blokov). Opravljeno je bilo delo na povečevanju propustnosti in zmanjševanju zakasnitev v dm-crypt.
    • Odstranjena je podpora za 32-bitne gostujoče sisteme, ki delujejo v načinu paravirtualizacije pod nadzorom hipervizorja Xen. Uporabnikom takih sistemov se priporoča prehod na uporabo 64-bitnih jeder v gostujočih okoljih ali uporaba popolne (HVM) ali kombinirane (PVH) virtualizacije namesto paravirtualizacije (PV).
  • Дисковая подсистема, ввод/вывод и файловые системы
    • V datotečnem sistemu Btrfs je bila uvedena možnost montaže „rescue“, ki enotno omogoča dostop do vseh drugih možnosti za obnovitev. Odstranjena je podpora za možnosti „alloc_start“ in „subvolrootid“, zastarala je možnost „inode_cache“. Opravljena je bila optimizacija zmogljivosti, še posebej opazno je pospešeno izvajanje operacij fsync(). Dodana možnost uporabe alternativnih vrst kontrolnih sum, ki se razlikujejo od CRC32c.
    • Dodana možnost uporabe inline-šifriranja (Inline Encryption) v datotečnih sistemih ext4 in F2FS, za kar je predvidena možnost montaže »inlinecrypt«. Način inline-šifriranja omogoča uporabo vgrajenih mehanizmov šifriranja v krmilniku pogona, ki opravljajo prozorno šifriranje in dešifriranje vhodno/izhodnih podatkov.
    • V XFS zagotovljeno izpust inode (flush) v popolnoma asinhronem načinu, ki ne blokira procesov med izvajanjem operacije čiščenja pomnilnika. Rešena je dolgoletna težava s kvotami, zaradi katere so bili opozorila o prekomernih mehkih omejitvah in omejitvah števila inode nepravilno spremljani. Poenotena je bila implementacija podpore DAX za ext4 in xfs.
    • V Ext4 je bila uvedena predhodno nalaganje bitnih kartic za razporeditev blokov. V kombinaciji z omejitvijo skeniranja neiniciranih skupin je optimizacija omogočila skrajšanje časa montaže zelo velikih particij.
    • V F2FS dodano ioctl F2FS_IOC_SEC_TRIM_FILE, ki omogoča uporabo ukazov TRIM/discard za fizično izničitev določenih podatkov v datoteki, na primer za odstranitev ključev dostopa brez ostanka podatkov na pomnilniku.
      V F2FS prav tako dodano nov način zbiranja odpadkov GC_URGENT_LOW, ki deluje agresivno z izklopom nekaterih preverjanj stanja neaktivnosti (idle) pred zagonjem zbiralnika odpadkov.
    • V bcache je bila velikost bucket_size za ekstenzije povečana s 16 na 32 bitov v okviru priprav na omogočitev uporabe za predpomnilnik območnih naprav.
    • V podizdelku SCSI je bila dodana možnost uporabe inline-šifriranja na osnovi vgrajenih sredstev strojnega šifriranja, ki jih zagotavljajo UFS-krmilniki (Universal Flash Storage).
    • Dodana je nova parameter ukazne vrstice jedra »debugfs«, ki omogoča upravljanje z dostopnostjo istoimenskega pseudo-FS.
    • V odjemalcu NFSv4.2 je omogočena podpora za razširjene datotečne atribute (xattr).
    • V dm-dust dodano vmesnik za izpis seznama vseh odkritih slabljenih blokov na disku (»dmsetup message dust1 0 listbadblocks«).
    • Za md/raid5 je bil dodan parameter /sys/block/md1/md/stripe_size za nastavitev velikosti STRIPE-bloka.
    • Za naprave za shranjevanje NVMe je dodana podpora ukazom za zoniranje pomnilnika (ZNS, NVM Express Zoned Namespace), ki omogoča razdelitev prostora za shranjevanje na cone, ki sestavljajo skupine blokov, za boljše upravljanje razporeditve podatkov na pomnilniku.
  • Mrežna podsistem
    • V Netfilter je dodana možnost zavrnitve paketov pred preverjanjem usmerjanja (izraza REJECT zdaj ne moremo uporabljati samo v verigah INPUT, FORWARD in OUTPUT, temveč tudi v fazi PREROUTING za icmp in tcp).
    • V nftables je dodana možnost revizije dogodkov, povezanih s spremembo konfiguracije.
    • V nftables v API netlink je dodana podpora anonimnim verigam, katerih ime dodeli dinamično jedro. Ko se odstrani pravilo, povezano z anonimno verigo, se samodejno odstrani tudi veriga.
    • V BPF je bila dodana podpora za iteratorje za obhod, filtriranje in spreminjanje elementov asociativnih tabel (map) brez kopiranja podatkov v prostor uporabnika. Iteratorji se lahko uporabljajo za TCP in UDP sokete, kar omogoča BPF programom prečesavanje seznamov odprtih soketov in pridobivanje potrebnih informacij iz njih.
    • Dodana je nova vrsta BPF programov BPF_PROG_TYPE_SK_LOOKUP, ki se izvajajo, ko jedro išče ustrezen poslušajoč soket za prihajajoče povezave. S takšno BPF programom je mogoče ustvariti handlerje, ki odločajo, kateremu soketu je treba dodeliti povezavo, brez omejitev sistemskega klica bind(). Na primer, možno je organizirati dodelitev enega soketa na območje naslovov ali portov. Poleg tega je v bpf_setsockopt() dodana podpora za zastavico SO_KEEPALIVE in omogočeno je nastavljanje handlerjev BPF_CGROUP_INET_SOCK_RELEASE, ki se kličejo ob sprostitvi soketa.
    • Izvedena je bila podpora za protokol PRP (Parallel Redundancy Protocol), ki omogoča, da se na osnovi Ethernet implementira preklapljanje na rezervni kanal, ki je prozorno za aplikacije v primeru okvare katerega koli omrežnega komponenta.
    • V okviru mac80211 je dodana podpora štiristopenjskemu dogovoru o kanalu WPA/WPA2-PSK v načinu dostopne točke.
    • Dodana je možnost preklopa na obvladovanje čakalnih vrst qdisc (queuing discipline) za privzeto uporabo algoritma za upravljanje omrežnih čakalnih vrst FQ-PIE (Flow Queue PIE), ki je usmerjen v zmanjšanje negativnega vpliva vmesnega buffanja paketov na meji omrežne opreme (bufferbloat) v omrežjih z kablovnimi modemi.
    • Dodane so nove možnosti v MPTCP (MultiPath TCP), razširitvi protokola TCP za organizacijo delovanja TCP-povezave z dostavo paketov hkrati po več poteh preko različnih omrežnih vmesnikov, povezanih z različnimi IP-naslovi. Dodana je podpora za syn cookie, DATA_FIN, samodejno nastavitev pomnilnikov, diagnostiko socketov in uporabo zastavic REUSEADDR, REUSEPORT in V6ONLY v setsockopt.
    • Za virtualne tabele usmerjanja VRF (Virtual Routing and Forwarding), ki omogočajo organizacijo delovanja več usmerjevalnih domen v enem sistemu, je bil implementiran način »strict«. V tem načinu je virtualna tabela lahko povezana samo z usmerjevalno tabelo, ki se ne uporablja v drugih virtualnih tabelah.
    • V brezžičnem gonilniku ath11k je dodana podpora za frekvenco 6GHz in spekturno skeniranje.
  • Oprema
    • Odstranjen je bil koda za podporo arhitekturi UniCore, ki jo je razvilo mikroprocesorsko središče Pekingške univerze in je bila vključena v jedro Linuxa leta 2011. Ta arhitektura od leta 2014 nima podpore in ni več podprta v GCC.
    • Za arhitekturo RISC-V je bila implementirana podpora kcov (debugfs vmesnik za analizo pokritosti jedrskega kode), kmemleak (sistem za odkrivanje pomnilniških izgub), zaščita sklada, oznake prehoda in tickless operacije (neodvisna od signalov časovnika razporeditev).
    • Za arhitekturo PowerPC je bila implementirana podpora za čakajoče vrste pri spinlock, kar je znatno povečalo učinkovitost v situacijah konflikta zaklepov.
    • Za arhitekture ARM in ARM64 je bil privzeto uporabljen mehanizem regulacije frekvence procesorja schedutil (cpufreq governor), ki za odločitev o spremembi frekvence neposredno uporablja informacije od načrtovalnika nalog in lahko takoj pokliče gonilnike cpufreq za takojšnje spreminjanje frekvence, takoj prilagajajući parametre delovanja CPU trenutni obremenitvi.
    • V DRM-gonilniku i915 za grafične kartice Intel je bila vključena podpora za čipe, temelječe na mikroarhitekturi Rocket Lake in dodana začetna podpora za diskretne kartice Intel Xe DG1.
    • V gonilniku amdgpu je bila dodana začetna podpora za GPU AMD Navi 21 (Navy Flounder) in Navi 22 (Sienna Cichlid). Dodana je podpora za motorje pospeševanja kodiranja in dekodiranja videa UVD/VCE za GPU Southern Islands (Radeon HD 7000).
      Dodana je lastnost za vrtenje prikaza za 90, 180 ali 270 stopinj.

      Zanimivo je, da je gonilnik za GPU AMD je največji vodilni gonilnik v jedru — obsega približno 2,71 milijona vrstic kode, kar je približno 10 % celotne velikosti jedra (27,81 milijona vrstic). Pri tem 1,79 milijona vrstic predstavljajo samodejno generirane glave s podatki za registre GPU, medtem ko C-koda obsega 366 tisoč vrstic (za primerjavo, gonilnik Intel i915 vključuje 209 tisoč vrstic, Nouveau pa 149 tisoč).

    • V gonilniku Nouveau je dodana podpora za preverjanje celovitosti na osnovi okvirov preko CRC (Cyclic Redundancy Checks) v grafičnih motorjih GPU NVIDIA. Implementacija temelji na dokumentaciji, ki jo je zagotovilo podjetje NVIDIA.
    • Dodani so gonilniki za LCD-panele: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 in Xingbangda XBD599.
    • V zvočni podsistemi ALSA je bila dodana podpora za Intel Silent Stream (način trajne moči za zunanje HDMI naprave za odpravo zamude ob zagonu predvajanja) ter novo napravo za upravljanje osvetlitve gumbov za aktivacijo mikrofona in izklop zvoka, kot tudi dodana podpora za novo opremo, vključno s krmilnikom Loongson 7A1000.
    • Dodana podpora za ARM-platforme, naprave in platforme: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (uporabljen v Sony Xperia 10, 10 Plus, XA2, XA2 Plus in XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, pet novih plošč na osnovi NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Istovremeno latinskoamerička Fondacija slobodnog softvera je formirala
varijantu popolnoma prost jedro 5.9 — Linux-libre 5.9-gnu, očiščen od elementov strojne programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih obseg uporabe je omejen s strani proizvajalca. V novi različici je bila onemogočena nalaganje blobov v gonilnikih za WiFi rtw8821c in SoC MediaTek mt8183. Koda za čiščenje blobov v gonilnikih in podsistemih Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) in x86 touchscreen je bila posodobljena.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster