Wydanie jądra Linuksa 5.19

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 5.19. Do najważniejszych zmian należą: obsługa architektury procesorów LoongArch, integracja poprawek „BIG TCP”, tryb on-demand w fscache, usunięcie kodu w celu obsługi formatu a.out, możliwość wykorzystania ZSTD do kompresji oprogramowania sprzętowego, interfejs dla zarządzanie eksmisją pamięci z przestrzeni użytkownika, zwiększenie niezawodności i wydajności generatora liczb pseudolosowych, obsługa Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) i ARM Rozszerzenia SME (Scalable Matrix Extension).

W ogłoszeniu Linus powiedział, że najprawdopodobniej następna wersja jądra będzie miała numer 6.0, ponieważ gałąź 5.x zgromadziła wystarczającą liczbę wydań, aby zmienić pierwszą cyfrę w numerze wersji. Zmiana numeracji przeprowadzana jest ze względów estetycznych i jest krokiem formalnym, łagodzącym dyskomfort wynikający z nawarstwiania się dużej liczby numerów w serii.

Linus wspomniał również, że do stworzenia wydania użył laptopa Apple opartego na architekturze ARM64 (Apple Silicon) ze środowiskiem Linux opartym na dystrybucji Asahi Linux. Nie jest to główna stacja robocza Linusa, ale wykorzystał ją do przetestowania jej przydatności do pracy z jądrem i upewnienia się, że będzie mógł tworzyć nowe wersje jądra, podróżując z lekkim laptopem pod ręką. Wcześniej, wiele lat temu, Linus miał doświadczenie w używaniu sprzętu Apple do programowania - kiedyś używał komputera PC opartego na procesorze ppc970 i laptopa Macbook Air.

Nowa wersja zawiera 16401 2190 poprawek od 16206 2127 programistów (w ostatniej wersji było 90 13847 poprawek od 1149456 349177 programistów), rozmiar łatki to 39 MB (zmiany dotyczyły 5.19 21 plików, dodano 11 4 3 linii kodu, usunięto XNUMX XNUMX linii). Około XNUMX% 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 w jądrze 5.19:

  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • System plików EROFS (Enhanced Read-Only File System), przeznaczony do użytku na partycjach tylko do odczytu, został przekonwertowany tak, aby korzystał z podsystemu fscache, który zapewnia buforowanie danych. Zmiana znacząco poprawiła wydajność systemów, w których uruchamiana jest duża liczba kontenerów z obrazu opartego na EROFS.
    • Do podsystemu fscache dodano tryb odczytu na żądanie, który służy do optymalizacji EROFS. Nowy tryb umożliwia organizację buforowania odczytu z obrazów FS znajdujących się w systemie lokalnym. W przeciwieństwie do początkowo dostępnego trybu działania, który koncentruje się na buforowaniu w lokalnym systemie plików danych przesyłanych poprzez sieciowe systemy plików, tryb „na żądanie” deleguje funkcje pobierania danych i zapisywania ich do pamięci podręcznej na osobnym proces w tle działający w przestrzeni użytkownika.
    • XFS zapewnia możliwość przechowywania miliardów rozszerzonych atrybutów w i-węźle. Zwiększono maksymalną liczbę zakresów jednego pliku z 4 miliardów do 247. Zaimplementowano tryb atomowej aktualizacji kilku rozszerzonych atrybutów plików jednocześnie.
    • System plików Btrfs zoptymalizował pracę z blokadami, co pozwoliło na około 7% wzrost wydajności przy zapisie bezpośrednio w trybie nowait. Wydajność operacji w trybie NOCOW (bez kopiowania przy zapisie) wzrasta o około 3%. Zmniejszono obciążenie pamięci podręcznej strony po uruchomieniu polecenia „wyślij”. Minimalny rozmiar podstron został zmniejszony z 64K do 4K (można używać podstron mniejszych niż strony jądra). Dokonano przejścia od stosowania drzewa radix do algorytmu XArrays.
    • Do serwera NFS dodano tryb przedłużający zachowanie stanu blokady ustawionego przez klienta, który przestał odpowiadać na żądania. Nowy tryb umożliwia opóźnienie usunięcia blokady nawet o jeden dzień, chyba że inny klient zażąda blokady konkurencyjnej. W trybie normalnym blokada zostaje usunięta 90 sekund po tym, jak klient przestanie odpowiadać.
    • Podsystem śledzenia zdarzeń w fanotify FS implementuje flagę FAN_MARK_EVICTABLE, za pomocą której można wyłączyć przypinanie docelowych i-węzłów w pamięci podręcznej, na przykład w celu ignorowania podgałęzi bez przypinania ich części w pamięci podręcznej.
    • W sterowniku systemu plików FAT32 dodano obsługę uzyskiwania informacji o czasie utworzenia pliku poprzez wywołanie systemowe statx z implementacją wydajniejszej i funkcjonalnej wersji stat(), która zwraca rozszerzone informacje o pliku.
    • W sterowniku exFAT wprowadzono znaczące optymalizacje, aby umożliwić jednoczesne czyszczenie grupy sektorów, gdy aktywny jest tryb „dirsync”, zamiast sekwencyjnego czyszczenia sektor po sektorze. Zmniejszając liczbę żądań blokowania po optymalizacji, wydajność tworzenia dużej liczby katalogów na karcie SD wzrosła o ponad 73-85%, w zależności od rozmiaru klastra.
    • Jądro zawiera pierwszą aktualizację korygującą sterownik ntfs3. Ponieważ ntfs3 został włączony do jądra 5.15 w październiku ubiegłego roku, sterownik nie został zaktualizowany i komunikacja z programistami została utracona, ale programiści wznowili teraz publikowanie zmian. Zaproponowane poprawki wyeliminowały błędy prowadzące do wycieków pamięci i awarii, rozwiązały problemy z wykonywaniem xfstests, wyczyściły nieużywany kod i poprawiły literówki.
    • W przypadku OverlayFS zaimplementowano możliwość mapowania identyfikatorów użytkowników zamontowanych systemów plików, która służy do dopasowywania plików konkretnego użytkownika na zamontowanej partycji obcej z innym użytkownikiem w bieżącym systemie.
  • Usługi pamięci i systemu
    • Dodano wstępną obsługę architektury zestawu instrukcji LoongArch stosowanej w procesorach Loongson 3 5000, która implementuje nowy RISC ISA, podobny do MIPS i RISC-V. Architektura LoongArch jest dostępna w trzech wersjach: uproszczona wersja 32-bitowa (LA32R), zwykła 32-bitowa (LA32S) i 64-bitowa (LA64).
    • Usunięto kod obsługujący format pliku wykonywalnego a.out, który był przestarzały w wersji 5.1. Format a.out od dawna jest przestarzały w systemach Linux, a generowanie plików a.out nie jest obsługiwane przez nowoczesne narzędzia w domyślnych konfiguracjach Linuksa. Moduł ładujący pliki a.out można zaimplementować całkowicie w przestrzeni użytkownika.
    • Zakończono obsługę opcji rozruchu specyficznych dla x86: nosp, nosmap, nosmep, noexec i noclflush).
    • Zaprzestano obsługi przestarzałej architektury procesora h8300 (Renesas H8/300), która od dawna pozostawała bez wsparcia.
    • Rozszerzone możliwości związane z reagowaniem na wykrycie blokad rozdzielonych („split lock”) występujących podczas dostępu do niewyrównanych danych w pamięci ze względu na fakt, że podczas wykonywania instrukcji atomowej dane przekraczają dwie linie pamięci podręcznej procesora. Takie blokady prowadzą do znacznego spadku wydajności. Jeśli wcześniej jądro domyślnie wyświetlało ostrzeżenie z informacją o procesie, który spowodował blokowanie, teraz problematyczny proces zostanie jeszcze bardziej spowolniony, aby zachować wydajność reszty systemu.
    • Dodano obsługę mechanizmu IFS (In-Field Scan) zaimplementowanego w procesorach Intel, który umożliwia uruchamianie niskopoziomowych testów diagnostycznych procesora, które potrafią zidentyfikować problemy, które nie są wykrywane przez standardowe narzędzia w oparciu o kody korekcji błędów (ECC) lub bity parzystości . Przeprowadzane testy mają formę oprogramowania sprzętowego do pobrania, zaprojektowanego podobnie do aktualizacji mikrokodu. Wyniki testów są dostępne poprzez sysfs.
    • Dodano możliwość osadzenia pliku bootconfig w jądrze, co pozwala, oprócz opcji wiersza poleceń, określić parametry jądra poprzez plik ustawień. Osadzanie odbywa się za pomocą opcji montażu „CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»”. Poprzednio bootconfig był określany poprzez dołączenie do obrazu initrd. Integracja z jądrem umożliwia użycie bootconfig w konfiguracjach bez initrd.
    • Zaimplementowano możliwość pobierania oprogramowania sprzętowego skompresowanego przy użyciu algorytmu Zstandard. Do sysfs dodano zestaw plików kontrolnych /sys/class/firmware/*, umożliwiających zainicjowanie ładowania oprogramowania sprzętowego z przestrzeni użytkownika.
    • Asynchroniczny interfejs we/wy io_uring oferuje nową flagę IORING_RECVSEND_POLL_FIRST, która po ustawieniu będzie najpierw wysyłać operację sieciową do przetworzenia przy użyciu odpytywania, co może zaoszczędzić zasoby w sytuacjach, gdy przetwarzanie operacji z pewnym opóźnieniem jest akceptowalne. io_uring dodał także obsługę wywołania systemowego Socket(), zaproponował nowe flagi upraszczające zarządzanie deskryptorami plików, dodał tryb „multi-shot” umożliwiający akceptowanie kilku połączeń jednocześnie w wywołaniu Accept() oraz dodał operacje przesyłania dalej NVMe polecenia bezpośrednio do urządzenia.
    • Architektura Xtensa zapewnia obsługę narzędzia debugującego KCSAN (Kernel Concurrency Sanitizer), zaprojektowanego w celu dynamicznego wykrywania warunków wyścigu w jądrze. Dodano także obsługę trybu uśpienia i koprocesorów.
    • Dla architektury m68k (Motorola 68000) zaimplementowano maszynę wirtualną (symulator platformy) opartą na emulatorze Android Goldfish.
    • Dla architektury AArch64 zaimplementowano obsługę rozszerzeń Armv9-A SME (Scalable Matrix Extension).
    • Podsystem eBPF umożliwia przechowywanie wpisywanych wskaźników w strukturach map, a także dodaje obsługę wskaźników dynamicznych.
    • Zaproponowano nowy proaktywny mechanizm odzyskiwania pamięci, który obsługuje kontrolę przestrzeni użytkownika za pomocą pliku memory.reclaim. Zapisanie liczby do określonego pliku spowoduje próbę usunięcia odpowiedniej liczby bajtów ze zbioru powiązanego z grupą cgroup.
    • Poprawiono dokładność wykorzystania pamięci podczas kompresji danych na partycji wymiany przy użyciu mechanizmu zswap.
    • W przypadku architektury RISC-V zapewniona jest obsługa uruchamiania 32-bitowych plików wykonywalnych w systemach 64-bitowych, dodano tryb umożliwiający powiązanie restrykcyjnych atrybutów ze stronami pamięci (na przykład w celu wyłączenia buforowania) oraz zaimplementowano funkcję kexec_file_load() .
    • Implementacja obsługi 32-bitowych systemów Armv4T i Armv5 została dostosowana do stosowania w uniwersalnych, wieloplatformowych kompilacjach jądra odpowiednich dla różnych systemów ARM.
  • Wirtualizacja i bezpieczeństwo
    • Podsystem EFI umożliwia poufne przesyłanie tajnych informacji do systemów gościnnych bez ujawniania ich systemowi hosta. Dane są dostarczane poprzez katalog security/coco w securityfs.
    • Tryb ochrony Lockdown, który ogranicza dostęp użytkownika root do jądra i blokuje ścieżki obejścia UEFI Secure Boot, wyeliminował lukę umożliwiającą ominięcie ochrony poprzez manipulację debugerem jądra.
    • W zestawie znajdują się poprawki mające na celu poprawę niezawodności i wydajności generatora liczb pseudolosowych.
    • Podczas budowania przy użyciu Clang 15 zaimplementowano obsługę mechanizmu losowania struktur jądra.
    • Mechanizm Landlock, pozwalający ograniczyć interakcję grupy procesów ze środowiskiem zewnętrznym, zapewnia obsługę reguł pozwalających kontrolować wykonywanie operacji zmiany nazw plików.
    • Podsystem IMA (Integrity Measurement Architecture), służący do weryfikacji integralności komponentów systemu operacyjnego za pomocą podpisów cyfrowych i skrótów, został przestawiony na wykorzystanie modułu fs-verity do weryfikacji plików.
    • Zmieniono logikę działań przy blokowaniu nieuprzywilejowanego dostępu do podsystemu eBPF - wcześniej wyłączone były wszystkie komendy związane z wywołaniem systemowym bpf(), a od wersji 5.19 pozostawiono dostęp do komend nie prowadzących do tworzenia obiektów . To zachowanie wymaga uprzywilejowanego procesu do załadowania programu BPF, ale wtedy nieuprzywilejowane procesy mogą wchodzić w interakcję z programem.
    • Dodano obsługę rozszerzenia AMD SEV-SNP (Secure Nested Paging), które zapewnia bezpieczną pracę z zagnieżdżonymi tabelami stron pamięci oraz chroni przed atakami „undeSErVed” i „SEVerity” na procesory AMD EPYC, które umożliwiają ominięcie mechanizmu AMD SEV (Secure Encrypted Virtualization ) mechanizm ochronny.
    • Dodano obsługę mechanizmu Intel TDX (Trusted Domain Extensions), który pozwala blokować próby uzyskania dostępu do zaszyfrowanej pamięci maszyn wirtualnych przez osoby trzecie.
    • Sterownik virtio-blk, służący do emulacji urządzeń blokowych, dodał obsługę wejść/wyjść z wykorzystaniem odpytywania, co według testów zmniejszyło opóźnienia o około 10%.
  • Podsystem sieciowy
    • Pakiet zawiera szereg poprawek BIG TCP, które pozwalają zwiększyć maksymalny rozmiar pakietu TCP do 4 GB w celu optymalizacji działania szybkich wewnętrznych sieci w centrach 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. W testach wydajności ustawienie rozmiaru pakietu na 185 KB zwiększyło przepustowość o 50% i znacznie zmniejszyło opóźnienia w przesyłaniu danych.
    • Kontynuowano prace nad integracją narzędzi ze stosem sieciowym w celu śledzenia przyczyn upuszczania pakietów (kodów przyczyny). Kod przyczyny jest wysyłany, gdy pamięć związana z pakietem zostanie zwolniona i uwzględnia takie sytuacje, jak odrzucenie pakietu z powodu błędów nagłówka, wykrycie fałszowania rp_filter, nieprawidłowa suma kontrolna, brak pamięci, wyzwolenie reguł IPSec XFRM, nieprawidłowy numer sekwencyjny TCP itp.
    • Dodano obsługę wycofywania połączeń MPTCP (MultiPath TCP) w celu korzystania ze zwykłego protokołu TCP w sytuacjach, gdy nie można użyć niektórych funkcji MPTCP. 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. Dodano API do kontrolowania strumieni MPTCP z przestrzeni użytkownika.
  • Sprzęt
    • Dodano ponad 420 tys. linii kodu związanych ze sterownikiem amdgpu, z czego około 400 tys. linii to automatycznie generowane pliki nagłówkowe dla danych rejestrów ASIC w sterowniku karty graficznej AMD, a kolejne 22.5 tys. linii zapewniają wstępną implementację obsługi AMD SoC21. Całkowity rozmiar sterownika dla procesorów graficznych AMD przekroczył 4 miliony linii kodu. Oprócz SoC21 sterownik AMD obejmuje obsługę SMU 13.x (System Management Unit), zaktualizowaną obsługę USB-C i GPUVM oraz jest przygotowany do obsługi kolejnych generacji RDNA3 (RX 7000) i CDNA (AMD Instinct) platformy.
    • Sterownik i915 (Intel) posiada rozszerzone możliwości związane z zarządzaniem energią. Dodano identyfikatory procesorów graficznych Intel DG2 (Arc Alchemist) używanych w laptopach, zapewniono wstępne wsparcie dla platformy Intel Raptor Lake-P (RPL-P), dodano informacje o kartach graficznych Arctic Sound-M), zaimplementowano ABI dla silników obliczeniowych, dodano dla Karty DG2 obsługują format Tile4, dla systemów opartych na mikroarchitekturze Haswell zaimplementowana jest obsługa DisplayPort HDR.
    • Sterownik Nouveau przełączył się na używanie procedury obsługi drm_gem_plane_helper_prepare_fb; do niektórych struktur i zmiennych zastosowano statyczną alokację pamięci. Jeśli chodzi o wykorzystanie modułów jądra open source firmy NVIDIA w Nouveau, dotychczasowe prace sprowadzają się do identyfikowania i eliminowania błędów. W przyszłości planowane jest wykorzystanie opublikowanego oprogramowania sprzętowego w celu poprawy wydajności sterownika.
    • Dodano sterownik dla kontrolera NVMe stosowanego w komputerach Apple opartych na chipie M1.

W tym samym czasie Latin American Free Software Foundation stworzyła wersję całkowicie darmowego jądra 5.19 - Linux-libre 5.19-gnu, oczyszczoną z elementów oprogramowania sprzętowego i sterowników zawierających niewolne komponenty lub sekcje kodu, których zakres jest ograniczone przez producenta. Nowa wersja czyści sterowniki dla pureLiFi X/XL/XC i TI AMx3 Wkup-M3 IPC. Zaktualizowano kod czyszczenia obiektów blob w Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, sterowniki i podsystemy pu3-imgu. Zaimplementowano przetwarzanie plików drzewa urządzeń Qualcomm AArch64. Dodano obsługę nowego schematu nazewnictwa komponentów Sound Open Firmware. Zatrzymano czyszczenie sterownika ATM Ambassador, który został usunięty z jądra. Zarządzanie czyszczeniem obiektów blob w HDCP i Mellanox Core zostało przeniesione do oddzielnych tagów kconfig.

Źródło: opennet.ru

Dodaj komentarz