Wydanie jądra Linuksa 6.3

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 6.3. Wśród najbardziej znaczących zmian: oczyszczenie starszych platform ARM i sterowników graficznych, dalsza integracja obsługi języka Rust, narzędzie hwnoise, obsługa czerwono-czarnych struktur drzewiastych w BPF, tryb BIG TCP dla IPv4, wbudowany test porównawczy Dhrystone, możliwość wyłączenia wykonanie w memfd, obsługa tworzenia sterowników HID przy użyciu BPF, wprowadzono zmiany w Btrfs w celu zmniejszenia fragmentacji grup bloków.

Nowa wersja zawiera 15637 2055 poprawek od 76 programistów; rozmiar poprawki - 14296 MB (zmiany dotyczyły 1023183 plików, dodano 883103 linii kodu, usunięto 16843 linii). Dla porównania, poprzednia wersja oferowała 2178 62 poprawek od 39 programistów; Rozmiar poprawki wynosi 6.3 MB. Około 15% wszystkich zmian wprowadzonych w jądrze 10 dotyczy sterowników urządzeń, około 5% zmian dotyczy aktualizacji kodu specyficznego dla architektur sprzętowych, 3% dotyczy stosu sieciowego, XNUMX% dotyczy systemów plików, a XNUMX% jest związanych z wewnętrznymi podsystemami jądra.

