Linux 7.1

Po dwóch miesiącach prac Linus Torvalds przedstawił wydał jądro Linux 7.1. Wśród najbardziej znaczących zmian znajduje się: nowy sterownik ntfsplus, pierwsza faza zakończenia wsparcia dla procesorów i486, usunięcie starych adapterów Ethernet, usunięcie protokołów ISDN i AX.25, włączenie domyślnie mechanizmu Intel FRED, wsparcie dla BPF w io_uring, optymalizacja podsystemu wymiany, wsparcie dla subplanistów w sched_ext, tryb zero-copy w sterowniku ublk, operacja ioctl shutdown w Btrfs, dynamiczne przełączanie trybu wydajności w sterowniku amd-pstate, wsparcie xattr dla gniazd Unix.

W nowej wersji przyjęto 17275 poprawek od 2589 programistów, rozmiar łaty wynosi 57 MB (zmiany dotknęły 13528 plików, dodano 751785 linijek kodu, usunięto 405916 linijek). W poprzedniej wersji było 15624 poprawek od 2477 programistów, rozmiar łaty wynosił 56 MB. Około 41% wszystkich zmian w 7.1 dotyczyło sterowników urządzeń, około 12% zmian odnosi się do aktualizacji kodu specyficznego dla architektur sprzętowych, 14% dotyczyło stosu sieciowego, 5% — systemów plików i 3% dotyczących wewnętrznych podsystemów jądra.

Główne nowości w jądrze 7.1 (kernelnewbies.org, lwn.net, opennet):

Podsystem dyskowy, wejście/wyjście i systemy plików
  • Przyjęto nową realizację systemu plików NTFS — ntfsplus, opartego na kodzie usuniętego z jądra klasycznego sterownika ntfs. Stary sterownik został przeprojektowany, rozszerzono go o możliwość zapisu danych oraz dostosowano do nowoczesnych możliwości, takich jak wykorzystanie folio pamięci (folios) zamiast struktury buffer_head. W nowym sterowniku zaimplementowano opóźnione alokowanie bloków, co pozwoliło osiągnąć wysoką wydajność operacji zapisu oraz zmniejszenie fragmentacji. Dla buforowanych operacji zapisu/odczytu, bezpośredniego wejścia/wyjścia, mapowania ekstremów oraz operacji zapisu/odczytu stronic zastosowano bibliotekę iomap. W testach iozone sterownik ntfsplus okazał się o 3-5% szybszy od ntfs3 przy zapisie w trybie jednowsadowym i o 35-110% przy użyciu 4 wątków. Prędkość odczytu ntfsplus i ntfs3 jest na mniej więcej tym samym poziomie. Sterownik ntfs3 pozostaje częścią jądra i zawiera zostały wprowadzone poprawki oraz drobne ulepszenia.
  • Dodano wsparcie dla generowania i weryfikacji danych sprawdzających integralność T10 (deepwiki.com) na poziomie systemu plików, a nie urządzenia blokowego, co pozwala na zwiększenie wydajności operacji odczytu.
  • W sterowniku urządzeń blokowych ublk, umożliwiający przeniesienie specyficznej logiki na stronę procesu w przestrzeni użytkownika, dodano wsparcie dla wejścia/wyjścia przez dzieloną pamięć bez kopiowania danych między buforami (tryb zero-copy).
  • Dla samoszyfrujących urządzeń blokowych SED-OPAL dodano ioctl do zarządzania trybem Użytkownik jednoosobowy i zrealizowano polecenie STACK_RESET.
  • W Btrfs ogłoszono stabilne wsparcie dla operacji ioctl shutdown, umożliwiającej 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 wprowadzono 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ą nową przestrzeń nazw punktów montowania dla montowanego systemu plików. Do wywołań systemowych clone3() i unshare() dodano flagi do zwracania nowej przestrzeni nazw punktów montowania, zawierającej tylko zamontowaną pustą atrapę systemu plików opartą na nullfs, sterownik fs-dax z interfejsem FS do urządzeń DAX (Direct Access).
  • Na serwerze NFS dodano ochrona przed atakami polegającymi na zgadywaniu deskryptorów plików, zrealizowana poprzez podpisywanie deskryptorów podpisem kryptograficznym. Ochrona włącza się za pomocą opcji montowania sign_fh.
  • Dodano sterownik znakowy fs-dax, zapewniający interfejs do interakcji z urządzeniami DAX (kernel.org) (Direct Access), obsługującymi pracę z pominięciem pamięci podręcznej stron. Wskazany interfejs jest niezbędny do integracji w jądrze systemu plików famfs, umiejscowionym w pamięci operacyjnej.
  • W systemie plików Ceph zrealizowano zbieranie metryk o wejściu/wyjściu w powiązaniu z poddziałami.
