Izdaja jedra Linuxa 5.9

Po dveh mesecih razvoja, Linus Torvalds uveden izdaja jedra Linux 5.9. Med najbolj opaznimi spremembami: omejevanje uvoza simbolov iz lastniških modulov na module GPL, pospešitev operacij preklapljanja konteksta z uporabo ukaza procesorja FSGSBASE, podpora za stiskanje slike jedra z uporabo Zstd, predelava prioritete niti v jedru, podpora za PRP (Parallel Redundancy Protocol), razporejanje glede na pasovno širino v razporejevalniku rokov, vnaprejšnje pakiranje pomnilniških strani, zastavica zmogljivosti CAP_CHECKPOINT_RESTOR, sistemski klic close_range(), izboljšave zmogljivosti dm-crypt, odstranitev kode za 32-bitne goste Xen PV, nov slab pomnilnik mehanizem upravljanja, možnost "reševanje" v Btrfs, podpora za vgrajeno šifriranje v ext4 in F2FS.

Nova različica vključuje 16074 popravkov razvijalcev iz leta 2011,
velikost popravka - 62 MB (spremembe so vplivale na 14548 datotek, dodanih je bilo 782155 vrstic kode, izbrisanih je bilo 314792 vrstic). Približno 45 % vseh predstavljenih v 5.9
spremembe so povezane z gonilniki naprav, približno 15 % sprememb je
odnos do posodabljanja kode, specifične za arhitekture strojne opreme, 13 %
povezanih z omrežnim skladom, 3 % z datotečnimi sistemi in 3 % z notranjimi
podsistemi jedra.

