Izlaz jezgre Linux 6.17

Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 6.17. Među najznačajnijim promjenama: poboljšanje performansi Btrfs, sistemske pozive file_getattr() i file_setattr(), unifikacija jednoprocessorskih i multiprocessorskih konfiguracija u planeru zadataka, modul DAMON_STAT sa statistikom pristupa memoriji, podrška za Live-patcheve na sustavima ARM64, slanje core-dumpova putem AF_UNIX soketa, ograničavanje SCHED_EXT putem cgroup, pojednostavljena konfiguracija zaštite od ranjivosti u CPU-u, izgradnja u Clangu s inicijalizacijom varijabli na stogu, zaštita od zamjene /proc, proširenje pod sustava RV (Runtime Verification), ograničenje AF_UNIX soketa putem AppArmor, algoritam kontrole preopterećenja TCP DualPI2.

U novu verziju uključeno je 14334 ispravki od 2118 programera, veličina patcha iznosi 46 MB (promjene su obuhvatile 12841 datoteku, dodano je 646654 redaka koda, uklonjeno 398782 redaka). U prošlom izdanju bilo je 15924 ispravki od 2145 programera, veličina patcha iznosila je 50 MB. Otprilike 43% svih predstavljenih u 6.17 promjena odnosi se na upravljačke uređaje, otprilike 12% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 14% se odnosi na mrežni stack, 4% na datotečne sustave i 3% na unutarnje pod sustave jezgre.

