Lëshimi i kernelit Linux 6.2

Pas dy muajsh zhvillimi, Linus Torvalds prezantoi lëshimin e kernelit Linux 6.2. Ndër ndryshimet më të dukshme: pranimi i kodit nën licencën Copyleft-Next lejohet, implementimi i RAID5/6 në Btrfs është përmirësuar, integrimi i mbështetjes për gjuhën Rust vazhdon, shpenzimet e përgjithshme të mbrojtjes kundër sulmeve Retbleed janë zvogëluar, shtohet aftësia për të rregulluar konsumin e memories gjatë shkrimit, shtohet një mekanizëm për balancimin TCP PLB (Protective Load Balancing), është shtuar një mekanizëm hibrid për mbrojtjen e rrjedhës së komandës (FineIBT), BPF tani ka aftësinë të përcaktojë objektet dhe strukturat e veta të të dhënave , është përfshirë programi rv (Runtime Verification), konsumi i energjisë në zbatimin e bravave RCU është zvogëluar.

Versioni i ri përfshin 16843 rregullime nga 2178 zhvillues, madhësia e patch-it është 62 MB (ndryshimet prekën 14108 skedarë, u shtuan 730195 rreshta kodi, u fshinë 409485 rreshta). Rreth 42% e të gjitha ndryshimeve të paraqitura në 6.2 lidhen me drejtuesit e pajisjes, afërsisht 16% e ndryshimeve kanë të bëjnë me përditësimin e kodit specifik për arkitekturat e harduerit, 12% janë të lidhura me grupin e rrjetit, 4% kanë të bëjnë me sistemet e skedarëve dhe 3% janë të lidhura me nënsistemet e brendshme të kernelit.

