Wydanie jądra Linuksa 6.0

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 6.0. Istotna zmiana numeru wersji ma podłoże estetyczne i jest formalnym krokiem mającym złagodzić dyskomfort związany z kumulacją dużej liczby numerów w serii (Linus zażartował, że powodem zmiany numeru oddziału był raczej brak palców i palce, aby policzyć numery wersji). Wśród najbardziej zauważalnych zmian: obsługa asynchronicznego zapisu buforowanego w XFS, sterownik blokowy ublk, optymalizacja harmonogramu zadań, mechanizm sprawdzający poprawność działania jądra, obsługa szyfru blokowego ARIA.

Główne innowacje w jądrze 6.0:

  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • System plików XFS dodał obsługę asynchronicznych zapisów buforowanych przy użyciu mechanizmu io_uring. Testy wydajnościowe przeprowadzone przy użyciu narzędzi fio (1 wątek, rozmiar bloku 4kB, 600 sekund, zapis sekwencyjny) wykazują wzrost liczby operacji wejścia/wyjścia na sekundę (IOPS) z 77k do 209k, prędkość przesyłania danych z 314MB/s do 854MB/s, i spadek opóźnienia z 9600 ns do 120 ns (80 razy).
    • System plików Btrfs implementuje drugą wersję protokołu dla polecenia „send”, która implementuje obsługę dodatkowych metadanych, wysyłanie danych w większych blokach (ponad 64 KB) i przesyłanie zakresów w skompresowanej formie. Wydajność operacji bezpośredniego odczytu została znacznie zwiększona (nawet 3-krotnie) dzięki jednoczesnemu odczytowi aż 256 sektorów. Zmniejszona rywalizacja o blokowanie i przyspieszone sprawdzanie metadanych poprzez redukcję zarezerwowanych metadanych dla odroczonych elementów.
    • Do systemu plików ext4 dodano nowe operacje ioctl EXT4_IOC_GETFSUUID i EXT4_IC_SETFSUID w celu pobrania lub ustawienia UUID przechowywanego w superbloku.
    • System plików F2FS oferuje tryb niskiego zużycia pamięci, który optymalizuje działanie na urządzeniach z małą ilością pamięci RAM i pozwala zmniejszyć zużycie pamięci kosztem zmniejszonej wydajności.
    • Dodano obsługę uwierzytelniania dysku NVMe.
    • Serwer NFSv4 implementuje ograniczenie liczby aktywnych klientów, które wynosi 1024 ważnych klientów na każdy gigabajt pamięci RAM w systemie.
    • Implementacja klienta CIFS poprawiła wydajność w trybie transmisji wielokanałowej.
    • Do podsystemu śledzenia zdarzeń w fanotify FS dodano nową flagę FAN_MARK_IGNORE, aby ignorować określone zdarzenia.
    • W Overlayfs FS, zamontowanym na FS z mapowaniem identyfikatora użytkownika, zapewniona jest poprawna obsługa list kontroli dostępu zgodnych z POSIX.
    • Dodano sterownik bloku ublk, który przenosi specyficzną logikę na bok procesu w tle w przestrzeni użytkownika i wykorzystuje podsystem io_uring.
  • Usługi pamięci i systemu
    • Do podsystemu DAMON (Data Access MONitor) dodano nowe funkcjonalności, pozwalające nie tylko monitorować dostęp procesów do pamięci RAM z przestrzeni użytkownika, ale także wpływać na zarządzanie pamięcią. W szczególności zaproponowano nowy moduł „LRU_SORT”, który umożliwia przegrupowanie list LRU (Least Ostatnio Używanych) w celu zwiększenia priorytetu niektórych stron pamięci.
    • Możliwość tworzenia nowych obszarów pamięci została zaimplementowana przy wykorzystaniu możliwości magistrali CXL (Compute Express Link), służącej do organizowania szybkiej interakcji pomiędzy procesorem a urządzeniami pamięci. CXL umożliwia podłączenie nowych obszarów pamięci udostępnianych przez zewnętrzne urządzenia pamięci i wykorzystanie ich jako dodatkowych zasobów fizycznej przestrzeni adresowej w celu rozszerzenia pamięci o dostępie swobodnym (DDR) lub pamięci stałej (PMEM) systemu.
    • Rozwiązano problemy z wydajnością procesorów AMD Zen spowodowane przez kod dodany 20 lat temu w celu obejścia problemu sprzętowego w niektórych chipsetach (dodano dodatkową instrukcję WAIT w celu spowolnienia procesora, aby chipset miał czas przejść w stan bezczynności). Zmiana spowodowała zmniejszenie wydajności przy obciążeniach, które często zmieniają się między stanami bezczynności i zajętości. Na przykład po wyłączeniu obejścia średnie wyniki testów tbench wzrosły z 32191 MB/s do 33805 MB/s.
    • Z harmonogramu zadań usunięto kod z heurystyką, zapewniający migrację procesów do najmniej obciążonych procesorów, z uwzględnieniem przewidywanego przyrostu zużycia energii. Twórcy doszli do wniosku, że heurystyka nie była wystarczająco użyteczna i że łatwiej było ją usunąć i przeprowadzić migrację procesów bez dodatkowej oceny, gdy taka migracja mogłaby potencjalnie skutkować niższym zużyciem energii (na przykład, gdy docelowy procesor ma niższy poziom mocy). Wyłączenie heurystyki doprowadziło do zmniejszenia zużycia energii podczas wykonywania intensywnych zadań, np. w teście dekodowania wideo pobór mocy spadł o 5.6%.
    • Zoptymalizowano rozkład zadań pomiędzy rdzeniami procesora w dużych systemach, co poprawiło wydajność w przypadku niektórych typów obciążeń.
    • Asynchroniczny interfejs we/wy io_uring oferuje nową flagę IORING_RECV_MULTISHOT, która umożliwia użycie trybu multi-shot z wywołaniem systemowym recv() w celu jednoczesnego wykonywania wielu operacji odczytu z tego samego gniazda sieciowego. io_uring obsługuje również transfer sieciowy bez buforowania pośredniego (kopia zerowa).
    • Zaimplementowano możliwość wprowadzenia programów BPF podłączonych do uprobe w stan uśpienia. BPF dodaje także nowy iterator ksym do pracy z tablicami symboli jądra.
    • Usunięto przestarzały interfejs „efivars” w sysfs, przeznaczony do dostępu do zmiennych rozruchowych UEFI (wirtualny FS efivarfs jest obecnie powszechnie używany do uzyskiwania dostępu do danych EFI).
    • Narzędzie perf ma nowe raporty umożliwiające analizę konfliktów blokad i czasu spędzanego przez procesor na wykonywaniu komponentów jądra.
    • Usunięto ustawienie CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, co umożliwiło zbudowanie jądra w trybie optymalizacji „-O3”. Należy zauważyć, że eksperymenty z trybami optymalizacji można przeprowadzać poprzez przekazywanie flag podczas asemblacji („make KCFLAGS=-O3”), a dodanie ustawienia do Kconfig wymaga powtarzalnego profilowania wydajności, co pokazuje, że rozwijanie pętli stosowane w trybie „-O3” daje korzyść w porównaniu z poziomem optymalizacji „-O2”.
    • Dodano interfejs debugfs w celu uzyskania informacji o działaniu poszczególnych „zmniejszaczy pamięci” (procedur obsługi wywoływanych w przypadku braku pamięci i pakowania struktur danych jądra w celu zmniejszenia zużycia pamięci).
    • Dla architektur OpenRISC i LoongArch zaimplementowano obsługę magistrali PCI.
    • Dla architektury RISC-V zaimplementowano rozszerzenie „Zicbom” umożliwiające zarządzanie urządzeniami z DMA, które nie jest spójne z pamięcią podręczną.
  • Wirtualizacja i bezpieczeństwo
    • Dodano mechanizm weryfikacji RV (Runtime Verification) w celu sprawdzenia poprawności działania w wysoce niezawodnych systemach, które gwarantują brak awarii. Weryfikacja odbywa się w czasie wykonywania poprzez dołączenie procedur obsługi do punktów śledzenia, które sprawdzają rzeczywisty postęp wykonywania w porównaniu z wcześniej określonym referencyjnym deterministycznym modelem maszyny, który definiuje oczekiwane zachowanie systemu. Weryfikacja z modelem w czasie wykonywania jest pozycjonowana jako lżejsza i łatwiejsza do wdrożenia metoda potwierdzenia poprawności wykonania w systemach krytycznych, uzupełniająca klasyczne metody weryfikacji niezawodności. Do zalet RV należy możliwość zapewnienia ścisłej weryfikacji bez osobnej implementacji całego systemu w języku modelowania, a także elastyczna reakcja na nieprzewidziane zdarzenia.
    • Zintegrowane komponenty jądra do zarządzania enklawami oparte na technologii Intel SGX2 (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. Technologia Intel SGX2 jest obsługiwana w chipach Intel Ice Lake i Gemini Lake i różni się od Intel SGX1 dodatkowymi instrukcjami dotyczącymi dynamicznego zarządzania pamięcią enklaw.
    • Dla architektury x86 zaimplementowano możliwość przesyłania materiału siewnego dla generatora liczb pseudolosowych poprzez ustawienia programu ładującego.
    • Moduł SafeSetID LSM ma teraz możliwość zarządzania zmianami wprowadzonymi za pomocą wywołania setgroups(). SafeSetID umożliwia usługom systemowym bezpieczne zarządzanie użytkownikami bez zwiększania uprawnień (CAP_SETUID) i bez uzyskiwania uprawnień roota.
    • Dodano obsługę szyfru blokowego ARIA.
    • Moduł zarządzania bezpieczeństwem oparty na BPF zapewnia możliwość dołączania procedur obsługi do poszczególnych procesów i grup procesów (cgroups).
    • Dodano mechanizm z implementacją watchdoga do wykrywania zawieszeń systemów gościa w oparciu o monitorowanie aktywności vCPU.
  • Podsystem sieciowy
    • Do podsystemu BPF dodano procedury obsługi generowania i sprawdzania plików cookie SYN. Dodano również zestaw funkcji (kfunc) umożliwiających dostęp i zmianę stanu połączeń.
    • Stos bezprzewodowy dodał obsługę mechanizmu MLO (Multi-Link Operation) zdefiniowanego w specyfikacji WiFi 7 i umożliwiającego urządzeniom jednoczesne odbieranie i wysyłanie danych z wykorzystaniem różnych pasm częstotliwości i kanałów, np. jednoczesne nawiązywanie kilku kanałów komunikacyjnych pomiędzy punkt dostępu do urządzenia klienckiego.
    • Poprawiono wydajność protokołu TLS wbudowanego w jądro.
    • Dodano opcję wiersza poleceń jądra „hostname=”, aby umożliwić ustawienie nazwy hosta na początku procesu rozruchu, przed uruchomieniem komponentów przestrzeni użytkownika.
  • Sprzęt
    • Sterownik i915 (Intel) zapewnia obsługę dyskretnych kart graficznych Intel Arc (DG2/Alchemist) A750 i A770. Zaproponowano wstępną implementację obsługi procesorów graficznych Intel Ponte Vecchio (Xe-HPC) i Meteor Lake. Trwają prace nad obsługą platformy Intel Raptor Lake.
    • Sterownik amdgpu w dalszym ciągu zapewnia obsługę platform AMD RDNA3 (RX 7000) i CDNA (Instinct).
    • Sterownik Nouveau przerobił kod pomocniczy dla silników graficznych NVIDIA nv50.
    • Dodano nowy sterownik LogiCVC DRM dla ekranów LogiCVC.
    • Sterownik v3d (dla procesora graficznego Broadcom Video Core) obsługuje płyty Raspberry Pi 4.
    • Dodano obsługę procesora graficznego Qualcomm Adreno 619 do sterownika msm.
    • Dodano obsługę procesora graficznego ARM Mali Valhall do sterownika Panfrost.
    • Dodano wstępne wsparcie dla procesorów Qualcomm Snapdragon 8cx Gen3 używanych w laptopach Lenovo ThinkPad X13s.
    • Dodano sterowniki dźwięku dla platform AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake i Mediatek MT8186.
    • Dodano obsługę akceleratorów uczenia maszynowego Intel Habana Gaudi 2.
    • Dodano obsługę ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.

W tym samym czasie Latin American Free Software Foundation stworzyła wersję całkowicie darmowego jądra 6.0 - Linux-libre 6.0-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 wyłącza użycie obiektów BLOB w sterowniku audio CS35L41 HD i sterowniku UCSI dla mikrokontrolerów STM32G0. Pliki DTS dla układów Qualcomm i MediaTek zostały wyczyszczone. Poprawiono wyłączanie obiektów BLOB w sterowniku MediaTek MT76. Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach AMDGPU, Adreno, Tegra VIC, Netronome NFP i Habanalabs Gaudi2. Zatrzymano czyszczenie sterownika VXGE, który został usunięty z jądra.

Źródło: opennet.ru

Dodaj komentarz