Wydanie jądra Linux 5.17

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linux 5.17. Wśród najbardziej zauważalnych zmian znajduje się nowy system zarządzania wydajnością dla procesorów AMD, możliwość rekurencyjnego mapowania identyfikatorów użytkowników w systemach plików, wsparcie dla przenośnych skompilowanych programów BPF, migracja generatora liczb pseudolosowych na algorytm BLAKE2s, narzędzie RTLA do analizy wykonania w czasie rzeczywistym oraz nowy backend fscache do cachowania sieciowych systemów plików, a także możliwość przypinania nazw do anonimowych operacji mmap.

Nowa wersja zawiera 14203 poprawek od 1995 programistów, a rozmiar łaty wynosi 37 MB (zmiany objęły 11366 plików, dodano 506043 linijek kodu, usunięto 250954 linijki). Około 44% wszystkich zmian w wersji 5.17 dotyczy sterowników urządzeń, około 16% związane jest z aktualizacją kodu specyficznego dla architektur sprzętowych, 15% odnosi się do stosu sieciowego, 4% do systemów plików i 4% do wewnętrznych podsystemów jądra.

Najważniejsze nowości w jądrze 5.17:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Wprowadzono możliwość zagnieżdżonego mapowania identyfikatorów użytkowników zamontowanych systemów plików, używanego do porównania plików danego użytkownika na zamontowanej obcej partycji z innym użytkownikiem w bieżącym systemie. Nowa funkcjonalność pozwala rekurencyjnie korzystać z mapowania nad systemami plików, dla których już zastosowano mapowanie.
    • Całkowicie przepisaną subsystemę fscache, stosowaną do organizacji cachowania w lokalnym systemie plików danych przesyłanych przez sieciowe systemy plików. Nowa implementacja charakteryzuje się znacznym uproszczeniem kodu i zastąpieniem skomplikowanych operacji planowania i śledzenia stanów obiektów prostszymi mechanizmami. Wsparcie dla nowego fscache zostało zrealizowane w systemie plików CIFS.
    • W subsystemie śledzenia zdarzeń w systemie plików fanotify wprowadzono nowy typ zdarzenia FAN_RENAME, który pozwala na jednoczesne przechwycenie operacji zmiany nazwy plików lub katalogów (wcześniej do przetwarzania zmiany nazw stosowano dwa oddzielne zdarzenia FAN_MOVED_FROM i FAN_MOVED_TO).
    • W systemie plików Btrfs zoptymalizowano operacje logowania i fsync dla dużych katalogów, realizując to poprzez kopiowanie tylko kluczy indeksowych i zmniejszenie objętości logowanych metadanych. Zapewniono wsparcie dla indeksowania i wyszukiwania według rozmiaru zapisów o wolnej przestrzeni, co pozwoliło na około 30% redukcję opóźnień i skrócenie czasu wyszukiwania. Dozwolone jest przerywanie operacji defragmentacji. Wprowadzono możliwość dodawania urządzeń przy wyłączonym balansowaniu pomiędzy nośnikami, tzn. podczas montowania systemu plików z opcją skip_balance.
    • Zaproponowano nową składnię montowania systemu plików Ceph, rozwiązującą istniejące problemy związane z powiązaniami z adresami IP. Oprócz adresów IP do określenia serwera można teraz używać identyfikatora klastra (FSID): mount -t ceph user@fsid.fs_name=\[subdir] mnt -o mon_addr=monip1[:port][\/monip2[:port]]
    • System plików Ext4 został przeniesiony na nowe API dla montowania, które oddziela etapy analizy opcji montowania i konfiguracji superbloku. Zaprzestano wsparcia dla opcji montowania lazytime i nolazytime, które dodano jako tymczasową zmianę w celu uproszczenia przeniesienia util-linux na użycie flagi MS_LAZYTIME. Dodano wsparcie dla ustawiania i odczytywania etykiet w systemie plików (ioctl FS_IOC_GETFSLABEL i FS_IOC_SETFSLABEL).
    • W NFSv4 dodano wsparcie dla pracy w systemach plików bez rozróżniania wielkości liter w nazwach plików i katalogów. W NFSv4.1+ dodano wsparcie dla określenia skonsolidowanych sesji (trunking).
  • Pamięć i usługi systemowe
    • Dodano sterownik amd-pstate, zapewniający dynamiczne zarządzanie częstotliwością w celu osiągnięcia optymalnej wydajności. Sterownik wspiera procesory CPU i APU AMD począwszy od generacji Zen 2, opracowany wspólnie z firmą Valve, ma na celu zwiększenie skuteczności zarządzania zużyciem energii. Do adaptacyjnej zmiany częstotliwości wykorzystuje mechanizm CPPC (Collaborative Processor Performance Control), który pozwala na bardziej precyzyjne zmiany wskaźników (nie są one ograniczone do trzech poziomów wydajności) i szybsze reagowanie na zmiany stanu, niż wcześniej stosowane sterowniki P-state oparte na ACPI (CPUFreq).
    • W podsystemie eBPF zaproponowano handler bpf_loop(), oferujący alternatywny sposób organizacji pętli w programach eBPF, szybszy i łatwiejszy do weryfikacji przez weryfikator.
    • Na poziomie jądra wprowadzono mechanizm CO-RE (Compile Once — Run Everywhere), który pozwala na kompilację kodu programów eBPF tylko raz i korzystanie ze specjalnego uniwersalnego loadera, adaptującego ładowany program do bieżącego jądra i typów BTF (BPF Type Format).
    • Dodano możliwość przypisywania nazw do obszarów prywatnej, anonimowej pamięci (przydzielanej przez malloc), co może ułatwić debugowanie i optymalizację wykorzystania pamięci w aplikacjach. Nazwy przypisywane są za pomocą prctl z flagą PR_SET_VMA_ANON_NAME i są wyświetlane w /proc/pid/maps oraz /proc/pid/smaps w formie „[anon:]”.
    • W schedulerze zadań zapewniono śledzenie i wyświetlanie w /proc/PID/sched czasu spędzonego przez procesy w stanie wymuszonej bezczynności (forced-idle), stosowanym na przykład w celu zmniejszenia obciążenia podczas przegrzewania procesora.
    • Dodano moduł gpio-sim, przeznaczony do symulacji układów GPIO w celu przeprowadzenia testów.
    • Do polecenia „perf ftrace” dodano podkomendę „latency” do generowania histogramów z informacjami o opóźnieniach.
    • Dodano zestaw narzędzi „RTLA” do analizy pracy w czasie rzeczywistym. W skład zestawu wchodzą narzędzia takie jak osnoise (określa wpływ systemu operacyjnego na realizację zadania) i timerlat (zmienia opóźnienia związane z zegarem).
    • Zintegrowano drugą serię poprawek z realizacją koncepcji foliów stron pamięci (page folios), które przypominają złożone strony pamięci (compound pages), ale różnią się ulepszoną semantyką i bardziej zrozumiałą organizacją pracy. Wykorzystanie foliów pozwala na szybsze zarządzanie pamięcią w niektórych podsystemach jądra. W zaproponowanych poprawkach zakończono konwersję pamięci podręcznej stron na wykorzystanie foliów oraz dodano wstępną obsługę foliów w systemie plików XFS.
    • Dodano tryb budowy „make mod2noconfig”, w którym generowana jest konfiguracja zbierająca wszystkie wyłączone podsystemy w postaci modułów jądra.
    • Podniesiono wymagania dotyczące wersji LLVM/Clang, które można użyć do kompilacji jądra. Do kompilacji wymagana jest teraz wersja co najmniej LLVM 11.
  • Wirtualizacja i bezpieczeństwo
    • Zaproponowano zaktualizowaną implementację generatora liczb pseudolosowych RDRAND, odpowiedzialnego za działanie urządzeń /dev/random i /dev/urandom, charakterystyczną dzięki przejściu na wykorzystanie funkcji haszującej BLAKE2s zamiast SHA1 do operacji mieszania entropii. Zmiana ta pozwoliła na zwiększenie bezpieczeństwa generatora liczb pseudolosowych, eliminując problematyczny algorytm SHA1 i wykluczając nadpisywanie wektora inicjalizacji RNG. Ponieważ algorytm BLAKE2s przewyższa SHA1 pod względem wydajności, jego zastosowanie również pozytywnie wpłynęło na wydajność.
    • Dodano ochronę przed podatnościami w procesorach spowodowanymi spekulacyjnym wykonaniem instrukcji po operacjach bezwarunkowego skoku bezpośredniego. Problem ten wynika z uprzedniej obróbki instrukcji, które znajdują się w pamięci tuż po komendzie skoku (SLS, Straight Line Speculation). Aby włączyć ochronę, wymagana jest kompilacja z wykorzystaniem wydania GCC 12, które jest obecnie w fazie testów.
    • Dodano mechanizm śledzenia liczby odniesień (refcount, reference-count), który ma na celu zmniejszenie liczby błędów związanych z liczeniem odniesień prowadzących do odwołań do pamięci po jej zwolnieniu. Mechanizm ten jest na razie ograniczony do podsystemu sieciowego, ale w przyszłości może być dostosowany również do innych części jądra.
    • Wdrożono rozszerzone kontrole nowych wpisów w tabeli stron pamięci procesu, które pozwalają wykrywać niektóre typy uszkodzeń i zatrzymywać system, blokując ataki na wczesnym etapie.
    • Dodano możliwość rozpakowywania modułów jądra bezpośrednio przez samo jądro, a nie przez handler w przestrzeni użytkownika, co pozwala za pomocą modułu LSM LoadPin zagwarantować, że moduły jądra są ładowane do pamięci z weryfikowanego urządzenia pamięci.
    • Zapewnienie kompilacji z flagą '-Wcast-function-type', która włącza wyświetlanie ostrzeżeń o rzutowaniu wskaźników funkcji na niekompatybilny typ.
    • Dodano wirtualny sterownik hosta pvUSB dla hipernadzorcy Xen, który zapewnia dostęp do urządzeń USB przekazywanych do systemów gościnnych (umożliwia systemom gościnnym dostęp do fizycznych urządzeń USB przypisanych do systemu gościnnego).
    • Dodano moduł umożliwiający komunikację przez Wi-Fi z podsystemem IME (Intel Management Engine), który jest dostarczany w większości nowoczesnych płyt głównych z procesorami Intel i realizowany w postaci osobnego mikrokontrolera, działającego niezależnie od CPU.
    • Dla architektury ARM64 dodano wsparcie narzędzia debugującego KCSAN (Kernel Concurrency Sanitizer), przeznaczonego do dynamicznego wykrywania stanów wyścigu w jądrze.
    • Dla 32-bitowych systemów ARM dodano możliwość zastosowania mechanizmu KFENCE do wykrywania błędów podczas pracy z pamięcią.
    • W hipernadzorze KVM dodano wsparcie dla instrukcji AMX (Advanced Matrix Extensions), zrealizowanych w nadchodzących procesorach serwerowych Intel Xeon Scalable.
  • Subsystem sieciowy
    • Dodano wsparcie dla offloadingu w urządzeniach sieciowych operacji związanych z zarządzaniem ruchem.
    • Dodano możliwość użycia protokołu MCTP (Management Component Transport Protocol) na urządzeniach z interfejsem szeregowym. MCTP może być używany do komunikacji między kontrolerami zarządzającymi a pokrewnymi urządzeniami (procesory hosta, urządzenia peryferyjne itp.).
    • Przeprowadzono optymalizację stosu TCP, na przykład w celu zwiększenia wydajności wywołań recvmsg wprowadzono opóźnione zwalnianie buforów gniazd.
    • Na poziomie uprawnień CAP_NET_RAW zezwolono na ustawienie za pomocą funkcji setsockopt trybów SO_PRIORITY i SO_MARK.
    • Dla IPv4 zezwolono na dołączanie raw-gniazd nie do lokalnych adresów IP, korzystając z opcji IP_FREEBIND i IP_TRANSPARENT.
    • Dodano sysctl arp_missed_max do konfiguracji progowego liczby awarii podczas kontroli przez monitor ARP, po której interfejs sieciowy jest wstrzymywany.
    • Umożliwiono konfigurację osobnych wartości sysctl min_pmtu i mtu_expires dla sieciowych przestrzeni nazw.
    • W API ethtool dodano możliwość ustawiania i określania rozmiaru buforów pakietów przychodzących i wychodzących.
    • W Netfilter dodano wsparcie dla filtrowania ruchu pppoe w mostku sieciowym.
    • W module ksmbd z realizacją plikowego, wykorzystującego protokół SMB3, dodano wsparcie dla wymiany kluczy, wykorzystano port sieciowy 445 dla smbdirect oraz dodano wsparcie dla parametru „smb2 max credit. serwera, używający protokołu SMB3, dodano wsparcie dla wymiany kluczy, aktywowany port sieciowy 445 dla smbdirect oraz dodano wsparcie dla parametru „smb2 max credit.
  • Sprzęt
    • W podsystemie drm (Direct Rendering Manager) oraz w sterowniku i915 dodano obsługę ekranów do wyświetlania informacji poufnych, na przykład niektóre laptopy są wyposażone w ekrany z wbudowanym trybem poufnego przeglądania, utrudniającym podgląd z boku. Dodane zmiany umożliwiają podłączanie wyspecjalizowanych sterowników do takich ekranów oraz zarządzanie trybami poufnego przeglądania poprzez ustawianie właściwości w standardowych sterownikach KMS.
    • W sterowniku amdgpu włączono wsparcie dla technologii debugowania STB (Smart Trace Buffer) dla wszystkich wspierających ją GPU AMD. STB upraszcza analizę awarii i identyfikację źródła problemów poprzez przechowywanie w specjalnym buforze informacji o funkcjach wykonywanych przed ostatnią awarią.
    • W sterowniku i915 dodano obsługę układów Intel Raptor Lake S i włączono domyślną obsługę podsystemu graficznego układów Intel Alder Lake P. Umożliwiono zarządzanie podświetleniem ekranu za pomocą interfejsu DPCD VESA.
    • W sterownikach fbcon/fbdev przywrócono obsługę przyspieszenia sprzętowego przewijania w konsoli.
    • Kontynuowano integrację zmian dla wsparcia układów Apple M1. Zrealizowano możliwość użycia sterownika simpledrm w systemach z układem Apple M1 do wyjścia przez framebuffer dostarczany przez firmware.
    • Dodano obsługę ARM SoC, urządzeń i płyt Snapdragon 7c, 845 i 888 (Sony Xperia XZ2/XZ2C/XZ3, Xperia 1 III/5 III, Samsung J5, Microsoft Surface Duo 2), Mediatek MT6589 (Fairphone FP1), Mediatek MT8183 (Acer Chromebook 314), Mediatek MT7986a/b (stosowane w routerach Wi-Fi), Broadcom BCM4908 (Netgear RAXE500), Qualcomm SDX65, Samsung Exynos7885, Renesas R-Car S4-8, TI J721s2, TI SPEAr320s, NXP i.MX8 ULP8, Aspeed AST2500/AST2600, Engicam i.Core STM32MP1, Allwinner Tanix TX6, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t6000/t6001 MacBook Pro 14/16.
    • Dodano obsługę procesorów ARM Cortex-M55 i Cortex-M33.
    • Dodano obsługę urządzeń opartych na CPU MIPS: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2.
    • Dodano obsługę SoC StarFive JH7100 opartego na architekturze RISC-V.
    • Dodano sterownik lenovo-yogabook-wmi do zarządzania podświetleniem klawiatury i dostępu do różnych czujników w Lenovo Yoga Book.
    • Dodano sterownik asus_wmi_sensors do dostępu do czujników używanych na płytach głównych Asus X370, X470, B450, B550 i X399 opartych na procesorach AMD Ryzen.
    • Dodano sterownik x86-android-tablets dla tabletów opartych na architekturze x86, dostarczanych z platformą Android.
    • Dodano wsparcie dla ekranów dotykowych TrekStor SurfTab duo W1 oraz rysika dla tabletów Chuwi Hi10 Plus i Pro.
    • Do sterowników dla SoC Tegra 20/30 dodano wsparcie dla zarządzania zasilaniem i napięciem. Umożliwiono uruchamianie na starych 32-bitowych urządzeniach opartych na SoC Tegra, takich jak ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 i Pad TF300TG.
    • Dodano sterowniki dla komputerów przemysłowych Siemens.
    • Dodano wsparcie dla paneli LCD Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA oraz Team Source Display TST043015CMHX.
    • Dodano wsparcie dla systemów dźwiękowych i kodeków AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, systemów Intel używających NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. Rozwiązano problemy z Tegra194 HD-audio. Dodano wsparcie HDA dla kodeków CS35L41. Ulepszono wsparcie dla systemów dźwiękowych w laptopach Lenovo i HP, a także płytach głównych Gigabyte.

Ź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