Wydanie jądra Linuksa 5.11

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 5.11. Z najbardziej zauważalnych zmian: obsługa enklaw Intel SGX, nowy mechanizm przechwytywania wywołań systemowych, wirtualna magistrala pomocnicza, zakaz montowania modułów bez MODULE_LICENSE(), tryb szybkiego filtrowania wywołań systemowych w seccomp, zakończenie wsparcia dla architektura ia64, przeniesienie technologii WiMAX do gałęzi „staging”, możliwość enkapsulacji SCTP w UDP.

Nowa wersja zawiera 15480 1991 poprawek od 72 12090 programistów, rozmiar łatki to 868025 MB (zmiany dotyczyły 261456 46 plików, dodano 5.11 16 linii kodu, usunięto 13 3 linii). Około 4% wszystkich zmian wprowadzonych w wersji XNUMX dotyczy sterowników urządzeń, około XNUMX% zmian dotyczy aktualizacji kodu specyficznego dla architektur sprzętowych, XNUMX% dotyczy stosu sieciowego, XNUMX% dotyczy systemów plików, a XNUMX% są powiązane z wewnętrznymi podsystemami jądra.

Główne innowacje:

  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • Do Btrfs dodano kilka opcji montażu do wykorzystania podczas przywracania danych z uszkodzonego systemu plików: „rescue=ignorebadroots” do montażu pomimo uszkodzenia niektórych drzew głównych (zasięg, uuid, relokacja danych, urządzenie, csum, wolne miejsce), „ Rescue=ignoredatacsums”, aby wyłączyć sprawdzanie sum kontrolnych danych i „rescue=all”, aby jednocześnie włączyć tryby „ignorebadroots”, „ignoredatacsums” i „nologreplay”. Opcja montowania „inode_cache”, która była wcześniej przestarzała, została wycofana. Kod został przygotowany z myślą o zaimplementowaniu obsługi bloków z metadanymi i danymi mniejszymi niż rozmiar strony (PAGE_SIZE), a także obsługi trybu strefowego alokacji przestrzeni. Żądania niebuforowane (bezpośrednie IO) zostały przeniesione do infrastruktury iomap. Zoptymalizowano wydajność wielu operacji, w niektórych przypadkach przyspieszenie może sięgać kilkudziesięciu procent.
    • XFS implementuje flagę „needsrepair”, która sygnalizuje potrzebę naprawy. Gdy ta flaga jest ustawiona, nie można zamontować systemu plików, dopóki flaga nie zostanie zresetowana przez narzędzie xfs_repair.
    • Ext4 oferuje tylko poprawki błędów i optymalizacje, a także czyszczenie kodu.
    • Dozwolony jest reeksport systemów plików zamontowanych przez NFS (tj. partycję zamontowaną przez NFS można teraz wyeksportować przez NFS i używać jako pośrednia pamięć podręczna).
    • Wywołanie systemowe close_range(), które umożliwia procesowi zamknięcie całego zakresu otwartych deskryptorów plików na raz, dodało opcję CLOSE_RANGE_CLOEXEC umożliwiającą zamknięcie deskryptorów w trybie zamykania po wykonaniu.
    • System plików F2FS dodaje nowe wywołania ioctl(), aby umożliwić w przestrzeni użytkownika kontrolę nad tym, które pliki są przechowywane w formie skompresowanej. Dodano opcję montowania „compress_mode=” umożliwiającą wybór, czy umieścić moduł obsługi kompresji po stronie jądra, czy w przestrzeni użytkownika.
    • Zapewniono możliwość montowania nakładek przez nieuprzywilejowane procesy przy użyciu oddzielnej przestrzeni nazw użytkownika. W celu sprawdzenia zgodności z wdrożeniem modelu bezpieczeństwa przeprowadzono pełny audyt kodu. Overlayfs dodaje także możliwość uruchamiania przy użyciu kopii obrazów systemów plików, opcjonalnie wyłączając sprawdzanie UUID.
    • System plików Ceph dodał obsługę protokołu msgr2.1, który umożliwia wykorzystanie algorytmu AES-GCM podczas przesyłania danych w postaci zaszyfrowanej.
    • Moduł dm-multipath implementuje możliwość uwzględnienia powinowactwa procesora („powinowactwo IO”) przy wyborze trasy dla żądań we/wy.
  • Usługi pamięci i systemu
    • Dodano nowy mechanizm przechwytywania wywołań systemowych, oparty na prctl(), który umożliwia generowanie wyjątków z przestrzeni użytkownika podczas uzyskiwania dostępu do określonego wywołania systemowego i emulację jego wykonania. Ta funkcjonalność jest wymagana w Wine i Proton do emulacji wywołań systemowych Windows, co jest niezbędne do zapewnienia kompatybilności z grami i programami, które bezpośrednio wykonują wywołania systemowe z pominięciem Windows API (na przykład w celu ochrony przed nieuprawnionym użyciem).
    • Wywołanie systemowe userfaultfd(), zaprojektowane do obsługi błędów stron (dostępu do nieprzydzielonych stron pamięci) w przestrzeni użytkownika, ma teraz możliwość wyłączenia obsługi wyjątków, która występuje na poziomie jądra, aby utrudnić wykorzystanie niektórych luk.
    • Podsystem BPF dodał obsługę lokalnego magazynu zadań, który zapewnia powiązanie danych z określoną procedurą obsługi BPF.
    • Całkowicie przeprojektowano rozliczanie zużycia pamięci przez programy BPF - zamiast memlock rlimit zaproponowano kontroler cgroup do zarządzania zużyciem pamięci w obiektach BPF.
    • Mechanizm BTF (BPF Type Format), który dostarcza informacji o sprawdzaniu typu w pseudokodzie BPF, zapewnia obsługę modułów jądra.
    • Dodano obsługę wywołań systemowych Shutdown(), Renameat2() i unlinkat() do asynchronicznego interfejsu we/wy io_uring. Podczas wywoływania io_uring_enter() dodano możliwość określenia limitu czasu (obsługę argumentu określającego limit czasu można sprawdzić za pomocą flagi IORING_FEAT_EXT_ARG).
    • Architektura ia64 stosowana w procesorach Intel Itanium została przeniesiona do kategorii osieroconych, co oznacza, że ​​zaprzestano testów. Hewlett Packard Enterprise przestał przyjmować zamówienia na nowy sprzęt Itanium, a Intel zrobił to w zeszłym roku.
    • Zakończono obsługę systemów opartych na architekturze MicroBlaze, które nie zawierają jednostki zarządzania pamięcią (MMU). Takich systemów nie widziano w życiu codziennym od dawna.
    • Dla architektury MIPS dodano obsługę testowania pokrycia kodu za pomocą narzędzia gcov.
    • Dodano obsługę wirtualnej magistrali pomocniczej do współpracy z urządzeniami wielofunkcyjnymi, które łączą funkcjonalność wymagającą różnych sterowników (na przykład karty sieciowe z obsługą Ethernet i RDMA). Magistrala może służyć do przypisania do urządzenia sterownika podstawowego i dodatkowego, w sytuacjach, gdy zastosowanie podsystemu MFD (Multi-Function Devices) jest problematyczne.
    • Do architektury RISC-V dodano obsługę systemu alokacji pamięci CMA (Contigious Memory Allocator), który jest zoptymalizowany pod kątem alokacji dużych, ciągłych obszarów pamięci przy użyciu technik przenoszenia stron pamięci. W przypadku RISC-V zaimplementowano także narzędzia ograniczające dostęp do /dev/mem i uwzględniające czas przetwarzania przerwań.
    • W 32-bitowych systemach ARM dodano obsługę narzędzia debugującego KASan (Kernel Address Sanizer), które pomaga identyfikować błędy podczas pracy z pamięcią. W przypadku 64-bitowego ARM implementacja KASan została przekonwertowana tak, aby korzystała z tagów MTE (MemTag).
    • Dodano wywołanie systemowe epoll_pwait2(), aby umożliwić przekroczenie limitu czasu z precyzją nanosekundową (wywołanie epoll_wait manipuluje milisekundami).
    • System kompilacji wyświetla teraz błąd podczas próby zbudowania ładowalnych modułów jądra, w których licencja na kod nie jest zdefiniowana przy użyciu makra MODULE_LICENSE(). Odtąd użycie makra EXPORT_SYMBOL() dla funkcji statycznych będzie również powodować błąd kompilacji.
    • Dodano obsługę mapowania obiektów GEM z pamięci wykorzystywanej dla I/O, co umożliwiło przyspieszenie pracy z buforem ramki na niektórych architekturach.
    • Kconfig porzucił obsługę Qt4 (utrzymując obsługę Qt5, GTK i Ncurses).
  • Wirtualizacja i bezpieczeństwo
    • Do wywołania systemowego seccomp() dodano obsługę trybu szybkiej odpowiedzi, która pozwala bardzo szybko określić, czy dane wywołanie systemowe jest dozwolone, czy zabronione, na podstawie bitmapy o stałym działaniu dołączonej do procesu, która nie wymaga uruchamiania osoba obsługująca BPF.
    • Zintegrowane komponenty jądra do tworzenia i zarządzania enklawami oparte na technologii Intel SGX (Software Guard eXtensions), która umożliwia aplikacjom wykonywanie kodu w izolowanych, zaszyfrowanych obszarach pamięci, do których reszta systemu ma ograniczony dostęp.
    • W ramach inicjatywy ograniczenia dostępu z przestrzeni użytkownika do MSR (rejestru specyficznego dla modelu) zapis do rejestru MSR_IA32_ENERGY_PERF_BIAS, który umożliwia zmianę trybu efektywności energetycznej procesora („normalny”, „wydajny”, „oszczędny”) , jest zabronione.
    • Możliwość wyłączenia migracji zadań o wysokim priorytecie pomiędzy procesorami została przeniesiona z gałęzi kernel-rt dla systemów czasu rzeczywistego.
    • Dla systemów ARM64 dodano możliwość wykorzystania znaczników MTE (MemTag, Memory Tagging Extension) dla adresów pamięci obsługi sygnału. Użycie MTE jest możliwe poprzez określenie opcji SA_EXPOSE_TAGBITS w sigaction() i pozwala na sprawdzenie poprawności użycia wskaźników w celu zablokowania wykorzystania podatności spowodowanych dostępem do już zwolnionych bloków pamięci, przepełnieniem bufora, dostępami przed inicjalizacją oraz użyciem poza aktualny kontekst.
    • Dodano parametr „DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING”, który umożliwia podsystemowi dm-verity sprawdzanie podpisów skrótu certyfikatów umieszczonych w dodatkowym pliku kluczy. W praktyce konfiguracja pozwala na weryfikację nie tylko certyfikatów wbudowanych w jądro, ale także certyfikatów ładowanych podczas pracy, co pozwala na aktualizację certyfikatów bez aktualizacji całego jądra.
    • Tryb użytkownika Linux dodał obsługę trybu wstrzymania do bezczynności, który pozwala na zamrożenie środowiska i wykorzystanie sygnału SIGUSR1 do wybudzenia z trybu uśpienia.
    • Mechanizm virtio-mem, który pozwala na hot-plug i odłączanie pamięci do maszyn wirtualnych, dodał obsługę trybu Big Block Mode (BBM), który umożliwia przesyłanie lub pobieranie pamięci w blokach większych niż rozmiar pamięci jądra blok, który jest niezbędny do optymalizacji VFIO w QEMU.
    • Do implementacji jądra TLS dodano obsługę szyfru CHACHA20-POLY1305.
  • Podsystem sieciowy
    • Dla 802.1Q (VLAN) zaimplementowano mechanizm zarządzania awariami połączeń (CFM, Connectivity Fault Management), który pozwala identyfikować, weryfikować i izolować awarie w sieciach z mostami wirtualnymi (Virtual Bridged Networks). Na przykład CFM można wykorzystać do izolowania problemów w sieciach obejmujących wiele niezależnych organizacji, których pracownicy mają dostęp tylko do własnego sprzętu.
    • Dodano obsługę enkapsulacji pakietów protokołu SCTP w pakietach UDP (RFC 6951), co pozwala na użycie SCTP w sieciach ze starszymi tłumaczami adresów, które nie obsługują bezpośrednio SCTP, a także zaimplementowanie SCTP w systemach, które nie zapewniają bezpośredniego dostępu do adresu IP warstwa.
    • Wdrożenie technologii WiMAX zostało przesunięte do etapu tymczasowego i ma zostać usunięte w przyszłości, jeśli nie będzie użytkowników wymagających WiMAX. WiMAX nie jest już używany w sieciach publicznych, a w jądrze jedynym sterownikiem, z którym można używać WiMAX, jest przestarzały sterownik Intel 2400m. Obsługa WiMAX została wycofana w konfiguratorze sieci NetworkManager w 2015 roku. Obecnie WiMax jest niemal całkowicie wypierany przez technologie takie jak LTE, HSPA+ i Wi-Fi 802.11n.
    • Wykonano prace mające na celu optymalizację wydajności przetwarzania przychodzącego ruchu TCP w trybie zerocopy, tj. bez dodatkowego kopiowania do nowych buforów. W przypadku ruchu średniej wielkości, obejmującego dziesiątki lub kilkaset kilobajtów danych, użycie zerocopy zamiast recvmsg() jest zauważalnie bardziej efektywne. Przykładowo wprowadzone zmiany umożliwiły zwiększenie efektywności przetwarzania ruchu w stylu RPC z komunikatami o rozmiarze 32 KB przy zastosowaniu metody zerocopy o 60-70%.
    • Dodano nowe wywołania ioctl() umożliwiające tworzenie mostów sieciowych obejmujących wiele łączy PPP. Proponowana funkcja umożliwia przenoszenie ramek z jednego kanału do drugiego, na przykład z sesji PPPoE do sesji PPPoL2TP.
    • Integracja z rdzeniem MPTCP (MultiPath TCP), rozszerzenie protokołu TCP do organizowania działania połączenia TCP z dostarczaniem pakietów jednocześnie kilkoma trasami przez różne interfejsy sieciowe powiązane z różnymi adresami IP. W nowej wersji wprowadzono obsługę opcji ADD_ADDR umożliwiającej anonsowanie dostępnych adresów IP, z którymi można się połączyć podczas dodawania nowych przepływów do istniejącego połączenia MPTCP.
    • Dodano możliwość konfiguracji akcji w przypadku przekroczenia budżetu odpytywania połączenia (odpytywanie o zajętości). Dostępny wcześniej tryb SO_BUSY_POLL oznaczał przejście na softirq po wyczerpaniu budżetu. Dla aplikacji, które muszą nadal korzystać z odpytywania, zaproponowano nową opcję SO_PREFER_BUSY_POLL.
    • IPv6 implementuje obsługę trybów SRv6 End.DT4 i End.DT6, używanych do tworzenia sieci VPN IPv4 L3 dla wielu użytkowników i urządzeń VRF (wirtualny routing i przekazywanie).
    • Netfilter ujednolicił implementację wyrażeń zestawów, co umożliwiło określenie wielu wyrażeń dla każdego elementu list zestawów.
    • Do stosu sieci bezprzewodowej 802.11 dodano interfejsy API umożliwiające konfigurowanie limitów mocy SAR, a także parametrów AE PWE i HE MCS. Sterownik Intel iwlwifi dodał obsługę zakresu 6 GHz (Ultra High Band). W sterowniku Qualcomm Ath11k dodano obsługę technologii FILS (Fast Primary Link Setup, standaryzowanej jako IEEE 802.11ai), która pozwala pozbyć się opóźnień roamingowych podczas migracji z jednego punktu dostępowego do drugiego.
  • Sprzęt
    • Sterownik amdgpu zapewnia obsługę APU AMD „Green Sardine” (Ryzen 5000) i procesora graficznego „Dimgrey Cavefish” (Navi 2), a także wstępną obsługę APU AMD Van Gogh z rdzeniem Zen 2 i procesorem graficznym RDNA 2 (Navi 2). Dodano obsługę nowych identyfikatorów APU Renoir (w oparciu o procesor Zen 2 i procesor graficzny Vega).
    • Sterownik i915 dla kart graficznych Intel obsługuje technologię IS (skalowanie całkowite) z implementacją filtra zwiększającego skalę z uwzględnieniem stanu sąsiednich pikseli (interpolacja najbliższego sąsiada) w celu określenia koloru brakujących pikseli. Rozszerzono obsługę dyskretnych kart Intel DG1. Zaimplementowano obsługę technologii „Big Joiner”, która jest obecna od czasów chipów Ice Lake/Gen11 i pozwala na wykorzystanie jednego transkodera do przetwarzania dwóch strumieni, na przykład w celu wyjścia na ekran 8K przez jeden DisplayPort. Dodano tryb asynchronicznego przełączania pomiędzy dwoma buforami w pamięci wideo (async flip).
    • W secesyjnym sterowniku dodano wstępną obsługę procesorów graficznych NVIDIA opartych na mikroarchitekturze Ampere (GA100, GeForce RTX 30xx), ograniczającą się dotychczas do narzędzi do sterowania trybami wideo.
    • Dodano obsługę protokołu 3WIRE stosowanego w panelach LCD. Dodano obsługę paneli novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 i ABT Y030XX067A 3.0. Osobno możemy zauważyć obsługę panelu smartfonów OnePlus 6 i 6T, co umożliwiło zorganizowanie ładowania niezmodyfikowanego jądra na urządzenia.
    • Dodano obsługę pierwszego dyskretnego kontrolera hosta USB4 firmy Intel, Maple Ridge.
    • Dodano obsługę kodeków audio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI i XCVR, Realtek RT715 i Qualcomm SM8250.
    • Dodano obsługę płyt, urządzeń i platform ARM: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, ​​​​Mikrotik oparty na Marvell Prestera 98DX3236, serwery z Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, „Trogdor” Chromebook, Kobol Helios64, Engicam PX30.Core.
    • Wbudowana obsługa konsoli do gier Ouya opartej na NVIDIA Tegra 3.

W tym samym czasie Latin American Free Software Foundation stworzyła wersję całkowicie darmowego jądra 5.11 - Linux-libre 5.11-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. Nowa wersja czyści sterowniki dla qat_4xxx (crypto), lt9611uxcm (mostek dsi/hdmi), ccs/smia++ (sensor), ath11k_pci, transceiver audio nxp i kontroler mhi pci. Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach amdgpu, btqca, btrtl, btusb, i915 csr. Wyłączono nowe obiekty BLOB w m3 rproc, zegarze ptp idt82p33 i qualcomm arm64.

Źródło: opennet.ru

Dodaj komentarz