Lëshimi i kernelit Linux 5.3

Pas dy muajsh zhvillimi, Linus Torvalds paraqitur lëshimi i kernelit Linux 5.3. Ndër ndryshimet më të dukshme: mbështetja për GPU-të AMD Navi, procesorët Zhaoxi dhe teknologjinë e menaxhimit të energjisë Intel Speed ​​​​Select, aftësia për të përdorur udhëzimet umwait për të pritur pa përdorur cikle,
modaliteti 'utilization clamping' që rrit interaktivitetin për CPU-të asimetrike, thirrjen e sistemit pidfd_open, aftësinë për të përdorur adresat IPv4 nga nënrrjeti 0.0.0.0/8, mundësinë e përshpejtimit të harduerit nftables, mbështetjen HDR në nënsistemin DRM, integrimin e ACRN hipervizor.

В shpallje versioni i ri, Linus u kujtoi të gjithë zhvilluesve rregullin kryesor të zhvillimit të kernelit - mbajtjen e të njëjtës sjellje për komponentët e hapësirës së përdoruesit. Ndryshimet në kernel nuk duhet në asnjë mënyrë të prishin aplikacionet tashmë të ekzekutuara ose të çojnë në regresione në nivelin e përdoruesit. Në këtë rast, një shkelje e sjelljes mund të shkaktojë jo vetëm një ndryshim në ABI, heqjen e kodit të vjetëruar ose shfaqjen e gabimeve, por edhe ndikimin indirekt të përmirësimeve të dobishme që funksionojnë siç duhet. Si shembull ilustrues ishte hidhet e dobishme optimization në kodin Ext4, i cili redukton numrin e akseseve në diskun duke çaktivizuar leximin paraprak të tabelës inode për kërkesat e vogla I/O.

Optimizimi çoi në faktin se, për shkak të një uljeje të aktivitetit të diskut, entropia për gjeneratorin e numrave të rastësishëm getrandom() filloi të grumbullohej më ngadalë dhe në disa konfigurime, në rrethana të caktuara, ngrirjet mund të vëreheshin gjatë ngarkimit derisa grupi i entropisë ishte e mbushur. Meqenëse optimizimi është vërtet i dobishëm, u ngrit një diskutim midis zhvilluesve në të cilin u propozua të rregullohej problemi duke çaktivizuar mënyrën e parazgjedhur të bllokimit të thirrjes getrandom() dhe duke shtuar një flamur opsional për të pritur entropinë, por një ndryshim i tillë do të ndikonte në cilësia e numrave të rastit në fazën fillestare të ngarkimit.

Versioni i ri përfshin 15794 rregullime nga 1974 zhvillues,
madhësia e patch - 92 MB (ndryshimet prekën 13986 skedarë, u shtuan 258419 rreshta kodi,
599137 rreshta janë hequr). Rreth 39% e të gjitha të paraqitura në 5.3
ndryshimet lidhen me drejtuesit e pajisjes, afërsisht 12% e ndryshimeve janë
qëndrimi ndaj përditësimit të kodit specifik për arkitekturat e harduerit, 11%
lidhur me stack-in e rrjetit, 3% me sistemet e skedarëve dhe 3% me të brendshme
nënsistemet e bërthamës.

