Izdaja jedra Linuxa 5.3

Po dveh mesecih razvoja, Linus Torvalds uveden izdaja jedra Linux 5.3. Med najbolj opaznimi spremembami: podpora za grafične procesorje AMD Navi, procesorje Zhaoxi in tehnologijo upravljanja porabe energije Intel Speed ​​​​Select, možnost uporabe navodil umwait za čakanje brez uporabe ciklov,
način 'utilization clamping', ki poveča interaktivnost za asimetrične procesorje, sistemski klic pidfd_open, možnost uporabe naslovov IPv4 iz podomrežja 0.0.0.0/8, možnost strojnega pospeševanja nftables, podpora HDR v podsistemu DRM, integracija ACRN hipervizor.

В obvestilo z novo izdajo je Linus spomnil vse razvijalce na glavno pravilo razvoja jedra – ohranjanje enakega vedenja komponent uporabniškega prostora. Spremembe jedra nikakor ne smejo prekiniti že delujočih aplikacij ali voditi do regresij na ravni uporabnika. V tem primeru lahko kršitev vedenja povzroči ne le spremembo ABI, odstranitev zastarele kode ali pojav napak, temveč tudi posreden vpliv uporabnih izboljšav, ki delujejo pravilno. Kot ilustrativen primer je bil zavržen koristno optimizacija v kodi Ext4, ki zmanjša število dostopov do pogona tako, da onemogoči predhodno branje tabele inode za majhne V/I zahteve.

Optimizacija je pripeljala do dejstva, da se je zaradi zmanjšanja aktivnosti diska entropija za generator naključnih števil getrandom() začela kopičiti počasneje in v nekaterih konfiguracijah je bilo v določenih okoliščinah mogoče opaziti zamrznitve med nalaganjem, dokler entropijski sklad ni bil dosežen. napolnjena. Ker je optimizacija res uporabna, se je med razvijalci pojavila razprava, v kateri je bilo predlagano, da se težava odpravi z onemogočanjem privzetega načina blokiranja klica getrandom() in dodajanjem izbirne zastavice za čakanje na entropijo, vendar bi taka sprememba vplivala na kakovost naključnih števil v začetni fazi nalaganja.

Nova različica vključuje 15794 popravkov 1974 razvijalcev,
velikost popravka - 92 MB (spremembe so vplivale na 13986 datotek, dodanih je bilo 258419 vrstic kode,
599137 vrstic odstranjenih). Približno 39 % vseh predstavljenih v 5.3
spremembe so povezane z gonilniki naprav, približno 12 % sprememb je
odnos do posodabljanja kode, specifične za arhitekture strojne opreme, 11 %
povezanih z omrežnim skladom, 3 % z datotečnimi sistemi in 3 % z notranjimi
podsistemi jedra.

