Izdaja jedra Linuxa 5.7

Po dveh mesecih razvoja, Linus Torvalds uveden izdaja jedra Linux 5.7. Med najbolj opaznimi spremembami: nova izvedba datotečnega sistema exFAT, modul bareudp za ustvarjanje tunelov UDP, zaščita na podlagi avtentikacije kazalca za ARM64, možnost pripenjanja programov BPF k upravljalnikom LSM, nova izvedba Curve25519, split- detektor zaklepanja, združljivost BPF s PREEMPT_RT, odprava omejitve velikosti vrstice 80 znakov v kodi, upoštevanje indikatorjev temperature procesorja v razporejevalniku opravil, možnost uporabe clone() za ustvarjanje procesov v drugi cgroup, zaščita pred pisanjem v pomnilnik z uporabo userfaultfd.

Nova različica vključuje 15033 popravkov 1961 razvijalcev,
velikost popravka - 39 MB (spremembe so vplivale na 11590 datotek, dodanih 570560 vrstic kode,
297401 vrstic odstranjenih). Približno 41 % vseh predstavljenih v 5.7
spremembe so povezane z gonilniki naprav, približno 16 % sprememb je
odnos do posodabljanja kode, specifične za arhitekture strojne opreme, 13 %
povezanih z omrežnim skladom, 4 % z datotečnimi sistemi in 4 % z notranjimi
podsistemi jedra.

