Wydanie jądra Linuksa 5.17

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 5.17. Wśród najbardziej zauważalnych zmian: nowy system zarządzania wydajnością procesorów AMD, możliwość rekurencyjnego mapowania identyfikatorów użytkowników w systemach plików, obsługa przenośnych skompilowanych programów BPF, przejście generatora liczb pseudolosowych na algorytm BLAKE2s, narzędzie RTLA do analizy wykonania w czasie rzeczywistym, nowy backend fscache do buforowania sieciowych systemów plików, możliwość dołączania nazw do anonimowych operacji mmap.

Nowa wersja zawiera 14203 1995 poprawki od 37 programistów, rozmiar łatki to 11366 MB (zmiany dotyczyły 506043 250954 plików, dodano 44 5.17 linii kodu, usunięto 16 15 linii). Około 4% wszystkich zmian wprowadzonych w wersji 4 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.17:

  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • Zaimplementowano możliwość zagnieżdżonego mapowania identyfikatorów użytkowników zamontowanych systemów plików, używanego do porównywania plików konkretnego użytkownika na zamontowanej partycji obcej z innym użytkownikiem w bieżącym systemie. Dodana funkcja umożliwia rekurencyjne użycie mapowania na systemach plików, dla których mapowanie zostało już zastosowane.
    • Podsystem fscache, służący do organizacji buforowania w lokalnym systemie plików danych przesyłanych poprzez sieciowe systemy plików, został całkowicie przepisany. Nowa implementacja wyróżnia się znacznym uproszczeniem kodu i zastąpieniem skomplikowanych operacji planowania i śledzenia stanów obiektów prostszymi mechanizmami. Obsługa nowego fscache jest zaimplementowana w systemie plików CIFS.
    • Podsystem śledzenia zdarzeń w fanotify FS implementuje nowy typ zdarzenia FAN_RENAME, który pozwala na natychmiastowe przechwycenie operacji zmiany nazw plików lub katalogów (poprzednio do przetwarzania zmian nazw wykorzystywane były dwa osobne zdarzenia FAN_MOVED_FROM i FAN_MOVED_TO).
    • System plików Btrfs zoptymalizował operacje rejestrowania i fsync dla dużych katalogów, zaimplementowane poprzez kopiowanie tylko kluczy indeksu i zmniejszanie ilości rejestrowanych metadanych. Zapewniono obsługę indeksowania i wyszukiwania według rozmiaru rekordów wolnego miejsca, co zmniejszyło opóźnienia o około 30% i skróciło czas wyszukiwania. Zezwolono na przerwanie operacji defragmentacji. Możliwość dodawania urządzeń przy balansowaniu pomiędzy dyskami jest wyłączona tj. 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 wiązaniem z adresami IP. Oprócz adresów IP do identyfikacji serwera można teraz używać identyfikatora klastra (FSID): mount -t ceph [email chroniony]_name=/[podkatalog] mnt -o mon_addr=monip1[:port][/monip2[:port]]
    • System plików Ext4 został przeniesiony do nowego interfejsu API montowania, który oddziela etapy analizowania opcji montowania i konfiguracji superbloku. Usunęliśmy obsługę opcji montowania lazytime i nolazytime, które zostały dodane jako tymczasowa zmiana ułatwiająca przejście util-linux na używanie flagi MS_LAZYTIME. Dodano obsługę ustawiania i odczytywania etykiet w FS (ioctl FS_IOC_GETFSLABEL i FS_IOC_SETFSLABEL).
    • NFSv4 dodał obsługę pracy w systemach plików niewrażliwych na wielkość liter w nazwach plików i katalogów. NFSv4.1+ dodaje obsługę definiowania sesji zagregowanych (trunking).
  • Usługi pamięci i systemu
    • Dodano sterownik amd-pstate, aby zapewnić dynamiczną kontrolę częstotliwości w celu uzyskania optymalnej wydajności. Sterownik obsługuje procesory i APU AMD począwszy od generacji Zen 2, opracowany wspólnie z Valve i ma na celu poprawę efektywności zarządzania energią. Do adaptacyjnych zmian częstotliwości wykorzystywany jest mechanizm CPPC (Collaborative Processor Performance Control), który pozwala na dokładniejszą zmianę wskaźników (nieograniczoną do trzech poziomów wydajności) i szybszą reakcję na zmiany stanu niż wcześniej stosowany stan P oparty na ACPI sterowniki (CPUFreq).
    • Podsystem eBPF oferuje procedurę obsługi bpf_loop(), która zapewnia alternatywny sposób organizowania pętli w programach eBPF, szybszy i łatwiejszy do weryfikacji przez weryfikatora.
    • Na poziomie jądra zaimplementowany jest mechanizm CO-RE (Compile Once - Run Everywhere), który pozwala tylko raz skompilować kod programów eBPF i skorzystać ze specjalnego uniwersalnego modułu ładującego, który dostosowuje ładowany program do aktualnego jądra i typów BTF (Format typu BPF).
    • Możliwe jest przypisanie nazw obszarom prywatnej pamięci anonimowej (przydzielanej poprzez malloc), co może uprościć debugowanie i optymalizację zużycia pamięci w aplikacjach. Nazwy są przypisywane poprzez prctl z flagą PR_SET_VMA_ANON_NAME i są wyświetlane w /proc/pid/maps i /proc/pid/smaps w postaci „[anon: ]”.
    • Harmonogram zadań umożliwia śledzenie i wyświetlanie w /proc/PID/sched czasu spędzanego przez procesy w stanie wymuszonej bezczynności, wykorzystywanego na przykład w celu zmniejszenia obciążenia w przypadku przegrzania procesora.
    • Dodano moduł gpio-sim, przeznaczony do symulacji układów GPIO w celach testowych.
    • Do polecenia „perf ftrace” dodano podkomendę „opóźnienie” w celu wygenerowania histogramów z informacjami o opóźnieniu.
    • Dodano zestaw narzędzi „RTLA” do analizy pracy w czasie rzeczywistym. Zawiera narzędzia takie jak osnoise (określa wpływ systemu operacyjnego na wykonanie zadania) i timerlat (zmienia opóźnienia związane z timerem).
    • Z realizacją koncepcji folio stron zintegrowano drugą serię poprawek, które przypominają strony złożone, ale mają poprawioną semantykę i przejrzystszą organizację pracy. Korzystanie z tomów pozwala przyspieszyć zarządzanie pamięcią w niektórych podsystemach jądra. Proponowane poprawki zakończyły konwersję pamięci podręcznej stron w celu wykorzystania tomów i dodały wstępną obsługę tomów w systemie plików XFS.
    • Dodano tryb kompilacji „make mod2noconfig”, który generuje konfigurację zbierającą wszystkie wyłączone podsystemy w postaci modułów jądra.
    • Podniesiono wymagania dotyczące wersji LLVM/Clang, która może zostać wykorzystana do zbudowania jądra. Kompilacja wymaga teraz co najmniej wersji LLVM 11.
  • Wirtualizacja i bezpieczeństwo
    • Zaproponowano zaktualizowaną implementację generatora liczb pseudolosowych RDRAND, odpowiedzialnego za działanie urządzeń /dev/random i /dev/urandom, wyróżniającą się przejściem na używanie funkcji skrótu BLAKE2s zamiast SHA1 do operacji mieszania entropii. Zmiana poprawiła bezpieczeństwo generatora liczb pseudolosowych poprzez wyeliminowanie problematycznego algorytmu SHA1 oraz wyeliminowanie nadpisania wektora inicjującego RNG. Ponieważ algorytm BLAKE2s jest lepszy pod względem wydajności od SHA1, jego użycie miało również pozytywny wpływ na wydajność.
    • Dodano ochronę przed lukami w procesorach spowodowanymi spekulatywnym wykonaniem instrukcji po operacjach bezwarunkowego skoku do przodu. Problem występuje w wyniku wywłaszczającego przetwarzania instrukcji bezpośrednio po instrukcji rozgałęzienia w pamięci (SLS, Straight Line Speculation). Włączenie ochrony wymaga kompilacji z aktualnie testowaną wersją GCC 12.
    • Dodano mechanizm śledzenia zliczania referencji (refcount, reference-count), mający na celu zmniejszenie liczby błędów w zliczaniu referencji prowadzących do dostępu do pamięci po jej zwolnieniu. Mechanizm jest obecnie ograniczony do podsystemu sieciowego, ale w przyszłości można go dostosować do innych części jądra.
    • Zaimplementowano rozszerzone sprawdzanie nowych wpisów w tablicy stron pamięci procesu, co pozwala wykryć określone rodzaje uszkodzeń i zatrzymać system, blokując ataki na wczesnym etapie.
    • Dodano możliwość rozpakowywania modułów jądra bezpośrednio przez samo jądro, a nie przez procedurę obsługi w przestrzeni użytkownika, co pozwala na użycie modułu LoadPin LSM w celu zapewnienia, że ​​moduły jądra zostaną załadowane do pamięci ze zweryfikowanego urządzenia magazynującego.
    • Dostarczono zestaw z flagą „-Wcast-function-type”, która umożliwia ostrzeganie o rzutowaniu wskaźników funkcji na niezgodny typ.
    • Dodano sterownik hosta wirtualnego pvUSB dla hiperwizora Xen, zapewniający dostęp do urządzeń USB przekazywanych do systemów gościa (umożliwia systemom gościa dostęp do fizycznych urządzeń USB przypisanych do systemu gościa).
    • Dodano moduł umożliwiający interakcję poprzez Wi-Fi z podsystemem IME (Intel Management Engine), który występuje w większości nowoczesnych płyt głównych z procesorami Intel i jest zaimplementowany jako oddzielny mikroprocesor działający niezależnie od procesora.
    • Dla architektury ARM64 zaimplementowano obsługę narzędzia debugującego KCSAN (Kernel Concurrency Sanitizer), zaprojektowanego w celu dynamicznego wykrywania warunków wyścigu w jądrze.
    • Dla 32-bitowych systemów ARM dodano możliwość wykorzystania mechanizmu KFENCE do wykrywania błędów podczas pracy z pamięcią.
    • Hiperwizor KVM dodaje obsługę instrukcji AMX (Advanced Matrix Extensions) zaimplementowanych w nadchodzących procesorach serwerowych Intel Xeon Scalable.
  • Podsystem sieciowy
    • Dodano obsługę odciążania operacji związanych z zarządzaniem ruchem na stronę urządzeń sieciowych.
    • Dodano możliwość korzystania z protokołu MCTP (Management Component Transport Protocol) na urządzeniach szeregowych. Protokołu MCTP można używać do komunikacji między kontrolerami zarządzania i powiązanymi z nimi urządzeniami (procesorami hosta, urządzeniami peryferyjnymi itp.).
    • Zoptymalizowano stos TCP, m.in. w celu poprawy wydajności wywołań recvmsg, zaimplementowano opóźnione zwalnianie buforów gniazd.
    • Na poziomie uprawnień CAP_NET_RAW dozwolone jest ustawianie trybów SO_PRIORITY i SO_MARK poprzez funkcję setsockopt.
    • W przypadku protokołu IPv4 surowe gniazda mogą być wiązane z nielokalnymi adresami IP przy użyciu opcji IP_FREEBIND i IP_TRANSPARENT.
    • Dodano sysctl arp_missed_max do skonfigurowania progowej liczby błędów podczas sprawdzania monitora ARP, po którym interfejs sieciowy zostaje wyłączony.
    • Dodano możliwość skonfigurowania oddzielnych wartości sysctl min_pmtu i mtu_expires dla sieciowych przestrzeni nazw.
    • Dodano możliwość ustawiania i określania rozmiaru buforów dla pakietów przychodzących i wychodzących do API ethtool.
    • Netfilter dodał obsługę filtrowania tranzytowego ruchu pppoe w moście sieciowym.
    • Moduł ksmbd, który implementuje serwer plików wykorzystujący protokół SMB3, dodał obsługę wymiany kluczy, udostępnił port sieciowy 445 dla smbdirect oraz dodał obsługę parametru „smb2 max credit”.
  • Sprzęt
    • Do podsystemu drm (Direct Renderering Manager) i sterownika i915 dodano obsługę ekranów do wyświetlania poufnych informacji, np. niektóre laptopy są wyposażone w ekrany z wbudowanym trybem poufnego przeglądania, co utrudnia oglądanie z zewnątrz . Dodane zmiany pozwalają na podłączenie wyspecjalizowanych sterowników dla takich ekranów i kontrolowanie trybów poufnego przeglądania poprzez ustawienie właściwości w zwykłych sterownikach KMS.
    • Sterownik amdgpu obsługuje technologię debugowania STB (Smart Trace Buffer) dla wszystkich procesorów graficznych AMD, które ją obsługują. STB ułatwia analizę awarii i identyfikację źródła problemów poprzez przechowywanie w specjalnym buforze informacji o funkcjach realizowanych przed ostatnią awarią.
    • Sterownik i915 dodaje obsługę układów Intel Raptor Lake S oraz domyślnie umożliwia obsługę podsystemu graficznego układów Intel Alder Lake P. Istnieje możliwość sterowania podświetleniem ekranu poprzez interfejs VESA DPCD.
    • W sterownikach fbcon/fbdev przywrócono obsługę sprzętowej akceleracji przewijania w konsoli.
    • Kontynuacja integracji zmian obsługujących chipy Apple M1. Zaimplementowano możliwość używania sterownika simpledrm w systemach z chipem Apple M1 do przesyłania danych wyjściowych poprzez bufor ramki zapewniany przez oprogramowanie sprzętowe.
    • Dodano obsługę ARM SoС, 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 (stosowany 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 procesorze MIPS: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2.
    • Dodano obsługę StarFive JH7100 SoC opartego na architekturze RISC-V.
    • Dodano sterownik lenovo-yogabook-wmi do sterowania podświetleniem klawiatury i uzyskiwania dostępu do różnych czujników w Lenovo Yoga Book.
    • Dodano sterownik asus_wmi_sensors umożliwiający dostęp do czujników używanych na płytach głównych Asus X370, X470, B450, B550 i X399 opartych na procesorach AMD Ryzen.
    • Dodano sterownik tabletów x86 z systemem Android dla tabletów z procesorem x86 dostarczanych z platformą Android.
    • Dodano obsługę ekranów dotykowych TrekStor SurfTab duo W1 i pióra elektronicznego dla tabletów Chuwi Hi10 Plus i Pro.
    • Sterowniki dla SoC Tegra 20/30 dodały obsługę zarządzania mocą i napięciem. Umożliwia uruchamianie na starszych 32-bitowych urządzeniach Tegra SoC, takich jak ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 i Pad TF300TG.
    • Dodano sterowniki do komputerów przemysłowych Siemens.
    • Dodano obsługę paneli LCD Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA i Team Source Display TST043015CMHX.
    • Dodano obsługę systemów dźwiękowych i kodeków AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, systemy Intel korzystające z NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. Problemy z dźwiękiem HD Tegra194 zostały rozwiązane. Dodano obsługę HDA dla kodeków CS35L41. Ulepszona obsługa systemów dźwiękowych dla laptopów Lenovo i HP, a także płyt głównych Gigabyte.

Źródło: opennet.ru

Dodaj komentarz