Pamięć i usługi systemowe
  • Przyjęto Pierwsza seria zmian związanych z zakończeniem wsparcia dla procesorów i486. Z Kconfig usunięto opcje kompilacji jądra z obsługą procesorów 486DX, 486SX i AMD ELAN (CONFIG_M486, CONFIG_M486SX i CONFIG_MELAN), a w Makefile wykluczono opcje kompilacji dla systemów i486 (-march=i486). Kod zapewniający wsparcie dla pracy na procesorach i486 pozostaje w jądrze, ale kompilacja dla takich systemów teraz wymaga zastosowania łat do plików kompilacyjnych. Powody usunięcia wsparcia dla procesorów i486 wynikają z chęci uproszczenia kodu jądra poprzez usunięcie emulacji niektórych operacji sprzętowych, takich jak CX8 (porównaj i wymień 8 bajtów) i TSC (licznik cykli CPU, używany w schedulerze zadań).
  • W sterowniku amd-pstate, stosowanym do zarządzania zużyciem energii w systemach z procesorami AMD, została wdrożona dynamiczne przełączanie ustawień wydajności oraz zmiana zachowania zarządzania zasilaniem w zależności od pracy z zasilania sieciowego lub akumulatora. Podczas podłączenia do sieci włącza się teraz tryb performance, a podczas pracy na akumulatorze — balance_performance.
  • Domyślnie używany mechanizm Intel FRED (Flexible Return and Event Delivery), który zwiększa efektywność i niezawodność dostarczania informacji o niskopoziomowych zdarzeniach. Zwiększenie wydajności i redukcja opóźnień osiągnięta jest dzięki zwracaniu zdarzeń za pomocą instrukcji procesora IRET zamiast przesyłania zdarzeń przez tabelę IDT (Interrupt Descriptor Table). Niezawodność zwiększa się dzięki oddzielnemu przetwarzaniu przyjęcia zdarzenia w kontekście jądra i w kontekście użytkownika, ochronie przed zagnieżdżonym wykonywaniem NMI oraz przechowywaniu w rozszerzonym stosie wszystkich rejestrów CPU związanych z wyjątkiem.
  • W podsystemie perf dodano wsparcie dla jednostek monitorujących wydajność pamięci (PMU — Performance Monitoring Unit), używanych w SoC NVIDIA Tegra410.
  • Przyspieszono wykonanie operacji futex w systemach ARM, dzięki wykorzystaniu instrukcji Arm 9.6 LSUI, które pozwalają jądru uzyskiwać dostęp do pamięci przestrzeni użytkownika bez wcześniejszego wyłączania trybu ochrony PAN (arm.com) (Privileged Access Never).
  • W systemach z procesorami ARM poprawiono wsparcie dla rozszerzenia architektury zestawu instrukcji MPAM (Partitionowanie i monitorowanie zasobów systemu pamięci) oraz dodano możliwość jej wykorzystania w przestrzeni użytkownika do zarządzania zasobami za pomocą mechanizmu resctrl. MPAM zapewnia oznaczanie każdego dostępu do pamięci identyfikatorem sekcji (PARTID, Partition ID) oraz identyfikatorem grupy monitorowania (PMG, Monitoring Group ID). W związku z PARTID można ograniczyć zużycie zasobów, takich jak przepustowość pamięci lub rozmiar pamięci podręcznej, aby dana grupa zadań nie zajmowała wszystkich zasobów. W kontekście monitorowania połączenie PMG i PARTID można wykorzystać do śledzenia zużycia zasobów pamięci przy określoną rodzajach obciążenia.
  • Dodano możliwość wykorzystania trybu czasu rzeczywistego (PREEMPT_RT) na 32-bitowych procesorach ARM. Wcześniej wsparcie dla PREEMPT_RT było zapewnione dla architektur x86 i x86-64, ARM64, RISC-V oraz LoongArch.
  • Do wywołania systemowego clone3() dodano nowe flagi: CLONE_NNP — zakaz zdobywania nowych uprawnień w utworzonym procesie; CLONE_AUTOREAP — automatyczne zakończenie procesu zamiast jego przekształcenia w proces zombie aż do wykonania funkcji wait() przez proces macierzysty; CLONE_PIDFD_AUTOKILL — zakończenie procesu potomnego w przypadku zamknięcia powiązanego z nim deskriptora pidfd (na przykład przy zakończeniu procesu macierzystego).
  • Dla każdego modułu jądra w katalogu /sys/module dodano plik import_ns, zawierający listę importowanych przestrzeni nazw symboli (symbol namespace).
  • Do systemu asynchronicznego wejścia/wyjścia io_uring dodano wsparcie dla korzystania z podsystemu BPF do tworzenia obsługi. Na przykład można zastąpić główną pętlę dyspozytorską programem BPF.
  • W podsyle BPF zmodernizowano analizę użycia stosu, co znacznie przyspieszyło weryfikację wielu programów BPF przez weryfikator.
  • W celu optymalizacji wydajności przepisana podsystém hrtimer (wysoko precyzyjny timer). Planer zadań teraz może korzystać z timerów o wysokiej rozdzielczości bez utraty wydajności zamiast mniej precyzyjnych timerów.
  • Kontynuowano przeniesienie zmian z gałęzi Rust-for-Linux związanych z używaniem języka Rust jako drugiego języka do tworzenia sterowników i modułów jądra (wsparcie dla Rust nie jest włączone domyślnie i nie prowadzi do zaliczenia Rust wśród obowiązkowych zależności kompilacyjnych jądra). Do wersji 1.85 (dostarczanej w Debianie 13) zwiększono wymagania dotyczące wersji Rust potrzebnej do kompilacji komponentów jądra. Dodano eksperymentalną opcję Kconfig CONFIG_RUST_INLINE_HELPERS do wbudowywania sekcji C w kod Rust podczas kompilacji (optymalizacja przyspieszyła działanie bloku sterownika null o 2%). Dodano makro 'const_assert!'. Rozszerzono możliwości modułów sizes, clk, ptr, sync, error.
  • W mechanizmie SCHED_EXT, który umożliwia korzystanie z BPF do tworzenia planistów CPU, dodano wstępna możliwość tworzenia zagnieżdżonych planistów (sub-scheduler), dzięki którym dla każdej grupy cgroups można uruchomić własny planer zadań.
  • Kontynuowano optymalizację podsystemu wymiany (swap). Usunięto starą strukturę swap_map, zastąpioną mechanizmem „Tabela Swap”. Zmiana ta poprawiła wydajność i zmniejszyła zużycie pamięci w podsystemie wymiany.
  • W podsystemie DAMON (Data Access MONitor), który pozwala śledzić dostęp procesu do danych w pamięci RAM (na przykład można dowiedzieć się, do jakich obszarów pamięci odnosił się proces, a jakie obszary pamięci pozostały nieużywane), dodano wsparcie różnych algorytmów automatycznie tuningowych kwot.
  • W podsystemie śledzenia zrealizowano pojęcie zewnętrznych buforów cyklicznych, które umożliwiają pozyskiwanie danych śledzenia z maszyn wirtualnych. Możliwość ta jest wykorzystywana w hypervisorach KVM i nVHE do przesyłania danych śledzenia z systemu gościa do hosta.
  • W podsystemie RV (kernel.org) (Runtime Verification), przeznaczone do weryfikacji poprawności działania wysoko niezawodnych systemów, 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, umożliwiającą ominięcie praw dostępu do pamięci procesu przez plik /proc/PID/mem tylko dla procesów wykorzystujących do debugowania wywołanie systemowe ptrace().
  • Dodano nowy zestaw hooków dla modułów LSM (Linux Security Module), ułatwiający implementację polityk dla stosowych systemów plików, takich jak overlayfs. W LSM również dodano hook do zarządzania dostępem do gniazd Unix, który zaangażowany 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 文档 w lib/crypto.
  • Zrealizowano tryb pKVM (Protected KVM) dla ścisłej izolacji anonimowej pamięci z wykorzystaniem rozszerzeń wirtualizacji dla architektury AArch64. W tym trybie strony pamięci gościa są wyłączane z tabeli wirtualnych adresów systemu hosta.
  • Do hypervizora KVM dodano wsparcie piątej wersji wirtualnego kontrolera przerwań ARM (VGICv5 — ARM Virtual Generic Interrupt Controller v5).
Subsystem sieciowy
  • Dla gniazd Unix tworzonych przez funkcję socket(), zrealizowano wsparcie dla rozszerzonych atrybutów plików (xattr) user.*. W zastosowaniach wyróżnia się wystawianie etykiet poprzez rozszerzone atrybuty do gniazd Unix używanych dla IPC Varlink, w celu wyróżnienia ich z ogółu do inspekcji i debugowania pracy IPC za pomocą programów BPF. W systemd-journald rozszerzone atrybuty mają być używane do określenia formatu logu powiązanego z gniazdem /dev/log.
  • Usunięto wsparcie dla protokołu UDP-Lite (RFC 3828), który zezwala na dostarczanie pakietów z błędną sumą kontrolną w nadziei, że na przykład częściowo uszkodzone dane audio i wideo mogą być odtworzone na poziomie kodeka. Protokół usunięto, ponieważ nikt go nie używa.
  • Usunięto możliwość kompilacji stosu IPv6 w formie modułu jądra, który nie był używany w praktyce (IPv6 jest wbudowywane w jądro lub całkowicie wyłączane), ale komplikowało utrzymanie, ponieważ przy kompilacji IPv6 jako moduł jądra (CONFIG_IPV6=m), wiele subsystemów zmuszone było dodawać niepotrzebne obsługiwacze na wypadek załadowania modułu IPv6.