Risitë kryesore në kernel 6.2:

  • Shërbimet e kujtesës dhe sistemit
    • Lejohet të përfshihen në kodin e kernelit dhe ndryshimet e ofruara sipas licencës Copyleft-Next 0.3.1. Licenca Copyleft-Next u krijua nga një prej autorëve të GPLv3 dhe është plotësisht në përputhje me licencën GPLv2, siç konfirmohet nga avokatët nga SUSE dhe Red Hat. Krahasuar me GPLv2, licenca Copyleft-Next është shumë më kompakte dhe më e lehtë për t'u kuptuar (pjesa hyrëse dhe përmendja e kompromiseve të vjetruara janë hequr), përcakton kornizën kohore dhe procedurën për eliminimin e shkeljeve dhe heq automatikisht kërkesat e copyleft për softuerin e vjetëruar. është më shumë se 15 vjeç.

      Copyleft-Next përmban gjithashtu një klauzolë të dhënies së teknologjisë pronësore, e cila, ndryshe nga GPLv2, e bën këtë licencë të pajtueshme me licencën Apache 2.0. Për të siguruar përputhshmëri të plotë me GPLv2, Copyleft-Next shprehimisht shprehimisht se një vepër derivative mund të ofrohet nën licencën GPL përveç licencës origjinale Copyleft-Next.

    • Struktura përfshin mjetin "rv", i cili ofron një ndërfaqe për ndërveprim nga hapësira e përdoruesit me mbajtësit e nënsistemit RV (Verifikimi i kohës së funksionimit), i krijuar për të kontrolluar funksionimin e saktë në sisteme shumë të besueshme që garantojnë mungesën e dështimeve. Verifikimi kryhet në kohën e ekzekutimit duke i bashkangjitur mbajtësit në pikat e gjurmimit që kontrollojnë progresin aktual të ekzekutimit kundrejt një modeli deterministik referimi të paracaktuar të makinës që përcakton sjelljen e pritshme të sistemit.
    • Pajisja zRAM, e cila lejon ndarjen e shkëmbimit të ruhet në memorie në një formë të ngjeshur (një pajisje blloku krijohet në memorie, në të cilën shkëmbimi kryhet me komprimim), zbaton aftësinë për të ripaketuar faqet duke përdorur një algoritëm alternativ për të arritur një nivel më të lartë. të ngjeshjes. Ideja kryesore është të sigurohet një zgjedhje midis disa algoritmeve (lzo, lzo-rle, lz4, lz4hc, zstd), duke ofruar kompromiset e tyre midis shpejtësisë së kompresimit/dekompresimit dhe nivelit të ngjeshjes, ose optimale në situata të veçanta (për shembull, për ngjeshjen e madhe faqet e kujtesës).
    • U shtua API "iommufd" për menaxhimin e sistemit të menaxhimit të kujtesës I/O - IOMMU (I/O Memory-Management Unit) nga hapësira e përdoruesit. API i ri bën të mundur menaxhimin e tabelave të faqeve të kujtesës I/O duke përdorur përshkruesit e skedarëve.
    • BPF ofron mundësinë për të krijuar lloje, për të përcaktuar objektet tuaja, për të ndërtuar hierarkinë tuaj të objekteve dhe për të krijuar në mënyrë fleksibël strukturat tuaja të të dhënave, siç janë listat e lidhura. Për programet BPF që kalojnë në modalitetin e fjetjes (BPF_F_SLEEPABLE), është shtuar mbështetja për kyçjet bpf_rcu_read_{,un}lock(). Mbështetje e zbatuar për ruajtjen e objekteve task_struct. U shtua lloji i hartës BPF_MAP_TYPE_CGRP_STORAGE, duke ofruar hapësirë ​​ruajtëse lokale për cgrupet.
    • Për mekanizmin e bllokimit të RCU (Read-copy-update), zbatohet një mekanizëm opsional i thirrjeve "dembele" të kthimit të thirrjeve, në të cilin disa telefonata kthyese përpunohen menjëherë duke përdorur një kohëmatës në modalitetin batch. Zbatimi i optimizimit të propozuar na lejon të zvogëlojmë konsumin e energjisë në pajisjet Android dhe ChromeOS me 5-10% duke shtyrë kërkesat RCU gjatë kohës së papunësisë ose ngarkesës së ulët në sistem.
    • U shtua sysctl split_lock_mitigate për të kontrolluar se si reagon sistemi kur zbulon bllokime të ndara që ndodhin kur aksesoni të dhëna të palinjuara në memorie për shkak të të dhënave që kryqëzojnë dy linja cache të CPU-së kur ekzekuton një instruksion atomik. Bllokime të tilla çojnë në një rënie të konsiderueshme të performancës. Vendosja e split_lock_mitigate në 0 lëshon vetëm një paralajmërim se ka një problem, ndërsa vendosja e split_lock_mitigate në 1 shkakton gjithashtu ngadalësimin e procesit që shkaktoi bllokimin për të ruajtur performancën për pjesën tjetër të sistemit.
    • Një zbatim i ri i qspinlock është propozuar për arkitekturën PowerPC, i cili demonstron performancë më të lartë dhe zgjidh disa probleme bllokimi që lindin në raste të jashtëzakonshme.
    • Kodi i trajtimit të ndërprerjeve MSI (Message-Signaled Interrupts) është ripunuar, duke eliminuar problemet e grumbulluara arkitekturore dhe duke shtuar mbështetje për lidhjen e mbajtësve individualë në pajisje të ndryshme.
    • Për sistemet e bazuara në arkitekturën e grupit të instruksioneve LoongArch të përdorura në procesorët Loongson 3 5000 dhe që zbatojnë RISC ISA të ri, të ngjashëm me MIPS dhe RISC-V, zbatohet mbështetja për ftrace, mbrojtjen e stivës, modalitetin e gjumit dhe të gatishmërisë.
    • Është dhënë mundësia për të caktuar emra në zonat e memories anonime të përbashkët (më parë emrat mund të caktoheshin vetëm në memorien private anonime të caktuar për një proces specifik).
    • U shtua një parametër i ri i linjës komanduese të kernelit "trace_trigger", i krijuar për të aktivizuar një nxitës gjurmimi që përdoret për të lidhur komandat e kushtëzuara të thirrura kur aktivizohet një kontroll kontrolli (për shembull, trace_trigger=”sched_switch.stacktrace nëse prev_state == 2″).
    • Kërkesat për versionin e paketës binutils janë rritur. Ndërtimi i kernelit tani kërkon të paktën binutils 2.25.
    • Kur thërrisni exec(), është shtuar aftësia për të vendosur një proces në një hapësirë ​​emri kohore, në të cilën koha ndryshon nga koha e sistemit.
    • Ne kemi filluar transferimin e funksionalitetit shtesë nga dega Rust-for-Linux në lidhje me përdorimin e gjuhës Rust si gjuhë e dytë për zhvillimin e drejtuesve dhe moduleve të kernelit. Mbështetja e Rust është çaktivizuar si parazgjedhje dhe nuk rezulton që Rust të përfshihet si një varësi e nevojshme për ndërtimin e kernelit. Funksionaliteti bazë i ofruar në versionin e fundit është zgjeruar për të mbështetur kodin e nivelit të ulët, si lloji Vec dhe makrot pr_debug!(), pr_cont!() dhe pr_alert!(), si dhe makro procedurale “#[vtable ]”, e cila thjeshton punën me tabelat e treguesve në funksione. Shtimi i lidhjeve Rust të nivelit të lartë mbi nënsistemet e kernelit, të cilat do të lejojnë krijimin e drejtuesve të plotë në Rust, pritet në publikimet e ardhshme.
    • Lloji "char" i përdorur në kernel tani deklarohet i panënshkruar si parazgjedhje për të gjitha arkitekturat.
    • Mekanizmi i alokimit të memories së pllakave - SLOB (ndarësi i pllakave), i cili ishte krijuar për sisteme me një sasi të vogël memorie, është deklaruar i vjetëruar. Në vend të SLOB, në kushte normale rekomandohet përdorimi i SLUB ose SLAB. Për sistemet me një sasi të vogël memorie, rekomandohet përdorimi i SLUB në modalitetin SLUB_TINY.
  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • Janë bërë përmirësime në Btrfs që synojnë rregullimin e problemit të "vrimës së shkrimit" në implementimet RAID 5/6 (një përpjekje për të rivendosur një RAID nëse ndodh një përplasje gjatë shkrimit dhe është e pamundur të kuptohet se në cilin bllok në cilin pajisje RAID është shkruar saktë, që mund të çojë në shkatërrimin e bllokut, që korrespondon me blloqet e nënshkruara). Përveç kësaj, SSD-të tani mundësojnë automatikisht funksionimin e heqjes asinkrone si parazgjedhje kur është e mundur, duke lejuar performancë të përmirësuar për shkak të grupimit efikas të operacioneve të hedhjes në radhë dhe përpunimit të radhës nga një procesor në sfond. Performanca e përmirësuar e operacioneve të dërgimit dhe kërkimit, si dhe ioctl FIEMAP.
    • Aftësitë për menaxhimin e shkrimit të shtyrë (shkrimi, ruajtja e të dhënave të ndryshuara në sfond) për pajisjet e bllokut janë zgjeruar. Në disa situata, si p.sh. kur përdorni pajisje të bllokut të rrjetit ose disqe USB, shkrimet dembele mund të rezultojnë në konsum të madh RAM. Për të kontrolluar sjelljen e shkrimeve dembel dhe për të mbajtur madhësinë e cache të faqes brenda kufijve të caktuar, parametrat e rinj strikte_limit, min_bytes, max_bytes, min_ratio_fine dhe max_ratio_fine janë futur në sysfs (/sys/class/bdi/).
    • Sistemi i skedarëve F2FS zbaton një operacion zëvendësimi atomik ioctl, i cili ju lejon të shkruani të dhëna në një skedar brenda një operacioni të vetëm atomik. F2FS shton gjithashtu një cache të shtrirjes së bllokut për të ndihmuar në identifikimin e të dhënave të përdorura në mënyrë aktive ose të dhënave që nuk janë aksesuar për një kohë të gjatë.
    • Në ext4 FS vërehen vetëm korrigjimet e gabimeve.
    • Sistemi i skedarëve ntfs3 ofron disa opsione të reja montimi: "nocase" për të kontrolluar ndjeshmërinë e rasteve në emrat e skedarëve dhe dosjeve; windows_name për të ndaluar krijimin e emrave të skedarëve që përmbajnë karaktere që nuk janë të vlefshme për Windows; hide_dot_files për të kontrolluar caktimin e etiketës së skedarit të fshehur për skedarët që fillojnë me një pikë.
    • Sistemi i skedarëve Squashfs zbaton një opsion montimi “threads=”, i cili ju lejon të përcaktoni numrin e thread-ve për të paralelizuar operacionet e dekompresimit. Squashfs prezantoi gjithashtu aftësinë për të hartuar ID-të e përdoruesve të sistemeve të skedarëve të montuar, të përdorura për të përputhur skedarët e një përdoruesi specifik në një ndarje të huaj të montuar me një përdorues tjetër në sistemin aktual.
    • Zbatimi i listave të kontrollit të aksesit POSIX (POSIX ACL) është ripunuar. Implementimi i ri eliminon çështjet arkitekturore, thjeshton mirëmbajtjen e bazës së kodeve dhe prezanton lloje më të sigurta të të dhënave.
    • Nënsistemi fscrypt, i cili përdoret për kriptim transparent të skedarëve dhe drejtorive, ka shtuar mbështetje për algoritmin e enkriptimit SM4 (standardi kinez GB/T 32907-2016).
    • Mundësia për të ndërtuar kernel pa mbështetje NFSv2 është siguruar (në të ardhmen ata planifikojnë të ndalojnë plotësisht mbështetjen e NFSv2).
    • Organizimi i kontrollit të të drejtave të hyrjes në pajisjet NVMe është ndryshuar. Ofron mundësinë për të lexuar dhe shkruar në një pajisje NVMe nëse procesi i shkrimit ka akses në skedarin e dedikuar të pajisjes (më parë procesi duhej të kishte lejen CAP_SYS_ADMIN).
    • U hoq drejtuesi i paketës CD/DVD, i cili u zhvlerësua në 2016.
  • Virtualizimi dhe Siguria
    • Një metodë e re e mbrojtjes kundër cenueshmërisë Retbleed është zbatuar në CPU-të Intel dhe AMD, duke përdorur gjurmimin e thellësisë së thirrjeve, e cila nuk e ngadalëson punën aq shumë sa mbrojtja e mëparshme e pranishme kundër Retbleed. Për të aktivizuar modalitetin e ri, është propozuar parametri i linjës së komandës së kernelit "retbleed=stuff".
    • U shtua një mekanizëm hibrid i mbrojtjes së rrjedhës së instruksioneve FineIBT, duke kombinuar përdorimin e instruksioneve të harduerit Intel IBT (Ndjekja e Degës Indirekte) dhe mbrojtjen e softuerit kCFI (Integriteti i rrjedhës së kontrollit të kernelit) për të bllokuar shkeljen e rendit normal të ekzekutimit (rrjedhën e kontrollit) si rezultat i përdorimit të shfrytëzimeve që modifikojnë treguesit e ruajtur në memorie në funksione. FineIBT lejon ekzekutimin me kërcim indirekt vetëm në rastin e një kërcimi në instruksionin ENDBR, i cili vendoset në fillim të funksionit. Për më tepër, në analogji me mekanizmin kCFI, hash-et më pas kontrollohen për të garantuar pandryshueshmërinë e treguesve.
    • Shtohen kufizime për të bllokuar sulmet që manipulojnë gjenerimin e gjendjeve "ops", pas së cilës detyrat problematike përfundojnë dhe gjendja rikthehet pa ndalur sistemin. Me një numër shumë të madh thirrjesh në gjendjen "oops", ndodh një tejkalim i numëruesit të referencës (refcount), i cili lejon shfrytëzimin e dobësive të shkaktuara nga dereferencat e treguesit NULL. Për t'u mbrojtur nga sulme të tilla, kernelit i është shtuar një kufi për numrin maksimal të aktivizuesve "ops", pas tejkalimit të të cilit kerneli do të fillojë një kalim në gjendjen "paniku" i ndjekur nga një rindezje, e cila nuk do të lejojë arritjen e numri i përsëritjeve të nevojshme për të tejmbushur rinumërimin. Si parazgjedhje, kufiri është vendosur në 10 mijë "ops", por nëse dëshironi, ai mund të ndryshohet përmes parametrit oops_limit.
    • U shtua parametri i konfigurimit LEGACY_TIOCSTI dhe sysctl legacy_tiocsti për të çaktivizuar aftësinë për të vendosur të dhëna në terminal duke përdorur ioctl TIOCSTI, pasi ky funksionalitet mund të përdoret për të zëvendësuar karaktere arbitrare në buferin e hyrjes së terminalit dhe për të simuluar hyrjen e përdoruesit.
    • Propozohet një lloj i ri i strukturës së brendshme, encoded_page, në të cilin pjesët e poshtme të treguesit përdoren për të ruajtur informacione shtesë të përdorura për të mbrojtur kundër çreferencimit aksidental të treguesit (nëse dereferenca është në të vërtetë e nevojshme, këto pjesë shtesë duhet të pastrohen së pari) .
    • Në platformën ARM64, në fazën e nisjes, është e mundur të aktivizoni ose çaktivizoni zbatimin e softuerit të mekanizmit Shadow Stack, i cili përdoret për të mbrojtur kundër mbishkrimit të adresës së kthimit nga një funksion në rast të tejmbushjes së buferit në pirg ( thelbi i mbrojtjes është ruajtja e adresës së kthimit në një pirg të veçantë "hije" pasi kontrolli të transferohet në funksion dhe të merret adresa e dhënë përpara se të dilni nga funksioni). Mbështetja për implementimet e harduerit dhe softuerit të Shadow Stack në një asamble kernel ju lejon të përdorni një kernel në sisteme të ndryshme ARM, pavarësisht nga mbështetja e tyre për udhëzimet për vërtetimin e treguesit. Përfshirja e një zbatimi softuerësh kryhet përmes zëvendësimit të udhëzimeve të nevojshme në kod gjatë ngarkimit.
    • Mbështetje e shtuar për përdorimin e mekanizmit të njoftimit të daljes asinkron në procesorët Intel, i cili lejon zbulimin e sulmeve me një hap mbi kodin e ekzekutuar në enklavat SGX.
    • Një grup operacionesh është propozuar që lejon hipervizorin të mbështesë kërkesat nga sistemet e ftuar të Intel TDX (Zgjerime të Domainit të Besuar).
    • Cilësimet e ndërtimit të kernelit RANDOM_TRUST_BOOTLOADER dhe RANDOM_TRUST_CPU janë hequr, në favor të opsioneve përkatëse të linjës së komandës random.trust_bootloader dhe random.trust_cpu.
    • Mekanizmi Landlock, i cili ju lejon të kufizoni ndërveprimin e një grupi procesesh me mjedisin e jashtëm, ka shtuar mbështetje për flamurin LANDLOCK_ACCESS_FS_TRUNCATE, i cili bën të mundur kontrollin e ekzekutimit të operacioneve të shkurtimit të skedarëve.
  • Nënsistemi i rrjetit
    • Për IPv6, është shtuar mbështetja për PLB (Protective Load Balancing), një mekanizëm balancues i ngarkesës midis lidhjeve të rrjetit që synon reduktimin e pikave të mbingarkesës në çelësat e qendrës së të dhënave. Duke ndryshuar etiketën e rrjedhës IPv6, PLB ndryshon rastësisht shtigjet e paketave për të balancuar ngarkesën në portat e ndërrimit. Për të reduktuar rirenditjen e paketave, ky operacion kryhet pas periudhave të papunësisë kur është e mundur. Përdorimi i PLB në qendrat e të dhënave të Google ka reduktuar çekuilibrin e ngarkesës në portat e ndërrimit me një mesatare prej 60%, reduktuar humbjen e paketave me 33% dhe reduktuar vonesën me 20%.
    • Shofer i shtuar për pajisjet MediaTek që mbështesin Wi-Fi 7 (802.11be).
    • Mbështetje e shtuar për lidhjet 800 gigabit.
    • U shtua aftësia për të riemërtuar ndërfaqet e rrjetit menjëherë, pa ndërprerë punën.
    • Një përmendje e adresës IP në të cilën mbërriti paketa është shtuar në mesazhet e regjistrit rreth SYN flood.
    • Për UDP, është zbatuar aftësia për të përdorur tabela të veçanta hash për hapësira të ndryshme emrash të rrjetit.
    • Për urat e rrjetit, është zbatuar mbështetja për metodën e vërtetimit MAB (MAC Authentication Bypass).
    • Për protokollin CAN (CAN_RAW), mbështetja për modalitetin e prizës SO_MARK është zbatuar për bashkimin e filtrave të trafikut të bazuar në fwmark.
    • ipset zbaton një parametër të ri bitmask që ju lejon të vendosni një maskë bazuar në bit arbitrare në adresën IP (për shembull, "ipset krijoj set1 hash:ip bitmask 255.128.255.0").
    • Mbështetje e shtuar për përpunimin e titujve të brendshëm brenda paketave të tunelizuara në nf_tables.
  • Оборудование
    • Nënsistemi "accel" është shtuar me zbatimin e një kuadri për përshpejtuesit llogaritës, i cili mund të ofrohet ose në formën e ASIC-ve individuale ose në formën e blloqeve IP brenda SoC dhe GPU. Këta përshpejtues kanë për qëllim kryesisht përshpejtimin e zgjidhjes së problemeve të mësimit të makinerive.
    • Drejtuesi amdgpu përfshin mbështetje për komponentët GC, PSP, SMU dhe NBIO IP. Për sistemet ARM64, është implementuar mbështetja për DCN (Display Core Next). Zbatimi i daljes së ekranit të mbrojtur është zhvendosur nga përdorimi i DCN10 në DCN21 dhe tani mund të përdoret kur lidhni shumë ekrane.
    • Drejtuesi i i915 (Intel) ka mbështetje të stabilizuar për kartat video diskrete Intel Arc (DG2/Alchemist).
    • Shoferi Nouveau mbështet GPU-të NVIDIA GA102 (RTX 30) bazuar në arkitekturën Ampere. Për kartat nva3 (GT215), është shtuar aftësia për të kontrolluar dritën e prapme.
    • Mbështetje e shtuar për përshtatësit me valë të bazuar në Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) dhe çipat MediaTek MT7996, Broadcom BCM4377/4378/4387, si dhe ndërfaqet e kontrollit të Bluetooth-it, Te8521GEA, NJE dhe Motorcomm.
    • U shtua mbështetje ASoC (ALSA System on Chip) për çipat e integruar të zërit HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38.RK3588 Mbështetje e shtuar për ndërfaqen audio Focusrite Saffire Pro 40. U shtua kodek audio Realtek RT1318.
    • Mbështetje e shtuar për telefonat inteligjentë dhe tabletët Sony (Xperia 10 IV, 5 IV, X dhe X kompakt, OnePlus One, 3, 3T dhe Nord N100, Xiaomi Poco F1 dhe Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Mbështetje e shtuar për ARM SoC dhe Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon SM460dragon 6375) bordet , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Od.

Në të njëjtën kohë, Fondacioni i Software-it të Lirë të Amerikës Latine formoi një version të kernelit plotësisht të lirë 6.2 - Linux-libre 6.2-gnu, i pastruar nga elementët e firmuerit dhe drejtuesit që përmbajnë komponentë të pronarit ose seksione të kodit, fushëveprimi i të cilit është i kufizuar nga prodhuesi. Publikimi i ri pastron njolla të reja në shoferin nouveau. Ngarkimi i Blob është i çaktivizuar në drejtuesit mt7622, ​​mt7996 wifi dhe bcm4377 bluetooth. Pastroi emrat e pikave në skedarët dts për arkitekturën Aarch64. Kodi i përditësuar i pastrimit të blobit në drejtues dhe nënsisteme të ndryshme. Ndaloi pastrimin e drejtuesit s5k4ecgx, pasi u hoq nga kerneli.

Burimi: opennet.ru

Shto një koment