Lëshimi i kernelit Linux 5.7

Pas dy muajsh zhvillimi, Linus Torvalds paraqitur lëshimi i kernelit Linux 5.7. Ndër ndryshimet më të dukshme: një zbatim i ri i sistemit të skedarëve exFAT, një modul bareudp për krijimin e tuneleve UDP, mbrojtje e bazuar në vërtetimin e treguesit për ARM64, aftësia për të bashkangjitur programet BPF me mbajtësit LSM, një zbatim i ri i Curve25519, një ndarje detektor bllokimi, pajtueshmëria BPF me PREEMPT_RT, heqja e kufirit në madhësinë e linjës prej 80 karakteresh në kod, duke marrë parasysh treguesit e temperaturës së CPU në planifikuesin e detyrave, aftësinë për të përdorur klon() për të krijuar procese në një grup tjetër, mbrojtje kundër shkrimit në memorie duke përdorur userfaultfd.

Versioni i ri përfshin 15033 rregullime nga 1961 zhvillues,
madhësia e patch - 39 MB (ndryshimet prekën 11590 skedarë, shtuan 570560 rreshta kodi,
297401 rreshta janë hequr). Rreth 41% e të gjitha të paraqitura në 5.7
ndryshimet lidhen me drejtuesit e pajisjes, afërsisht 16% e ndryshimeve janë
qëndrimi ndaj përditësimit të kodit specifik për arkitekturat e harduerit, 13%
lidhur me stack-in e rrjetit, 4% me sistemet e skedarëve dhe 4% me të brendshme
nënsistemet e bërthamës.

Kryesore risitë:

  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • U shtua zbatimi i ri i drejtuesit exFAT, themeli bazuar në bazën aktuale të kodit "sdfat" (2.x) të zhvilluar nga Samsung për telefonat inteligjentë të saj Android. Drejtuesi i shtuar më parë në kernel bazohej në kodin e vjetër të Samsung (versioni 1.2.9) dhe ishte rreth 10% prapa drejtuesit të ri në performancë. Le të kujtojmë se shtimi i mbështetjes exFAT në kernel u bë i mundur pas Microsoft botuar specifikimet publike dhe i bëri të disponueshme patentat exFAT për përdorim pa pagesë në Linux.
    • Btrfs zbaton një komandë të re ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, e cila ju lejon të fshini një nënseksion nga identifikuesi i tij. Ofrohet mbështetje e plotë për klonimin e shtrirjeve inline. Numri i pikave të anulimit për operacionet e rishpërndarjes është zgjeruar, gjë që ka reduktuar pritjet e gjata gjatë ekzekutimit të komandës 'anulimi i bilancit'. Përcaktimi i lidhjeve të pasme në masë është përshpejtuar (për shembull, koha e ekzekutimit të skriptit të testit është ulur nga një orë në disa minuta). U shtua aftësia për të bashkangjitur shtrirjen e skedarit në secilën inode të një peme. Skema e bllokimit e përdorur kur shkruani në nënndarje dhe kur përjashtohet NOCOW është ridizajnuar. Efikasiteti i përmirësuar i ekzekutimit të fsync për vargjet.
    • XFS ka përmirësuar kontrollin e meta të dhënave dhe fsck për ndarjet aktive. Është propozuar një bibliotekë për rindërtimin e strukturave btree, e cila në të ardhmen do të përdoret për të ripunuar xfs_repair dhe për të zbatuar mundësinë e rikuperimit pa çmontimin e ndarjes.
    • Mbështetja eksperimentale për vendosjen e një ndarjeje shkëmbimi në memoriet SMB3 është shtuar në CIFS. Zgjerime të implementuara POSIX për readdir, të përcaktuara në specifikimin SMB3.1.1. Performanca e përmirësuar e shkrimit për faqet 64 KB kur aktivizohet modaliteti cache=strict dhe përdoren versionet e protokollit 2.1+.
    • FS EXT4 është transferuar nga bmap dhe iopoll në përdorimin e iomap.
    • F2FS ofron mbështetje opsionale për kompresimin e të dhënave duke përdorur algoritmin zstd. Si parazgjedhje, algoritmi LZ4 përdoret për kompresim. Mbështetje e shtuar për komandën "chattr -c commit". Ofrohet shfaqja e kohës së montimit. U shtua ioctl F2FS_IOC_GET_COMPRESS_BLOCKS për të marrë informacion në lidhje me numrin e blloqeve të ngjeshur. U shtua prodhimi i të dhënave të kompresimit përmes statx.
    • Sistemi i skedarëve Ceph ka shtuar aftësinë për të kryer në nivel lokal operacionet e krijimit dhe fshirjes së skedarëve (çlidhja) pa pritur një përgjigje nga serveri (duke punuar në modalitetin asinkron). Ndryshimi, për shembull, mund të përmirësojë ndjeshëm performancën kur përdorni programin rsync.
    • Aftësia për të përdorur virtiofs si një sistem skedari të nivelit të lartë është shtuar në OVERLAYFS.
    • Rishkruar kodi i kalimit të shtegut në VFS, kodi simbolik i analizimit të lidhjeve është ripunuar dhe kalimi i pikës së montimit është unifikuar.
    • Në nënsistemin scsi për përdoruesit e paprivilegjuar lejohet ekzekutimi i komandave ZBC.
    • Në dm_writecache zbatuar aftësia për të pastruar gradualisht cache-in bazuar në parametrin max_age, i cili përcakton jetëgjatësinë maksimale të një blloku.
    • Në dm_integritet shtuar mbështetje për operacionin "fshi".
    • Në null_blk shtuar mbështetje për zëvendësimin e gabimeve për të simuluar dështimet gjatë testimit.
    • Shtuar aftësia për të dërguar njoftime udev në lidhje me ndryshimet e madhësisë së pajisjes së bllokut.
  • Nënsistemi i rrjetit
    • Filtri Net i përfshirë Ndryshimet, duke shpejtuar ndjeshëm përpunimin e listave të mëdha të ndeshjeve (nftables sets), të cilat kërkojnë kontrollimin e një kombinimi të nënrrjetave, portave të rrjetit, protokollit dhe adresave MAC.
      Optimizimet futur në modulin nft_set_pipapo (Politikat e paketave PILE), i cili zgjidh problemin e përputhjes së përmbajtjes së një pakete me diapazonin arbitrar të gjendjes së fushës të përdorur në rregullat e filtrimit, të tilla si intervalet IP dhe portat e rrjetit (nft_set_rbtree dhe nft_set_hash manipulojnë përputhjen e intervalit dhe reflektimin e drejtpërdrejtë të vlerave ). Versioni i pipapo-s i vektorizuar duke përdorur udhëzime 256-bit AVX2 në një sistem me një procesor AMD Epyc 7402 tregoi një rritje të performancës 420% kur analizoi 30 mijë rekorde, duke përfshirë kombinime port-protokolli. Rritja kur krahasohet një kombinim i një nënrrjeti dhe një numri porti kur analizohen 1000 regjistrime ishte 87% për IPv4 dhe 128% për IPv6.

    • Shtuar Moduli bareudp, i cili ju lejon të kapsuloni protokolle të ndryshme L3, si MPLS, IP dhe NSH, në një tunel UDP.
    • Ka vazhduar integrimi i komponentëve MPTCP (MultiPath TCP), një zgjerim i protokollit TCP për organizimin e funksionimit të një lidhjeje TCP me shpërndarjen e paketave në të njëjtën kohë përgjatë disa rrugëve përmes ndërfaqeve të ndryshme të rrjetit të lidhura me adresa IP të ndryshme.
    • Shtuar mbështetje për mekanizmat e përshpejtimit të harduerit për kapsulimin e kornizave Ethernet në 802.11 (Wi-Fi).
    • Kur zhvendosni një pajisje nga një hapësirë ​​emri rrjeti në tjetrën, të drejtat e aksesit dhe pronësia e skedarëve përkatës në sysfs rregullohen.
    • U shtua aftësia për të përdorur flamurin SO_BINDTODEVICE për përdoruesit jo-root.
    • Pjesa e tretë e arnimeve është pranuar, duke konvertuar paketën e veglave ethtool nga ioctl() në përdorimin e ndërfaqes netlink. Ndërfaqja e re e bën më të lehtë shtimin e shtesave, përmirëson trajtimin e gabimeve, lejon dërgimin e njoftimeve kur ndryshon gjendja, thjeshton ndërveprimin midis kernelit dhe hapësirës së përdoruesit dhe redukton numrin e listave të emërtuara që duhet të sinkronizohen.
    • U shtua aftësia për të përdorur përshpejtues të veçantë harduerësh për të kryer operacionet e gjurmimit të lidhjeve.
    • Në netfilter shtuar një goditje për lidhjen e klasifikuesve të paketave dalëse (dalje), e cila plotësonte grepin e mëparshëm për paketat hyrëse (hyrje).
  • Virtualizimi dhe Siguria
    • U shtua zbatimi i harduerit i vërtetimit të treguesit (Autentifikimi i treguesit), i cili përdor udhëzime të specializuara të CPU-së ARM64 për të mbrojtur kundër sulmeve duke përdorur teknikat e programimit të orientuar drejt kthimit (ROP), në të cilat sulmuesi nuk përpiqet të vendosë kodin e tij në memorie, por vepron në pjesë të udhëzimeve të makinës tashmë të disponueshme në bibliotekat e ngarkuara, duke përfunduar me një udhëzim kthimi kontrolli. Siguria zbret në përdorimin e nënshkrimeve dixhitale për të verifikuar adresat e kthimit në nivelin e kernelit. Nënshkrimi ruhet në pjesët e sipërme të papërdorura të vetë treguesit. Ndryshe nga implementimet e softuerit, krijimi dhe verifikimi i nënshkrimeve dixhitale kryhet duke përdorur udhëzime speciale të CPU.
    • Shtuar aftësia për të mbrojtur një zonë memorie nga shkrimi duke përdorur thirrjen e sistemit userfaultfd(), e krijuar për të trajtuar gabimet e faqeve (qasja në faqet e kujtesës të pashpërndara) në hapësirën e përdoruesit. Ideja është që të përdoret userfaultfd() si për të zbuluar shkeljet e aksesit në faqet e shënuara si të mbrojtura nga shkrimi dhe për të thirrur një mbajtës që mund t'i përgjigjet përpjekjeve të tilla të shkrimit (për shembull, për të trajtuar ndryshimet gjatë krijimit të fotografive të drejtpërdrejta të proceseve në ekzekutim, shteti kapja gjatë hedhjes së kujtesës në disk, zbatimi i memories së përbashkët, gjurmimi i ndryshimeve në memorie). Funksionaliteti ekuivalente duke përdorur mprotect() në lidhje me mbajtësin e sinjalit SIGSEGV, por funksionon dukshëm më shpejt.
    • SELinux ka zhvlerësuar parametrin "checkreqprot", i cili ju lejon të çaktivizoni kontrollet e mbrojtjes së kujtesës kur përpunoni rregullat (duke lejuar përdorimin e zonave të memories të ekzekutueshme, pavarësisht nga rregullat e specifikuara në rregulla). Symlinks Kernfs lejohen të trashëgojnë kontekstin e drejtorive të tyre mëmë.
    • Përbërja përfshirë modul KRSI, i cili ju lejon të bashkëngjitni programet BPF në çdo grep LSM në kernel. Ndryshimi ju lejon të krijoni module LSM (Linux Security Module) në formën e programeve BPF për të zgjidhur problemet e auditimit dhe kontrollin e detyrueshëm të aksesit.
    • E kryer Optimizon performancën e /dev/random duke grumbulluar vlerat CRNG në vend që të thërrasë udhëzimet RNG individualisht. Performanca e përmirësuar e getrandom dhe /dev/random në sistemet ARM64 që ofrojnë udhëzime RNG.
    • Zbatimi i një kurbë eliptike Curve25519 zëvendësohet për opsionin nga biblioteka HACL, per cilin i ndaluar prova matematikore e verifikimit formal të besueshmërisë.
    • Shtuar mekanizëm për informimin për faqet e memories së lirë. Duke përdorur këtë mekanizëm, sistemet e vizitorëve mund të transmetojnë informacion për faqet që nuk përdoren më në sistemin pritës dhe hosti mund të marrë përsëri të dhënat e faqes.
    • Në vfio/pci shtuar mbështetje për SR-IOV (Virtualizimi I/O me një rrënjë).
  • Shërbimet e kujtesës dhe sistemit
    • Nga 80 në 100 karaktere rritur kufizim në gjatësinë maksimale të rreshtit në tekstet burimore. Në të njëjtën kohë, zhvilluesve ende rekomandohet të qëndrojnë brenda 80 karaktereve për rresht, por ky nuk është më një kufi i vështirë. Përveç kësaj, tejkalimi i kufirit të madhësisë së linjës tani do të rezultojë në një paralajmërim ndërtimi vetëm nëse kontrolli ekzekutohet me opsionin '--strict'. Ndryshimi do të bëjë të mundur që të mos shpërqendrohen zhvilluesit manipulimi me hapësira dhe ndjehuni më të lirë kur rreshtoni kodin, si dhe do të parandalojë thyerje e tepërt e linjës, shqetësuese të kuptuarit dhe kërkimin e kodit.
    • Shtuar mbështetje për modalitetin e përzier të nisjes EFI, i cili ju lejon të ngarkoni një kernel 64-bit nga firmware 32-bit që funksionon në një CPU 64-bit pa përdorur një ngarkues të specializuar.
    • Aktivizuar sistemi për identifikimin dhe korrigjimin e bravave të ndara (“bllokim i ndarë"), e cila ndodh kur qaseni në të dhëna të palidhura në memorie për shkak të faktit se kur ekzekutoni një instruksion atomik, të dhënat kalojnë dy linja cache të CPU. Një bllokim i tillë rezulton në një goditje të konsiderueshme të performancës (1000 cikle më ngadalë se një operacion atomik në të dhënat që bien në një linjë cache). Në varësi të parametrit të nisjes "split_lock_detect", kerneli mund të zbulojë bllokime të tilla dhe të lëshojë paralajmërime ose të dërgojë një sinjal SIGBUS tek aplikacioni që shkakton bllokimin.
    • Planifikuesi i detyrave siguron gjurmimin e sensorëve të temperaturës (Presioni termik) dhe zbatohet duke marrë parasysh mbinxehjen gjatë vendosjes së detyrave. Duke përdorur statistikat e dhëna, guvernatori termik mund të rregullojë frekuencën maksimale të CPU-së kur mbinxehet, dhe programuesi i detyrave tani merr parasysh reduktimin e fuqisë llogaritëse për shkak të një reduktimi të tillë të frekuencës kur planifikon detyrat për t'u ekzekutuar (më parë, planifikuesi iu përgjigj ndryshimeve në frekuencë me një vonesë të caktuar, për disa kohë duke marrë vendime bazuar në supozime të fryra për burimet e disponueshme kompjuterike).
    • Planifikuesi i detyrave përfshin tregues të pandryshueshëm gjurmimi i ngarkesës, duke ju lejuar të vlerësoni saktë ngarkesën, pavarësisht nga frekuenca aktuale e funksionimit të CPU. Ndryshimi ju lejon të parashikoni më saktë sjelljen e detyrave në kushte të ndryshimeve dinamike në tension dhe frekuencë të CPU. Për shembull, një detyrë që konsumonte 1/3 e burimeve të CPU-së në 1000 MHz do të konsumojë 2/3 e burimeve kur frekuenca bie në 500 MHz, e cila më parë krijonte një supozim të rremë se po funksiononte me kapacitet të plotë (d.m.th. u shfaqën detyra më i madh për planifikuesin vetëm duke reduktuar frekuencën, gjë që çoi në marrjen e vendimeve të pasakta në guvernatorin schedutil cpufreq).
    • Drejtuesi i Intel P-state, i cili është përgjegjës për zgjedhjen e mënyrave të performancës, është kaluar në përdorim planifikimi.
    • Është zbatuar aftësia për të përdorur nënsistemin BPF kur kerneli funksionon në kohë reale (PREEMPT_RT). Më parë, kur PREEMPT_RT ishte aktivizuar, BPF kërkohej të çaktivizohej.
    • Është shtuar një lloj i ri programi BPF - BPF_MODIFY_RETURN, i cili mund t'i bashkëngjitet një funksioni në kernel dhe të ndryshojë vlerën e kthyer nga ky funksion.
    • Shtuar mundësi Përdorimi i thirrjes së sistemit clone3() për të krijuar një proces në një cgroup që është i ndryshëm nga cgroup prind, duke lejuar procesin prind të aplikojë kufizime dhe të mundësojë kontabilitetin menjëherë pas krijimit të një procesi ose filli të ri. Për shembull, një menaxher shërbimi mund të ndajë drejtpërdrejt shërbime të reja për cgrupe të veçanta dhe proceset e reja, kur vendosen në cgrupe "të ngrira", do të ndalen menjëherë.
    • në Kbuild shtuar mbështetje për variablin e mjedisit "LLVM=1" për të kaluar në paketën e veglave Clang/LLVM gjatë ndërtimit të kernelit. Kërkesat për versionin binutils janë ngritur (2.23).
    • Një seksion /sys/kernel/debug/kunit/ është shtuar në korrigjimet me rezultatet e testeve të kunit.
    • U shtua parametri i nisjes së kernelit pm_debug_messages (analog me /sys/power/pm_debug_messages), i cili mundëson daljen e informacionit të korrigjimit në lidhje me funksionimin e sistemit të menaxhimit të energjisë (i dobishëm kur korrigjoni problemet me hibernimin dhe modalitetin e gatishmërisë).
    • Tek ndërfaqja asinkrone I/O io_uring mbështetje e shtuar bashkim () и përzgjedhja e tamponit atomik.
    • Përmirësimi i profilizimit të grupeve duke përdorur paketën e veglave perf. Më parë, perf mund të profilizonte detyrat vetëm në një cgrup specifik dhe nuk mund të gjente se cilit cgrup i përket kampioni aktual. perf tani merr informacionin cgroup për çdo mostër, duke ju lejuar të profilizoni më shumë se një cgrup dhe të aplikoni renditjen sipas
      cgroup në raporte.

    • cgroupfs, një pseudo-FS për menaxhimin e cgroups, ka shtuar mbështetje për atributet e zgjeruara (xattrs), me të cilat, për shembull, mund të lini informacion shtesë për mbajtësit në hapësirën e përdoruesit.
    • Në kontrolluesin e memories cgroup shtuardhe mbështetje për mbrojtjen rekursive të vlerës "memory.low", e cila rregullon sasinë minimale të RAM-it të ofruar për anëtarët e grupit. Kur montoni një hierarki cgrupi me opsionin "memory_recursiveprot", vlera e "memory.low" që është vendosur për nyjet më të ulëta do të shpërndahet automatikisht në të gjitha nyjet fëmijë.
    • Shtuar Korniza Uacce (Unified/User-space-access-inended Accelerator Framework) për ndarjen e adresave virtuale (SVA, Shared Virtual Addressing) ndërmjet CPU-së dhe pajisjeve periferike, duke i lejuar përshpejtuesit e harduerit të aksesojnë strukturat e të dhënave në CPU-në kryesore.
  • Arkitekturat e harduerit
    • Për arkitekturën ARM, është zbatuar aftësia për të marrë memorie të nxehtë.
    • Për arkitekturën RISC-V, është shtuar mbështetje për mbylljen e nxehtë dhe heqjen e CPU-ve (CPU hotplug). Për RISC-V 32-bit, eBPF JIT është implementuar.
    • Mundësia për të përdorur sistemet ARM 32-bit për të ekzekutuar mjediset e vizitorëve KVM është hequr.
    • U hoq zbatimi "bedel" NUMA për arkitekturën s390, për të cilin nuk u gjetën raste përdorimi për të arritur përmirësime të performancës.
    • Për ARM64, shtoi mbështetje për shtesën AMU (Activity Monitors Unit), e përcaktuar në ARMv8.4 dhe ofron numërues të performancës që përdoren për të llogaritur faktorët e korrigjimit të shkallëzimit të frekuencës në planifikuesin e detyrave.
  • Оборудование
    • Shtuar mbështetje për pajisjet vDPA që përdorin një kanal të shkëmbimit të të dhënave që përputhet me specifikimet virtio. Pajisjet vDPA mund të jenë ose pajisje të lidhura fizikisht ose pajisje virtuale të emuluara me softuer.
    • Në nënsistemin GPIO u shfaq një komandë e re ioctl() për monitorimin e ndryshimeve, që ju lejon të informoni procesin për ndryshimet në gjendjen e çdo linje GPIO. Si shembull i përdorimit të komandës së re propozuar Gpio-watch utility.
    • Në shoferin i915 DRM për kartat video Intel të përfshira Mbështetje e paracaktuar për çipat Tigerlake ("Gen12") dhe mbështetje fillestare e shtuar për kontrollin e dritës së prapme OLED. Mbështetje e përmirësuar për patate të skuqura Ice Lake, Elkhart Lake, Baytrail dhe Haswell.
    • Në shoferin amdgpu shtuar aftësia për të ngarkuar firmware në çipin USBC për ASIC. Mbështetje e përmirësuar për çipat AMD Ryzen 4000 "Renoir". Tani ka mbështetje për kontrollin e paneleve OLED. Sigurohet shfaqja e statusit të firmuerit në korrigjimin e gabimeve.
    • Aftësia për të përdorur OpenGL 4 në sistemet e ftuar është shtuar në drejtuesin DRM vmwgfx për sistemet e virtualizimit VMware (më parë OpenGL 3.3 ishte mbështetur).
    • U shtuan lajme të reja të drejtuesit DRM për sistemin e ekranit të platformës TI Keystone.
    • Drejtues të shtuar për panelet LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech 101D01.
    • Për sistemin e menaxhimit të energjisë shtuar mbështetje për platformën Intel Jasper Lake (JSL) me bazë Atom.
    • Mbështetje e shtuar për laptopin Pinebook Pro bazuar në Rockchip RK3399, tabletin Pine64 PineTab dhe smartphone PinePhone bazuar në Allwinner A64.
    • Mbështetje e shtuar për kodekët dhe çipat e rinj audio:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Mbështetje e shtuar për bordet dhe platformat ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 opsione të bordit i.MX6 TechNexion Pico, tre opsione të reja Toradex Colibri, Samsung S7710 bazuar në Galaxy Xco -Ericsson u2, DH Electronics DHCOM SoM dhe PDK8500, Renesas M2ULCB, Hoperun HiHope, Linutronix Testbox v3, PocketBook Touch Lux 2.

Burimi: opennet.ru

Shto një koment