Główne innowacje w jądrze 6.3:

  • Usługi pamięci i systemu
    • Dokonano istotnego oczyszczenia kodu związanego ze starymi i nieużywanymi płytami ARM, co umożliwiło zmniejszenie rozmiaru kodu źródłowego jądra o 150 tysięcy linii. Usunięto ponad 40 starych platform ARM.
    • Zaimplementowano możliwość tworzenia sterowników dla urządzeń wejściowych z interfejsem HID (Human Interface Device), zaimplementowanych w postaci programów BPF.
    • Kontynuowano transfer 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. Obsługa Rusta nie jest domyślnie włączona i nie powoduje uwzględnienia Rusta jako wymaganej zależności kompilacji jądra. Funkcjonalność oferowana w poprzednich wersjach została rozszerzona o obsługę typów Arc (implementacja wskaźników z licznikiem referencji), ScopeGuard (czyszczenie w przypadku wyjścia poza zakres) i ForeignOwnable (zapewnia przenoszenie wskaźników pomiędzy kodem C i Rust). Moduł „pożycz” (typ „Krowa” i cecha „ToOwned”) został usunięty z pakietu „alloc”. Należy zauważyć, że stan obsługi Rusta w jądrze jest już bliski rozpoczęcia akceptowania pierwszych modułów napisanych w Rust do jądra.
    • Linux w trybie użytkownika (uruchamiający jądro jako proces użytkownika) na systemach x86-64 implementuje obsługę kodu napisanego w języku Rust. Dodano obsługę tworzenia systemu Linux w trybie użytkownika przy użyciu clang z włączoną optymalizacją czasu łącza (LTO).
    • Dodano narzędzie hwnoise do śledzenia opóźnień powodowanych przez sprzęt. Odchylenia w czasie wykonywania operacji (jitter) wyznaczane są przy wyłączonej obsłudze przerwań, przekraczające jedną mikrosekundę na 10 minut obliczeń.
    • Dodano moduł jądra implementujący test porównawczy Dhrystone, którego można użyć do oceny wydajności procesora w konfiguracjach bez komponentów przestrzeni użytkownika (na przykład na etapie przenoszenia nowych SoC, które implementują jedynie ładowanie jądra).
    • Dodano parametr wiersza poleceń jądra „cgroup.memory=nobpf”, który wyłącza rozliczanie zużycia pamięci dla programów BPF, co może być przydatne w systemach z izolowanymi kontenerami.
    • Dla programów BPF proponowana jest implementacja czerwono-czarnej struktury danych drzewa, która wykorzystuje kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) zamiast dodawania nowego typu mapowania.
    • Mechanizm sekwencji restartowalnych (rseq, sekwencje restartowalne) dodał możliwość przesyłania identyfikatorów wykonania równoległego (ID współbieżności mapy pamięci) do procesów identyfikowanych numerem procesora. Rseq umożliwia szybkie, atomowe wykonywanie operacji, które w przypadku przerwania przez inny wątek są czyszczone i podejmowane ponownie.
    • Procesory ARM obsługują instrukcje SME 2 (Scalable Matrix Extension).
    • Dla architektur s390x i RISC-V RV64 zaimplementowano obsługę mechanizmu „BPF trampolina”, który pozwala zminimalizować narzut podczas przesyłania wywołań pomiędzy jądrem a programami BPF.
    • W systemach z procesorami opartymi na architekturze RISC-V zaimplementowano użycie instrukcji „ZBB” w celu przyspieszenia operacji na łańcuchach.
    • Dla systemów opartych na architekturze zestawu instrukcji LoongArch (stosowanej w procesorach Loongson 3 5000 i implementujących nowy RISC ISA, podobny do MIPS i RISC-V), obsługa randomizacji przestrzeni adresowej jądra (KASLR), zmiany w rozmieszczeniu pamięci jądra (relokacja ), w punktach sprzętowych zaimplementowano mechanizm stop i kprobe.
    • Mechanizm DAMOS (Data Access Monitoring-Based Operation Schemes), który umożliwia zwalnianie pamięci na podstawie częstotliwości dostępu do pamięci, obsługuje filtry wykluczające określone obszary pamięci z przetwarzania w DAMOS.
    • Minimalna standardowa biblioteka C firmy Nolibc zapewnia obsługę architektury s390 i zestawu instrukcji Arm Thumb1 (oprócz obsługi ARM, AArch64, i386, x86_64, RISC-V i MIPS).
    • Objtool został zoptymalizowany w celu przyspieszenia montażu jądra i zmniejszenia szczytowego zużycia pamięci podczas składania (przy budowaniu jądra w trybie „allyesconfig” nie ma teraz problemów z wymuszonym zakończeniem procesów na systemach z 32 GB RAM).
    • Zakończono obsługę montażu jądra przez kompilator Intel ICC, który od dłuższego czasu nie działał i nikt nie wyraził chęci naprawienia tego.
  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • tmpfs implementuje obsługę mapowania identyfikatorów użytkowników zamontowanych systemów plików, używaną do dopasowania plików konkretnego użytkownika na zamontowanej partycji zagranicznej z innym użytkownikiem w bieżącym systemie.
    • W Btrfs, aby zmniejszyć fragmentację grup bloków, przy przydzielaniu bloków zakresy są dzielone według rozmiaru, tj. dowolna grupa bloków jest teraz ograniczona do małych (do 128 KB), średnich (do 8 MB) i dużych rozmiarów. Implementacja raid56 została zrefaktoryzowana. Kod sprawdzania sum kontrolnych został przerobiony. Dokonano optymalizacji wydajności, aby przyspieszyć operację wysyłania nawet 10-krotnie, buforując czas utime dla katalogów i wykonując polecenia tylko wtedy, gdy jest to konieczne. Operacje na Fiemap są teraz trzy razy szybsze dzięki pominięciu sprawdzania linków zwrotnych dla udostępnionych danych (migawek). Operacje na metadanych zostały przyspieszone o 10% poprzez optymalizację wyszukiwania kluczy w strukturach b-drzewa.
    • Wydajność systemu plików ext4 została poprawiona, umożliwiając wielu procesom jednoczesne wykonywanie bezpośrednich operacji we/wy na wstępnie przydzielonych blokach przy użyciu współdzielonych blokad i-węzłów zamiast blokad wyłącznych.
    • W f2fs włożono wiele pracy w celu poprawy czytelności kodu. Rozwiązano ważne problemy związane z zapisami atomowymi i nową pamięcią podręczną zakresu.
    • System plików EROFS (Enhanced Read-Only File System), zaprojektowany do użytku na partycjach tylko do odczytu, implementuje możliwość powiązania operacji dekompresji zawartości skompresowanych plików z procesorem, aby zmniejszyć opóźnienia podczas uzyskiwania dostępu do danych.
    • Harmonogram we/wy BFQ dodał obsługę zaawansowanych napędów dyskowych, takich jak te, które korzystają z wielu oddzielnie sterowanych napędów głównych (Multi Actuators).
    • Do implementacji klienta i serwera NFS dodano obsługę szyfrowania danych przy użyciu algorytmu AES-SHA2.
    • Do podsystemu FUSE (Filesystems In User Space) dodano obsługę mechanizmu rozwijania zapytań, umożliwiając umieszczenie w zapytaniu dodatkowych informacji. W oparciu o tę funkcjonalność możliwe jest dodanie do żądania FS identyfikatorów grupowych, które są niezbędne do uwzględnienia praw dostępu podczas tworzenia obiektów w FS (create, mkdir, symlink, mknod).
  • Wirtualizacja i bezpieczeństwo
    • Hiperwizor KVM dla systemów x86 dodał obsługę rozszerzonych hiperwywołań Hyper-V i zapewnił ich przekazywanie do procedury obsługi działającej w środowisku hosta w przestrzeni użytkownika. Zmiana umożliwiła wdrożenie obsługi zagnieżdżonego uruchamiania hiperwizora Hyper-V.
    • KVM ułatwia ograniczanie dostępu gości do zdarzeń PMU (Performance Monitor Unit) związanych z pomiarem wydajności.
    • Mechanizm memfd, który pozwala na identyfikację obszaru pamięci poprzez deskryptor pliku przesyłany pomiędzy procesami, dodał możliwość tworzenia obszarów, w których wykonanie kodu jest zabronione (memfd niewykonywalny) i nie ma możliwości ustawienia praw wykonywania w przyszłości .
    • Dodano nową operację prctl PR_SET_MDWE, która blokuje próby włączenia praw dostępu do pamięci, które jednocześnie umożliwiają zapis i wykonanie.
    • Dodano i domyślnie włączono ochronę przed atakami klasy Spectre, opartą na automatycznym trybie IBRS (Enhanced Indirect Branch Restricted Speculation) proponowanym w procesorach AMD Zen 4, który umożliwia adaptacyjne zezwalanie i wyłączanie spekulatywnego wykonywania instrukcji podczas przetwarzania przerwań, wywołań systemowych i przełączniki kontekstu. Proponowane zabezpieczenie zapewnia niższy narzut w porównaniu z zabezpieczeniem Retpoline.
    • Naprawiono lukę pozwalającą na ominięcie ochrony przed atakami Spectre v2 przy wykorzystaniu technologii jednoczesnej wielowątkowości (SMT lub Hyper-Threading) i spowodowaną wyłączeniem mechanizmu STIBP (Single Thread Indirect Branch Predictors) przy wyborze trybu ochrony IBRS.
    • Dla systemów opartych na architekturze ARM64 dodano nowy cel montażu „virtconfig”, po wybraniu aktywowany jest tylko minimalny zestaw komponentów jądra wymaganych do uruchomienia w systemach wirtualizacyjnych.
    • Dla architektury m68k dodano obsługę filtrowania wywołań systemowych za pomocą mechanizmu seccomp.
    • Dodano obsługę urządzeń CRB TPM2 (Bufor odpowiedzi poleceń) wbudowanych w procesory AMD Ryzen, opartych na technologii Microsoft Pluton.
  • Podsystem sieciowy
    • Dodano interfejs netlink umożliwiający konfigurację podwarstwy PLCA (Physical Layer Collision Unikanie), zdefiniowanej w specyfikacji IEEE 802.3cg-2019 i wykorzystywanej w sieciach Ethernet 802.3cg (10Base-T1S) zoptymalizowanych do łączenia urządzeń Internetu Rzeczy i systemów przemysłowych. Zastosowanie PLCA poprawia wydajność w sieciach Ethernet ze współdzielonymi mediami.
    • Zakończono obsługę interfejsu API „rozszerzenia bezprzewodowe” do zarządzania interfejsami bezprzewodowymi Wi-Fi 7 (802.11be), ponieważ ten interfejs API nie obejmuje wszystkich niezbędnych ustawień. Podczas próby użycia interfejsu API „rozszerzeń bezprzewodowych”, który jest nadal obsługiwany jako warstwa emulowana, w przypadku większości obecnych urządzeń zostanie wyświetlone ostrzeżenie.
    • Przygotowano szczegółową dokumentację dotyczącą interfejsu API netlink (dla głównych programistów i twórców aplikacji w przestrzeni użytkownika). Zaimplementowano narzędzie ynl-gen-c do generowania kodu C w oparciu o specyfikacje YAML protokołu Netlink.
    • Do gniazd sieciowych dodano obsługę opcji IP_LOCAL_PORT_RANGE, aby uprościć konfigurację połączeń wychodzących poprzez tłumacze adresów bez użycia SNAT. W przypadku używania jednego adresu IP na kilku hostach, IP_LOCAL_PORT_RANGE umożliwia użycie innego zakresu wychodzących portów sieciowych na każdym hoście i przekazywanie pakietów w oparciu o numery portów na bramie.
    • Dla protokołu MPTCP (MultiPath TCP) zaimplementowano możliwość przetwarzania strumieni mieszanych z wykorzystaniem protokołów IPv4 i IPv6. MPTCP jest rozszerzeniem protokołu TCP do organizowania działania połączenia TCP z jednoczesnym dostarczaniem pakietów kilkoma trasami przez różne interfejsy sieciowe powiązane z różnymi adresami IP.
    • Dla protokołu IPv4 istnieje możliwość wykorzystania rozszerzenia BIG TCP, które umożliwia zwiększenie maksymalnego rozmiaru pakietu TCP do 4 GB w celu optymalizacji działania szybkich wewnętrznych sieci centrów danych. Podobne zwiększenie rozmiaru pakietu przy 16-bitowym rozmiarze pola nagłówka uzyskuje się poprzez implementację pakietów „jumbo”, których rozmiar w nagłówku IP jest ustawiony na 0, a rzeczywisty rozmiar jest przesyłany w osobnym 32-bitowym pole w osobnym, załączonym nagłówku.
    • Dodano nowy parametr sysctl default_rps_mask, za pomocą którego można ustawić domyślną konfigurację RPS (Receive Packet Steering), która odpowiada za dystrybucję przetwarzania ruchu przychodzącego pomiędzy rdzenie procesora na poziomie obsługi przerwań.
    • Obsługa dyscyplin przetwarzania kolejek w celu ograniczenia ruchu CBQ (kolejkowanie oparte na klasach), ATM (obwody wirtualne ATM), dsmark (znacznik usług zróżnicowanych), tcindex (indeks kontroli ruchu) i RSVP (protokół rezerwacji zasobów) została wycofana. Dyscypliny te już dawno zostały porzucone i nie było chętnych do ich dalszego wspierania.
  • Sprzęt
    • Usunięto wszystkie sterowniki graficzne oparte na DRI1: i810 (starsze 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 (Crusty SiS GPU), tdfx (3dfx Voodoo) i via (VIA IGP), które zostały wycofane w 2016 r. i nie są obsługiwane w Mesie od 2012 r.
    • Usunięto starsze sterowniki bufora ramki (fbdev) omap1, s3c2410, tmiofb i w100fb.
    • Do jednostek VPU (Versatile Processing Unit) zintegrowanych z procesorem Intel Meteor Lake (14. generacji) dodano sterownik DRM, zaprojektowany w celu przyspieszenia operacji związanych z wizją komputerową i uczeniem maszynowym. Sterownik jest realizowany przy użyciu podsystemu „accel”, którego zadaniem jest zapewnienie obsługi akceleratorów obliczeniowych, które mogą być dostarczane albo w postaci pojedynczych układów ASIC, albo jako bloki IP wewnątrz SoC i GPU.
    • Sterownik i915 (Intel) rozszerza obsługę dyskretnych kart graficznych Intel Arc (DG2/Alchemist), zapewnia wstępną obsługę procesorów graficznych Meteor Lake i obejmuje obsługę procesorów graficznych Intel Xe HP 4tile.
    • Sterownik amdgpu dodaje obsługę technologii AdaptiveSync i możliwość korzystania z trybu bezpiecznego wyświetlania z wieloma wyświetlaczami. Zaktualizowano obsługę DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x i DP 2.1.
    • Sterownik msm (procesor graficzny Qualcomm Adreno) dodał obsługę platform SM8350, SM8450 SM8550, SDM845 i SC8280XP.
    • Sterownik Nouveau nie obsługuje już starych wywołań ioctl.
    • Do sterownika etnaviv dodano eksperymentalną obsługę NPU VerSilicon (procesor sieci neuronowej VeriSilicon).
    • Dla dysków IDE podłączonych poprzez port równoległy zaimplementowano sterownik pata_parport. Dodany sterownik pozwolił nam usunąć z jądra stary sterownik PARIDE i zmodernizować podsystem ATA. Ograniczeniem nowego sterownika jest brak możliwości jednoczesnego podłączenia drukarki i dysku poprzez port równoległy.
    • Dodano sterownik ath12k dla kart bezprzewodowych w chipach Qualcomm obsługujących Wi-Fi 7. Dodano obsługę kart bezprzewodowych w chipach RealTek RTL8188EU.
    • Dodano obsługę 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 i 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/AM 654 68/ AM69/AMXNUMX).

W tym samym czasie Latin American Free Software Foundation stworzyła wersję całkowicie darmowego jądra 6.3 - Linux-libre 6.3-gnu, oczyszczoną z elementów oprogramowania sprzętowego i sterowników zawierających niewolne komponenty lub sekcje kodu, których zakres jest ograniczony przez producenta. W wersji 6.3 wyczyszczono plamy w nowych sterownikach ath12k, aw88395 i peb2466, a także w nowych plikach drzewa urządzeń 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, a także w sterownikach kart DVB z dekodowaniem programowym oraz w prekompilowanych plikach BPF. Czyszczenie sterowników mga, r128, tm6000, cpia2 i r8188eu zostało zatrzymane, ponieważ zostały usunięte z jądra. Ulepszone czyszczenie obiektów blob sterownika i915.

Źródło: opennet.ru

Dodaj komentarz