Glavni inovacije:

  • Pomnilniške in sistemske storitve
    • Nadaljnji razvoj funkcionalnosti 'pidfd' za pomoč pri obvladovanju situacij ponovne uporabe PID (pidfd je povezan z določenim procesom in se ne spreminja, medtem ko je PID lahko povezan z drugim procesom, potem ko se trenutni proces, povezan s tem PID-om, zaključi). Prej je bil dodan v jedro
      sistemski klic pidfd_send_signal() in zastavica CLONE_PIDFD v klicu clone() za pridobitev pidfd za uporabo v idfd_send_signal(). Uporaba clone() z zastavico CLONE_PIDFD lahko povzroči težave z upravitelji storitev ali sistemom prisilne prekinitve brez pomnilnika platforme Android. V tem primeru se za zagon uporabi klic fork() ali clone() brez CLONE_PIDFD.

      Jedro 5.3 je predstavilo sistemski klic pidfd_open(), ki vam omogoča, da dobite pidfd, ki ga je mogoče preveriti, za poljuben obstoječi proces, ki ni bil ustvarjen s klicem clone() z zastavico CLONE_PIDFD. Dodana je tudi podpora za anketiranje pidfd z uporabo poll() in epoll(), ki upraviteljem procesov omogoča sledenje zaključku poljubnih procesov brez strahu pred stanjem tekmovanja, če je PID dodeljen novemu procesu. Mehanizem za obveščanje, ko se je proces, povezan s pidfd, končal, je podoben obveščanju, ko se je njegov podrejeni proces končal;

    • Podpora za mehanizem pripenjanja nalaganja je bila dodana v razporejevalnik opravil (Uporabno vpenjanje), kar vam omogoča, da se držite minimalnih ali največjih frekvenčnih razponov, odvisno od nalog, ki so aktivne v CPE. Predstavljeni mehanizem pospeši opravila, ki neposredno vplivajo na kakovost uporabniške izkušnje, tako da se ta opravila izvajajo vsaj na spodnji meji »zahtevane« frekvence. Naloge z nizko prioriteto, ki ne vplivajo na delo uporabnika, se zaženejo z zgornjo mejo "dovoljene" frekvence. Omejitve se nastavijo prek atributov sched_uclamp_util_min in sched_uclamp_util_max v sistemskem klicu sched_setattr().
    • Dodana podpora za tehnologijo upravljanja z energijo Intel Speed ​​​​Select, ki je na voljo na izbranih strežnikih s procesorji Intel Xeon. Ta tehnologija vam omogoča nastavitev zmogljivosti in prepustnosti particij za različna jedra CPU, kar vam omogoča, da določite prednost zmogljivosti za naloge, ki se izvajajo v določenih jedrih, pri čemer žrtvujete zmogljivost drugih jeder;
    • Procesi v uporabniškem prostoru odobreno možnost čakanja za kratek čas brez uporabe zank z uporabo ukaza umwait. To navodilo, skupaj z navodili za umonitor in tpause, bo na voljo v Intelovih prihajajočih čipih "Tremont" in bo omogočilo implementacijo zakasnitev, ki so energetsko učinkovite in ne vplivajo na delovanje drugih niti pri uporabi Hyper Threading;
    • Za arhitekturo RISC-V je bila dodana podpora za velike pomnilniške strani;
    • Mehanizem za sledenje kprobes je dodal možnost dereferenciranja kazalcev jedra v uporabniški prostor, ki se lahko na primer uporabi za ovrednotenje vsebine struktur, posredovanih sistemskim klicem. Dodana je bila tudi možnost namestitve preverjanj v fazi zagona.
    • Dodana možnost PREEMPT_RT v konfiguracijsko datoteko za delovanje v realnem času. Sama koda za podporo načinu v realnem času še ni bila dodana v jedro, vendar je pojav možnosti dober znak, da dolgoročna epska integracije Realtime-Preempt popravki se bližajo koncu;
    • Dodan sistemski klic clone3() z implementacijo bolj razširljive različice vmesnika clone(), ki omogoča podajanje večjega števila zastavic;
    • Dodan upravljalnik bpf_send_signal(), ki programom BPF omogoča pošiljanje signalov poljubnim procesom;
    • Za perf dogodke v okolju hipervizorja KVM je bil dodan nov mehanizem za filtriranje dogodkov, ki skrbniku omogoča, da določi vrste dogodkov, ki so dovoljeni ali nedovoljeni za spremljanje na strani gostujočega sistema;
    • Mehanizem preverjanja aplikacije eBPF je dodal možnost obdelave programov z zankami, če je izvajanje zanke omejeno in ne more privesti do prekoračitve omejitve največjega števila navodil;
  • Diskovni podsistem, V/I in datotečni sistemi
    • Datotečni sistem XFS zdaj podpira večnitni obvod inode (na primer pri preverjanju kvot). Dodana sta bila nova ioctl BULKSTAT in INUMBERS, ki omogočata dostop do funkcij, ki so se pojavile v peti izdaji formata FS, kot je rojstni čas inode in možnost nastavitve parametrov BULKSTAT in INUMBERS za vsako skupino AG (skupine za dodelitev);
    • V Ext4 dodana podpora praznine v imenikih (nepovezani bloki).
      Obdelava zagotovljena zastavica “i” (nespremenljiva) za odprte datoteke (pisanje je prepovedano v primeru, da je bila zastavica nastavljena v času, ko je bila datoteka že odprta);

    • Btrfs zagotavlja definicijo hitre implementacije crc32c na vseh arhitekturah;
    • V CIFS je bila koda za podporo smbdirect odstranjena kot eksperimentalni razvoj. SMB3 je dodal možnost uporabe kriptografskih algoritmov v načinu GCM. Dodana nova možnost priklopa za ekstrahiranje parametrov načina iz vnosov ACE (Access Control Entry). Optimizirano delovanje klica open();
    • F2FS dodana možnost za omejitev zbiralnika smeti, ko se izvaja v načinu checkpoint=onemogoči. Dodan ioctl za odstranitev obsegov blokov iz F2FS, kar omogoča sprotno prilagajanje velikosti particije. Dodana možnost postavitve izmenjalne datoteke v F2FS za zagotavljanje neposrednega V/I. Dodana podpora za pripenjanje datoteke in dodeljevanje blokov za podobne datoteke za vse uporabnike;
    • Dodana podpora za asinhrone operacije sendmsg() in recvmsg() v vmesnik za asinhroni vhod/izhod io_uring;
    • Datotečnemu sistemu UBIFS je bila dodana podpora za stiskanje z uporabo algoritma zstd in možnost preverjanja podpisanih slik FS;
    • Ceph FS zdaj podpira varnostne oznake SELinux za datoteke;
    • Za NFSv4 je bila uvedena nova možnost priklopa »nconnect=«, ki določa število vzpostavljenih povezav s strežnikom. Promet med temi povezavami bo porazdeljen z uravnoteženjem obremenitve. Poleg tega strežnik NFSv4 zdaj ustvari imenik /proc/fs/nfsd/clients z informacijami o trenutnih odjemalcih, vključno z informacijami o datotekah, ki so jih odprli;
  • Virtualizacija in varnost
    • Jedro vključuje hipervizor za vgrajene naprave ACRN, ki je napisan s pogledom na pripravljenost za naloge v realnem času in primernost za uporabo v kritičnih sistemih. ACRN zagotavlja minimalne stroške, zagotavlja nizko zakasnitev in ustrezno odzivnost pri interakciji z opremo. Podpira virtualizacijo virov CPE, V/I, omrežnega podsistema, grafike in zvočnih operacij. ACRN se lahko uporablja za zagon več izoliranih virtualnih strojev v elektronskih krmilnih enotah, armaturnih ploščah, avtomobilskih informacijskih sistemih, potrošniških napravah IoT in drugi vgrajeni tehnologiji;
    • V uporabniškem načinu Linux dodano Način potovanja skozi čas, ki vam omogoča, da upočasnite ali pospešite čas v virtualnem okolju UML, da olajšate odpravljanje napak v kodi, povezani s časom. Poleg tega je bil dodan parameter
      time-travel-start, ki omogoča, da se sistemska ura začne od določenega trenutka v formatu epohe;

    • Dodani sta bili novi možnosti ukazne vrstice jedra “init_on_alloc” in “init_on_free”, ko je določeno, je omogočeno ničliranje dodeljenih in sproščenih pomnilniških območij (polnjenje z ničlami ​​za malloc in free), kar omogoča večjo varnost zaradi dodatne inicializacije režijske;
    • Dodan nov gonilnik virtio-iommu z implementacijo paravirtualizirane naprave, ki vam omogoča pošiljanje zahtev IOMMU, kot so ATTACH, DETACH, MAP in UNMAP, preko virtio transporta brez posnemanja tabel pomnilniških strani;
    • Dodan nov gonilnik virtio-pmem, ki predstavlja dostop do pomnilniških naprav, preslikanih v fizični naslovni prostor, kot so NVDIMM;
    • Implementirana možnost pripenjanja kriptografskih ključev v uporabniški ali omrežni imenski prostor (ključi postanejo nedostopni zunaj izbranega imenskega prostora), kot tudi zaščite ključev z ACL-ji;
    • V kripto podsistem dodano podpora za zelo hiter nekriptografski algoritem zgoščevanja xxhash, katerih hitrost je odvisna od zmogljivosti pomnilnika;
  • Omrežni podsistem
    • Omogočena obdelava naslovov IPv4 v obsegu 0.0.0.0/8, ki prej ni bil na voljo za uporabo. Predstavitev tega podomrežja bo dovolil razdeli še 16 milijonov naslovov IPv4;
    • V Netfilterju za nftables dodano podpora za mehanizme pospeševanja strojne opreme za filtriranje paketov z uporabo dodanih gonilnikov Flow Block API. Celotne tabele pravil z vsemi verigami lahko postavite na stran omrežnih adapterjev. Omogočanje se izvede z vezavo zastavice NFT_TABLE_F_HW na tabelo. Podpira preproste metapodatke protokola ravni 3 in plasti 4, dejanja sprejema/zavrnitve, preslikave po IP in omrežnih vratih pošiljatelja/prejemnika ter vrsti protokola;
    • Dodano vgrajena podpora za sledenje povezav za omrežne mostove, ki ne zahteva uporabe emulacijske plasti br_netfilter;
    • V nf_tables dodano implementirana je podpora za modul SYNPROXY, ki replicira podobno funkcionalnost iz iptables, implementirana pa je tudi možnost preverjanja pravil za posamezne opcije v glavi IPv4;
    • Dodana možnost pripenjanja programov BPF sistemskim klicem setsockopt() in getsockopt(), kar vam na primer omogoča, da tem klicem pripnete lastne upravljalnike dostopa. Poleg tega je dodana nova klicna točka (hook), s katero lahko organizirate klic v program BPF enkrat za vsak interval RTT (round-trip-time, ping time);
    • Za IPv4 in IPv6 dodano nov mehanizem za shranjevanje usmerjevalnih podatkov nexthop, namenjen povečanju razširljivosti usmerjevalnih tabel. Testi so pokazali, da je bil pri uporabi novega sistema nabor 743 tisoč poti v jedro naložen v samo 4.3 sekunde;
    • Za Bluetooth izvajati funkcionalnost, potrebna za podporo pingu LE;
  • Оборудование
    • Dodano podpora za x86-združljive procesorje podjetja Zhaoxin, razvit kot rezultat skupnega projekta med VIA Technologies in mestno občino Šanghaj. Družina CPU ZX je zgrajena na arhitekturi x86-64 Isaiah, ki nadaljuje razvoj tehnologije VIA Centaur;
    • Podsistem DRM (Direct Rendering Manager) ter grafični gonilniki amdgpu in i915 so dodali podporo za razčlenjevanje, obdelavo in pošiljanje metapodatkov HDR (visok dinamični razpon) prek vrat HDMI, kar omogoča uporabo plošč in zaslonov HDR, ki lahko prikaz dodatnih razponov svetlosti;
    • Gonilnik amdgpu je dodal začetno podporo za AMD NAVI GPE (RX5700), ki vključuje osnovni gonilnik, kodo za interakcijo zaslona (DCN2), GFX in podporo za računalništvo (GFX10),
      SDMA 5 (sistem DMA0), upravljanje porabe energije in večpredstavnostni kodirniki/dekoderji (VCN2). amdgpu izboljšuje tudi podporo za kartice, ki temeljijo na grafičnih procesorjih Vega12 in Vega20, za katere so bili dodani dodatni pomnilnik in zmogljivosti za upravljanje porabe energije;

    • Gonilniku amdkfd dodana podpora za kartice, ki temeljijo na grafičnih procesorjih VegaM (za ločene grafične procesorje, kot so Fiji, Tonga, Polaris);
    • V gonilniku DRM za grafične kartice Intel za čipe Icelake izvajati nov večsegmentni način korekcije gama. Dodana možnost izhoda prek DisplayPort v formatu YCbCr4:2:0. Dodana nova vdelana programska oprema GuC za SKL, BXT, KBL, GLK in ICL. Izvedena je bila možnost izklopa napajanja zaslona v asinhronem načinu. Dodano podpora za shranjevanje in obnavljanje konteksta upodabljanja za čipe Ironlake (gen5) in gen4 (Broadwater - Cantiga), ki vam omogoča obnovitev stanja GPU iz uporabniškega prostora pri prehodu iz ene paketne operacije v drugo;
    • Gonilnik Nouveau zagotavlja zaznavanje nabora čipov NVIDIA Turing TU116;
    • Zmogljivosti gonilnika DRM/KMS za pospeševalnike zaslona ARM Komeda (Mali D71) so bile razširjene, podpora za skaliranje, razdelitev/združevanje slojev, vrtenje, odloženo pisanje, AFBC, SMMU in formate barvnega kodiranja Y0L2, P010, YUV420_8/10BIT je bilo dodano;
    • Gonilnik MSM dodaja podporo za serijo A540 GPU Adreno, ki se uporablja v procesorjih Qualcomm, kot tudi podporo za krmilnik MSM8998 DSI za Snapdragon 835;
    • Dodani gonilniki za LCD panele Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 in VXT VL050-8048NT-C01;

    • Dodano gonilnik za omogočanje orodij za pospeševanje dekodiranja
      videoposnetki, ki so na voljo v sistemu Amlogic Meson SoC;

    • V gonilniku v3d (za grafični procesor Broadcom Video Core V, ki se uporablja v Raspberry Pi). podporo pošiljanje računalniških senčil;
    • Dodano gonilnik za tipkovnice in sledilne ploščice SPI, ki se uporabljajo v sodobnih modelih prenosnikov Apple MacBook in MacBookPro;
    • Dodano dodatna zaščita za klice ioctl, povezane z gonilnikom za diskete, sam gonilnik pa je označen kot nevzdrževan
      (»osirotel«), kar pomeni prenehanje njegovega testiranja. Gonilnik je še vedno shranjen v jedru, vendar njegovo pravilno delovanje ni zagotovljeno. Gonilnik velja za zastarelega, saj je težko najti delovno opremo za njegovo testiranje - vsi trenutni zunanji pogoni praviloma uporabljajo vmesnik USB.

    • Dodano gonilnik cpufreq za plošče Raspberry Pi, ki omogoča dinamičen nadzor nad spremembami frekvence procesorja;
    • Dodana podpora za nove ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) in Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), kot tudi plošče:
      • Purizem Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • Pozdravljeni RZ/G2M,
      • NXP LS1021A-TSN.

Istočasno Latinskoameriška fundacija za prosto programsko opremo oblikovana
možnost popolnoma brezplačno jedro 5.3 - Linux-libre 5.3-gnu, očiščen elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih obseg omejuje proizvajalec. V novi izdaji je nalaganje blob onemogočeno v gonilnikih qcom, hdcp drm, allegro-dvt in meson-vdec.
Posodobljena koda za čiščenje blob v gonilnikih in podsistemih amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, zvočnem gonilniku za skylake, kot tudi v dokumentaciji mikrokode.

Vir: opennet.ru

Dodaj komentar