Glavni inovacije:

  • Pomnilniške in sistemske storitve
    • Zategnjen zaščita pred uporabo plasti GPL za povezovanje lastniških gonilnikov s komponentami jedra, izvoženimi samo za module pod licenco GPL. Zastavica TAINT_PROPRIETARY_MODULE je zdaj podedovana v vseh modulih, ki uvažajo simbole iz modulov s to zastavico. Če modul GPL poskuša uvoziti simbole iz modula, ki ni GPL, bo ta modul podedoval oznako TAINT_PROPRIETARY_MODULE in ne bo mogel dostopati do komponent jedra, ki so na voljo samo modulom z licenco GPL, tudi če je modul predhodno uvozil simbole iz kategorijo "gplonly". Povratno zaklepanje (izvoz samo EXPORT_SYMBOL_GPL v modulih, ki so uvozili EXPORT_SYMBOL_GPL), ki bi lahko motilo delo lastniških gonilnikov, ni implementirano (podedovana je samo zastavica lastniškega modula, ne pa tudi GPL vezave).
    • Dodano podpora motorja kcompactd za predpakiranje spominskih strani v ozadju, da povečate število velikih pomnilniških strani, ki so na voljo jedru. Po predhodnih ocenah lahko pakiranje v ozadju za ceno minimalnih stroškov zmanjša zamude pri dodeljevanju velikih pomnilniških strani (huge-page) za 70-80-krat v primerjavi s prej uporabljenim mehanizmom pakiranja, ki se sproži, ko se pojavi potreba (na zahtevo). ). Za nastavitev meja zunanje fragmentacije, ki jo bo zagotovil kcompactd, je bil dodan sysctl vm.compaction_proactiveness.
    • Dodano podpora za stiskanje slike jedra z uporabo algoritma zstandard (zstd).
    • Podpora za navodila procesorja je bila implementirana za sisteme x86 FSGSBASE, ki omogoča branje in spreminjanje vsebine registrov FS/GS iz uporabniškega prostora. V jedru se FSGSBASE uporablja za pospešitev operacij preklapljanja konteksta z odpravo nepotrebnih operacij pisanja MSR za GSBASE, v uporabniškem prostoru pa se izogiba nepotrebnim sistemskim klicem za spreminjanje FS/GS.
    • Dodano parameter “allow_writes” vam omogoča, da prepoveste spremembe registrov MSR procesorja iz uporabniškega prostora in omejite dostop do vsebine teh registrov za operacije branja, saj lahko spreminjanje MSR povzroči težave. Pisanje privzeto še ni onemogočeno in spremembe MSR se odražajo v dnevniku, vendar je v prihodnosti načrtovano preklop privzetega dostopa na način samo za branje.
    • Na asinhroni V/I vmesnik io_uring Dodana popolna podpora za asinhrone operacije branja v medpomnilniku, ki ne zahtevajo niti jedra. Podpora za snemanje se pričakuje v prihodnji izdaji.
    • V roku I/O planerja izvajati načrtovanje na podlagi zmogljivosti, dopuščanje sprejemati pravilne odločitve o asimetričnih sistemih, kot so sistemi, ki temeljijo na ARM DynamIQ in big.LITTLE, ki združujeta zmogljiva in manj učinkovita energijsko učinkovita CPU jedra v enem čipu. Zlasti nov način vam omogoča, da se izognete neusklajenosti v načrtovanju, ko počasno jedro CPE nima ustreznih virov za pravočasno dokončanje naloge.
    • Model porabe energije v jedru (Energy Model framework) je zdaj opisuje ne le obnašanje porabe energije procesorja, ampak zajema tudi periferne naprave.
    • Sistemski klic close_range() je bil implementiran, da omogoči procesu zapiranje celotnega obsega deskriptorjev odprtih datotek hkrati.
    • Iz implementacije besedilne konzole in gonilnika fbcon koda odstranjena, ki omogoča programsko pomikanje besedila nazaj (CONFIG_VGACON_SOFT_SCROLLBACK) za več kot je v video pomnilniku besedilnega načina VGA.
    • Predelano algoritem za dodeljevanje prioritet nitim znotraj jedra. Nova možnost zagotavlja boljšo doslednost v vseh podsistemih jedra pri dodeljevanju prioritet nalogam v realnem času.
    • Dodan sysctl sched_uclamp_util_min_rt_default za nadzor nastavitev pospeševanja procesorja za opravila v realnem času (na primer, lahko spremenite vedenje opravil v realnem času sproti, da prihranite energijo po preklopu na baterijsko napajanje ali v mobilnih sistemih).
    • Izvedene so bile priprave za implementacijo podpore za tehnologijo Transparent Huge Pages v predpomnilnik strani.
    • Mehanizem fanotify implementira novi zastavici FAN_REPORT_NAME in FAN_REPORT_DIR_FID za poročanje nadrejenega imena in edinstvenih informacij FID, ko pride do dogodkov ustvarjanja, brisanja ali premikanja za elemente imenika in predmete, ki niso imenik.
    • Za cgroups izvajati nov krmilnik pomnilnika slab, ki je znan po premikanju obračunavanja slab iz ravni pomnilniške strani na raven objekta jedra, kar omogoča skupno rabo slabih strani v različnih skupinah c, namesto dodeljevanja ločenih predpomnilnikov slab za vsako cgroup. Predlagani pristop omogoča povečanje učinkovitosti uporabe slaba, zmanjšanje velikosti pomnilnika, ki se uporablja za slab, za 30-45%, znatno zmanjšanje celotne porabe pomnilnika jedra in zmanjšanje fragmentacije pomnilnika.
    • V zvočnem podsistemu ALSA и sklad USB, v skladu z nedavno sprejet priporočila o uporabi vključujoče terminologije v jedru Linuxa; politično nekorektni izrazi so bili očiščeni. Koda je bila očiščena besed "slave", "master", "blacklist" in "whitelist".
  • Virtualizacija in varnost
    • Pri gradnji jedra s prevajalnikom Clang pojavil zmožnost konfiguriranja (CONFIG_INIT_STACK_ALL_ZERO) samodejne inicializacije na nič vseh spremenljivk, shranjenih na skladu (pri gradnji določite “-ftrivial-auto-var-init=zero”).
    • V podsistemu seccomp pri uporabi načina nadzora procesa v uporabniškem prostoru, dodano priložnost zamenjava datotečnih deskriptorjev v spremljanem procesu za popolno posnemanje sistemskih klicev, ki vodijo do ustvarjanja datotečnih deskriptorjev. Funkcionalnost je iskana v sistemih izoliranih vsebnikov in implementacijah peskovnika za Chrome.
    • Za arhitekturi xtensa in csky je bila dodana podpora za omejevanje sistemskih klicev s podsistemom seccomp. Za xtenso je dodatno implementirana podpora za revizijski mehanizem.
    • Dodano nova zastavica zmogljivosti CAP_CHECKPOINT_RESTORE, ki omogoča zagotavljanje dostopa do zmogljivosti, povezanih z zamrznitvijo in obnavljanjem stanja procesov brez prenosa dodatnih privilegijev.
    • GCC 11 ponuja vse funkcije, ki jih potrebujete
      orodje za odpravljanje napak KCSAN (Kernel Concurrency Sanitizer), zasnovano za dinamično zaznavanje pogojev tekmovanja v jedru. Tako lahko KCSAN zdaj uporabljate z jedri, zgrajenimi v GCC.

    • Za AMD Zen in novejše modele procesorjev dodano podpora tehnologiji P2PDMA, ki omogoča uporabo DMA za neposreden prenos podatkov med pomnilnikom dveh naprav, povezanih na vodilo PCI.
    • V dm-crypt je bil dodan način, ki omogoča zmanjšanje zakasnitve z izvajanjem kriptografske obdelave podatkov brez uporabe čakalnih vrst dela. Ta način je potreben tudi za pravilno delovanje z consko blokovne naprave (naprave z območji, ki jih je treba pisati zaporedno, pri čemer se posodablja celotna skupina blokov). Opravljeno je bilo delo za povečanje prepustnosti in zmanjšanje zakasnitve v dm-crypt.
    • Odstranjena koda za podporo 32-bitnim gostom, ki se izvajajo v paravirtualizacijskem načinu, ki izvaja hipervizor Xen. Uporabniki takšnih sistemov bi morali preiti na uporabo 64-bitnih jeder v gostujočih okoljih ali uporabiti popolne (HVM) ali kombinirane (PVH) načine virtualizacije namesto paravirtualizacije (PV) za izvajanje okolij.
  • Diskovni podsistem, V/I in datotečni sistemi
    • V datotečnem sistemu Btrfs izvajati možnost "rešilne" namestitve, ki poenoti dostop do vseh drugih možnosti obnovitve. Podpora za možnosti »alloc_start« in »subvolrootid« je bila odstranjena, možnost »inode_cache« pa je bila opuščena. Optimizirane so bile zmogljivosti, zlasti opazno pospešeno izvajanje operacij fsync(). Dodano možnost uporabe alternativnih vrst kontrolnih vsot, razen CRC32c.
    • Dodano možnost uporabe vgrajenega šifriranja (Inline Encryption) v datotečnih sistemih ext4 in F2FS, za omogočanje katerega je na voljo možnost priklopa »inlinecrypt«. Vgrajeni način šifriranja vam omogoča uporabo mehanizmov šifriranja, vgrajenih v krmilnik pogona, ki pregledno šifrirajo in dešifrirajo vhod/izhod.
    • V XFS zavarovano ponastavitev inode (izpiranje) v popolnoma asinhronem načinu, ki ne blokira procesov pri izvajanju operacije čiščenja pomnilnika. Odpravljena je dolgotrajna težava s kvoto, ki je povzročila nepravilno sledenje opozorilom mehke omejitve in omejitve inode. Poenotena izvedba podpore DAX za ext4 in xfs.
    • V Ext4 izvajati vnaprej naloži bitne slike dodelitve blokov. V kombinaciji z omejevanjem skeniranja neinicializiranih skupin je optimizacija zmanjšala čas, potreben za namestitev zelo velikih particij.
    • V F2FS dodano ioctl F2FS_IOC_SEC_TRIM_FILE, ki vam omogoča uporabo ukazov TRIM/discard za fizično ponastavitev določenih podatkov v datoteki, na primer za brisanje ključev za dostop, ne da bi ostali podatki na disku.
      Tudi v F2FS dodano nov način zbiranja smeti GC_URGENT_LOW, ki deluje bolj agresivno z odpravo nekaterih preverjanj stanja mirovanja pred zagonom zbiralnika smeti.

    • V bcache je bila bucket_size za ekstente povečana s 16 na 32 bitov v pripravah na omogočanje conskih predpomnilnikov naprav.
    • V podsistem SCSI je bila dodana možnost uporabe vgrajenega šifriranja na podlagi vgrajenega šifriranja strojne opreme, ki ga zagotavljajo krmilniki UFS (Univerzalni Flash Storage).
    • Dodan je bil nov parameter ukazne vrstice jedra »debugfs«, ki vam omogoča nadzor nad razpoložljivostjo psevdo-FS z istim imenom.
    • Odjemalec NFSv4.2 nudi podporo za razširjene atribute datotek (xattr).
    • V dm-prašu dodano vmesnik za prikaz seznama vseh identificiranih slabih blokov na disku (“dmsetup message dust1 0 listbadblocks”).
    • Za md/raid5 je bil dodan parameter /sys/block/md1/md/stripe_size za konfiguracijo velikosti bloka STRIPE.
    • Za naprave za shranjevanje NVMe dodano podpora za ukaze za zoniranje pogona (ZNS, NVM Express Zoned Namespace), ki omogoča razdelitev prostora za shranjevanje v cone, ki sestavljajo skupine blokov za popolnejši nadzor nad umeščanjem podatkov na pogon.
  • Omrežni podsistem
    • V Netfilterju dodano zmožnost zavrnitve paketov na stopnji pred preverjanjem usmerjanja (izraz REJECT je zdaj mogoče uporabiti ne samo v verigah INPUT, FORWARD in OUTPUT, ampak tudi na stopnji PREROUTING za icmp in tcp).
    • V nftables dodano možnost revizije dogodkov, povezanih s spremembami konfiguracije.
    • V nftables v API-ju netlink dodano podpora za anonimne verige, katerih ime dinamično dodeli jedro. Ko izbrišete pravilo, povezano z anonimno verigo, se sama veriga samodejno izbriše.
    • BPF dodaja podporo iteratorjem za prečkanje, filtriranje in spreminjanje elementov asociativnih nizov (zemljevidov) brez kopiranja podatkov v uporabniški prostor. Iteratorje je mogoče uporabiti za vtičnice TCP in UDP, kar omogoča programom BPF, da ponavljajo sezname odprtih vtičnic in iz njih izvlečejo informacije, ki jih potrebujejo.
    • Dodana je nova vrsta programa BPF BPF_PROG_TYPE_SK_LOOKUP, ki se zažene, ko jedro išče ustrezno vtičnico za poslušanje dohodne povezave. Z uporabo programa BPF, kot je ta, lahko ustvarite upravljalnike, ki sprejemajo odločitve o tem, s katero vtičnico naj bo povezana povezava, ne da bi bili omejeni s sistemskim klicem bind(). Eno vtičnico lahko na primer povežete z vrsto naslovov ali vrat. Poleg tega je bila v bpf_setsockopt() dodana podpora za zastavo SO_KEEPALIVE in implementirana je bila možnost namestitve upravljavcev BPF_CGROUP_INET_SOCK_RELEASE, ki se kličejo ob sprostitvi vtičnice.
    • Implementirana podpora za protokol PRP (Parallel Redundancy Protocol), ki omogoča preklapljanje na podlagi Etherneta na rezervni kanal, pregleden za aplikacije, v primeru okvare katere koli omrežne komponente.
    • Stack mac80211 dodano podpora za štiristopenjsko pogajanje o kanalu WPA/WPA2-PSK v načinu dostopne točke.
    • Dodana možnost preklopa razporejevalnika qdisc (queuing discipline) tako, da privzeto uporablja algoritem upravljanja omrežne čakalne vrste FQ-PIE (Flow Queue PIE), katerega namen je zmanjšati negativni vpliv vmesnega medpomnilnika paketov na robno omrežno opremo (bufferbloat) v omrežjih z kabelski modemi.
    • Nove funkcije so bile dodane MPTCP (MultiPath TCP), razširitvam protokola TCP za organizacijo delovanja povezave TCP z dostavo paketov hkrati po več poteh prek različnih omrežnih vmesnikov, povezanih z različnimi naslovi IP. Dodana podpora za piškotek syn, DATA_FIN, samodejno uravnavanje medpomnilnika, diagnostiko vtičnic in zastavice REUSEADDR, REUSEPORT in V6ONLY v setockoptu.
    • Za virtualne usmerjevalne tabele VRF (Virtual Routing and Forwarding), ki omogočajo organizacijo delovanja več usmerjevalnih domen v enem sistemu, je bil implementiran "strogi" način. V tem načinu je navidezna tabela lahko povezana le z usmerjevalno tabelo, ki se ne uporablja v drugih navideznih tabelah.
    • Brezžični gonilnik je ath11k dodano podpira frekvenco 6 GHz in spektralno skeniranje.
  • Оборудование
    • Odstranjena koda za podporo arhitekture UniCore, razvite v mikroprocesorskem centru Univerze v Pekingu in vključene v jedro Linuxa leta 2011. Ta arhitektura se od leta 2014 ne vzdržuje in nima podpore v GCC.
    • Implementirana je podpora za arhitekturo RISC-V kcov (vmesnik debugfs za analizo pokritosti kode jedra), kmemleak (sistem za odkrivanje puščanja pomnilnika), zaščita sklada, oznake skokov in operacije brez odkljukanja (večopravilnost neodvisna od signalov časovnika).
    • Za arhitekturo PowerPC je bila implementirana podpora za čakalne vrste spinlock, kar je znatno izboljšalo zmogljivost v situacijah konflikta zaklepanja.
    • Za arhitekturi ARM in ARM64 je mehanizem za regulacijo frekvence procesorja privzeto omogočen razpored (cpufreq governor), ki neposredno uporablja informacije iz razporejevalnika opravil za sprejemanje odločitve o spremembi frekvence in lahko takoj dostopa do gonilnikov cpufreq za hitro spreminjanje frekvence in takojšnjo prilagoditev delovnih parametrov CPU trenutni obremenitvi.
    • Gonilnik i915 DRM za grafične kartice Intel vključuje podporo za čipe, ki temeljijo na mikroarhitekturi Raketno jezero in dodana začetna podpora za diskretne kartice Intel Xe DG1.
    • Gonilnik Amdgpu je dodal začetno podporo za GPU AMD Navi 21 (Navy Flounder) in Navi 22 (Sienna Cichlid). Dodana podpora za motorje za pospeševanje video kodiranja in dekodiranja UVD/VCE za grafično kartico Southern Islands (Radeon HD 7000).
      Dodana lastnost za obračanje zaslona za 90, 180 ali 270 stopinj.

      Zanimivo, gonilnik za AMD GPU je največji gonilnik v jedru - ima približno 2.71 milijona vrstic kode, kar je približno 10 % celotne velikosti jedra (27.81 milijona vrstic). Hkrati 1.79 milijona vrstic predstavljajo samodejno ustvarjene datoteke glave s podatki za registre GPU, koda C pa 366 tisoč vrstic (za primerjavo, gonilnik Intel i915 vključuje 209 tisoč vrstic in Nouveau - 149 tisoč).

    • V Nouveau vozniku dodano podpora za preverjanje integritete okvir za okvirjem z uporabo CRC (Cyclic Redundancy Checks) v zaslonskih motorjih NVIDIA GPU. Implementacija temelji na dokumentaciji NVIDIA.
    • Dodani gonilniki za LCD plošče: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 in Xingbangda XBD599.
    • Avdio podsistem ALSA podpira Intel Silent Stream (način neprekinjenega napajanja za zunanje naprave HDMI za odpravo zakasnitve pri začetku predvajanja) in nova naprava za nadzor osvetlitve gumbov za vklop mikrofona in izklop zvoka ter dodana podpora za novo opremo, vključno s krmilnikom Longson 7A1000.
    • Dodana podpora za plošče, naprave in platforme ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (uporablja se 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.

Istočasno Latinskoameriška fundacija za prosto programsko opremo oblikovana
možnost popolnoma brezplačno jedro 5.9 - Linux-libre 5.9-gnu, očiščen elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih obseg omejuje proizvajalec. Nova izdaja onemogoča nalaganje blob v gonilnike za WiFi rtw8821c in SoC MediaTek mt8183. Posodobljena koda za čiščenje madežev v gonilnikih in podsistemih Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) in x86 zaslona na dotik.

Vir: opennet.ru

Dodaj komentar