Sprzęt
  • W sterowniku AMDGPU włączono nowy silnik wyświetlania (DC) dla APU AMD serii HD 7000 (Sea Islands, GCN 1.1).
  • W sterowniku Nouveau dodano wstępne wsparcie dla GPU NVIDIA GA100 opartego na mikroarchitekturze Ampere.
  • Kontynuowana jest praca nad sterownikiem drm (Direct Rendering Manager) Xe dla GPU opartego na architekturze Intel Xe, która jest używana w kartach graficznych Intel rodziny Arc oraz zintegrowanej grafice, począwszy od procesorów Tiger Lake. Dodano wsparcie dla podsystemu graficznego procesorów Intel Nova Lake-P. Zrealizowano obiekty buforowe do usuwania (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 wyświetlania grafiki przez framebuffer firmware na bazie CoreBoot.
  • Dodano wsparcie dla dźwięku ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP oraz WM8962. Ulepszono wsparcie dla urządzeń audio 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 oraz IdeaPad.
  • Dodano wsparcie dla platform ARM, SoC oraz urządzeń: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 oraz 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 zastosowanych w SoC Baikal-T1 kontrolerów AHCI SATA i PCIe, a także sterowników zegara, pamięci, physmap, magistrali, hwmon, dwc oraz bt1-rom. Powodem usunięcia jest brak wsparcia i nieukończona integracja w jądrze komponentów platformy Baikal, której produkcję w RF wstrzymano w listopadzie 2025 roku.
  • Usunięto 12 sterowników dla urządzeń Ethernet z interfejsami ISA i PCMCIA, produkowanych przed 2002 rokiem, dla których nie znaleziono użytkowników stosujących je w systemach roboczych. Również z jądra usunięto podsystém ISDN, realizacje 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 wsparcia w kontekście rosnącej liczby wykrytych za pomocą syzbot i narzędzi AI błędów, których nikt nie podejmuje się naprawy, a całe obciążenie naprawy poważnych problemów spoczywa na wsparciu głównych sieciowych podsystemów jądra. Łącznie usunięto ponad 140 tysięcy linii kodu.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster