Lëshimi i kernelit Linux 5.7

Pas dy muajsh zhvillimi Linus Torvalds prezentoi lëshimi i bërthamës Linux 5.7. Disa ndër ndryshimet më të rëndësishme janë: implementimi i ri i FS exFAT, moduli bareudp për krijimin e tunelave UDP, mbrojtja e bazuar në autentikimin e treguesve për ARM64, mundësia e bashkimit të programeve BPF me trajtuesit LSM, implementimi i ri i Curve25519, detektori 'split-lock', kompatibiliteti BPF me PREEMPT_RT, heqja e kufizimit të gjatë 80 karakteresh për string në kod, llogaritja e treguesve të temperaturës CPU në planifikuesin e detyrave, dhe mundësia e përdorimit të clone() për të krijuar procese në cgroup tjetër, si dhe mbrojtja nga shkrimi në memorie përmes userfaultfd.

Në versionin e ri janë pranuar 15033 korrigjime nga 1961 zhvillues,
madhësia e patch-it është 39 MB (ndryshimet kanë prekur 11590 skedarë, 570560 rreshta kod janë shtuar,
297401 rreshta janë fshirë). Rreth 41% e të gjitha ndryshimeve të paraqitura në 5.7
lidhen me drejtuesit e pajisjeve, përafërsisht 16% e ndryshimeve kanë
në lidhje me përditësimin e kodit specifik për arkitekturën harduerike, 13%
të bëjnë me stakun e rrjetit, 4% me sistemet e skedarëve dhe 4% me brendësinë
të bërthamës.

Ndryshimet kryesore risitë:

  • Sistemi i diskut, hyrja/ dalje dhe sistemet e skedarëve
    • Një implementim i ri i drejtuesit exFAT është shtuar, i bazuar në kodin aktual «sdfat» (2.x), i zhvilluar nga kompanisa Samsung për smartfonët e saj Android. Drivëri i shtuar më parë në bërthamë ishte i bazuar në kodin e vjetëruar të Samsung (versioni 1.2.9) dhe ishte rreth 10% më i ngadalshëm në performancë se drivëri i ri. Kujtojmë se shtimi i mbështetjes exFAT në bërthamë u bë i mundur pasi kompania Microsoft publikoi publikoi specifikimet e saj dhe ofroi mundësinë për përdorim falas të patentave mbi exFAT në Linux.
    • Në Btrfs është implementuar një komandë e re ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, e cila lejon fshirjen e një nënnjësie nëpërmjet identifikuesit të saj. Është siguruar mbështetje e plotë për klonimin e inline-extents. Numri i pikave të rikthimit të operacioneve të riparë është zgjeruar, duke reduktuar kohëzgjatjet e gjata gjatë ekzekutimit të komandës 'balance cancel'. Është përshpejtuar identifikimi i lidhjeve pasuese ndaj extents (për shembull, koha e ekzekutimit të skenarëve të provës është ulur nga një orë në disa minuta). Është shtuar mundësia e bashkangjitjes së secilit inode të pemës së extents të skedarit. Është ripunuar skema e bllokimit e përdorur gjatë shkrimit në nënnjësi dhe për përjashtimin NOCOW. Është rritur efikasiteti i ekzekutimit të fsync për intervalet.
    • Në XFS është përmirësuar verifikimi i metadave dhe ekzekutimi i 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 ripunimin e xfs_repair dhe implementimin e mundësisë së rikuperimit pa shkëputjen e ndarjes.
    • Në CIFS është shtuar mbështetje eksperimentale për vendosjen e seksioneve të ndihmës në ruajtjet SMB3. Janë implementuar zgjerimet POSIX në readdir, të përcaktuara në specifikimin SMB3.1.1. Është rritur performanca e shkrimit për faqet me madhësi 64KB duke aktivizuar modin cache=strict dhe përdorur versionet e protokollit 2.1+.
    • FS EXT4 është kaluar nga bmap dhe iopoll në përdorimin e iomap.
    • Në F2FS është implementuar mbështetje opsionale për kompresimin e të dhënave duke përdorur algoritmin zstd. Për kompresimin e dhënave, algoritmi LZ4 përdoret si default. Është shtuar mbështetje për komandën «chattr -c commit». Është siguruar shfaqja e kohës së montimit. Është shtuar ioctl F2FS_IOC_GET_COMPRESS_BLOCKS për marrjen e informacionit mbi numrin e bllokave të kompresuar. Janë shtuar të dhëna mbi kompresimin, të shfaqura nëpërmjet statx.
    • Në sistemin e skedarëve Ceph është shtuar mundësia e ekzekutimit lokal të operacioneve të krijimit dhe fshirjes (unlink) të skedarëve pa pritur përgjigje nga serveri (funksionimi në modin asinkron). Ky ndryshim, për shembull, lejon rritjen e ndjeshme të performancës gjatë përdorimit të utilitarit rsync.
    • Në OVERLAYFS është shtuar mundësia e përdorimit të virtiofs si sistem skedarësh të nivelit të sipërm.
    • Rikthyer kode i anashkueshmërisë në VFS, kodi përkatës i lidhjeve simbolike është rregulluar dhe është bërë i unifikueshëm për aksesin në pikët e montimit.
    • Në nëndisiplinën scsi, përdoruesve të papërgjegjshëm u lejohet ekzekutimi i komandave ZBC.
    • Në dm_writecache është realizuar mundësia për të pastruar gradualisht cache-në sipas parametrave max_age, i cili përcakton kohën maksimale të jetesës së një blloku.
    • Në dm_integrity shtuar përkrahja për operacionin "discard".
    • Në null_blk shtuar përkrahja për simuleimin e gabimeve për të simuluar dështime gjatë testimeve.
    • Shtuar mundësia për të dërguar njoftime udev mbi ndryshimin e madhësisë së pajisjes bllokuese.
  • Sistemi i rrjetit
    • Në Netfilter janë përfshirë , duke e përshpejtuar ndjeshëm përpunimin e listave të mëdha të pajtimit (nftables set), ku kërkohet verifikimi i kombinimeve të nënrrjeteve, porteve, protokollit dhe adresave MAC.
      Optimizime janë bërë në modulin nft_set_pipapo (PIle PAcket POlicies), që adresa problemin e përputhjes së përmbajtjes së paketave me rregullat e filtrimit duke përdorur intervale të ndryshme të gjendjes së fushave, siç janë intervalet IP dhe portet e rrjetit (nft_set_rbtree dhe nft_set_hash manipulojnë përputhjen e intervaleve dhe reflektimin e drejtpërdrejtë të values). Versioni i optimizuar me instruksione 256-bit AVX2 në një sistem me procesorin AMD Epyc 7402 tregoi një rritje të performancës prej 420% gjatë analizimit të 30,000 regjistrimeve, përfshirë lidhjet port-protokoll. Rritja gjatë përputhjes së lidhjes nga nënrrjeti dhe numri i portit gjatë analizimit të 1,000 regjistrimeve ishte 87% për IPv4 dhe 128% për IPv6.
    • Shtuar moduli bareudp, që lejon inkapsulimin e protokollit të ndryshëm L3 në një tunel UDP, si MPLS, IP dhe NSH.
    • Integrimi i komponenteve MPTCP (MultiPath TCP) ka vazhduar, një zgjerim i protokollit TCP për të organizuar funksionimin e lidhjes TCP me dorëzimin e paketave në mënyrë simultane nëpërmjet rrugëve të shumta përmes ndërfaqeve të ndryshme të rrjetit, të lidhura me adresat e ndryshme IP.
    • Shtuar përkrahja e mekanizmave të përshpejtimit të harduerit për inkapsulimin e kadrove Ethernet në 802.11 (Wi-Fi).
    • Kur zhvendosni pajisjen nga një hapësirë emri nënsistemi rrjeti (network namespace) në një tjetër, është siguruar korrigjimi i të drejtave të aksesit dhe pronësisë së skedarëve përkatës në sysfs.
    • Siguruar mundësia e përdorimit të flamurit SO_BINDTODEVICE nga përdoruesit që nuk kanë të drejta root.
    • Pranuar pjesa e tretë e patch-eve, që transferojnë mjetin ethtool nga ioctl() në përdorimin e ndërfaqes netlink. Ndërfaqja e re thjeshton shtimin e zgjerimeve, përmirëson trajtimin e gabimeve, lejon dërgimin e njoftimeve kur ndodhin ndryshime të gjendjes, thjeshton ndërveprimin midis bërthamës dhe hapësirës së përdoruesit dhe redukton numrin e listave të emrave të sinkronizuar.
    • Shtuar mundësinë e përdorimit të akceleratorëve të veçantë të harduerit për ekzekutimin e operacioneve të gjurmimit të lidhjeve.
    • Në netfilter u shtua një kënd për lidhjen e klasifikuesve të paketave dalëse (egress), duke e plotësuar këndin e mëparshëm për paketat në hyrje (ingress).
  • Virtualizimi dhe siguria
    • Shtuar implementimin e harduerit për autentifikimin e treguesve (Pointer Authentication), duke përdor udhëzime speciale CPU ARM64 për të mbrojtur nga sulmet që përdorin teknikat e programimit të orientuar ndaj kthimit (ROP), ku sulmuesi nuk përpiqet të vendosë kodin e tij në memorie, por operon me copëza instrukcionesh makinash që tashmë janë në bibliotekat e ngarkuara, të cilat përfundojnë me një instrukcion për kthimin e kontrollit. Mbrojtja përfshin përdorimin e nënshkrimeve digjitale për të kontrolluar adresat e kthimit në nivelin e bërthamës. Nënshkrimi ruhet në bitët e papërdorur të tavanit të treguesit vetë. Ndryshe nga implementimet software, krijimi dhe verifikimi i nënshkrimeve digjitale kryhet përmes instrukcionesh speciale të CPU.
    • Shtuar mundësia për të mbrojtur hapësirën e memories nga shkrimi përmes thirrjes sistemike userfaultfd(), e cila është e destinuar për trajtimin e page faults (kërcimet në faqe të pa alokuar të memories) në hapësirën e përdoruesit. Ideja është të përdoret userfaultfd() për të ndjekur shkeljet e qasjes në faqet e shënuar si të mbrojtura nga shkrimi dhe për të thirrur një menaxher që mund të reagojë ndaj përpjekjeve të tilla për shkrim (p.sh., për të trajtuar ndryshimet gjatë krijimit të live-snapshots të proceseve në punë, përfiksimin e gjendjes gjatë hedhjes së dump-eve të memories në disk, zbatimin e memories së ndarë, ndjekjen e ndryshimeve në memory). Funksionaliteti është ekuivalente me përdorimin e mprotect() në lidhje me menaxherin e sinjalit SIGSEGV, por funksionon dukshëm më shpejt.
    • Në SELinux është shpallur i vjetruar parametri “checkreqprot”, i cili lejonte çaktivizimin e kontrollit të mbrojtjes së memories gjatë trajtimit të rregullave (lejonte përdorimin e hapësirave të exekutueshme të memories, pavarësisht nga udhëzimet e caktuara në rregulla). Të lidhurat simbolike në kernfs lejohet të trashëgojnë kontekstin e katalogëve prind.
    • Në përbërje aktivizuar moduli KRSI, i cili lejon lidhjen e programeve BPF me çdo hook LSM në kernel. Ky ndryshim lejon krijimin e moduleve LSM (Linux Security Module) në formën e programeve BPF për të trajtuar detyrat e auditimit dhe kontrollit të detyrueshëm të aksesit.
    • Është kryer optimizimi i performancës /dev/random përmes transmetimit të paketave të vlerave CRNG në vend të thirrjeve të veçanta për instrukcionet RNG. Përmirësuar funksionimi i getrandom dhe /dev/random në sistemet ARM64, duke ofruar instrukcione RNG.
    • implementimi i kurbës eliptike Curve25519 zëvendësuar në variantin nga biblioteka HACL, për të cilin është paraqitur dëshmia matematike për verifikimin formal të besueshmërisë.
    • Shtuar mekanizmi i informimit mbi faqet e lira të memories. Me anë të këtij mekanizmi, sistemet mikpritëse mund të dërgojnë informacion në sistemin host mbi faqet që nuk përdoren më, dhe faqet e tilla mund të rikthehen nga host-i.
    • Në vfio/pci shtuar përkrahja e SR-IOV (Virtualizimi i I/O me një rrënjë).
  • Kujtesa dhe shërbimet sistemore
    • Nga 80 në 100 karaktere e rritur kufizimi i gjatësisë maksimale të rreshtit në tekstet burimore. Megjithatë, zhvilluesit ende rekomandohet të qëndrojnë brenda 80 karaktereve për rresht, por tani kjo nuk është një kufi i fortë. Për më tepër, tejkalimi i kufirit të madhësisë së rreshtit tani do të rezultojë në një paralajmërim gjatë ndërtimit vetëm nëse utilitari checkpatch ekzekutohet me opsionin «—strict». Ky ndryshim do të mundësojë që zhvilluesit të mos shpërqendrohen nga manipulime hapësirat dhe të ndihen më të lirë në rregullimin e kodit, si dhe parandalon ndarjet e tepërta të rreshtave, që pengojnë kuptimin e kodit dhe kërkimin.
    • Shtuar mbështetje për modin e ngarkesës së përzier EFI, e cila lejon ngarkimin e një bërthame 64-bit nga një firmware 32-bit, duke u ekzekutuar në një CPU 64-bit.
    • Aktivizuar sistemi i identifikimit dhe debugging të bllokimeve të ndara («split lock«), që ndodhin gjatë qasjeve në të dhëna të paorganizuar në memorie për shkak se, kur ekzekutohet një instrukcion atomik, të dhënat kalojnë nëpër dy linja cache të CPU. Këto bllokime çojnë në një rënie të konsiderueshme të performancës (deri në 1000 cikle më të ngadalta se operacioni atomik me të dhëna që bien në një linjë cache). Në varësi të parametrave të ngarkesës 'split_lock_detect', bërthama mund të identifikojë këto bllokime në kohë reale dhe të japë paralajmërime ose të dërgojë sinjalin SIGBUS aplikacionit që shkaktoi bllokimin.
    • Në planifikuesin e detyrave është e garantuar ndjekja e parametrave të sensorëve të temperaturës (Presioni Termal) dhe është realizuar mbikëqyrja e ngrohjes gjatë vendosjes së detyrave. Duke përdorur statistikat e dhëna, menaxheri i temperaturës (thermal governor) mund të rregullojë frekuencën maksimale të CPU-së në rast ngrohjeje, ndërsa planifikuesi i detyrave tani merr parasysh uljen e fuqisë përpunuese për shkak të këtij kufizimi të frekuencës gjatë planifikimit të lançimit të detyrave (më parë, planifikuesi reagonte ndaj ndryshimit të frekuencës me një vonesë të caktuar, duke marrë disa kohë për të marrë vendime bazuar në supozime të tepruara mbi burimet e disponueshme të përpunimit).
    • Në planifikuesin e detyrave janë angazhuar të dhëna invariant monitorimi i ngarkesës, që lejon vlerësimin e saktë të ngarkesës pavarësisht frekuencës aktuale të CPU. Ky ndryshim lejon parashikimin më të saktë të sjelljes së detyrave në kushte të ndryshueshme të tensionit dhe frekuencës së CPU. Për shembull, një detyrë që konsumonte 1/3 e burimeve të CPU me një frekuencë prej 1000 MHz do të konsumonte 2/3 e burimeve kur frekuenca të ulej në 500 MHz, e cila më parë krijonte një supozim të gabuar për funksionimin në plot kapacitet (pra, detyrat për planifikuesin duken më të mëdha vetëm për shkak të uljes së frekuencës, gjë që çonte në marrjen e vendimeve të gabuara në schedutil cpufreq governor).
    • Driveri Intel P-state, që përgjigjet për zgjedhjen e modeleve të performancës, është kaluar në përdorimin e schedutil.
    • Implementuar mundësinë e përdorimit të nënstrukturës BPF kur bërthama punon në modin e kohës reale (PREEMPT_RT). Më parë, ndarja e PREEMPT_RT parashikonte çaktivizimin e BPF.
    • Shtuar një lloj të ri programesh BPF — BPF_MODIFY_RETURN, që mund të lidheshin me funksionet në bërthamë dhe të ndryshonin vlerën e kthyer nga ky funksion.
    • Shtuar mundësia использования системного вызова clone3() для создания процесса в cgroup, отличающемся от родительского cgroup, что позволяет родительскому процессу применить ограничения и включить аккаунтинг сразу после порождения нового процесса или потока. Например, сервисный менеджер может напрямую выделять новые сервисы в отдельные cgroup, а новые процессы при помещении в «замороженные» cgroup и будут сразу остановлены.
    • в Kbuild shtuar поддержка переменной окружения «LLVM=1» для переключения на инструментарий Clang/LLVM при сборке ядра. Подняты требования к версии binutils (2.23).
    • В debugfs добавлена секция /sys/kernel/debug/kunit/ с результатами тестов kunit.
    • Добавлен параметр загрузки ядра pm_debug_messages (аналог/sys/power/pm_debug_messages), включающий вывод отладочной информации о работе системы управления питанием (полезно при отладке проблем со спящим и ждущим режимом).
    • Në ndërfaqen e hyrjes/ daljes asinkrone io_uring shtuar mbështetje për splice() dhe атомарного выбора буферов.
    • Përmirësimi i profilizimit të cgroup duke përdorur mjetet perf. Më parë, perf mund të profilizonte detyrat vetëm në një cgroup të caktuar dhe nuk mund të merrte informacion se cilës cgroup i përkiste mostra aktuale. Tani perf merr të dhëna mbi cgroup për çdo mostër, duke lejuar profilizimin e më shumë se një cgroup dhe aplikimin e renditjes sipas
      cgroup në raportet.
    • Në cgroupfs, fs-ja virtuale për menaxhimin e cgroups, është shtuar mbështetje për atribute të zgjeruara (xattrs) përmes të cilave, për shembull, mund të lihen informacione shtesë për trajtuesit në hapësirën e përdoruesit.
    • Në kontrolluesin e memories cgroup u shtuaështë mbështetje për mbrojtjen rekursive të vlerës 'memory.low', e cila rregullon sasinë minimale të memories operativë të ofruar pjesëmarrësve të grupit. Kur montoni hierarkinë e cgroup me opsionin 'memory_recursiveprot', vlera 'memory.low', e cila është vendosur për nyjat më të ulëta, do të shpërndahet automatikisht për të gjitha nyjat fëmijë.
    • Shtuar ajo është një kornizë Uacce (Unified/User-space-access-intended Accelerator Framework) për ndarjen e adresave virtuale (SVA, Shared Virtual Addressing) midis CPU dhe pajisjeve periferike, duke lejuar që përshpejtuesit harduerikë të aksesojnë struktura të dhënash në CPU-në kryesore.
  • Arkitekturat harduerike
    • Për arkitekturën ARM është implementuar mundësia e nxjerrjes së nxehtë të memories.
    • Për arkitekturën RISC-V është shtuar mbështetje për lidhjen dhe nxjerrjen e CPU-së (CPU hotplug). Për RISC-V 32-bit është realizuar eBPF JIT.
    • Mundësia e përdorimit të sistemeve ARM 32-bit për të nisur mjedise të ftuara KVM është hequr.
    • Për arkitekturën s390 është hequr implementimi "fiktiv" i NUMA, për të cilin nuk janë gjetur skenarë përdorimi që të sjellin rritje të performancës.
    • Për ARM64 është shtuar mbështetje për zgjerimin AMU (Activity Monitors Unit), i përcaktuar në ARMv8.4 dhe që ofron numërues performance, të cilat përdoren për të llogaritur koeficientët e korrigjimit të shkallës së frekuencës në planifikuesin e detyrave.
  • Pajisjet
    • Shtuar mbështetje për pajisjet vDPA, në të cilat përdoret një kanal shkëmbimi të dhënash, në përputhje me specifikimet virtio. Pajisjet vDPA mund të jenë si pajisje fizike të lidhura, ashtu edhe pajisje virtuale të emuluara në mënyrë programore.
    • Në nënsistemin GPIO ka arritur ekipi i ri ioctl() për monitorimin e ndryshimeve, që lejon informacionin e procesit për të përcaktuar ndryshimin e gjendjes së çdo linje GPIO. Si një shembull i përdorimit të komandës së re propozua utilita gpio-watch.
    • Në drejtuesin DRM i i915 për kartat grafike Intel u përfshi në mënyrë të parazgjedhur mbështetje për çipat Tigerlake (“Gen12”) dhe është shtuar mbështetje fillestare për menaxhimin e ndriçimit OLED. Mbështetje e përmirësuar për çipat Ice Lake, Elkhart Lake, Baytrail dhe Haswell.
    • Në drejtuesin amdgpu shtuar mundë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”. Është shtuar mbështetje për menaxhimin e paneleve OLED. Në debugfs sigurohet shfaqja e gjendjes së firmware.
    • Në drejtuesin DRM vmwgfx për sistemet e virtualizimit VMware është e mundur përdorimi i OpenGL 4 në sistemet mysafir (më parë u mbështet OpenGL 3.3).
    • Shtuar një drejtues të ri DRM tidss për sistemin e ekranit të platformës TI Keystone.
    • Shtuar drejtues për panelet LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Në sistemin e menaxhimit të energjisë shtuar mbështetje për platformën Intel Jasper Lake (JSL) me bazë Atom.
    • Shtuar mbështetje për laptopin Pinebook Pro me bazë Rockchip RK3399, tabletin Pine64 PineTab dhe smartphone PinePhone me bazë Allwinner A64.
    • Shto janë shtuar mbështetje për kodekët e rinj të tingujve dhe çipat:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Shtohet mbështetje për platformat ARM dhe platformat Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron 'sl28', 11 variante të pllakave i.MX6 TechNexion Pico, tre variante të reja Toradex Colibri, Samsung S7710 Galaxy Xcover 2 me bazë ST-Ericsson u8500, DH Electronics DHCOM SoM dhe PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Burimi: opennet.ru

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster