Wydanie jądra Linux 6.3

Po dwóch miesiącach pracy Linus Torvalds zaprezentował wydanie jądra Linux 6.3. Wśród najbardziej zauważalnych zmian: oczyszczenie przestarzałych platform ARM i sterowników graficznych, kontynuacja integracji wsparcia dla języka Rust, narzędzie hwnoise, wsparcie dla struktur drzewiastych red-black w BPF, tryb BIG TCP dla IPv4, wbudowany test wydajności Dhrystone, możliwość zakazu wykonywania w memfd, wsparcie dla tworzenia sterowników HID, w Btrfs przyjęto zmiany mające na celu zmniejszenie fragmentacji grup bloków.

Nowa wersja zawiera 15637 poprawek od 2055 programistów; rozmiar łatki - 76 MB (zmiany dotyczyły 14296 plików, dodano 1023183 linie kodu, usunięto 883103 linie). Dla porównania w poprzedniej wersji zaproponowano 16843 poprawek od 2178 programistów; rozmiar łatki - 62 MB. Około 39% wszystkich zmian w jądrze 6.3 dotyczy sterowników urządzeń, około 15% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 10% dotyczy stosu sieciowego, 5% - systemów plików, a 3% z wewnętrznymi podsystemami jądra.

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

  • Pamięć i usługi systemowe
    • Wykonano znaczną czyszczenie kodu związanego ze starymi i nieużywanymi platformami ARM, co pozwoliło na skrócenie rozmiaru kodu źródłowego jądra o 150 tysięcy linii. Usunięto ponad 40 starych platform ARM.
    • Zrealizowano możliwość tworzenia sterowników dla urządzeń wejściowych z interfejsem HID (Human Interface Device), realizowanych w formie programów BPF.
    • Kontynuowano przenoszenie z gałęzi Rust-for-Linux dodatkowej funkcjonalności związanej z wykorzystaniem języka Rust jako drugiego języka do tworzenia sterowników i modułów jądra. Wsparcie dla Rust nie jest aktywne domyślnie i nie prowadzi do włączenia Rust w obowiązkowe zależności kompilacji jądra. Funkcjonalność zaproponowana w poprzednich wydaniach została rozszerzona o wsparcie dla typów Arc (implementacja wskaźników z licznikami referencji), ScopeGuard (czyniący czyszczenie przy wyjściu poza zakres widoczności) oraz ForeignOwnable (umożliwiający przenoszenie wskaźników między kodem w C a Rust). Z pakietu 'alloc' usunięto moduł 'borrow' (typ 'Cow' i typ 'ToOwned'). Zauważono, że stan wsparcia dla Rust w jądrze jest już bliski rozpoczęcia przyjmowania pierwszych modułów napisanych w Rust.
    • W User-mode Linux (uruchamianie jądra jako procesu użytkownika) na systemach x86-64 zaimplementowano wsparcie dla kodu pisanego w języku Rust. Dodano wsparcie dla kompilacji User-mode Linux za pomocą clang z włączeniem optymalizacji na etapie łączenia (LTO).
    • Dodano narzędzie hwnoise do monitorowania opóźnień spowodowanych specyfiką działania sprzętu. Określane są odchylenia czasu wykonania operacji (jitter) przy wyłączonej obsłudze przerwań, przekraczające jedną mikrosekundę na 10 minut obliczeń.
    • Dodano moduł jądra z realizacją testu wydajności Dhrystone, który można wykorzystać do oceny wydajności CPU w konfiguracjach bez komponentów przestrzeni użytkownika (na przykład na etapie portowania dla nowych SoC, na których zrealizowano jedynie załadowanie jądra).
    • Dodano parametr wiersza poleceń jądra „cgroup.memory=nobpf”, wyłączający uwzględnianie zużycia pamięci dla programów BPF, co może być przydatne dla systemów z izolowanymi kontenerami.
    • Dla programów BPF zaproponowano realizację struktury danych red-black tree, w której używane są kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) zamiast wprowadzania nowego typu mapowania.
    • W mechanizmie ponownie uruchamianych sekwencji (rseq, restartable sequences) dodano możliwość przekazywania procesom identyfikatorów równoległego wykonania (memory-map concurrency ID), identyfikowanych z numerem CPU. Rseq zapewnia środki do szybkiego atomowego wykonania operacji, które w przypadku przerwania innym wątkiem są czyszczone i podejmowana jest ponowna próba wykonania.
    • Na procesorach ARM zapewniono wsparcie dla instrukcji SME 2 (Scalable Matrix Extension).
    • Dla architektur s390x i RISC-V RV64 zaimplementowano wsparcie dla mechanizmu „BPF trampoline”, umożliwiającego minimalizację kosztów związanych z przekazywaniem wywołań między jądrem a programami BPF.
    • Na systemach z procesorami opartymi na architekturze RISC-V zaimplementowano wykorzystanie instrukcji „ZBB” do przyspieszenia operacji na ciągach.
    • Dla systemów opartych na architekturze zestawu instrukcji LoongArch (zastosowanej w procesorach Loongson 3 5000 i realizującej nowy RISC ISA, podobny do MIPS i RISC-V) zaimplementowano wsparcie dla randomizacji adresowego przestrzeni jądra (KASLR), zmiany rozmieszczenia jądra w pamięci (relocation), sprzętowych punktów zatrzymania i mechanizmu kprobe.
    • W mechanizmie DAMOS (Schematy operacyjne oparte na monitorowaniu dostępu do danych) wprowadzono wsparcie dla filtrów, które umożliwiają wykluczenie z przetwarzania określonych obszarów pamięci.
    • W minimalnej standardowej bibliotece C Nolibc dodano wsparcie dla architektury s390 oraz zestawu instrukcji Arm Thumb1 (oprócz wsparcia dla ARM, AArch64, i386, x86_64, RISC-V i MIPS).
    • Przeprowadzono optymalizację objtool, aby przyspieszyć budowę jądra oraz zmniejszyć szczytowe zużycie pamięci podczas kompilacji (podczas budowy jądra w trybie 'allyesconfig' nie występują już problemy z wymuszonym zakończeniem procesów na systemach z 32 GB RAM).
    • Zaprzestano wsparcia dla budowy jądra kompilatorem Intel ICC, który od dłuższego czasu nie działał, a nikt nie wyraził chęci do jego naprawy.
  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • W tmpfs wprowadzono wsparcie dla mapowania identyfikatorów użytkowników zamontowanych systemów plików, które są stosowane do kojarzenia plików określonego użytkownika na zamontowanej obcej partycji z innym użytkownikiem w bieżącym systemie.
    • W Btrfs w celu zmniejszenia fragmentacji grup bloków zapewniono segregację extents według rozmiaru przy alokacji bloków, tj. każda grupa bloków jest teraz ograniczona do małych (do 128 KB), średnich (do 8 MB) i dużych extents. Przeprowadzono refaktoryzację implementacji raid56. Przepisano kod do weryfikacji sum kontrolnych. Wprowadzono optymalizacje wydajności, które przyspieszyły operację send do 10 razy dzięki buforowaniu utime dla katalogów i wykonywaniu poleceń tylko w razie potrzeby. Przyspieszono wykonywanie operacji fiemap trzykrotnie przez pominięcie weryfikacji odwołań dla wspólnych danych (migawek). Operacje na metadanych przyspieszono o 10% dzięki optymalizacji wyszukiwania kluczy w strukturach b-drzew.
    • Zwiększono wydajność systemu plików ext4 dzięki możliwości równoczesnego wykonywania operacji z użyciem bezpośredniego wejścia/wyjścia przez wiele procesów w z góry przydzielonych blokach, stosując wspólne blokady inode zamiast blokady wyłącznej.
    • W f2fs podjęto prace mające na celu poprawę czytelności kodu. Rozwiązano istotne problemy związane z atomową zapisem oraz nową pamięcią podręczną extents.
    • W systemie plików EROFS (Enhanced Read-Only File System), przeznaczonym do użycia w partycjach dostępnych w trybie tylko do odczytu, zaimplementowano możliwość wiązania z CPU operacji rozpakowywania skompresowanej zawartości plików, aby zredukować opóźnienia w dostępie do danych.
    • Do planisty wejścia/wyjścia BFQ dodano wsparcie dla zaawansowanych nośników na dyskach wirujących, takich jak te z wieloma oddzielnie zarządzanymi napędami głowic (Multi Actuator).
    • Do realizacji klienta i serwera NFS dodano wsparcie dla szyfrowania danych z wykorzystaniem algorytmu AES-SHA2.
    • W subsystemie FUSE (Filesystems In User Space) dodano wsparcie dla mechanizmu rozszerzania zapytań, umożliwiającego dodanie dodatkowych informacji do zapytania. Na bazie tej możliwości zrealizowano dodawanie identyfikatorów grup do zapytania FS, niezbędnych do uwzględnienia praw dostępu podczas tworzenia obiektów w FS (create, mkdir, symlink, mknod).
  • Wirtualizacja i bezpieczeństwo
    • W hipernadzorze KVM dla systemów x86 dodano wsparcie dla rozszerzonych hipervywołań Hyper-V oraz zapewniono ich przekazywanie do obsługiwacza działającego w środowisku hosta w przestrzeni użytkownika. Zmiana ta umożliwiła wsparcie dla zagnieżdżonego uruchamiania hipernadzorcy Hyper-V.
    • W KVM uproszczono ograniczenie dostępu systemu gościa do zdarzeń PMU (Performance Monitor Unit) związanych z pomiarem wydajności.
    • Do mechanizmu memfd, pozwalającego zidentyfikować obszar pamięci za pomocą przekazywanego między procesami deskryptora pliku, dodano możliwość tworzenia obszarów, w których zabronione jest wykonywanie kodu (non-executable memfd) i w których nie można w przyszłości ustawić praw do wykonania.
    • Dodano nową operację prctl PR_SET_MDWE, blokującą próby włączenia praw dostępu do pamięci, które jednocześnie zezwalają na zapis i wykonanie.
    • Dodano i domyślnie włączono ochronę przed atakami klasy Spectre, wdrożoną na podstawie automatycznego trybu IBRS (Enhanced Indirect Branch Restricted Speculation) zaproponowanego w procesorach AMD Zen 4, który umożliwia adaptacyjne zezwalanie i zabranianie spekulatywnego wykonania instrukcji podczas obsługi przerwań, wywołań systemowych i zmian kontekstu. Zaproponowana ochrona prowadzi do niższych kosztów związanych w porównaniu do zabezpieczenia Retpoline.
    • Usunięto lukę, która umożliwia obejście zabezpieczeń przed atakami Spectre v2 w przypadku użycia technologii wielowątkowości (SMT lub Hyper-Threading), wywołaną dezaktywacją mechanizmu STIBP (Single Thread Indirect Branch Predictors) podczas wyboru trybu zabezpieczeń IBRS.
    • Dla systemów opartych na architekturze ARM64 dodano nowy cel budowania „virtconfig”, przy wyborze którego aktywowany jest tylko minimalny zestaw komponentów jądra potrzebnych do bootowania w systemach wirtualizacji.
    • Dla architektury m68k dodano wsparcie dla filtrowania wywołań systemowych za pomocą mechanizmu seccomp.
    • Dodano wsparcie dla wbudowanych w procesory AMD Ryzen urządzeń CRB TPM2 (Command Response Buffer) opartych na technologii Microsoft Pluton.
  • Subsystem sieciowy
    • Dodano interfejs netlink do konfiguracji podpoziomu zapobiegania kolizjom PLCA (Physical Layer Collision Avoidance), zdefiniowanego w specyfikacji IEEE 802.3cg-2019 i stosowanego w sieciach Ethernet 802.3cg (10Base-T1S), zoptymalizowanych do podłączenia urządzeń Internetu Rzeczy oraz systemów przemysłowych. Zastosowanie PLCA pozwala na zwiększenie wydajności w sieciach Ethernet o wspólnym medium.
    • Zakończono wsparcie dla API „wireless extensions” do zarządzania interfejsami bezprzewodowymi WiFi 7 (802.11be), ponieważ API to nie obejmuje wszystkich niezbędnych ustawień. Przy próbie użycia API „wireless extensions”, które nadal jest wspierane jako warstwa emulacyjna, dla większości aktualnych urządzeń wyświetlane będzie teraz ostrzeżenie.
    • Przygotowano szczegółową dokumentację do API netlink (dla programistów jądra i dla programistów aplikacji w przestrzeni użytkownika). Implementacja narzędzia ynl-gen-c do generowania kodu C na podstawie specyfikacji YAML protokołu Netlink.
    • Dodano wsparcie opcji IP_LOCAL_PORT_RANGE do gniazd sieciowych dla uproszczenia konfiguracji wyjściowych połączeń przez translatory adresów bez używania SNAT. Przy użyciu jednego adresy IP na kilku hostach IP_LOCAL_PORT_RANGE umożliwia wykorzystanie na każdym hoście własnego zakresu wyjściowych portów sieciowych, a na bramie przekierowanie pakietów na podstawie numerów portów.
    • Dla MPTCP (MultiPath TCP) wprowadzono możliwość obsługi mieszanych strumieni, w których stosowane są protokoły IPv4 i IPv6. MPTCP jest rozszerzeniem protokołu TCP, które umożliwia organizację pracy połączenia TCP z równoczesną dostawą pakietów przez wiele tras za pośrednictwem różnych interfejsów sieciowych przypisanych do różnych adresów IP.
    • Dla IPv4 wprowadzono możliwość korzystania z rozszerzenia BIG TCP, które pozwala zwiększyć maksymalny rozmiar pakietu TCP do 4 GB w celu optymalizacji pracy szybkich wewnętrznych sieci datacenter. Tego rodzaju zwiększenie rozmiaru pakietu przy 16-bitowym rozmiarze pola w nagłówku osiągane jest poprzez implementację 'jumbo'-pakietów, których rozmiar w nagłówku IP ustawiany jest na 0, a rzeczywisty rozmiar przekazywany w osobnym 32-bitowym polu w oddzielnym dołączonym nagłówku.
    • Dodano nowy parametr sysctl default_rps_mask, za pomocą którego można ustawić domyślną konfigurację RPS (Receive Packet Steering), odpowiedzialną za rozdzielanie przetwarzania ruchu przychodzącego na rdzenia CPU na poziomie obsługi przerwań.
    • Zaprzestano wsparcia dla dyscyplin przetwarzania kolejek ograniczających ruch CBQ (class-based queuing), ATM (ATM virtual circuits), dsmark (differentiated service marker), tcindex (traffic-control index) i RSVP (resource reservation protocol). Te dyscypliny przez długi czas pozostawały w zaniedbanym stanie i nie znaleziono chętnych do kontynuacji ich wsparcia.
  • Sprzęt
    • Usunięto wszystkie graficzne sterowniki oparte na DRI1: i810 (stare zintegrowane karty graficzne Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128, w tym karty Rage Fury, XPERT 99 i XPERT 128), savage (GPU S3 Savage), sis (GPU Crusty SiS), tdfx (3dfx Voodoo) i via (VIA IGP), które zostały uznane za przestarzałe w 2016 roku i nie są wspierane w Mesa od 2012 roku.
    • Usunięto przestarzałe sterowniki ramki bufora (fbdev) omap1, s3c2410, tmiofb i w100fb.
    • Dodano sterownik DRM dla zintegrowanych w procesorze Intel Meteor Lake (14. generacja) jednostek VPU (Versatile Processing Unit), przeznaczonych do przyspieszania operacji związanych z komputerowym widzeniem i uczeniem maszynowym. Sterownik został zrealizowany przy użyciu podsystemu 'accel', który ma na celu zapewnienie wsparcia dla akceleratorów obliczeniowych, które mogą być dostarczane zarówno w formie osobnych ASIC, jak i bloków IP w obrębie SoC i GPU.
    • W sterowniku i915 (Intel) rozszerzono wsparcie dla dyskretnych kart graficznych Intel Arc (DG2/Alchemist), wprowadzono wstępną obsługę GPU Meteor Lake oraz dodano wsparcie dla GPU Intel Xe HP 4tile.
    • W sterowniku amdgpu dodano wsparcie dla technologii AdaptiveSync oraz możliwość korzystania z trybu zabezpieczeń wyświetlanych danych na wielu monitorach (Secure Display). Zaktualizowano wsparcie dla DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x oraz DP 2.1.
    • W sterowniku msm (GPU Qualcomm Adreno) dodano wsparcie dla platform SM8350, SM8450, SM8550, SDM845 oraz SC8280XP.
    • W sterowniku Nouveau zaprzestano wsparcia dla starych wywołań ioctl.
    • W sterowniku etnaviv dodano eksperymentalne wsparcie dla NPU VerSilicon (VeriSilicon Neural Network Processor).
    • Zrealizowano sterownik pata_parport dla dysków IDE podłączanych za pośrednictwem portu równoległego. Dodany sterownik pozwolił usunąć stary sterownik PARIDE z jądra oraz zmodernizować system ATA. Ograniczeniem nowego sterownika jest niemożność jednoczesnego podłączenia drukarki i dysku przez port równoległy.
    • Dodano sterownik ath12k dla kart bezprzewodowych na chipach Qualcomm z wsparciem dla Wi-Fi 7. Dodano wsparcie dla kart bezprzewodowych na chipach RealTek RTL8188EU.
    • Dodano wsparcie dla 46 płyt z procesorami opartymi na architekturze ARM64, w tym Samsung Galaxy Tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, a także urządzenia oparte na SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 i SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 i RK3328, TI K3 (AM642/AM654/AM68/AM69).

Jednocześnie latynoamerykańska Fundacja Wolnego Oprogramowania utworzyła w pełni wolną wersję jądra 6.3 – Linux-libre 6.3-gnu, oczyszczoną z elementów firmwares i sterowników, które zawierały komponenty lub fragmenty kodu, których wykorzystanie jest ograniczone przez producenta. W wydaniu 6.3 przeprowadzono czyszczenie blobów w nowych sterownikach ath12k, aw88395 oraz peb2466, a także w nowych plikach device tree dla urządzeń qcom opartych na architekturze AArch64. Zaktualizowano kod czyszczenia blobów w sterownikach i podsystemach amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110 oraz w sterownikach dla kart DVB z programowym dekodowaniem i w prekompilowanych plikach BPF. Zaprzestano czyszczenia w sterownikach mga, r128, tm6000, cpia2 oraz r8188eu, ponieważ zostały one usunięte z jądra. Ulepszono czyszczenie blobów w sterowniku i915.

Ź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