Kryesore risitë:

  • Shërbimet e kujtesës dhe sistemit
    • Zhvillimi i vazhdueshëm i funksionalitetit 'pidfd' për të ndihmuar në trajtimin e situatave të ripërdorimit të PID (pidfd shoqërohet me një proces specifik dhe nuk ndryshon, ndërsa një PID mund të lidhet me një proces tjetër pasi procesi aktual i lidhur me atë PID përfundon). Më parë ishte shtuar në kernel
      thirrja e sistemit pidfd_send_signal() dhe flamuri CLONE_PIDFD në thirrjen clone() për të marrë një pidfd për përdorim në idfd_send_signal(). Përdorimi i clone() me flamurin CLONE_PIDFD mund të shkaktojë probleme me menaxherët e shërbimit ose sistemin e përfundimit të forcës jashtë kujtesës të platformës Android. Në këtë rast, një thirrje për fork() ose klon() pa CLONE_PIDFD përdoret për të nisur.

      Kernel 5.3 prezantoi thirrjen e sistemit pidfd_open(), e cila ju lejon të merrni një pidfd të kontrollueshme për një proces ekzistues arbitrar që nuk është krijuar duke thirrur clone() me flamurin CLONE_PIDFD. Shtoi gjithashtu mbështetje për sondazhin pidfd duke përdorur poll() dhe epoll(), i cili lejon menaxherët e procesit të gjurmojnë përfundimin e proceseve arbitrare pa frikën e një kushti gare nëse një PID i caktohet një procesi të ri. Mekanizmi për njoftimin kur një proces i lidhur me pidfd ka përfunduar është i ngjashëm me njoftimin kur procesi i tij fëmijë ka përfunduar;

    • Mbështetja për mekanizmin e fiksimit të ngarkesës është shtuar në planifikuesin e detyrave (Mbërthimi i shfrytëzimit), duke ju lejuar t'i përmbaheni intervaleve minimale ose maksimale të frekuencës, në varësi të detyrave aktive në CPU. Mekanizmi i paraqitur përshpejton detyrat që ndikojnë drejtpërdrejt në cilësinë e përvojës së përdoruesit duke ekzekutuar këto detyra të paktën në fundin e poshtëm të frekuencës "të kërkuar". Detyrat me prioritet të ulët që nuk ndikojnë në punën e përdoruesit nisen duke përdorur kufirin e sipërm të frekuencës "të lejuar". Limitet vendosen nëpërmjet atributeve sched_uclamp_util_min dhe sched_uclamp_util_max në thirrjen e sistemit sched_setattr().
    • Mbështetje e shtuar për teknologjinë e menaxhimit të energjisë Zgjidhni shpejtësinë e Intel, i disponueshëm në serverë të zgjedhur me procesorë Intel Xeon. Kjo teknologji ju lejon të vendosni cilësimet e performancës dhe të ndarjes së xhiros për bërthama të ndryshme të CPU, gjë që ju lejon të jepni përparësi performancës për detyrat e kryera në bërthama të caktuara, duke sakrifikuar performancën në bërthama të tjera;
    • Proceset në hapësirën e përdoruesit me kusht aftësia për të pritur për një kohë të shkurtër pa përdorur sythe duke përdorur instruksionin umwait. Ky udhëzim, së bashku me udhëzimet e umonitorit dhe tpauses, do të ofrohet në çipat e ardhshëm "Tremont" të Intel dhe do të lejojë zbatimin e vonesave që janë efikase në energji dhe nuk ndikojnë në performancën e temave të tjera kur përdorni Hyper Threading;
    • Për arkitekturën RISC-V, është shtuar mbështetje për faqet e memories së madhe;
    • Mekanizmi i gjurmimit të kprobes ka shtuar aftësinë për të çreferencuar treguesit e kernelit në hapësirën e përdoruesit, i cili mund të përdoret, për shembull, për të vlerësuar përmbajtjen e strukturave të kaluara në thirrjet e sistemit. Është shtuar gjithashtu aftësia për të instaluar kontrolle në fazën e nisjes.
    • U shtua opsioni PREEMPT_RT në skedarin e konfigurimit për funksionimin në kohë reale. Vetë kodi për të mbështetur modalitetin në kohë reale nuk është shtuar ende në kernel, por shfaqja e opsionit është një shenjë e mirë që epika afatgjatë integrimet Arnimet në kohë reale-Preempt janë drejt përfundimit;
    • U shtua thirrja e sistemit clone3() me zbatimin e një versioni më të zgjeruar të ndërfaqes clone(), i cili lejon specifikimin e një numri më të madh flamujsh;
    • U shtua mbajtësi bpf_send_signal(), duke lejuar programet BPF të dërgojnë sinjale në procese arbitrare;
    • Për ngjarjet perf në mjedisin e hipervizorit KVM, është shtuar një mekanizëm i ri i filtrimit të ngjarjeve, duke i lejuar administratorit të përcaktojë llojet e ngjarjeve që lejohen ose nuk lejohen për monitorim në anën e sistemit të ftuar;
    • Aftësia për të përpunuar programe me sythe është shtuar në mekanizmin e verifikimit të aplikimit eBPF nëse ekzekutimi i ciklit është i kufizuar dhe nuk mund të çojë në tejkalimin e kufirit të numrit maksimal të instruksioneve;
  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • Sistemi i skedarëve XFS tani mbështet anashkalimin inode me shumë fije (për shembull, kur kontrolloni kuotat). Janë shtuar ioctls të rinj BULKSTAT dhe INUMBERS, duke siguruar akses në veçoritë që u shfaqën në edicionin e pestë të formatit FS, të tilla si koha e lindjes inode dhe aftësia për të vendosur parametrat BULKSTAT dhe INUMBERS për çdo grup AG (Grupet e Alokimit);
    • Në Ext4 mbështetje e shtuar boshllëqe në drejtori (blloqe të palidhura).
      Ofrohet përpunim flamuri "i" (i pandryshueshëm) për skedarët e hapur (shkrimi është i ndaluar në një situatë nëse flamuri është vendosur në një kohë kur skedari ishte tashmë i hapur);

    • Btrfs ofron një përkufizim të një zbatimi të shpejtë të crc32c në të gjitha arkitekturat;
    • Në CIFS, kodi për mbështetjen smbdirect është hequr si zhvillim eksperimental. SMB3 shtoi aftësinë për të përdorur algoritme kriptografike në modalitetin GCM. U shtua një opsion i ri montimi për të nxjerrë parametrat e modalitetit nga hyrjet ACE (Access Control Entry). Optimizoi performancën e thirrjes open();
    • U shtua një opsion në F2FS për të kufizuar grumbulluesin e mbeturinave kur funksionon në modalitetin e pikës së kontrollit=çaktivizoni. U shtua ioctl për të hequr vargjet e bllokut nga F2FS, duke lejuar rregullime të madhësisë së ndarjes menjëherë. U shtua aftësia për të vendosur një skedar shkëmbimi në F2FS për të ofruar hyrje/dalje të drejtpërdrejtë. Mbështetje e shtuar për ngjitjen e një skedari dhe ndarjen e blloqeve për skedarë të ngjashëm për të gjithë përdoruesit;
    • Mbështetje e shtuar për operacionet asinkrone sendmsg() dhe recvmsg() në ndërfaqen për hyrje/dalje asinkrone io_uring;
    • Mbështetja për kompresimin duke përdorur algoritmin zstd dhe aftësia për të verifikuar imazhet e nënshkruara FS janë shtuar në sistemin e skedarëve UBIFS;
    • Ceph FS tani mbështet etiketat e sigurisë SELinux për skedarët;
    • Për NFSv4, është implementuar një opsion i ri montimi “nconnect=”, i cili përcakton numrin e lidhjeve të vendosura me serverin. Trafiku ndërmjet këtyre lidhjeve do të shpërndahet duke përdorur balancimin e ngarkesës. Përveç kësaj, serveri NFSv4 tani krijon një direktori /proc/fs/nfsd/clients me informacione rreth klientëve aktualë, duke përfshirë informacione rreth skedarëve që kanë hapur;
  • Virtualizimi dhe Siguria
    • Kerneli përfshin një hipervizor për pajisjet e integruara ACRN, i cili është shkruar me vëmendjen e gatishmërisë për detyra në kohë reale dhe përshtatshmërisë për përdorim në sistemet kritike të misionit. ACRN siguron shpenzime minimale, garanton vonesë të ulët dhe reagim adekuat kur ndërvepron me pajisjet. Mbështet virtualizimin e burimeve të CPU, I/O, nënsistemit të rrjetit, grafika dhe operacionet e zërit. ACRN mund të përdoret për të ekzekutuar makina të shumta virtuale të izoluara në njësitë e kontrollit elektronik, panelet e kontrollit, sistemet e informacionit të automobilave, pajisjet IoT të konsumatorit dhe teknologji të tjera të ngulitura;
    • Në Linux modaliteti i përdoruesit shtuar Modaliteti i udhëtimit në kohë, i cili ju lejon të ngadalësoni ose shpejtoni kohën në një mjedis virtual UML për ta bërë më të lehtë korrigjimin e kodit të lidhur me kohën. Përveç kësaj, është shtuar një parametër
      time-travel-start, i cili lejon orën e sistemit të fillojë nga një moment i caktuar në formatin epokë;

    • Opsionet e reja të linjës së komandës së kernelit "init_on_alloc" dhe "init_on_free" janë shtuar, kur specifikohet, aktivizohet zerimi i zonave të memories të ndara dhe të liruara (mbushja me zero për malloc dhe pa pagesë), gjë që lejon rritjen e sigurisë për shkak të shpenzimeve shtesë të inicializimit;
    • U shtua shofer i ri virtio-iommu me zbatimin e një pajisjeje të paravirtualizuar që ju lejon të dërgoni kërkesa të IOMMU si ATTACH, DETACH, MAP dhe UNMAP mbi transportin virtio pa emuluar tabelat e faqeve të kujtesës;
    • U shtua shofer i ri virtio-pmem, që përfaqëson aksesin në pajisjet e ruajtjes të vendosura në hapësirën fizike të adresave, të tilla si NVDIMM;
    • Zbatoi aftësinë për të bashkangjitur çelësat kriptografikë në hapësirën e emrave të përdoruesit ose rrjetit (çelësat bëhen të paarritshëm jashtë hapësirës së zgjedhur të emrave), si dhe për të mbrojtur çelësat duke përdorur ACL;
    • Në nënsistemin e kriptove shtuar mbështetje për një algoritëm hash shumë të shpejtë jokriptografik xxhash, shpejtësia e së cilës varet nga performanca e memories;
  • Nënsistemi i rrjetit
    • Aktivizoi përpunimin e adresave IPv4 në rangun 0.0.0.0/8, i cili më parë nuk ishte i disponueshëm për përdorim. Prezantimi i këtij nënrrjeti do të lejojë shpërndani 16 milionë adresa të tjera IPv4;
    • Në Netfilter për nftables shtuar mbështetje për mekanizmat e përshpejtimit të harduerit për filtrimin e paketave përmes përdorimit të drejtuesve të shtuar Flow Block API. Të gjitha tabelat e rregullave me të gjitha zinxhirët mund të vendosen në anë të përshtatësve të rrjetit. Aktivizimi bëhet duke lidhur flamurin NFT_TABLE_F_HW në tabelë. Mbështet metadata të thjeshta për protokollet e Shtresës 3 dhe Shtresës 4, pranoni/refuzoni veprimet, pasqyrimet sipas IP-së dhe portave të rrjetit të dërguesit/marrësit dhe llojit të protokollit;
    • Shtuar mbështetje e integruar për gjurmimin e lidhjeve për urat e rrjetit, e cila nuk kërkon përdorimin e shtresës emuluese br_netfilter;
    • Në nf_tabela shtuar mbështetja për modulin SYNPROXY, i cili përsërit funksionalitete të ngjashme nga iptables, dhe aftësia për të kontrolluar rregullat për opsionet individuale në kokën IPv4 është zbatuar gjithashtu;
    • U shtua aftësia për të bashkangjitur programet BPF me thirrjet e sistemit setsockopt() dhe getsockopt(), e cila, për shembull, ju lejon të bashkëngjitni mbajtësit tuaj të aksesit në këto thirrje. Përveç kësaj, është shtuar një pikë e re e thirrjes (hook), me të cilën mund të organizoni një telefonatë në programin BPF një herë për çdo interval RTT (kohë vajtje-ardhje, kohë ping);
    • Për IPv4 dhe IPv6 shtuar mekanizmi i ri i ruajtjes së të dhënave të kursimit Nexthop që synon rritjen e shkallëzueshmërisë së tabelave të rrugëtimit. Testet treguan se gjatë përdorimit të sistemit të ri, një grup prej 743 mijë rrugësh u ngarkuan në kernel në vetëm 4.3 sekonda;
    • Për Bluetooth zbatuar funksionaliteti i nevojshëm për të mbështetur ping LE;
  • Оборудование
    • Shtuar mbështetje për procesorët e kompanisë të përputhshëm me x86 Zhaoksinë, i zhvilluar si rezultat i një projekti të përbashkët midis VIA Technologies dhe Bashkisë së Shangait. Familja ZX CPU është ndërtuar mbi arkitekturën x86-64 Isaiah, duke vazhduar zhvillimin e teknologjisë VIA Centaur;
    • Nënsistemi DRM (Direct Rendering Manager), si dhe drejtuesit e grafikës amdgpu dhe i915, kanë shtuar mbështetje për analizimin, përpunimin dhe dërgimin e meta të dhënave HDR (gamë e lartë dinamike) nëpërmjet portës HDMI, duke lejuar përdorimin e paneleve dhe ekraneve HDR të aftë për të shfaqja e diapazoneve shtesë të ndriçimit;
    • Drejtuesi amdgpu ka shtuar mbështetjen fillestare për AMD NAVI GPU (RX5700), i cili përfshin drejtuesin bazë, kodin e ndërveprimit të ekranit (DCN2), GFX dhe mbështetjen e llogaritjes (GFX10),
      SDMA 5 (System DMA0), administrim energjie dhe kodues/dekoder multimedial (VCN2). amdgpu përmirëson gjithashtu mbështetjen për kartat e bazuara në GPU-të Vega12 dhe Vega20, për të cilat janë shtuar aftësitë shtesë të memories dhe menaxhimit të energjisë;

    • Mbështetje e shtuar për kartat e bazuara në GPU-të VegaM në drejtuesin amdkfd (për GPU-të diskrete, si Fixhi, Tonga, Polaris);
    • Në drejtuesin DRM për kartat video Intel për çipat Icelake zbatuar modaliteti i ri i korrigjimit të gama me shumë segmente. U shtua aftësia për të dalë përmes DisplayPort në formatin YCbCr4:2:0. U shtua firmware i ri GuC për SKL, BXT, KBL, GLK dhe ICL. Është zbatuar aftësia për të fikur energjinë e ekranit në modalitetin asinkron. Shtuar mbështetje për ruajtjen dhe rivendosjen e kontekstit të interpretimit për çipat Ironlake (gen5) dhe gen4 (Broadwater - Cantiga), i cili ju lejon të rivendosni gjendjen e GPU nga hapësira e përdoruesit kur kaloni nga një operacion grupi në tjetrin;
    • Shoferi Nouveau siguron zbulimin e çipit NVIDIA Turing TU116;
    • Aftësitë e drejtuesit DRM/KMS për përshpejtuesit e ekranit ARM Komeda (Mali D71) janë zgjeruar, mbështetja për shkallëzimin, ndarjen/bashkimin e shtresave, rrotullimin, shkrimin e shtyrë, AFBC, SMMU dhe formatet e kodimit me ngjyra Y0L2, P010, YUV420_8/10BIT është shtuar;
    • Drejtuesi MSM shton mbështetje për serinë A540 GPU Adreno të përdorur në procesorët Qualcomm, si dhe mbështetje për kontrolluesin MSM8998 DSI për Snapdragon 835;
    • Drejtues të shtuar për panelet LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 dhe VXT VL050-8048NT-C01;

    • Shtuar drejtues për aktivizimin e mjeteve të përshpejtimit të deshifrimit
      video të disponueshme në Amlogic Meson SoC;

    • Në shoferin v3d (për GPU-në Broadcom Video Core V të përdorur në Raspberry Pi) u shfaq mbështetje dispeçimi i shaderëve të llogaritjes;
    • Shtuar drejtues për tastierat SPI dhe tastierë që përdoren në modelet moderne të laptopëve Apple MacBook dhe MacBookPro;
    • Shtuar mbrojtje shtesë për thirrjet ioctl të lidhura me drejtuesin e floppy-it, dhe vetë drejtuesi është shënuar si i pamirëmbajtur
      (“jetim”), që nënkupton përfundimin e testimit të tij. Drejtuesi është ende i ruajtur në kernel, por funksionimi i tij i saktë nuk është i garantuar. Shoferi konsiderohet i vjetëruar, pasi është e vështirë të gjesh pajisje pune për testimin e tij - të gjitha disqet e jashtme aktuale, si rregull, përdorin ndërfaqen USB.

    • Shtuar drejtues cpufreq për bordet Raspberry Pi, i cili ju lejon të kontrolloni në mënyrë dinamike ndryshimet në frekuencën e procesorit;
    • Mbështetje e shtuar për ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) dhe Amlogic G12B (4x Cortex-A73- A2 ), si dhe dërrasat:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Kuti TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Në të njëjtën kohë, Fondacioni i Software-it të Lirë të Amerikës Latine formuar
alternativë kernel plotësisht i lirë 5.3 - Linux-Libre 5.3-Gnu, i pastruar nga elementët e firmuerit dhe drejtuesit që përmbajnë komponentë jo të lirë ose seksione kodi, fushëveprimi i të cilave është i kufizuar nga prodhuesi. Në versionin e ri, ngarkimi i blob është i çaktivizuar në drejtuesit qcom, hdcp drm, allegro-dvt dhe meson-vdec.
Kodi i përditësuar i pastrimit të blobit në drejtuesit dhe nënsistemet amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, drejtuesi i zërit për skylake, si dhe në dokumentacionin e mikrokodit.

Burimi: opennet.ru

Shto një koment