Glavni inovacije:

  • Diskovni podsistem, V/I in datotečni sistemi
    • Dodana nova implementacija gonilnika exFAT, ustanovljeno temelji na trenutni osnovi kode »sdfat« (2.x), ki jo je razvil Samsung za svoje pametne telefone Android. Gonilnik, ki je bil predhodno dodan v jedro, je temeljil na podedovani Samsungovi kodi (različica 1.2.9) in je za približno 10 % zaostajal za novim gonilnikom v zmogljivosti. Spomnimo se, dodajanje podpore za exFAT v jedro je postalo mogoče po Microsoftu objavljeno javne specifikacije in dal patente exFAT na voljo za brezplačno uporabo v sistemu Linux.
    • Btrfs implementira nov ukaz ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, ki omogoča brisanje podrazdelka z njegovim identifikatorjem. Zagotovljena je popolna podpora za kloniranje vgrajenih ekstentov. Razširjeno je število stornacijskih točk za redistribucijske operacije, kar je zmanjšalo dolgo čakanje pri izvajanju ukaza 'balance cancel'. Pospešeno je določanje povratnih povezav do obsegov (na primer, čas izvajanja testne skripte se je zmanjšal z ene ure na nekaj minut). Dodana možnost pripenjanja obsegov datotek na vsako inode drevesa. Shema blokiranja, ki se uporablja pri pisanju v podparticije in pri izključevanju NOCOW, je bila preoblikovana. Izboljšana učinkovitost izvajanja fsync za obsege.
    • XFS ima izboljšano preverjanje metapodatkov in fsck za aktivne particije. Predlagana je bila knjižnica za obnovo struktur btree, ki bo v prihodnosti uporabljena za predelavo xfs_repair in izvajanje možnosti obnovitve brez odklopa particije.
    • V CIFS je bila dodana eksperimentalna podpora za postavitev izmenjalne particije v pomnilnike SMB3. Implementirane razširitve POSIX za readdir, opredeljene v specifikaciji SMB3.1.1. Izboljšana zmogljivost pisanja za 64 KB strani, ko je omogočen način cache=strict in se uporabljajo različice protokola 2.1+.
    • FS EXT4 je bil prenesen iz bmap in iopoll na uporabo iomap.
    • F2FS ponuja izbirno podporo za stiskanje podatkov z uporabo algoritma zstd. Privzeto se za stiskanje uporablja algoritem LZ4. Dodana podpora za ukaz "chattr -c commit". Zagotovljen je prikaz časa montaže. Dodan ioctl F2FS_IOC_GET_COMPRESS_BLOCKS za pridobitev informacij o številu stisnjenih blokov. Dodan izpis podatkov o stiskanju prek statx.
    • Datotečni sistem Ceph je dodal možnost lokalnega izvajanja operacij ustvarjanja in brisanja datotek (prekinitev povezave), ne da bi čakal na odgovor strežnika (deluje v asinhronem načinu). Sprememba lahko na primer bistveno izboljša zmogljivost pri zagonu pripomočka rsync.
    • Možnost uporabe virtiofs kot datotečnega sistema najvišje ravni je bila dodana v OVERLAYFS.
    • Prepisano koda za prečkanje poti v VFS, koda za razčlenjevanje simbolne povezave je bila predelana in prečkanje točke namestitve je poenoteno.
    • V podsistemu scsi neprivilegiranim uporabnikom dovoljene izvajanje ZBC ukazov.
    • V dm_writecache izvajati možnost postopnega čiščenja predpomnilnika na podlagi parametra max_age, ki nastavi najdaljšo življenjsko dobo bloka.
    • V dm_integrity dodano podpora operaciji "zavrzi".
    • V null_blk dodano podpora za zamenjavo napak za simulacijo napak med testiranjem.
    • Dodano možnost pošiljanja obvestil udev o spremembah velikosti blokovne naprave.
  • Omrežni podsistem
    • Netfilter vključen Spremembe, kar znatno pospeši obdelavo velikih seznamov ujemanja (nabori nftables), ki zahtevajo preverjanje kombinacije podomrežij, omrežnih vrat, protokola in naslovov MAC.
      Optimizacije narejeno v modul nft_set_pipapo (PIle PAcket POlicies), ki rešuje problem ujemanja vsebine paketa s poljubnimi obsegi stanja polja, ki se uporabljajo v pravilih filtriranja, kot so IP in obsegi omrežnih vrat (nft_set_rbtree in nft_set_hash upravljata intervalno ujemanje in neposredni odraz vrednosti ). Različica pipapo, vektorizirana z uporabo 256-bitnih navodil AVX2 v sistemu s procesorjem AMD Epyc 7402, je pokazala 420-odstotno povečanje zmogljivosti pri razčlenjevanju 30 tisoč zapisov, vključno s kombinacijami vrat-protokol. Povečanje pri primerjavi kombinacije podomrežja in številke vrat pri razčlenjevanju 1000 zapisov je bilo 87 % za IPv4 in 128 % za IPv6.

    • Dodano modul bareudp, ki vam omogoča enkapsulacijo različnih protokolov L3, kot so MPLS, IP in NSH, v tunel UDP.
    • Nadaljevala se je integracija komponent MPTCP (MultiPath TCP), razširitev protokola TCP za organizacijo delovanja povezave TCP z dostavo paketov po več poteh hkrati prek različnih omrežnih vmesnikov, vezanih na različne naslove IP.
    • Dodano podpora za mehanizme pospeševanja strojne opreme za enkapsulacijo ethernetnih okvirjev v 802.11 (Wi-Fi).
    • Pri premikanju naprave iz enega omrežnega imenskega prostora v drugega se prilagodijo pravice dostopa in lastništvo ustreznih datotek v sysfs.
    • Dodana možnost uporabe zastavice SO_BINDTODEVICE za nekorenske uporabnike.
    • Sprejet je bil tretji del popravkov, ki je pretvoril komplet orodij ethtool iz ioctl() v uporabo vmesnika netlink. Novi vmesnik olajša dodajanje razširitev, izboljša obravnavo napak, omogoča pošiljanje obvestil, ko se stanje spremeni, poenostavi interakcijo med jedrom in uporabniškim prostorom ter zmanjša število poimenovanih seznamov, ki jih je treba sinhronizirati.
    • Dodana možnost uporabe posebnih pospeševalnikov strojne opreme za izvajanje operacij sledenja povezavam.
    • V netfilterju dodano kavelj za povezovanje klasifikatorjev izhodnih paketov (egress), ki je dopolnil prej prisoten kavelj za vhodne pakete (ingress).
  • Virtualizacija in varnost
    • Dodana strojna izvedba avtentikacije kazalca (Preverjanje pristnosti kazalca), ki uporablja specializirana navodila CPU ARM64 za zaščito pred napadi s tehnikami povratno usmerjenega programiranja (ROP), pri katerih napadalec ne poskuša postaviti svoje kode v pomnilnik, ampak deluje na delih strojnih navodil, ki so že na voljo v naloženih knjižnicah, do konca z navodilom za vrnitev kontrole. Varnost se zmanjša na uporabo digitalnih podpisov za preverjanje povratnih naslovov na ravni jedra. Podpis je shranjen v neuporabljenih zgornjih bitih samega kazalca. Za razliko od programskih izvedb se ustvarjanje in preverjanje digitalnih podpisov izvaja s posebnimi ukazi CPU.
    • Dodano zmožnost zaščite pomnilniškega območja pred zapisovanjem s sistemskim klicem userfaultfd(), zasnovanim za obravnavanje napak strani (dostop do nedodeljenih pomnilniških strani) v uporabniškem prostoru. Zamisel je uporabiti userfaultfd() tako za odkrivanje kršitev dostopa do strani, ki so označene kot zaščitene pred pisanjem, kot za klic obdelovalca, ki se lahko odzove na takšne poskuse pisanja (na primer za obravnavanje sprememb med ustvarjanjem posnetkov tekočih procesov v živo, stanja zajemanje pri izpisu izpisov pomnilnika na disk, izvajanje skupnega pomnilnika, sledenje spremembam v pomnilniku). Funkcionalnost enakovreden z uporabo mprotect() v povezavi z obdelovalcem signalov SIGSEGV, vendar deluje opazno hitreje.
    • SELinux je opustil parameter "checkreqprot", ki vam omogoča, da onemogočite preverjanje zaščite pomnilnika pri obdelavi pravil (kar omogoča uporabo izvršljivih pomnilniških območij, ne glede na pravila, navedena v pravilih). Simbolne povezave Kernfs lahko podedujejo kontekst svojih nadrejenih imenikov.
    • Struktura vklopljen modul KRSI, ki vam omogoča pripenjanje programov BPF na katere koli kljuke LSM v jedru. Sprememba omogoča ustvarjanje modulov LSM (Linux Security Module) v obliki programov BPF za reševanje problemov revizije in obveznega nadzora dostopa.
    • Izvede Optimizira delovanje /dev/random s serijsko obdelavo vrednosti CRNG, namesto da posamično kliče navodila RNG. Izboljšana zmogljivost getrandom in /dev/random v sistemih ARM64, ki zagotavljajo navodila RNG.
    • Izvedba eliptične krivulje Curve25519 zamenjal za možnost iz knjižnice HACL, za katerega dano matematični dokaz formalne verifikacije zanesljivosti.
    • Dodano mehanizem za obveščanje o prostih pomnilniških straneh. Z uporabo tega mehanizma lahko gostujoči sistemi gostiteljskemu sistemu posredujejo informacije o straneh, ki se ne uporabljajo več, gostitelj pa lahko podatke o strani sprejme nazaj.
    • V vfio/pci dodano podpora za SR-IOV (Single-Root I/O virtualization).
  • Pomnilniške in sistemske storitve
    • Od 80 do 100 znakov povečala omejitev največje dolžine vrstice v izvornih besedilih. Hkrati se razvijalcem še vedno priporoča, da ostanejo znotraj 80 znakov na vrstico, vendar to ni več stroga omejitev. Poleg tega bo prekoračitev omejitve velikosti vrstice zdaj povzročila opozorilo o gradnji le, če je kontrolni popravek zagnan z možnostjo '--strict'. Sprememba bo omogočila, da razvijalci ne bodo moteni manipulacija s presledki in se počutite bolj svobodne pri poravnavi kode, pa tudi bo preprečil pretirano lomljenje vrstic, moteče razumevanje kode in iskanje.
    • Dodano podpora za način mešanega zagona EFI, ki vam omogoča nalaganje 64-bitnega jedra iz 32-bitne vdelane programske opreme, ki se izvaja na 64-bitni CPE, brez uporabe specializiranega zagonskega nalagalnika.
    • Vključeno sistem za prepoznavanje in odpravljanje napak v razdelilnih ključavnicah (“split lock"), ki se pojavi pri dostopu do neporavnanih podatkov v pomnilniku zaradi dejstva, da pri izvajanju atomskega ukaza podatki prečkajo dve vrstici predpomnilnika procesorja. Takšno blokiranje ima za posledico znaten udarec v zmogljivosti (1000 ciklov počasneje kot atomska operacija na podatkih, ki padejo v eno vrstico predpomnilnika). Odvisno od zagonskega parametra "split_lock_detect" lahko jedro sproti zazna takšna zaklepanja in izda opozorila ali pošlje signal SIGBUS aplikaciji, ki povzroči zaklepanje.
    • Razporejevalnik opravil omogoča sledenje senzorjem temperature (Toplotni tlak) in izvedeno ob upoštevanju pregrevanja pri postavljanju nalog. Z uporabo podanih statističnih podatkov lahko termo regulator prilagodi največjo frekvenco procesorja, ko se pregreje, razporejevalnik opravil pa zdaj upošteva zmanjšanje računalniške moči zaradi takšnega zmanjšanja pogostosti pri razporejanju izvajanja opravil (prej se je razporejevalnik odzival na spremembe pogosto z določeno zamudo, nekaj časa sprejema odločitve na podlagi prenapihnjenih predpostavk o razpoložljivih računalniških virih).
    • Razporejevalnik opravil vključuje invariantni indikatorji sledenje obremenitvi, ki vam omogoča pravilno oceno obremenitve, ne glede na trenutno delovno frekvenco procesorja. Sprememba vam omogoča natančnejše napovedovanje obnašanja nalog v pogojih dinamičnih sprememb napetosti in frekvence procesorja. Na primer, opravilo, ki je porabilo 1/3 virov CPE pri 1000 MHz, bo porabilo 2/3 virov, ko frekvenca pade na 500 MHz, kar je prej ustvarilo napačno domnevo, da deluje s polno zmogljivostjo (tj. opravila so se pojavila večje za razporejevalnik samo z zmanjšanjem frekvence, kar je povzročilo nepravilne odločitve v regulatorju schedutil cpufreq).
    • Gonilnik Intel P-state, ki je odgovoren za izbiro načinov delovanja, je bil preklopljen v uporabo razpored.
    • Izvedena je bila možnost uporabe podsistema BPF, ko se jedro izvaja v realnem času (PREEMPT_RT). Prej, ko je bil PREEMPT_RT omogočen, je bilo treba BPF onemogočiti.
    • Dodan je bil nov tip programa BPF - BPF_MODIFY_RETURN, ki ga je mogoče pripeti funkciji v jedru in spremeniti vrednost, ki jo vrne ta funkcija.
    • Dodano priložnost Uporaba sistemskega klica clone3() za ustvarjanje procesa v cgroup, ki se razlikuje od nadrejene cgroup, kar nadrejenemu procesu omogoča uporabo omejitev in omogočanje obračunavanja takoj po ustvarjanju novega procesa ali niti. Na primer, upravitelj storitev lahko neposredno dodeli nove storitve ločenim skupinam c in novi procesi, ko so postavljeni v »zamrznjene« skupine c, bodo takoj ustavljeni.
    • v Kbuildu dodano podpora za spremenljivko okolja "LLVM=1" za preklop na komplet orodij Clang/LLVM pri gradnji jedra. Zahteve za različico binutils so bile povečane (2.23).
    • Razdelek /sys/kernel/debug/kunit/ je bil dodan debugfs z rezultati testov kunit.
    • Dodan zagonski parameter jedra pm_debug_messages (analogno /sys/power/pm_debug_messages), ki omogoča izpis razhroščevalnih informacij o delovanju sistema za upravljanje porabe energije (uporabno pri odpravljanju napak pri težavah s mirovanjem in stanjem pripravljenosti).
    • Na asinhroni V/I vmesnik io_uring dodana podpora spajanje () и izbira atomskega medpomnilnika.
    • Izboljšano profiliranje cgroup z uporabo orodja perf. Prej je lahko perf samo profiliral naloge v določeni cgroup in ni mogel ugotoviti, kateri cgroup pripada trenutni vzorec. perf zdaj pridobi informacije o cgroup za vsak vzorec, kar vam omogoča, da profilirate več kot eno cgroup in uporabite razvrščanje po
      cgroup v poročilih.

    • cgroupfs, psevdo-FS za upravljanje cgroups, ima dodano podporo za razširjene atribute (xattrs), s katerimi lahko na primer pustite dodatne informacije za upravljavce v uporabniškem prostoru.
    • V krmilniku pomnilnika cgroup dodanoin podporo za rekurzivno zaščito vrednosti »memory.low«, ki ureja najmanjšo količino RAM-a, ki je na voljo članom skupine. Pri nameščanju hierarhije cgroup z možnostjo "memory_recursiveprot" bo vrednost "memory.low", ki je nastavljena za nižja vozlišča, samodejno razdeljena na vsa podrejena vozlišča.
    • Dodano Ogrodje Uacce (Unified/User-space-access-intended Accelerator Framework) za skupno rabo virtualnih naslovov (SVA, Shared Virtual Addressing) med CPE in perifernimi napravami, ki pospeševalcem strojne opreme omogoča dostop do podatkovnih struktur v glavnem CPE.
  • Arhitekture strojne opreme
    • Za arhitekturo ARM je implementirana zmožnost vročega pridobivanja pomnilnika.
    • Za arhitekturo RISC-V je bila dodana podpora za vročo priključitev in odstranitev procesorjev (CPU hotplug). Za 32-bitni RISC-V je implementiran eBPF JIT.
    • Možnost uporabe 32-bitnih sistemov ARM za zagon gostujočih okolij KVM je bila odstranjena.
    • Odstranjena je "navidezna" implementacija NUMA za arhitekturo s390, za katero ni bilo najdenih primerov uporabe za doseganje izboljšav zmogljivosti.
    • Za ARM64 je dodana podpora za razširitev AMU (Enota za spremljanje dejavnosti), definirano v ARMv8.4 in zagotavlja števce zmogljivosti, ki se uporabljajo za izračun korekcijskih faktorjev skaliranja frekvence v razporejevalniku opravil.
  • Оборудование
    • Dodano podpora za naprave vDPA, ki uporabljajo kanal za izmenjavo podatkov, ki je skladen s specifikacijami virtio. Naprave vDPA so lahko fizično povezana oprema ali programsko emulirane virtualne naprave.
    • V podsistemu GPIO pojavil nov ukaz ioctl() za spremljanje sprememb, ki vam omogoča, da proces obveščate o spremembah v stanju katere koli linije GPIO. Kot primer uporabe novega ukaza predlagano pripomoček gpio-watch.
    • V gonilniku i915 DRM za grafične kartice Intel vključena privzeta podpora za čipe Tigerlake (»Gen12«) in dodana začetna podpora za nadzor osvetlitve OLED. Izboljšana podpora za čipe Ice Lake, Elkhart Lake, Baytrail in Haswell.
    • V gonilniku amdgpu dodano možnost nalaganja vdelane programske opreme v čip USBC za ASIC. Izboljšana podpora za čipe AMD Ryzen 4000 "Renoir". Zdaj obstaja podpora za nadzor plošč OLED. Zagotovljen prikaz stanja vdelane programske opreme v debugfs.
    • Možnost uporabe OpenGL 4 v gostujočih sistemih je bila dodana gonilniku vmwgfx DRM za virtualizacijske sisteme VMware (prej je bil podprt OpenGL 3.3).
    • Dodan novi gonilnik DRM tidss za zaslonski sistem platforme TI Keystone.
    • Dodani gonilniki za LCD panele: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • V sistem za upravljanje porabe energije dodano podpora za platformo Intel Jasper Lake (JSL), ki temelji na Atomu.
    • Dodana podpora za prenosni računalnik Pinebook Pro, ki temelji na Rockchip RK3399, tablico in pametni telefon Pine64 PineTab PinePhone temelji na Allwinner A64.
    • Dodana podpora za nove zvočne kodeke in čipe:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Dodana podpora za plošče in platforme ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron »sl28«, 11 možnosti plošče i.MX6 TechNexion Pico, tri nove možnosti Toradex Colibri, Samsung S7710 Galaxy Xcover 2, ki temelji na ST -Ericsson u8500, DH Electronics DHCOM SoM in PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Vir: opennet.ru

Dodaj komentar