Wydanie jądra Linux 6.0

Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 6.0. Zmiana numeru wersji została dokonana ze względów estetycznych i jest formalnym krokiem, eliminującym niedogodność wynikającą z nagromadzenia dużej liczby wydań w serii (Linus zażartował, że powód zmiany numeru gałęzi wynika głównie z tego, że brakuje mu palców, aby liczyć numery wersji). Do najbardziej zauważalnych zmian należy: wsparcie dla asynchronicznego zapisu buforowanego w XFS, sterownik blokowy ublk, optymalizacja planera zadań, mechanizm weryfikacji poprawności działania jądra oraz wsparcie dla blokowego szyfru ARIA.

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

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Do systemu plików XFS dodano wsparcie dla asynchronicznego zapisu buforowanego z wykorzystaniem mechanizmu io_uring. Testy wydajności, przeprowadzone za pomocą narzędzia fio (1 wątek, rozmiar bloku 4KB, 600 sekund, zapis sekwencyjny), pokazują wzrost liczby operacji we/wy na sekundę (IOPS) z 77k do 209k, prędkości transferu danych – z 314MB/s do 854MB/s, oraz spadek opóźnień z 9600ns do 120ns (80 razy).
    • W systemie plików Btrfs wdrożono drugą wersję protokołu dla polecenia „send”, realizującą wsparcie dla dodatkowych metadanych, wysyłania danych większymi blokami (ponad 64K) oraz przesyłania ekstremów w formie skompresowanej. Znacząco (do 3 razy) zwiększono wydajność operacji bezpośredniego odczytu (direct read) dzięki jednoczesnemu odczytowi do 256 sektorów. Zredukowano konflikty blokad oraz przyspieszono weryfikację metadanych dzięki zmniejszeniu zarezerwowanych metadanych dla elementów odkładanych.
    • Do systemu plików ext4 dodano nowe operacje ioctl EXT4_IOC_GETFSUUID i EXT4_IC_SETFSUUID do wydobywania lub ustawiania identyfikatora UUID, przechowywanego w superbloku.
    • W systemie plików F2FS wprowadzono tryb niskiego zużycia pamięci, który optymalizuje pracę na urządzeniach z niewielką ilością pamięci RAM i pozwala na zmniejszenie zużycia pamięci kosztem wydajności.
    • Dodano wsparcie dla uwierzytelniania dysków NVMe.
    • W serwerze W NFSv4 wprowadzono limit liczby aktywnych klientów, który wynosi 1024 dopuszczalnych klientów na każdy gigabajt pamięci RAM w systemie.
    • W implementacji klienta CIFS zwiększono wydajność w trybie wielokanałowym.
    • W subsystemie monitorowania zdarzeń w systemie plików fanotify dodano nowy znacznik FAN_MARK_IGNORE do ignorowania specyficznych zdarzeń.
    • W systemie plików Overlayfs, podczas montowania nad systemem plików z mapowaniem identyfikatorów użytkowników, zapewniono poprawne wsparcie dla list kontroli dostępu zgodnych z POSIX.
    • Dodano sterownik blokowy ublk, przenoszący specyficzną logikę do procesu w tle w przestrzeni użytkownika oraz wykorzystujący subsystem io_uring.
  • Pamięć i usługi systemowe
    • W subsystemie DAMON (Data Access MONitor) dodano nowe możliwości, które pozwalają nie tylko monitorować dostęp procesów do pamięci operacyjnej z przestrzeni użytkownika, ale również wpływać na zarządzanie pamięcią. W szczególności zaproponowano nowy moduł „LRU_SORT”, który umożliwia przegrupowanie list LRU (Least Recently Used) w celu zwiększenia priorytetu określonych stron pamięci.
    • Wprowadzono możliwość tworzenia nowych regionów pamięci, wykorzystując możliwości magistrali CXL (Compute Express Link), stosowanej do organizacji wysokowydajnej komunikacji procesora z urządzeniami pamięci. CXL pozwala na podłączenie nowych regionów pamięci dostarczanych przez zewnętrzne urządzenia pamięci i wykorzystanie ich jako dodatkowych zasobów fizycznej przestrzeni adresowej w celu rozszerzenia pamięci operacyjnej systemu (DDR) lub pamięci stałej (PMEM).
    • Rozwiązano problemy z wydajnością systemów na procesorach AMD Zen, spowodowane kodem dodanym 20 lat temu, mającym na celu ominięcie problemu sprzętowego w niektórych chipsecie (dodano dodatkową instrukcję WAIT, która spowalniała procesor, aby chipset zdążył przejść w stan bezczynności). Zmiana ta prowadziła do spadku wydajności w obciążeniach, w których często występują przeplatające się stany bezczynności (idle) i aktywności (busy). Na przykład, po wyłączeniu obejścia średnie wyniki testu tbench wzrosły z 32191 MB/s do 33805 MB/s.
    • Z planera zadań usunięto kod z heurystyką umożliwiającą migrację procesów na najmniej obciążone CPU z uwzględnieniem przewidywanego zysku w zużyciu energii. Programiści doszli do wniosku, że heurystyka nie przynosi wystarczających korzyści, a łatwiej jest przenosić procesy bez dodatkowych ocen za każdym razem, gdy taki transfer potencjalnie może prowadzić do obniżenia zużycia energii (na przykład, gdy docelowe CPU znajduje się na poziomie z niższym zużyciem energii). Wyłączenie heurystyki doprowadziło do zmniejszenia zużycia energii przy intensywnych zadaniach; na przykład, w teście dekodowania wideo zużycie energii spadło o 5,6%.
    • Przeprowadzono optymalizację rozdzielania zadań między rdzeniami CPU w dużych systemach, co pozwoliło na zwiększenie wydajności w niektórych rodzajach obciążenia.
    • W interfejsie asynchronicznego wejścia/wyjścia io_uring wprowadzono nowy flagę IORING_RECV_MULTISHOT, umożliwiającą korzystanie z trybu „multi-shot” z wywołaniem systemowym recv() do wykonywania wielu operacji odczytu z jednego gniazda sieciowego. W io_uring wprowadzono również wsparcie dla przesyłania danych sieciowych bez pośredniego buforowania (zero-copy).
    • Wprowadzono możliwość wstrzymywania programów BPF, związanych z uprobe. W BPF dodano również nowy iterator ksym do pracy z tabelami symboli jądra.
    • Usunięto przestarzały interfejs „efivars” w sysfs, przeznaczony do dostępu do zmiennych rozruchowych UEFI (do dostępu do danych EFI powszechnie stosuje się teraz wirtualny system plików efivarfs).
    • W narzędziu perf wprowadzono nowe raporty do analizy konfliktów blokad i czasu, jaki procesor spędza na wykonywaniu komponentów jądra.
    • Usunięto ustawienie CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, które pozwalało na kompilację jądra w trybie optymalizacji „-O3”. Zauważono, że eksperymenty z trybami optymalizacji można przeprowadzać poprzez przekazywanie flag podczas kompilacji („make KCFLAGS=-O3”), a aby dodać ustawienie do Kconfig, należy zapewnić powtarzalne profilowanie wydajności, pokazujące, że zastosowanie w trybie „-O3” rozwinięcie pętli przynosi korzyści w porównaniu z poziomem optymalizacji „-O2”.
    • Dodano interfejs debugfs do uzyskiwania informacji o działaniu poszczególnych „memory shrinker” (przetworników wywoływanych przy braku pamięci, które wykonują pakowanie struktur danych jądra w celu zmniejszenia ich zużycia pamięci).
    • Dla architektur OpenRISC i LoongArch wdrożono wsparcie dla magistrali PCI.
    • Dla architektury RISC-V wdrożono rozszerzenie „Zicbom” do zarządzania urządzeniami z DMA, które nie są zgodne z pamięcią podręczną (non-cache-coherent).
  • Wirtualizacja i bezpieczeństwo
    • Dodano mechanizm weryfikacji RV (Runtime Verification) do sprawdzania poprawności działania w systemach o wysokiej niezawodności, gwarantujących brak awarii. Weryfikacja odbywa się w trakcie wykonywania przez podłączenie przetworników do punktów śledzenia, które porównują rzeczywisty przebieg wykonania z wcześniej ustaloną modelową, deterministyczną wersją automatu, definiującą oczekiwane zachowanie systemu. Porównanie z modelem w czasie rzeczywistym jest postrzegane jako lżejszy i prostszy sposób potwierdzania poprawności wykonania w systemach krytycznych, uzupełniający klasyczne metody potwierdzania niezawodności. Do zalet RV należy możliwość zapewnienia ścisłej weryfikacji bez konieczności osobnego wdrażania całego systemu w języku modelowania oraz elastyczne reagowanie na nieprzewidziane zdarzenia.
    • Zintegrowano komponenty jądra do zarządzania enklawami na bazie technologii Intel SGX2 (Software Guard eXtensions), która umożliwia aplikacjom uruchamianie kodu w izolowanych zaszyfrowanych obszarach pamięci, do których dostęp dla reszty systemu jest ograniczony. Technologia Intel SGX2 jest obsługiwana w chipach Intel Ice Lake i Gemini Lake i różni się od Intel SGX1 dodatkowymi instrukcjami do dynamicznego zarządzania pamięcią enklaw.
    • Dla architektury x86 wprowadzono możliwość przesyłania początkowych sygnałów dla generatora liczb pseudolosowych przez ustawienia bootloadera.
    • W module LSM SafeSetID dodano możliwość zarządzania zmianami dokonywanymi przez wywołanie setgroups(). SafeSetID pozwala usługom systemowym bezpiecznie zarządzać użytkownikami bez podnoszenia uprawnień (CAP_SETUID) i bez uzyskiwania uprawnień użytkownika root.
    • Dodano wsparcie dla blokowego szyfru ARIA.
    • W module zarządzania bezpieczeństwem opartym na BPF wprowadzono możliwość podłączania przetworników do poszczególnych procesów i grup procesów (cgroup).
    • Dodano mechanizm watchdog do wykrywania zawieszeń systemów gościnnych na podstawie monitorowania aktywności vCPU.
  • Subsystem sieciowy
    • Do podsystemu BPF dodano obsługę generowania i weryfikacji SYN cookies. Dodano również zestaw funkcji (kfunc) do dostępu i modyfikacji stanu połączeń.
    • W stosie bezprzewodowym dodano wsparcie dla mechanizmu MLO (Multi-Link Operation), określonego w specyfikacji WiFi 7, pozwalającego urządzeniom na jednoczesne odbieranie i wysyłanie danych przy użyciu różnych pasm oraz kanałów, na przykład do jednoczesnego nawiązywania kilku połączeń między punktem dostępowym a urządzeniem klienckim.
    • Zwiększono wydajność wbudowanej w jądro implementacji protokołu TLS.
    • Dodano parametr wiersza poleceń jądra „hostname=”, umożliwiający ustawienie nazwy hosta na wczesnym etapie rozruchu, zanim zostaną uruchomione komponenty przestrzeni użytkownika.
  • Sprzęt
    • W sterowniku i915 (Intel) dodano wsparcie dla dyskretnych kart graficznych Intel Arc (DG2/Alchemist) A750 i A770. Przedstawiono początkową implementację wsparcia dla GPU Intel Ponte Vecchio (Xe-HPC) oraz Meteor Lake. Kontynuowane są prace nad wsparciem platformy Intel Raptor Lake.
    • W sterowniku amdgpu kontynuowane są prace nad zapewnieniem wsparcia dla platform AMD RDNA3 (RX 7000) oraz CDNA (Instinct).
    • W sterowniku Nouveau przeprojektowano kod wsparcia dla silników wyświetlania GPU NVIDIA nv50.
    • Dodano nowy sterownik DRM logicvc dla ekranów LogiCVC.
    • W sterowniku v3d (dla GPU Broadcom Video Core) wprowadzono wsparcie dla platform Raspberry Pi 4.
    • W sterowniku msm dodano wsparcie dla GPU Qualcomm Adreno 619.
    • W sterowniku Panfrost dodano wsparcie dla GPU ARM Mali Valhall.
    • Dodano początkowe wsparcie dla procesorów Qualcomm Snapdragon 8cx Gen3 używanych w laptopach Lenovo ThinkPad X13s.
    • Dodano sterowniki dźwiękowe dla platform AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake oraz Mediatek MT8186.
    • Dodano wsparcie dla akceleratorów systemów uczenia maszynowego Intel Habana Gaudi 2.
    • Dodano wsparcie dla ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.

Jednocześnie latynoamerykański Fundusz Wolnego Oprogramowania stworzył wersję całkowicie wolnego jądra 6.0 — Linux-libre 6.0-gnu, oczyszczoną z elementów oprogramowania układowego i sterowników zawierających składniki lub fragmenty kodu, których zastosowanie jest ograniczone przez producenta. W nowej wersji wyłączono użycie blobów w sterowniku CS35L41 HD-audio oraz sterowniku z interfejsem UCSI dla mikrokontrolerów STM32G0. Przeprowadzono czyszczenie plików dts dla układów Qualcomm i MediaTek. Przerobiono wyłączenie blobów w sterowniku MediaTek MT76. Zaktualizowano kod czyszczenia blobów w sterownikach i subsystemach AMDGPU, Adreno, Tegra VIC, Netronome NFP oraz Habanalabs Gaudi2. Zaprzestano czyszczenia sterownika VXGE, usuniętego z jądra.

Ź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