Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 7.1. Wśród najważniejszych zmian znajdują się: nowy sterownik ntfsplus, pierwszy etap zakończenia wsparcia dla CPU i486, usunięcie starych adapterów Ethernet, usunięcie protokołów ISDN i AX.25, włączenie domyślnego mechanizmu Intel FRED, wsparcie dla przetwarzania BPF w io_uring, optymalizacja podsystemu wymiany danych, wsparcie dla subplanistów w sched_ext, wejście/wyjście w trybie zero-copy w sterowniku ublk, operacja ioctl „shutdown” w Btrfs, dynamiczne przełączanie trybu wydajności w sterowniku amd-pstate, wsparcie dla xattr w soketach Unix.
Nowa wersja zawiera 17275 poprawek od 2589 deweloperów,
rozmiar łaty — 57 MB (zmiany dotyczyły 13528 plików, dodano 751785 linii kodu, usunięto 405916 linii). W poprzednim wydaniu było 15624 poprawek od 2477 programistów, rozmiar łaty — 56 MB. Około 41% wszystkich zmian w 7.1 dotyczy sterowników urządzeń, około 12% odnosi się do aktualizacji kodu ściśle związanego z architekturą sprzętową, 14% dotyczy stosu sieciowego, 5% systemów plików i 3% wewnętrznych podsystemów jądra.
Główne nowości w jądrze 7.1 (1, 2, 3):
- Podsystem dyskowy, wejście/wyjście i systemy plików
- Do zestawu przyjęto nową implementację systemu plików NTFS — ntfsplus, opartą na kodzie usuniętego z jądra klasycznego sterownika ntfs. Stary sterownik został przerobiony, rozszerzony o możliwość zapisu danych i dostosowany do nowoczesnych możliwości, takich jak wykorzystanie folii stron pamięci (folios) zamiast struktury buffer_head. Nowy sterownik wprowadza opóźnione przydzielanie bloków, co pozwoliło osiągnąć wysoką wydajność operacji zapisu oraz zmniejszenie fragmentacji. Do buforowanych operacji zapisu/odczytu, bezpośredniego wejścia/wyjścia, mapowania eksplantów i operacji zapisu/odczytu stron używana jest biblioteka iomap. W testach iozone sterownik ntfsplus okazał się o 3-5% szybszy niż ntfs3 przy zapisie w trybie jednowątkowym i o 35-110% przy użyciu 4 wątków. Szybkość odczytu ntfsplus i ntfs3 jest na podobnym poziomie. Sterownik ntfs3 pozostaje w składzie jądra, w którym wprowadzono poprawki i drobne usprawnienia.
- Dodano wsparcie dla generowania i weryfikacji danych kontroli integralności T10 na poziomie systemu plików, a nie urządzenia blokowego, co pozwala na poprawę wydajności operacji odczytu.
- Do sterownika urządzeń blokowych ublk, umożliwiającego przeniesienie specyficznej logiki do przestrzeni procesów użytkownika, dodano wsparcie dla wejścia/wyjścia za pomocą pamięci współdzielonej bez kopiowania danych między buforami (tryb zero-copy).
- Dla samoszyfrujących urządzeń blokowych SED-OPAL dodano ioctl do zarządzania trybem Single User oraz zrealizowano polecenie STACK_RESET.
- W Btrfs ogłoszono stabilne wsparcie dla operacji ioctl „shutdown”, która pozwala na przekształcenie systemu plików w stan, w którym podejmowane są próby zakończenia już uruchomionych operacji, ale blokowane są wszystkie nowe operacje.
- W exfat zrealizowano możliwość rezerwacji pustych obszarów poprzez wywołanie fallocate().
- W systemie plików CIFS dodano wsparcie dla tworzenia plików tymczasowych z flagą O_TMPFILE.
- Do wywołania systemowego fsmount() dodano opcję FSMOUNT_NAMESPACE, tworzącą nowe przestrzeń nazw punktów montowania dla montowanego systemu plików. Do wywołań systemowych clone3() i unshare() dodano flagi do zwracania nowego przestrzeni nazw punktów montowania, zawierającego tylko zamontowaną pustą zastawkę systemu plików na bazie nullfs oraz sterownik fs-dax z interfejsem systemu plików do urządzeń DAX (Direct Access).
- Do serwera NFS dodano ochronę przed atakami zgadywania deskryptorów plików, zrealizowaną poprzez podpisanie deskryptorów podpisem kryptograficznym. Ochrona jest włączana przez opcję montowania sign_fh.
- Dodano symboliczny sterownik fs-dax, który zapewnia interfejs do komunikacji z urządzeniami DAX (Direct Access), wspierającymi pracę w omijaniu pamięci podręcznej stron. Wskazany interfejs jest niezbędny do integracji z jądrem systemu plików famfs, umieszczonym w pamięci operacyjnej.
- W systemie plików Ceph zrealizowano gromadzenie metryk dotyczących wejścia/wyjścia w powiązaniu z poddziałami.
- Pamięć i usługi systemowe
- Przyjęto pierwszą serię zmian mających na celu zaprzestanie wsparcia dla procesorów i486. Z konfiguracji Kconfig usunięto opcje umożliwiające kompilację jądra z obsługą procesorów 486DX, 486SX i AMD ELAN (CONFIG_M486, CONFIG_M486SX oraz CONFIG_MELAN), natomiast z pliku Makefile wykluczono opcje kompilacji dla systemów i486 (-march=i486). Kod, który rzeczywiście wspiera pracę na procesorach i486, pozostaje w jądrze, ale kompilacja dla takich systemów teraz wymaga aplikacji łat na pliki źródłowe. Powody usunięcia wsparcia dla procesorów i486 wynikają z chęci uproszczenia jądra poprzez pozbycie się skomplikowanego kodu, który emuluje niektóre operacje sprzętowe, takie jak CX8 (porównaj i zamień 8 bajtów) oraz TSC (licznik cykli CPU używany w planowaniu zadań).
- W sterowniku amd-pstate, stosowanym do zarządzania zużyciem energii w systemach z procesorami AMD, wprowadzono dynamiczne przełączanie ustawień wydajności oraz zmianę zachowania zarządzania zasilaniem w zależności od pracy z zasilaniem sieciowym lub akumulatorowym. Po podłączeniu do zasilania aktywowany jest tryb „performance”, a podczas pracy na akumulatorze – „balance_performance”.
- Domyślnie włączono mechanizm Intel FRED (Flexible Return and Event Delivery), który pozwala na zwiększenie efektywności i niezawodności dostarczania informacji o zdarzeniach niskiego poziomu. Zwiększenie wydajności i zmniejszenie opóźnień osiąga się dzięki zwracaniu zdarzeń za pomocą instrukcji procesora IRET, zamiast przekazywania zdarzeń przez tabelę IDT (Interrupt Descriptor Table). Zwiększona niezawodność osiągana jest dzięki oddzielnemu przetwarzaniu przyjmowania zdarzenia w kontekście jądra i kontekście użytkownika, zabezpieczeniu przed zagnieżdżonym wykonywaniem NMI oraz zapisaniu wszystkich rejestrów CPU związanych z wyjątkiem w rozszerzonym ramce stosu.
- Do podsystemu perf dodano wsparcie dla bloków monitorowania wydajności pamięci (PMU – Performance Monitoring Unit), używanych w SoC NVIDIA Tegra410.
- Przyspieszono wykonywanie operacji futex w systemach ARM dzięki wykorzystaniu instrukcji Arm 9.6 LSUI, które pozwalają jądrze na dostęp do pamięci przestrzeni użytkownika bez uprzedniego wyłączania trybu ochrony PAN (Privileged Access Never).
- W systemach z procesorami ARM poprawiono wsparcie dla rozszerzenia architektury MPAM (Partitioning and Monitoring System Resources) oraz dodano możliwość jego wykorzystania w przestrzeni użytkownika do zarządzania zasobami za pomocą mechanizmu resctrl. MPAM umożliwia oznaczanie każdego dostępu do pamięci identyfikatorem partycji (PARTID, Partition ID) oraz identyfikatorem grupy monitorującej (PMG, Monitoring Group ID). W odniesieniu do PARTID można ograniczyć zużycie zasobów, takich jak przepustowość pamięci czy wielkość cache, aby jakaś grupa zadań nie zdominuje wszystkich zasobów. W kontekście monitorowania połączenie PMG i PARTID można wykorzystać do śledzenia zużycia pamięci w przypadku określonych rodzajów obciążenia.
- Dodano możliwość korzystania z trybu czasu rzeczywistego (PREEMPT_RT) na 32-bitowych procesorach ARM. Wcześniej wsparcie dla PREEMPT_RT zapewniono dla architektur x86 i x86-64, ARM64, RISC-V oraz LoongArch.
- Do wywołania systemowego clone3() dodano nowe flagi: CLONE_NNP – zakaz uzyskania nowych uprawnień w utworzonym procesie; CLONE_AUTOREAP – automatyczne zakończenie procesu zamiast przekształcania go w proces zombie do momentu wykonania funkcji wait() przez proces rodzica;
CLONE_PIDFD_AUTOKILL – zakończenie procesu potomnego w przypadku zamknięcia powiązanego z nim deskryptora pidfd (np. przy zakończeniu procesu rodzica). - Dla każdego modułu jądra w katalogu /sys/module dodano plik import_ns, który zawiera listę zaimportowanych przestrzeni nazw symboli (symbol namespace).
- Do systemu asynchronicznego wejścia/wyjścia io_uring dodano wsparcie dla wykorzystania podsystemu BPF do tworzenia handlerów. Na przykład, można zastąpić główną pętlę dyspozycji programem BPF.
- W podsystemie BPF zmodernizowano analizę wykorzystania stosu, co znacznie przyspieszyło weryfikację wielu programów BPF przez weryfikator.
- W celu optymalizacji wydajności przepisano podsystem hrtimer (wysokorozdzielczy timer). Scheduler zadań może teraz wykorzystać timery o wysokiej rozdzielczości bez utraty wydajności zamiast mniej dokładnych timerów.
- Kontynuowano przenoszenie zmian z gałęzi Rust-for-Linux, związanych z używaniem języka Rust jako drugiego języka do opracowywania sterowników i modułów jądra (wsparcie dla Rust nie jest domyślnie włączone i nie sprawia, że Rust staje się jedną z obowiązkowych zależności kompilacji jądra). Do wersji 1.85 (dostarczanej w Debianie 13) zwiększono wymagania dotyczące wersji Rust, niezbędnej do kompilacji komponentów jądra. Dodano eksperymentalną opcję Kconfig CONFIG_RUST_INLINE_HELPERS do wbudowywania przelotnych C w kod Rust podczas kompilacji (optymalizacja przyspieszyła działanie sterownika null o 2%). Dodano makro ‘const_assert!’. Rozszerzono możliwości modułów ‘sizes’, ‘clk’, ‘ptr’, ‘sync’, ‘error’.
- Do mechanizmu SCHED_EXT, który pozwala na używanie BPF do tworzenia planistów CPU, dodano wstępną możliwość tworzenia zagnieżdżonych planistów (sub-scheduler), dzięki którym dla każdej cgroup można wykorzystać własny planer zadań.
- Kontynuowano optymalizację podsystemu swap. Usunięto starą strukturę swap_map, zastąpioną mechanizmem „Swap Table”. Zmiana ta pozwoliła na poprawę wydajności oraz zmniejszenie zużycia pamięci w podsystemie swap.
- Do subsystemu DAMON (Data Access MONitor), który pozwala na śledzenie dostępu procesu do danych w pamięci operacyjnej (na przykład można sprawdzić, do jakich obszarów pamięci odwoływał się proces, a które obszary pamięci pozostały nieużywane), dodano wsparcie dla różnych algorytmów automatycznego dostrajania kwot.
- W subsystemie śledzenia wprowadzono koncepcję zewnętrznych buforów cyklicznych, co pozwala na pozyskiwanie danych śledzenia z maszyn wirtualnych. Funkcjonalność ta jest wykorzystywana w hypervisorach KVM i nVHE do przesyłania danych śledzenia z systemu gościa na stronę hosta.
- W podsystemie RV (Runtime Verification), przeznaczonym do weryfikacji poprawności działania systemów o wysokiej niezawodności, dodano komponenty monitorujące „stall” do śledzenia zadań, których wykonanie zostało tymczasowo wstrzymane lub zablokowane, oraz „deadline” do analizy zachowania planisty zadań.
- Wirtualizacja i bezpieczeństwo
- Domyślnie ustawiono flagę PROC_MEM_FORCE_PTRACE, która pozwala na obejście praw dostępu do pamięci procesu poprzez plik /proc/PID/mem tylko dla procesów, które używają do debugowania wywołania systemowego ptrace().
- Dodano nowe zestaw hooków dla modułów LSM (Linux Security Module), ułatwiający wdrażanie polityk dla stosów systemów plików, takich jak overlayfs. W LSM dodano również hook do zarządzania dostępem do gniazd Unix, który jest wykorzystywany w module LSM Landlock do przypisywania polityk dostępu do gniazd Unix.
- Do wbudowanej biblioteki kryptograficznej lib/crypto, oferującej prostsze i szybsze funkcje niż tradycyjne API crypto, dodano wsparcie dla algorytmów AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH i SM3. Dodano dokumentację dla lib/crypto.
- Zrealizowano tryb pKVM (Protected KVM) dla ścisłej izolacji anonimowej pamięci przy użyciu rozszerzeń wirtualizacji dla architektury AArch64. W tym trybie strony pamięci gościa są wykluczane z tabeli adresów wirtualnych systemu gospodarza.
- W hipernadzorze KVM dodano wsparcie dla piątej wersji wirtualnego kontrolera przerwań ARM (VGICv5 – ARM Virtual Generic Interrupt Controller v5).
- Subsystem sieciowy
- Dla gniazd unixowych tworzonych przez funkcję socket() wprowadzono wsparcie dla rozszerzonych atrybutów plików (xattr) „user.*”. W zakresie zastosowań odnotowano oznaczanie przy użyciu rozszerzonych atrybutów gniazd Unix wykorzystywanych do IPC Varlink, aby wyróżnić je z ogółu do inspekcji i debugowania działania IPC przy użyciu programów BPF. W systemd-journald rozszerzone atrybuty mają być wykorzystywane do określenia formatu logu w powiązaniu z gniazdem /dev/log.
- Usunięto wsparcie dla protokołu UDP-Lite (RFC 3828), który dopuszczał dostarczanie pakietów z błędną sumą kontrolną, licząc na to, że na przykład częściowo uszkodzone dane audio i wideo mogą zostać odzyskane na poziomie kodeka. Protokół został usunięty, ponieważ nikt go nie używa.
- Usunięto możliwość budowy stosu IPv6 w postaci modułu jądra, co nie było praktycznie wykorzystywane (IPv6 albo jest wbudowywane w jądro, albo całkowicie wyłączane), ale komplikowało utrzymanie, ponieważ przy budowie IPv6 jako modułu jądra (CONFIG_IPV6=m), wiele subsystemów zmuszonych jest dodawać bezużyteczne procedury na wypadek załadowania modułu IPv6.
- Sprzęt
- W sterowniku AMDGPU włączono nowy silnik wyświetlacza (DC) dla APU AMD serii HD 7000 (Sea Islands, GCN 1.1).
- W sterowniku Nouveau dodano wstępną obsługę GPU NVIDIA GA100 opartego na mikroarchitekturze Ampere.
- Kontynuowano prace nad sterownikiem drm (Direct Rendering Manager) Xe dla GPU opartych na architekturze Intel Xe, stosowanej w kartach graficznych Intel z rodziny Arc oraz zintegrowanej grafice, począwszy od procesorów Tiger Lake. Dodano wsparcie dla graficznej subsystemu procesorów Intel Nova Lake-P. Wprowadzono obiekty buforowe do czyszczenia (Purgeable Buffer Objects).
- Kontynuowano integrację komponentów sterownika Nova dla GPU NVIDIA, wyposażonych w firmware GSP, stosowanych od serii NVIDIA GeForce RTX 2000 opartej na mikroarchitekturze Turing. Sterownik napisano w języku Rust. Dodano wstępną obsługę GPU opartych na mikroarchitekturze Turing.
- Dodano sterownik DRM corebootdrm do wyjścia grafiki przez ramkę buforową firmware'ów opartych na CoreBoot.
- Dodano wsparcie dla dźwięku ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP i WM8962. Ulepszono wsparcie dla urządzeń dźwiękowych z interfejsem USB: Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow.
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - Dodano sterownik yogafan do monitorowania prędkości obrotowej wentylatora w laptopach Lenovo Yoga, Legion i IdeaPad.
- Dodano wsparcie dla platform ARM, SoC i urządzeń: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 i ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- Usunięto wsparcie dla kontrolerów AHCI SATA i PCIe stosowanych w SoC Baikal-T1, a także sterowników timera, pamięci, physmap, magistrali, hwmon, dwc oraz bt1-rom. Powodem usunięcia był brak wsparcia i niedokończona integracja komponentów platformy Baikal w jadro, a produkcję której w RF wstrzymano w listopadzie 2025 roku.
- Usunięto 12 sterowników dla urządzeń Ethernet z interfejsami ISA i PCMCIA, produkowanych do 2002 roku, dla których nie znaleziono użytkowników stosujących je w systemach roboczych. Również wykluczono z jądra.
subsystem ISDN, implementacje protokołów AX.25, CAIF oraz Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), sterowniki yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateur Radio), inport oraz logibm (busmouse). Powodem usunięcia był brak aktywnych konserwatorów w obliczu rosnącej liczby błędów wykrywanych przez syzbot i narzędzia AI, których nikt nie podejmuje się naprawić, a cała odpowiedzialność za usuwanie poważnych problemów spadła na konserwatorów głównych sieciowych subsystemów jądra. Łącznie usunięto ponad 140 tysięcy linii kodu.
Źródło: opennet.ru
