Wydanie jądra Linux 6.16

Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 6.16. Wśród najważniejszych zmian znajdują się: sterownik przyspieszający OpenVPN, mechanizm Kexec HandOver, włączenie domyślnie pięcio-poziomowej tabeli stron pamięci dla x86, usunięcie protokołu DCCP, blokowy sterownik zloop, możliwość wysyłania kopii zapasowych rdzenia przez gniazdo UNIX, wsparcie dla atomowego zapisu w XFS, obciążenie przetwarzania dźwięku dla urządzeń USB, optymalizacje w Ext4, wirtualny sterownik TPM (Trusted Platform Module), pełna implementacja Device Memory TCP, wsparcie dla nienazwanych kanałów w io_uring, przygotowanie do integracji sterownika DRM Asahi, mechanizm „usermode queue” w sterowniku AMDGPU, wsparcie dla Intel TDE (Trusted Domain Extensions) oraz Intel APE (Advanced Performance Extensions).

Nowa wersja zawiera 15924 poprawek od 2145 programistów, rozmiar łaty wynosi 50 MB (zmiany dotknęły 13793 plików, dodano 655451 linii kodu, usunięto 316441 linii). W poprzednim wydaniu było 15945 poprawek od 2154 programistów, rozmiar łaty wynosił 59 MB. Około 45% wszystkich zmian wprowadzonych w 6.16 dotyczy sterowników urządzeń, około 16% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 13% dotyczy stosu sieciowego, 4% - systemów plików, a 3% - wewnętrznych podsystemów jądra.

Główne nowości w jądrze 6.16:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Dodano sterownik zloop do tworzenia strefowanych blokowych urządzeń loopback, montowanych w trybie loop. Sterownik emuluje działanie zwykłych urządzeń blokowych, wykorzystując kilka plików z istniejącego systemu plików (po jednym pliku do przechowywania każdej strefy). Ta funkcjonalność może być przydatna do testowania systemów plików, obsługujących mapper urządzeń oraz aplikacji pod kątem wsparcia strefowanych urządzeń, stosujących podział na strefy grup bloków lub sektorów, w które dozwolone jest tylko sekwencyjne dodawanie danych z aktualizacją całej grupy bloków.
    • W systemie plików XFS wprowadzono wsparcie dla atomowego zapisu dużych porcji danych — kilka bloków może być teraz zapisanych w trybie atomowym (lub wszystkie bloki zostaną zapisane pomyślnie, lub żaden blok nie zostanie zapisany).
    • W systemie plików Ext4 poprawiono wydajność mechanizmu "fast commit". Dodano wsparcie dla dużych arkuszy pamięci (large folios) dla zwykłych plików, co w przeprowadzonych testach zwiększyło wydajność o 37% podczas intensywnego sekwencyjnego wejścia/wyjścia. Dodano wsparcie dla atomowych operacji zapisu obejmujących wiele bloków.
    • W sterowniku systemu plików ext2 ogłoszono przestarzałą obsługę mechanizmu DAX, który zapewnia bezpośredni dostęp do systemu plików, omijający pamięć podręczną stron. Usunięcie DAX ze sterownika ext2 planowane jest na koniec roku. Jako powód podaje się rozpatrzenie sterownika ext2 jako stabilnej, referencyjnej realizacji, w której niedopuszczalne jest stosowanie specyficznych możliwości, które nie zdobyły odpowiedniej popularności.
    • Systemy plików OrangeFS, UFS, BFS i OMFS zostały przetłumaczone na nowy interfejs API montowania partycji.
    • Do sysctl dodano ustawienie vfs_cache_pressure_denom, które steruje liczbą wpisów w pamięci podręcznej "dentry" (wewnętrzna reprezentacja elementów katalogów) w warunkach niedoboru pamięci w systemie. Im wyższa wartość, tym więcej wpisów może zostać usuniętych z pamięci podręcznej (mniej wpisów pozostanie w pamięci podręcznej) w warunkach niedoboru pamięci.
    • W systemie plików Bcachefs dodano opcję "rebalance_on_ac_only", która zabrania wykonywania operacji rebalansowania i kompresji w tle, gdy system jest zasilany z akumulatora. Przyspieszono operacje usuwania migawek i urządzeń. Zmniejszono zużycie pamięci podczas montowania w trybie tylko do odczytu. Dodano możliwość uruchamiania niektórych operacji przywracania po awarii w tle, bez przerywania pracy z systemem plików.
    • Podsystemowi zarządzania zasilaniem zezwolono na samodzielne zamrażanie systemów plików i zmiennych EFI w trybach gotowości i uśpienia (jeśli systemy plików zostały już zamrożone przez handler w przestrzeni użytkownika, powtórne zamrażanie nie jest przeprowadzane).
    • Dodano możliwość przyspieszenia działania EROFS z pomocą wbudowanego w procesory Intel akceleratora QAT (QuickAssist Technology), który oferuje środki do przyspieszania obliczeń związanych ze kompresją i szyfrowaniem.
    • W NFS maksymalny rozmiar porcji danych dla operacji odczytu i zapisu zwiększono z 1 do 4 MB (domyślnie ustawiono wartość 1 MB, ponieważ nie wszyscy klienci obsługują większy rozmiar).
    • Nieprzywilejowani użytkownicy z prawami CAP_SYS_ADMIN w oddzielnej przestrzeni identyfikatorów użytkowników (user namespace), ale bez rozszerzonych uprawnień w przestrzeni głównej, otrzymali możliwość wykorzystania mechanizmu fanotify do monitorowania zmian w systemach plików.
    • Dla systemów plików korzystających z podsystemu FUSE dodano funkcjonalność umożliwiającą jednoczesne czyszczenie wszystkich pamięci podręcznych wpisów o katalogach (dentries). Do podsystemu FUSE wprowadzono obsługę dużych stron pamięci.
    • W systemie plików OverlayFS wprowadzono wsparcie dla tworzenia w nieprzywilejowanych przestrzeniach nazw warstw danych, dla których stosowana jest kontrola integralności oparta na module dm-verity. Ta możliwość pozwala na łączenie zaufanych warstw z metadanymi z niezaufanymi warstwami danych, przetwarzanymi w nieprzywilejowanych przestrzeniach.
  • Pamięć i usługi systemowe
    • Dodano mechanizm KHO (Kexec HandOver) do uruchamiania nowego jądra z starego bez utraty stanu systemu. Przed przekazaniem kontroli nowej wersji jądra, stan kluczowych podsystemów jądra za pomocą KHO może być serializowany w obszarze pamięci, który nie będzie dotknięty dalszymi operacjami. Nowe jądro, przejmując kontrolę, przywraca zserializowany stan z powrotem. Na podstawie KHO rozwija się podsystem Live Update Orchestrator (LUO), umożliwiający ponowne uruchomienie jądra bez zatrzymywania pracy urządzeń.
    • Dodano parametr konfiguracji jądra CONFIG_X86_NATIVE, umożliwiający wykorzystanie opcji kompilacji „-march=native” w celu optymalizacji biorąc pod uwagę możliwości procesora w bieżącym systemie.
    • Dodano wsparcie dla rozszerzenia architektury zestawu instrukcji Intel APX (Advanced Performance Extension), oferującego 16 dodatkowych rejestrów ogólnego przeznaczenia (oprócz 16 istniejących), co umożliwia użycie mniejszej liczby operacji odczytu i zapisu w pamięci w kodzie w celu zwiększenia wydajności i zmniejszenia zużycia energii.
    • Dodano tryb automatycznego dostosowywania polityki przydziału pamięci w systemach NUMA, w którym wszystkie wagi węzłów są przeliczane w odpowiedzi na nowe informacje o przepustowości podczas ładowania lub przy gorącym podłączeniu pamięci.
    • W implementacji futexów dodano wsparcie dla lokalnej tablicy haszowej procesów (local futex_hash_bucket), która, w przeciwieństwie do wcześniej wspieranej ogólnej tablicy haszowej dla wszystkich procesów, jest lokalna dla pojedynczego procesu i jest wspólnie używana przez wszystkie wątki tego procesu. Lokalne tablice haszowe stosowane są tylko dla operacji futex PROCESS_PRIVATE. Ponadto, w nowym wydaniu dodano wsparcie dla opcji FUTEX2_NUMA i FUTEX2_MPOL, które pozwalają wpłynąć na umiejscowienie futexów w pamięci, aby były bliżej procesów, które ich używają.
    • Dla systemów x86_64 włączono stałe wsparcie dla pięciopoziomowych tabel stron pamięci (parametr CONFIG_X86_5LEVEL, kontrolujący włączenie pięciopoziomowych tabel, został usunięty).
    • W sterowniku intel_pstate, zarządzającym parametrami zużycia energii (P-state) w systemach z procesorami Intel, dodano wsparcie dla planowania zadań uwzględniającego zużycie energii (EAS - Energy Aware Scheduling) na hybrydowych procesorach, które łączą wysokowydajne i energooszczędne rdzenie CPU, takie jak Intel Lunar Lake.
    • W sysfs dodano interfejsy: „/sys/devices/system/cpu/cpuN/cpu_capacity” do uzyskiwania informacji o możliwościach różnych CPU w hybrydowych procesorach oraz „/sys/devices/system/cpu/cpuidle/intel_c1_demotion” do zarządzania możliwością pozostawienia CPU w bardziej wydajnym stanie, nawet jeśli rdzeń próbuje przełączyć CPU w niższy stan zużycia energii (na przykład rdzeń może zażądać przejścia w stan C6, ale firmware przy dużej intensywności wybudzeń CPU może pozostawić go w stanie C1).
    • Dla architektury ARM64 włączono wsparcie dla trybu leniwego wyprzedzenia zadań (PREEMPT_LAZY, lazy preemption), który odpowiada trybowi pełnego wyprzedzenia („full preemption”) dla zadań realtime (RR/FIFO/DEADLINE), ale opóźnia wyprzedzenie zwykłych zadań (SCHED_NORMAL) do granicy tiku.
    • Dla architektury ARM64 dodano wsparcie dla używania rozszerzeń SME (Scalable Matrix Extension), aktywowane przez parametr CONFIG_ARM64_SME.
    • Kontynuacja przeniesienia zmian z gałęzi Rust-for-Linux, związanych z użyciem języka Rust jako drugiego języka do rozwijania sterowników i modułów jądra (wsparcie dla Rust nie jest domyślnie aktywne i nie prowadzi do włączenia Rust do obowiązkowych zależności kompilacyjnych jądra). Dla modułów napisanych w języku Rust, udostępniono możliwość użycia configfs. Dodano abstrakcje niezbędne do opracowania sterowników graficznych. Rozszerzono możliwości modułów alloc, time, str, list, workqueue i page. Dodano wsparcie dla makra „assert!” w testach opartych na KUnit. Dodano zestaw abstrakcji do zarządzania częstotliwością CPU oraz korzystania z API związanych z zarządzaniem energochłonnością. Dodano wsparcie dla struktury danych ‘xarray’.
    • Dla architektury RISC-V przeniesiono implementację wywołania systemowego getrandom(), zoptymalizowaną przy pomocy mechanizmu vDSO (wirtualny dynamiczny wspólny obiekt), który umożliwia przeniesienie obsługi wywołania systemowego z jądra do przestrzeni użytkownika, unikając przełączeń kontekstu. W przeprowadzonych testach optymalizacja przyspieszyła uzyskiwanie liczb losowych 17 razy. Dla RISC-V wdrożono również wsparcie dla rozszerzeń wektorowych Zicbop, Zabha i Svinval, stosowanych w procesorach SiFive.
    • Dla architektury LoongArch limit liczby CPU w systemie zwiększono z 256 do 2048. Dodano wsparcie dla planisty zadań SCHED_MC (wielordzeniowy).
    • Dodano możliwość użycia gniazd Unix do przesyłania deskryptorów plików. Aby wyłączyć tę możliwość, aplikacje mogą użyć w setsockopt() flagi SO_PASSRIGHTS.
    • Udostępniono możliwość mapowania bufora pierścieniowego, stosowanego do śledzenia działania jądra, w pamięci przestrzeni użytkownika.
    • Obsługiwacze crash-dump, stosowane do formowania raportu o problemie po awaryjnym zakończeniu pracy jądra, mogą teraz wykorzystać klucze LUKS używane przez uszkodzone jądro do zapisania crash-dumpów na zaszyfrowanych FS.
    • Do systemu asynchronicznego wejścia/wyjścia io_uring dodano operację IORING_OP_PIPE do tworzenia kanłów nienazwanych, co jest podobne do wywołania systemowego pipe2, z wyjątkiem wsparcia dla stałych deskryptorów plików.
    • Dodano opcję wiersza poleceń jądra „rt_group_sched” do zarządzania włączeniem planisty wykonywania grup rzeczywistych zadań (SCHED_RR). Opcja jest podobna do ustawienia RT_GROUP_SCHED w Kconfig.
    • Dla urządzeń opartych na magistrali CXL (Compute Express Link), stosowanej do organizacji komunikacji o wysokiej prędkości pomiędzy CPU a urządzeniami pamięci, wdrożono wsparcie dla rozszerzeń RAS (Reliability, Availability, Serviceability), umożliwiających różne schematy wykrywania i korekcji błędów. CXL pozwala na podłączanie nowych obszarów pamięci, dostarczanych przez zewnętrzne urządzenia pamięci, i wykorzystywanie ich jako dodatkowych zasobów fizycznej przestrzeni adresowej w celu rozszerzenia systemowej pamięci operacyjnej (DDR) lub pamięci trwałej (PMEM).
    • Wymagana do budowy jądra minimalna wersja GCC dla wszystkich architektur została podniesiona do gałęzi GCC 8. Do odpowiedniej kompilacji potrzebna jest także wersja pakietu binutils co najmniej 2.30.
    • Usunięto systemowe wywołanie uselib(), które od dawna zostało uznane za przestarzałe; zamiast tego do współdzielenia bibliotek przez programy używane jest mmap().
  • Wirtualizacja i bezpieczeństwo
    • Dodano wstępną obsługę mechanizmu Intel TDX (Trusted Domain Extensions) do ochrony systemów gościnnych działających pod kontrolą hipernadzorcy KVM przed ingerencją i analizą ze strony administratora systemu hosta oraz atakami fizycznymi na sprzęt. Ochrona jest realizowana poprzez szyfrowanie pamięci. maszyn wirtualnych.
    • Dodano wirtualny sterownik TPM (Trusted Platform Module), umożliwiający wirtualnym maszynom interakcję z urządzeniami TPM emulowanymi przez moduł SVSM (Secure VM Service Module).
    • Wznowiono możliwość korzystania z wtyczki GCC randstruct, która randomizuje układ struktur danych na etapie kompilacji w celu utrudnienia eksploatacji luk bezpieczeństwa.
    • Dodano możliwość wykorzystania technologii IMA (Integrity Measurement Architecture) do sprawdzania integralności podczas uruchamiania nowych jąder za pomocą wywołania systemowego kexec.
    • Przeprowadzono prace mające na celu ograniczenie wpływu na wydajność korzystania z SELinux. Aby przyspieszyć działanie, dodano bufor z wynikami sprawdzeń dostępu do katalogów. Do zasad genfscon dodano możliwość używania masek.
    • W kodzie do interakcji z EFI dodano możliwość wbudowania sekcji SBAT (UEFI Secure Boot Advanced Targeting) z metadanymi o wycofanych wersjach komponentów rozruchowych.
    • W załadowanych modułach dokonano przekształcenia sekcji „.static_call_sites” w tryb tylko do odczytu po zakończeniu inicjalizacji.
    • Dla systemów 64-bitowych ARM w hyperwizorze KVM wdrożono obsługę zagnieżdżonej wirtualizacji (wyłączona domyślnie).
    • W hyperwizorze KVM ogłoszono stabilną obsługę architektury RISC-V.
  • Subsystem sieciowy
    • W skład wchodzi sterownik ovpn, który znacznie przyspiesza wydajność OpenVPN dzięki przeniesieniu operacji szyfrowania, przetwarzania pakietów i zarządzania kanałem komunikacyjnym na stronę jądra Linux. Sterownik pozwala pozbyć się kosztów związanych z przełączaniem kontekstu, umożliwia optymalizację działania dzięki bezpośredniemu dostępowi do wewnętrznych API jądra i eliminuje wolne przesyłanie danych między jądrem a przestrzenią użytkownika (szyfrowanie, deszyfrowanie i routowanie są realizowane przez moduł bez wysyłania ruchu do przetwornika w przestrzeni użytkownika).
    • W mechanizmie Device Memory TCP dodano obsługę wysyłania danych z pamięci urządzenia (TX path). Wcześniej, dla uproszczenia integracji Device Memory TCP w jądro, funkcjonalność ograniczała się jedynie do przyjmowania danych (RX path). Device Memory TCP umożliwia użycie gniazd sieciowych do bezpośredniego wysyłania zawartości pamięci urządzenia peryferyjnego przez sieć (tryb zero-copy), a także bezpośrednie umieszczanie zawartości pakietów sieciowych w obszarze pamięci urządzenia po stronie odbiorcy. Przekazywane w pakietach dane są przesyłane od karty sieciowej do pamięci urządzenia peryferyjnego (DMABUF), na przykład do pamięci wideo GPU lub z pamięci urządzenia bezpośrednio do karty sieciowej, omijając CPU, a nagłówki pakietów trafiają do zwykłych buforów jądra.
    • Umożliwiono wysyłanie zawartości core-dumpów przez gniazdo AF_UNIX, co pozwala na tworzenie w przestrzeni użytkownika bardziej bezpiecznych przetworników core-dumpów, niezwiązanych z wywoływaniem przez jądro procesów uprzywilejowanych.
    • Usunięto wsparcie dla protokołu sieciowego DCCP (Datagram Congestion Control Protocol), który nie zdobył popularności i przez pięć lat pozostaje w jądrze bez wsparcia. Usunięcie DCCP z jądra usunie przeszkody utrudniające przerobienie struktury danych inet_connection_sock w celu poprawy efektywności działania stosu TCP. Zachowano wsparcie dla modułów netfilter do filtrowania pakietów DCCP.
    • Aby uprościć obsługę błędów podczas korzystania z gniazd SO_PEERPIDFD, jądro może teraz przekazywać pidfd dla już zakończonych procesów (pidfd łączy się z konkretnymi procesami i, w przeciwieństwie do pid, nie jest ponownie przypisywane).
    • Za pomocą BPF można teraz tworzyć przetwarzacze zarządzania kolejkami pakietów w stosie sieciowym (qdiscs), aby wpłynąć na kolejność przetwarzania pakietów sieciowych.
    • W sieciowej systemie plików AFS wykorzystano GSSAPI (Generic Security Services API) do zarządzania szyfrowaniem połączeń z serwerami YFS i OpenAFS.
    • Wprowadzono wiele optymalizacji. Przeorganizowano blokady dla tablic trasowania IPv6 (niektóre operacje z trasami są teraz wykonywane do 3 razy szybciej). Przyspieszono obliczanie sum kontrolnych crc32c. Silnik GRO dla tunelowanego ruchu UDP przyspieszył o 10%. Udoskonalono automatyczną konfigurację bufora odbierającego dla TCP i zwiększono domyślne limity (w przeprowadzonych testach przepustowość pojedynczych strumieni przez kanał 200Gbs wzrosła o 60%).
    • W Netfilter dodano możliwość użycia masek w nazwach urządzeń sieciowych używanych w netdev i flowtable. Do infrastruktury nft trace zintegrowano informacje o śledzeniu połączeń (conntrack). Przyspieszono wydobywanie tabel śledzenia połączeń (conntrack) przez procfs.
  • Sprzęt
    • Dodano wsparcie dla przeniesienia obliczeń strumieni audio na stronę urządzeń audio z interfejsem USB (USB audio offload). Zmiana ta pozwala znacząco zmniejszyć zużycie energii w przenośnych urządzeniach, kontynuując przetwarzanie strumienia audio podczas gdy pozostała część systemu jest w trybie uśpienia. Wcześniej w jądrach dla platformy Android dostarczano specyficzną implementację offload przetwarzania dźwięku dla urządzeń USB, a teraz w głównym jądrze pojawiła się uniwersalna realizacja, z której mogą korzystać wszelkie projekty.
    • Kontynuacja integracji komponentów sterownika Nova dla GPU NVIDIA, wyposażonych w oprogramowanie GSP, stosowane od serii NVIDIA GeForce RTX 2000 opartej na mikroarchitekturze Turing. Sterownik został napisany w języku Rust. Oprócz dodanego w poprzedniej wersji komponentu nova-core, zapewniającego podstawowy poziom abstrakcji nad interfejsami programowania oprogramowania GSP, w wersji 6.16 dołączono wczesną implementację sterownika DRM nova-drm (Direct Rendering Manager) do interakcji z GPU z przestrzeni użytkownika.
    • Rozpoczęto proces integracji sterownika DRM Asahi dla GPU Apple AGX, stosowanych w chipach Apple Silicon. Sterownik został napisany w Rust. Na tym etapie do jądra włączono jedynie pliki nagłówkowe z UAPI sterownika Asahi, potrzebne do Mesa, a główny kod sterownika Asahi zostanie zintegrowany później.
    • W sterowniku Nouveau dodano wsparcie dla GPU NVIDIA z rodziny Hopper i Blackwell.
    • Kontynuacja prac nad sterownikiem drm (Direct Rendering Manager) Xe dla GPU opartych na architekturze Intel Xe, używanej w kartach graficznych Intel z rodziny Arc i zintegrowanej grafice, począwszy od procesorów Tiger Lake. Dodano możliwość użycia różnych plików oprogramowania dla różnych rodzin GPU Intel.
    • W sterowniku AMDGPU wprowadzono wsparcie dla mechanizmu „usermode queue”, pozwalającego na tworzenie własnych kolejek zadań w przestrzeni użytkownika oraz przesyłanie ich bezpośrednio do GPU bez kontaktu z planistą w jądrze. Wsparcie dla „usermode queue” włączono dla GPU Navi 4X oraz GFX 12.
    • Dodano wsparcie dla systemów dźwiękowych Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 i CS48L32, Everest Semiconductor ES8375 i ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 i Rockchip SAI, a także nowych platform Intel AVS.
    • Dodano wsparcie dla platform ARM, SoC i urządzeń: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
    • Usunięto sterownik dla kart przechwytywania wideo na chipach STA2X11.

Jednocześnie latynoamerykańska Fundacja Wolnego Oprogramowania stworzyła całkowicie wolną wersję jądra 6.16 — Linux-libre 6.16-gnu, oczyszczoną z elementów oprogramowania układowego i sterowników zawierających komponenty lub fragmenty kodu, których zastosowanie jest ograniczone przez producenta. W wersji 6.16 zneutralizowano ładowanie blobów w nowych sterownikach Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx i MediaTek 25Gb Ethernet. Przeprowadzono czyszczenie nazw blobów w plikach dts (devicetree) dla chipów ARM Qualcomm i MediaTek. Zaktualizowano kod czyszczenia blobów w sterownikach Nova Core, Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k i ath12k wifi, Texas Instruments tas2781 oraz Renesas R-Car gen4 PCIe.

Źródło: opennet.ru

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