Glavne novine u jezgri 6.17 (1, 2, 3):

  • Sistem diska, ulaz/izlaz i datotečni sustavi
    • U Btrfs je dodana eksperimentalna podrška za velike folije stranica memorije (large folios), koje omogućuju smanjenje troškova i povećanje performansi niza operacija. Implementirano je keširanje zahtjeva za bitnim kartama raspodjele slobodnog prostora, što je dovelo do povećanja performansi stvaranja praznih datoteka za 20%. Poboljšano je prefetching u sustavima koji koriste kompresiju podataka. Osigurano je gušće raspoređivanje ključeva u strukturi XArray, što je poboljšalo kompaktnost pohrane čvorova stabla ekstenata i omogućilo smanjenje broja krajnjih čvorova za 50-70%. Pružene su dodatne postavke za korištenje kompresije u defragmentiranim ekstentima.
    • U datotečnom sustavu ext4 uvedena je podrška za bufersku ulaz/izlaz s oznakom RWF_DONTCACHE, pri kojoj se podaci uklanjaju iz straničnog keša odmah nakon završetka operacije.
    • U datotečnom sustavu EROFS implementirana je podrška za kompresiju metapodataka.
    • NFS poslužitelj sada može delegirati operacije pisanja klijentima koji otvaraju datoteke u načinu samo za pisanje.
    • U sustavnu funkciju fallocate() dodana je oznaka FALLOC_FL_WRITE_ZEROES koja omogućava popunjavanje nula navedenog raspona u datoteci koristeći naredbu WRITE_ZERO koju podržavaju neki SSD-ovi, omogućujući brisanje bez operacija ulaza/izlaza. Ova opcija trenutno je dostupna samo u datotečnom sustavu ext4.
    • Dodane su sustavne funkcije file_getattr() i file_setattr() za upravljanje atributima inode-a zadane datoteke.
    • Uklonjen je vozač 'pktcdvd' za rad s optičkim medijima u paketnom režimu, koji je označen kao zastario 2016. godine.
    • Datotečni sustav Bcachefs u Linux kernelu prebačen je u režim vanjske potpore, što znači da se prestaje s primanjem promjena za Bcachefs u glavni sklop jezgre, održavajući ovaj datotečni sustav unutar kodne baze jezgre. Razvoj Bcachefs-a će se odvijati izvan kodne baze jezgre do trenutka kada Kent Overstreet ne dokaže sposobnost ispravnog suradnje s drugim kernel programerima i sposobnost pridržavanja uspostavljenih razvojnih pravila.
  • Memorija i sistemske usluge
    • Iz rasporeda zadataka uklonjena je podrška za jednoprocessorske konfiguracije. Na sustavima s jednim procesorom sada je potrebno koristiti jezgre izrađene za multiprocessorske sustave (SMP). Kod za jednoprocessorske i multiprocessorske sustave je ujedinjen i oslobođen suvišnih ovisnosti o parametru jezgre CONFIG_SMP.
    • Dodan je modul jezgre DAMON_STAT (Statistika rezultata praćenja pristupa podacima), koji omogućuje praćenje pristupa radnoj memoriji korištenjem DAMON (Data Access MONitor) podsustava. Modul pruža statistiku o neaktivnosti (memory_idle_ms_percentiles) i predviđenoj propusnosti memorije (estimated_memory_bandwidth).
    • Na sustavima s ARM64 arhitekturom implementirana je podrška za Live-patcheve, koji omogućuju primjenu ispravki na Linux kernelu u stvarnom vremenu, bez ponovnog pokretanja i zaustavljanja sustava.
    • U minimalističkoj C biblioteci nolibc, isporučenoj kao dio izvornih kodova Linux jezgre i koja pruža obavijest o osnovnim sustavnim pozivima, implementirana je podrška za arhitekture SuperH, x32, MIPS n32 i MIPS n34.
    • Proširen je kapacitet slanja sadržaja core-dumpova preko AF_UNIX soketa, omogućavajući stvaranje sigurnijih rukovatelja core-dumpova u korisničkom prostoru, koji nisu vezani za poziv privilegiranih procesa od strane jezgre. U novoj verziji dodan je protokol za stvaranje. poslužitelja, koji mogu upravljati obradom core dumpova na razini pojedinačnih zadataka. Na primjer, za neke procese može se zanemariti core dump, dok se za druge može proslijediti putem socket-a. Odvojeno je pripremljen prototip servera za upravljanje core dumpovima.
    • Dodana je opcija komandne linije jezgra „crashkernel=size,cma“ za rezervaciju memorije putem CMA (Contiguous Memory Allocator) za pohranu crash dumpa jezgra.
    • Proširene su mogućnosti mehanizma pidfd, koji omogućuje korištenje identifikatora povezanih s određenim procesima i, za razliku od pid-a, nisu ponovo dodijeljeni. Dodana je mogućnost vezivanja dodatnih atributa pidfd-a iz prostora korisnika. Dozvoljeno je otvaranje datotečnih deskriptora za pidfd putem funkcije open_by_handle_at() bez vezivanja za datotečni sustav. Unutarnje informacije kreirane od strane jezgra zajedno s pidfd-om sada se vežu uz proces, a ne uz pidfd, i pohranjuju se između ponovnog otvaranja istog procesa.
    • U BPF podsustav dodana je funkcija bpf_cgroup_read_xattr() za čitanje proširenih atributa datoteka. Omogućena je upotreba tipičnih string operacija u BPF programima, poput bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen i bpf_strspn, koje rade u režimu samo za čitanje. Omogućena je upotreba standardnih tokova stdout i stderr za interakciju s komponentama u prostoru korisnika. Za sustave temeljen na arhitekturi LoongArch u BPF je implementirana mogućnost dinamičke modifikacije koda, mehanizma „BPF trampoline“ (smanjuje troškove prilikom prijenosa poziva između jezgra i BPF programa) te pokretanja programa koji koriste struct_ops za kreiranje kernel funkcija putem BPF-a.
    • U sustavu za praćenje vremena implementirana je podrška za pomoćne satove (auxiliary), koji nisu povezani s uobičajenim sistemskim satovima i rade po vlastitom ritmu (ranije su svi satovi radili s istim ritmom i razlikovali se samo u pomaku).
    • Dodana je inicijalna podrška za proxy izvršavanje (Proxy Execution) radi ublažavanja problema inverzije prioriteta. Proxy izvršavanje omogućuje zadatku koji čeka oslobađanje zaključavanja da prenese svoj kontekst izvršavanja zadatku koji zadržava zaključavanje, kako bi se ubrzalo oslobađanje tog zaključavanja.
    • Nastavljen je prijenos promjena iz grane Rust-for-Linux, vezanih uz korištenje jezika Rust kao drugog jezika za razvoj vozača i modula jezgre (podrška za Rust nije aktivna prema zadanim postavkama, i ne dovodi do uključivanja Rusta u obavezne građevinske ovisnosti jezgre). Dodane su apstrakcije za upravljanje regulatorima napona i struje, svojstvima firmvera, resursima ulaza/izlaza i memorijom ulaza/izlaza. Implementiran je makro „warn_on!()“. Dodan je tip UserPtr za pokazivače u korisničkom prostoru. Proširen je funkcionalnost modula workqueue, uaccess, dma, time i list. Dodan je modul ‘bits’ s funkcijama ‘bit’ i ‘genmask’.
    • Preuređen je kod za izračun kontrolnih zbrojeva CRC i dodani su novi pozivi za generiranje heširanja SHA-1 i SHA-2. Dodane su optimizacije specifične za hardverske arhitekture. Povećana je učinkovitost funkcije crc32c() na novim CPU x86_64, koji podržavaju proširenje VPCLMULQDQ (Vector Carry-Less Multiplication of Quadwords).
    • Za S390 sustave implementirana je podrška za izbacivanje u swap dio i migraciju velikih stranica memorije (transparent huge page).
    • Dodana je mogućnost podešavanja agresivnosti oslobađanja stranica memorije (proactive-reclaim) u slučaju nedostatka, povezujući to s pojedinačnim NUMA čvorovima, što omogućuje izdvajanje NUMA čvorova za koje će se primijeniti aktivnije oslobađanje memorije. Na primjer, „echo „512M swappiness=10″ > /sys/devices/system/node/node1/reclaim“.
    • U mehanizam SCHED_EXT, koji omogućuje korištenje BPF-a za stvaranje rasporeda CPU-a, dodana je mogućnost upravljanja propusnošću putem cgroup-a. Na primjer, može se koristiti parametar cpu.max za ograničavanje opterećenja CPU-a.
    • Objavljeno je zastarjelo automatsko montiranje virtualnog FS-a tracefs u direktorij /sys/kernel/debug/tracing, umjesto kojeg treba koristiti /sys/kernel/tracing.
  • Virtualizacija i sigurnost
    • Dodana je mogućnost uključivanja zaštite od ranjivosti u CPU-u kroz izbor blokiranih vektora napada umjesto da se specificiraju konkretne ranjivosti u postavkama. Metode blokiranja biraju se ovisno o vrsti kršenja izolacije: između korisnika i jezgre (user-kernel), između korisnika i drugog korisnika (user-user), između gostujućeg sustava i host okruženja (guest-host), između različitih gostujućih sustava (guest-guest) i između različitih niti (cross-thread). Predloženi pristup omogućava aktiviranje samo zaštite od onih klasa ranjivosti koje stvarno brinu korisnika. Na primjer, vlasnici oblaka mogu uključiti načine guest-host i guest-guest, nakon čega će se aktivirati metode zaštite od ranjivosti BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO i TAA.
    • Dodana je podrška za izgradnju s kompajlerom Clang uključivanjem načina praćenja dubine steka, pri čemu se inicijalizacija svih varijabli pohranjenih na steku vrši. Inicijalizacija se provodi kako bi se spriječilo curenje informacija iz jezgre kroz neinicijalizirane varijable koje mogu sadržavati ostatke ranije pohranjenih podataka na steku. Do sada je slična mogućnost bila dostupna uz korištenje GCC plugina STACKLEAK.
    • Dodana je zaštita od zamjene datotečnog sustava /proc kroz montažu u načinu 'bind'. Inode broj korijena /proc sada je fiksiran (PROCFS_ROOT_INO) i može se provjeriti od strane procesa u korisničkom prostoru.
    • U podrazdjelu RV (Runtime Verification), namijenjenu provjeri ispravnosti rada visoko pouzdanih sustava, dodan je komponenta praćenja rtapp (monitor real-time aplikacija) za praćenje tipičnih problema u aplikacijama koje rade u stvarnom vremenu, kao i komponente rp, sssw i opid za testiranje planera zadataka. Implementirana je mogućnost izrade komponenti za praćenje koje koriste linearnu temporalnu logiku umjesto determinističkog automata za određivanje modela ponašanja. Provjera se vrši tijekom izvođenja uz pridruživanje upravljača točkama praćenja, uspoređujući stvarni tijek izvođenja s unaprijed definiranim referentnim modelom koji određuje očekivano ponašanje sustava.
    • U sustav AppArmor dodana je podrška za upravljanje pristupom AF_UNIX socketima.
    • U hipervizoru KVM na ARM sustavima implementirana je podrška za kontroler prekida GICv5.
    • Dodana je konfiguracija CONFIG_KVM_IOAPIC koja omogućava isključivanje podrške za emulaciju APIC, PIC i PIT u KVM-u.
    • Dodana je zaštita od ranjivosti VMSCAPE.
    • Dodana je ioctl komanda FS_IOC_GETLBMD_CAP za dobivanje informacija o primjeni sredstava za zaštitu integriteta na datoteci iz korisničkog prostora.
    • Interfejs /sys/fs/selinux/user je proglašen zastarjelim; pristupom ovom interfejsu sada se unosi odgoda od pet sekundi i ispisuje upozorenje u log.
  • Mrežni subsistem
    • U implementaciju PSE (Power Sourcing Equipment) tehnologije, koja se koristi za napajanje uređaja putem Ethernet-a, kao što su IP kamere i bežične pristupne tačke, dodana je podrška za prilagodljive strategije procjene proračuna napajanja (ukupne dostupne snage). Takve strategije omogućuju određivanje koji portovi trebaju biti isključeni prije za sprječavanje opterećenja.
    • U implementaciju MCTP (Management Component Transport Protocol) dodana je podrška za usmjeravanje paketa prema vanjskim čvorovima putem posredničkih čvorova (gateway-routing). Na primjer, sljedeća pravila omogućuju usmjeravanje paketa prema čvoru s identifikatorom 10 (Endpoint ID 10) preko uređaja mctpi2c0, koristeći adresu 0x1d, koja je izravno povezana s čvorom s identifikatorom 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Za UNIX sokete (AF_UNIX) implementirana je opcija SO_INC, a za adresnu porodicu VSOCK opcija SIOCINQ. Implementirane opcije su slične opciji TCP_INQ za TCP i omogućuju dobivanje informacija o broju bajtova dostupnih za čitanje u soketu putem kontrolne poruke.
    • Za TCP aktivirano je strogo poštivanje deklarirane veličine prijemnog prozora, koja određuje veličinu podataka koji se mogu poslati prije nego što se primi ACK potvrda s druge strane. Ranije je jezgro nastavilo obrađivati podatke koji su stizali iznad deklariranog prijemnog prozora, ali sada će prestati to raditi.
    • U MPTCP (Multipath TCP) dodana je mogućnost korištenja opcije soketa TCP_MAXSEG za ograničavanje maksimalne veličine poslanih segmenata. MPTCP predstavlja proširenje TCP protokola za organizaciju isporuke paketa simultano putem više ruta kroz različite mrežne sučelja, vezane uz različite IP adrese.
    • Dodana je podrška za algoritam kontrole preopterećenja TCP DualPI2 (RFC 9332), koji omogućava korištenje skalabilnih kontrolora preopterećenja za promet s visokim zahtjevima za kvalitetom usluge (npr. TCP-Prague i DCTCP), bez smanjenja performansi klasičnog prometa, za koji se primjenjuju kontrolori preopterećenja poput Reno i Cubic.
    • Dodana je sysctl varijabla „force_forwarding”, putem koje se može aktivirati preusmjeravanje prometa na odabranim mrežnim sučeljima s IPv6.
    • Uklonjena je podrška za algoritam prepoznavanja gubitka paketa SACK (Selective Acknowledgment), opisan u RFC 6675. Ovaj algoritam je označen kao zastario 2018. godine. Za prepoznavanje gubitka TCP paketa preporučuje se korištenje algoritma RACK-TLP.
  • Oprema
    • Nastavljen je rad na drm vozaču (Direct Rendering Manager) Xe za GPU temeljen na Intel Xe arhitekturi, koji se koristi u Intelovim grafičkim karticama Arc i integriranoj grafici, počevši od Tiger Lake procesora. U novoj verziji je po defaultu uključena podrška za čipove temeljene na mikroarhitekturi Panthor Lake i dodana je podrška za mikroarhitekturu WildCat Lake.
    • U AMDGPU vozaču za GPU GFX9.x implementirana je podrška za mehanizam Cleaner Shader, koji omogućava čišćenje GPU memorije prije ponovne upotrebe kako bi se spriječilo curenje podataka koji su ostali nakon rada drugog procesa. Poboljšana je podrška za čekajući režim. Dodana je mogućnost prelaska u režim spavanja u okruženjima s AMD SR-IOV. Poboljšano je upravljanje pozadinskim osvjetljenjem.
    • U i915 vozaču implementirana je podrška za mehanizam drm_panic, koji prikazuje nešto poput „plave ekrana smrti” u slučaju pogreške. Dodana je podrška za kontroler zaslona koji se koristi u čipovima Wildcat Lake.
    • Nastavljena je integracija komponenti vozača Nova za NVIDIA GPU-ove, opremljene GSP firmverima, koji se koriste od serije NVIDIA GeForce RTX 2000 temeljenih na Turing mikroarhitekturi. Vozač je napisan u Rust jeziku. U novoj verziji dodat je nivo apstrakcije za rad s DMA, implementiran je parser VBIOS-a, dodan je kod za konfiguraciju ram-bufora i osigurana je podrška za ubrzano pokretanje u Falcon režimu.
    • U adreno vozaču dodana je podrška za Qualcomm Adreno x1-45 i x1-85 GPU.
    • U msm vozaču dodana je podrška za Adreno SM8750 GPU i mapiranje video memorije (VM_BIND).
    • U panfrost vozaču dodana je podrška za Mali GPU koji se koriste u SoC Mediatek mt8370.
    • U lima drajveru dodana je podrška za GPU, korištene u SoC Rockchip RK3528.
    • Dodani su mtd (Memory Technology Devices) drajveri za pristup NVM memoriji integriranoj u Intel GPU.
    • Dodana je podrška za audio sustave ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (koji se koristi u ASUS laptopima), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. Izvršena je reorganizacija HD-audio koda.
    • Dodana je podrška za ARM platforme, SoC i uređaje: NVIDIA Tegra264, Marvell PXA1908 (prvi 64-bitni čip tvrtke Marvell za pametne telefone), CIX P1, Axiado AX3000, Sophgo SG2000 (koji kombinira ARM i RISC-V jezgre), Mediatek mt6572, exynos2200 (koji se koristi u Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 i Sophgo sg2042, laptopi temeljen na Mediatek mt8186 i Qualcomm Snapdragon X1, pametni telefoni i tableti temeljen na SoC mt6572, tegra30 i msm8976.

U isto vrijeme, Latinskoamerička Zaklada slobodnog softvera formirala je verziju potpuno slobodnog jezgre 6.17 — Linux-libre 6.17-gnu, očišćenu od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili dijelove koda čija je primjena ograničena od strane proizvođača. U izdanju 6.17 ažuriran je kod čišćenja blobova u drajverima amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core i Intel AVS. Očišćena su imena blobova u dts datotekama (devicetree) za ARM čipove i Intel IPU7. Onemogućeno je učitavanje blobova u novim pci hda drajverima. Prekinuto je čišćenje blobova u QLogic infiniband drajveru, koji je uklonjen iz jezgre.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster