Lëshimi i kernelit Linux 6.1

Pas dy muajsh zhvillimi, Linus Torvalds prezantoi lëshimin e kernelit Linux 6.1. Ndër ndryshimet më të dukshme: mbështetja për zhvillimin e drejtuesve dhe moduleve në gjuhën Rust, modernizimi i mekanizmit për përcaktimin e faqeve të memories së përdorur, një menaxher i veçantë memorie për programet BPF, një sistem për diagnostikimin e problemeve të kujtesës KMSAN, KCFI (Kernelk Control -Flow Integrity) mekanizmi mbrojtës, futja e pemës së strukturës Maple.

Versioni i ri përfshin 15115 rregullime nga 2139 zhvillues, madhësia e patch-it është 51 MB, që është afërsisht 2 herë më e vogël se madhësia e arnimeve nga kernelet 6.0 dhe 5.19. Ndryshimet prekën 13165 skedarë, u shtuan 716247 rreshta kodi dhe u fshinë 304560 rreshta. Rreth 45% e të gjitha ndryshimeve të paraqitura në 6.1 janë të lidhura me drejtuesit e pajisjes, afërsisht 14% e ndryshimeve lidhen me përditësimin e kodit specifik për arkitekturat e harduerit, 14% janë të lidhura me grupin e rrjetit, 3% lidhen me sistemet e skedarëve dhe 3% janë të lidhura me nënsistemet e brendshme të kernelit.

Risitë kryesore në kernel 6.1:

  • Shërbimet e kujtesës dhe sistemit
    • U shtua aftësia për të përdorur Rust si gjuhë e dytë për zhvillimin e drejtuesve dhe moduleve të kernelit. Arsyeja kryesore për mbështetjen e Rust është për ta bërë më të lehtë shkrimin e drejtuesve të sigurt dhe me cilësi të lartë të pajisjes duke zvogëluar gjasat për të bërë gabime kur punoni me memorie. 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. Kerneli deri më tani ka miratuar një version minimal, të zhveshur të arnimeve, i cili është reduktuar nga 40 në 13 mijë rreshta kodi dhe ofron vetëm minimumin e nevojshëm, të mjaftueshëm për të ndërtuar një modul të thjeshtë kernel të shkruar në gjuhën Rust. Në të ardhmen, është planifikuar të rritet gradualisht funksionaliteti ekzistues, duke transferuar ndryshime të tjera nga dega Rust-for-Linux. Paralelisht, po zhvillohen projekte për të përdorur infrastrukturën e propozuar për të zhvilluar drejtues për disqet NVMe, protokollin e rrjetit 9p dhe GPU Apple M1 në gjuhën Rust.
    • Për sistemet e bazuara në arkitekturat AArch64, RISC-V dhe LoongArch me EFI, është zbatuar aftësia për të ngarkuar drejtpërdrejt imazhet e kernelit të ngjeshur. Trajtues të shtuar për ngarkimin, ekzekutimin dhe shkarkimin e imazheve të kernelit, të thirrur direkt nga EFI zboot. Janë shtuar gjithashtu mbajtës për instalimin dhe fshirjen e protokolleve nga baza e të dhënave të protokollit EFI. Më parë, shpaketimi kryhej nga një ngarkues i veçantë, por tani kjo mund të bëhet nga një mbajtës në vetë kernel - imazhi i kernelit formohet si një aplikacion EFI.
    • Përbërja përfshin një pjesë të arnimeve me zbatimin e një modeli të menaxhimit të kujtesës me shumë nivele, i cili ju lejon të ndani bankat e memories me karakteristika të ndryshme të performancës. Për shembull, faqet më të përdorura mund të ruhen në memorien më të shpejtë, ndërsa faqet e përdorura më rrallë mund të ruhen në memorie relativisht të ngadaltë. Kernel 6.1 prezanton një mekanizëm për përcaktimin se ku ndodhen faqet e përdorura shumë në memorien e ngadaltë, në mënyrë që ato të promovohen në memorie të shpejtë, dhe gjithashtu prezanton një koncept të përgjithshëm të niveleve të memories dhe performancës së tyre relative.
    • Ai përfshin mekanizmin MGLRU (Multi-Generational LRU), i cili zëvendëson zbatimin e vjetër LRU (Më pak të përdorura së fundi) bazuar në dy radhë me një strukturë shumëfazëshe që përcakton më mirë se cilat faqe memorie janë aktualisht në përdorim dhe cilat mund të shtyhen në ndarjen swap.
    • Mbështetje e shtuar për strukturën e të dhënave "pema e panjeve" të propozuar nga inxhinierët e Oracle, e cila pozicionohet si një zëvendësim më efektiv për strukturën "pema kuqezi". Pema e panjës është një variant i pemës B që mbështet indeksimin e diapazonit dhe është krijuar për të përdorur me efikasitet cache-in e procesorëve modernë. Disa nënsisteme të menaxhimit të memories tashmë janë transferuar në pemën e panjës, gjë që ka ndikuar pozitivisht në performancën e tyre. Në të ardhmen, pema e panjeve mund të përdoret për të zbatuar mbylljen e gamës.
    • Aftësia për të krijuar programe "shkatërruese" BPF të krijuara posaçërisht për të nisur një mbyllje emergjente nëpërmjet thirrjes crash_kexec() është shtuar në nënsistemin BPF. Programe të tilla BPF mund të kërkohen për qëllime korrigjimi për të inicuar krijimin e një depoje përplasjeje në një moment të caktuar kohor. Për të hyrë në operacionet shkatërruese kur ngarkoni një program BPF, duhet të specifikoni flamurin BPF_F_DESTRUCTIVE, të aktivizoni sysctl kernel.destructive_bpf_enabled dhe të keni të drejta CAP_SYS_BOOT.
    • Për programet BPF, është e mundur të numërohen elementet e grupit, si dhe të numërohen burimet (skedarët, vma, proceset, etj.) të një thread ose detyrë specifike. Një lloj i ri harte është zbatuar për të krijuar bufera të unazave të përdoruesit.
    • U shtua një thirrje speciale për alokimin e memories në programet BPF (ndarësi i memories), i cili siguron shpërndarje më të sigurt të memories në kontekstin BPF sesa standardi kmalloc().
    • Pjesa e parë e ndryshimeve është integruar, duke ofruar mundësinë për të krijuar drejtues për pajisjet hyrëse me një ndërfaqe HID (Human Interface Device), të zbatuar në formën e programeve BPF.
    • Kerneli e ka hequr plotësisht kodin për të mbështetur formatin e skedarit të ekzekutueshëm a.out, i cili ishte i vjetëruar në versionin 5.1 dhe është çaktivizuar për arkitekturat kryesore që nga versionet 5.18 dhe 5.19. Formati a.out ka qenë prej kohësh i vjetëruar në sistemet Linux dhe gjenerimi i skedarëve a.out nuk mbështetet nga mjetet moderne në konfigurimet e paracaktuara të Linux. Ngarkuesi për skedarët a.out mund të zbatohet tërësisht në hapësirën e përdoruesit.
    • 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ë re, të ngjashme me MIPS dhe RISC-V, zbatohet mbështetje për ngjarjet e matjes së performancës (perf ngjarje), kexec, kdump dhe përpilimi JIT BPF. .
    • Ndërfaqja asinkrone io_uring I/O ofron një modalitet të ri, IORING_SETUP_DEFER_TASKRUN, i cili lejon shtyrjen e përkohshme të punës së lidhur me tamponin e ziles derisa të bëhet një kërkesë aplikacioni, e cila mund të përdoret për të punuar në grup dhe për të shmangur problemet e vonesës për shkak të parandalimit. koha e gabuar.
    • Proceseve në hapësirën e përdoruesit u jepet aftësia për të filluar konvertimin e një sërë faqesh normale të memories në një grup faqesh memorie të mëdha (Transparent Huge-Pages).
    • U shtua implementimi i pajisjes /dev/userfaultfd, e cila lejon aksesin në funksionalitetin e thirrjes së sistemit userfaultfd() duke përdorur të drejtat e aksesit në FS. Funksionaliteti userfaultfd ju lejon të krijoni mbajtës për të hyrë në faqet e memories së pacaktuar (gabimet e faqeve) në hapësirën e përdoruesit.
    • Kërkesat për versionin e mjetit GNU Make janë rritur - të paktën versioni 3.82 kërkohet tani për të ndërtuar kernelin.
  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • Optimizime të rëndësishme të performancës janë bërë në sistemin e skedarëve Btrfs; ndër të tjera, performanca e thirrjes FIEMAP ioctl është rritur me urdhra të madhësisë. Mbështetje e shtuar për shkrimet asinkrone me buffer për aplikacionet që përdorin io_uring. U shtua mbështetje për skedarët e mbrojtur me fs-verity në operacionin "dërgoni".
    • Sistemi i skedarëve ext4 ka shtuar optimizime të performancës në lidhje me mirëmbajtjen e ditarit dhe funksionimin vetëm për lexim.
    • Sistemi i skedarëve EROFS (Enhanced Read-Only File System), i krijuar për t'u përdorur në ndarjet e aksesueshme në modalitetin vetëm për lexim, zbaton aftësinë për të ndarë të dhënat e dubluara në sisteme të ndryshme skedarësh.
    • Thirrja e sistemit statx() është shtuar për të shfaqur informacionin nëse I/O direkt mund të aplikohet në një skedar.
    • Mbështetja për krijimin e skedarëve të përkohshëm me flamurin O_TMPFILE është shtuar në nënsistemin FUSE (Filesystems in User Space).
  • Virtualizimi dhe Siguria
    • Zbatimi i mekanizmit të mbrojtjes CFI (Control Flow Integrity) është zëvendësuar, duke shtuar kontrolle përpara çdo thirrjeje indirekte të një funksioni për të zbuluar disa forma të sjelljes së papërcaktuar që mund të çojnë në një shkelje të urdhrit normal të ekzekutimit (rrjedhës së kontrollit) si një rezultat i përdorimit të shfrytëzimeve që ndryshojnë treguesit në funksione të ruajtura në memorie. Implementimi standard i CFI nga projekti LLVM është zëvendësuar nga një opsion i bazuar gjithashtu në përdorimin e Clang, por i përshtatur posaçërisht për të mbrojtur nënsistemet e nivelit të ulët dhe bërthamat e sistemit operativ. Në LLVM, një zbatim i ri do të ofrohet në versionin Clang 16 dhe do të aktivizohet me opsionin "-fsanitize=kcfi". Dallimi kryesor me implementimin e ri është se ai nuk është i lidhur me optimizimet e kohës së lidhjes (LTO) dhe nuk rezulton në zëvendësimin e treguesve të funksionit me lidhje në tabelën e kërcimit.
    • Për modulet LSM (Linux Security Module), është e mundur të krijohen mbajtës që përgjojnë operacionet për të krijuar hapësira emrash.
    • Janë dhënë mjete për verifikimin e nënshkrimeve dixhitale PKCS#7 në programet BPF.
    • Mundësia për t'u hapur në modalitetin jo-bllokues (O_NONBLOCK), e cila u hoq pa dashje në kernel 5.6, është kthyer në /dev/random.
    • Në sistemet me arkitekturë x86, është shtuar një paralajmërim në rast të hartës së faqeve të kujtesës nga nënsistemet e kernelit që lejojnë njëkohësisht ekzekutimin dhe shkrimin. Në të ardhmen, po shqyrtohet mundësia e ndalimit të plotë të hartës së memories së tillë.
    • U shtua mekanizmi i korrigjimit të KMSAN (Kernel Memory Sanitizer) për të zbuluar përdorimin e painitializuar të memories në kernel, si dhe rrjedhjet e painitializuara të kujtesës midis hapësirës së përdoruesit dhe pajisjeve.
    • Janë bërë përmirësime në gjeneratorin e numrave pseudo të rastësishëm CRNG të kripto-sigurt të përdorur në thirrjen getrandom. Ndryshimet u përgatitën nga Jason A. Donenfeld, autor i VPN WireGuard, dhe kanë për qëllim përmirësimin e sigurisë së nxjerrjes së numrave të plotë pseudo-rastësor.
  • Nënsistemi i rrjetit
    • Stacki TCP ofron mundësinë (e çaktivizuar si parazgjedhje) për të përdorur tabelat hash të socket-it veçmas për secilën hapësirë ​​emrash, gjë që përmirëson performancën në sistemet me një numër të madh hapësirash emrash.
    • Kodi u hoq për të mbështetur protokollin e vjetër DECnet. Cungët API të hapësirës së përdoruesit janë lënë në vend për të lejuar kompilimin e aplikacioneve që përdorin DECnet, por këto aplikacione nuk do të mund të lidhen me rrjetin.
    • Protokolli netlink është i dokumentuar.
  • Оборудование
    • Drejtuesi amdgpu ka shtuar mbështetjen për përcjelljen DSC (Display Stream Compression) për kompresimin e të dhënave pa humbje kur shkëmbeni informacion me ekrane që mbështesin rezolucione shumë të larta. Puna vazhdon për të ofruar mbështetje për platformat AMD RDNA3 (RX 7000) dhe CDNA (Instinct). Mbështetje e shtuar për komponentët IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x dhe GMC 11.x. Drejtuesi amdkfd (për GPU-të diskrete AMD si Polaris) ofron mbështetje për GFX 11.0.3.
    • Drejtuesi i i915 (Intel) përfshin mbështetje për GPU Meteor Lake. Meteor Lake dhe GPU-të më të reja mbështesin ndërfaqen DP 2.0 (DisplayPort). Identifikues të shtuar për kartat video bazuar në mikroarkitekturën Alder Lake S.
    • Mbështetje e shtuar për nënsistemet audio të implementuara në procesorët Apple Silicon, Intel SkyLake dhe Intel KabyLake. Shoferi audio CS35L41 HDA mbështet modalitetin e gjumit. Mbështetje e shtuar ASoC (ALSA System on Chip) për çipat audio të integruar Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake dhe Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs,8280com SM8250 dhe Texas Instruments SRC8450
    • Mbështetje e shtuar për panelet LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux B120J-R1, Innolux B116AU01.6. NT116WH M-N21, INX N116BCA- EA2, INX N116BCN-EA1, Teknologjia Multi-Inno MI0800FT-9.
    • Mbështetje e shtuar për kontrollorët AHCI SATA të përdorur në SoC Baikal-T1.
    • Mbështetje e shtuar për çipat Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Lidhshmëria e Integruar), Realtek RTL8852C, RTW8852AE dhe RTL8761BUV (Edimax BT-8500).
    • Drejtuesi ath11k për modulet me valë Qualcomm ka shtuar mbështetje për skanimin spektral në intervalin 160 MHz, ka implementuar NAPI me shumë fije dhe mbështetje të përmirësuar për çipat Qualcomm WCN6750 Wi-Fi.
    • Drejtues të shtuar për tastierën PinePhone, panelet me prekje InterTouch (ThinkPad P1 G3), kontrolluesin adaptiv X-Box, kontrolluesin e fluturimit PhoenixRC, kontrolluesin e makinës VRC-2, kontrolluesin DualSense Edge, panelin e funksionimit IBM, telekomandat XBOX One Elite, tabletët XP-PEN Deco Pro S dhe Intuos Pro Small (PTH-460).
    • Shtuar shofer për përshpejtuesit kriptografikë Aspeed HACE (Hash dhe Crypto Engine).
    • Mbështetje e shtuar për kontrollorët e integruar Thunderbolt/USB4 Intel Meteor Lake.
    • Mbështetje e shtuar për telefonat inteligjentë Sony Xperia 1 IV, Samsung Galaxy E5, E7 dhe Grand Max, Pine64 Pinephone Pro.
    • Mbështetje e shtuar për ARM SoC dhe bordet: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 dhe RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064, Kontro Q2.0, IPQ8062, V8065. BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Drejtuesit e përditësuar për SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom dhe NXP.

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.1 - Linux-libre 6.1-gnu, i pastruar nga elementët e firmuerit dhe drejtuesit që përmbajnë komponentë ose seksione kodi jo të lirë, fushëveprimi i të cilit është kufizuar nga prodhuesi. Publikimi i ri pastron drejtuesin e ri rtw8852b dhe skedarët DTS për SoC të ndryshëm Qualcomm dhe MediaTek me procesorë të bazuar në arkitekturën AArch64. Kodi i përditësuar i pastrimit të blobit në drejtuesit dhe nënsistemet amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Pastrimi i drejtuesve të vjetëruar të kartave televizive tm6000, cpia2 v4l, sp8870, av7110 është korrigjuar.

Burimi: opennet.ru

Shto një koment