Wydanie jądra Linux 5.12

Po dwóch miesiącach pracy Linus Torvalds zaprezentował wydanie jądra Linux 5.12. Wśród najbardziej zauważalnych zmian znajdują się: wsparcie dla zonyzowanych urządzeń blokowych w Btrfs, możliwość mapowania identyfikatorów użytkowników dla systemów plików, usunięcie przestarzałych architektur ARM, tryb 'niecierpliwego' zapisu w NFS, mechanizm LOOKUP_CACHED do określania ścieżek plików z pamięci podręcznej, wsparcie dla atomowych instrukcji w BPF, system debugowania KFENCE do wykrywania błędów w pracy z pamięcią, działający w osobnym wątku jądra tryb NAPI pollingu w stosie sieciowym, hypervisor ACRN, możliwość dynamicznej zmiany modelu preempt w schedulerze zadań oraz wsparcie dla optymalizacji LTO podczas kompilacji w Clang.

W nowej wersji przyjęto 14170 (w poprzedniej edycji 15480) poprawek od 1946 (1991) programistów, rozmiar łaty wynosi 38 MB (zmiany objęły 12102 (12090) plików, dodano 538599 (868025) linii kodu, usunięto 333377 (261456) linii). Około 43% wszystkich zmian w wersji 5.12 dotyczy sterowników urządzeń, około 17% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 12% dotyczy stosu sieciowego, 5% – systemów plików, a 4% – wewnętrznych podsystemów jądra.

Główne nowości:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Zaimplementowano możliwość mapowania identyfikatorów użytkowników dla zamontowanych systemów plików (można mapować pliki jednego użytkownika na zamontowanej obcej partycji z innym użytkownikiem w bieżącym systemie). Mapowanie jest wspierane dla systemów plików FAT, ext4 oraz XFS. Proponowana funkcjonalność ułatwia współdzielenie plików przez różnych użytkowników i różne komputery, w tym mapowanie będzie stosowane w mechanizmie przenośnych katalogów domowych systemd-homed, umożliwiając użytkownikom przenoszenie swoich katalogów domowych na zewnętrzne nośniki i korzystanie z nich na różnych komputerach, gdzie rozkład identyfikatorów użytkowników jest różny. Innym użytecznym zastosowaniem jest organizacja dostępu do plików z zewnętrznego hosta, bez faktycznej zmiany danych dotyczących właścicieli plików w systemie plików.
    • W jądrze zaimplementowano poprawki LOOKUP_CACHED, umożliwiające wykonywanie operacji określania ścieżki pliku z przestrzeni użytkownika bez blokady, wyłącznie na podstawie danych dostępnych w pamięci podręcznej. Tryb LOOKUP_CACHED jest aktywowany w wywołaniu openat2() poprzez przekazanie flagi RESOLVE_CACHED, w ramach której dane są dostarczane wyłącznie z cache, a w przypadku, gdy określenie ścieżki wymaga dostępu do magazynu, zwracany jest błąd EAGAIN.
    • W systemie plików Btrfs dodano początkowe wsparcie dla zlokalizowanych urządzeń blokowych (urządzenia na dyskach twardych lub NVMe SSD, w których przestrzeń do przechowywania jest podzielona na strefy, składające się z grup bloków lub sektorów, do których dozwolone jest jedynie sekwencyjne dodawanie danych, z całkowitą aktualizacją całej grupy bloków). W trybie tylko do odczytu zaimplementowano wsparcie dla bloków z metadanymi i danymi o rozmiarze mniejszym niż strona (subpage).
    • W systemie plików F2FS dodano możliwość wyboru algorytmu i poziomu kompresji. Dodano wsparcie dla wysokiego poziomu kompresji dla algorytmu LZ4. Wprowadzono opcję montowania checkpoint_merge.
    • Wprowadzono nową komendę ioctl FS_IOC_READ_VERITY_METADATA do odczytu metadanych z plików zabezpieczonych przy użyciu fs-verity.
    • W kliencie NFS wprowadzono tryb 'niecierpliwego' zapisu (writes=eager), który, po włączeniu, natychmiast przesyła operacje zapisu do pliku na serwer, omijając pamięć podręczną stron. Tryb ten pozwala zmniejszyć zużycie pamięci, zapewnia natychmiastowy dostęp do informacji o zakończeniu dostępnej przestrzeni w systemie plików i w niektórych sytuacjach umożliwia zwiększenie wydajności.
    • W CIFS (SMB) dodano nowe opcje montowania: acregmax do zarządzania buforowaniem plików oraz acdirmax do zarządzania buforowaniem metadanych katalogów.
    • W XFS włączono tryb wielowątkowego sprawdzania limitów, przyspieszono wykonanie fsync, przeprowadzono przygotowanie kodu growfs do realizacji funkcji zmniejszania rozmiaru systemu plików.
  • Pamięć i usługi systemowe
    • Dodano podsystem DTMP (Dynamic Thermal Power Management), który umożliwia dynamiczne regulowanie zużycia energii różnych urządzeń na podstawie nałożonych ogólnych ograniczeń temperatury.
    • Zrealizowano możliwość kompilacji jądra za pomocą kompilatora Clang z włączeniem optymalizacji w czasie linkowania (LTO, Link Time Optimization). Optymalizacje LTO różnią się tym, że uwzględniają stan wszystkich plików biorących udział w procesie kompilacji, podczas gdy tradycyjne tryby optymalizacji optymalizują każdy plik z osobna i nie uwzględniają warunków wywołania funkcji zdefiniowanych w innych plikach. Na przykład, przy LTO możliwe jest inline'owe rozwijanie funkcji z innych plików, nieużywany kod nie jest włączany do pliku wykonywalnego, przeprowadzana jest kontrola typów oraz ogólna optymalizacja na poziomie projektu jako całości. Obsługa LTO jest obecnie ograniczona do architektur x86 i ARM64.
    • Wprowadzono możliwość wyboru trybów wywłaszczania (PREEMPT) w planowaniu zadań na etapie ładowania (preempt=none/voluntary/full) lub w czasie działania przez debugfs (/debug/sched_debug), w przypadku wskazania podczas kompilacji ustawienia PREEMPT_DYNAMIC. Wcześniej tryb wywłaszczania mógł być ustalany tylko na poziomie parametrów kompilacji. Zmiana ta umożliwia dystrybucjom dostarczanie jąder z włączonym trybem PREEMPT, zapewniającym minimalne opóźnienia dla środowisk graficznych, kosztem nieznacznego zmniejszenia wydajności, oraz w razie potrzeby powrót do trybów PREEMPT_VOLUNTARY (pośredni tryb dla środowisk graficznych) lub PREEMPT_NONE (zapewnia maksymalną wydajność dla). serwerów).
    • Do podpórki BPF dodano wsparcie dla atomowych operacji BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG i BPF_CMPXCHG.
    • Programy BPF mają możliwość dostępu do danych na stosie za pomocą wskaźników z zmiennym przesunięciem. Na przykład, jeśli wcześniej do uzyskania dostępu do tablicy na stosie można było używać tylko stałego indeksu elementu, to teraz można używać zmiennego. Kontrola dostępu odbywa się tylko w ramach istniejących granic przez weryfikator BPF. Możliwość ta jest dostępna tylko dla programów uprzywilejowanych z obawy przed wykorzystaniem luk związanych z spekulatywnym wykonaniem kodu.
    • Dodano możliwość dołączania programów BPF do 'nagich' punktów śledzenia (bare tracepoints), które nie są powiązane z widocznymi w przestrzeni użytkownika zdarzeniami śledzenia (dla takich punktów śledzenia nie gwarantuje się zachowania ABI).
    • Zrealizowano wsparcie dla magistrali CXL 2.0 (Compute Express Link), wykorzystywanej do organizacji szybkiej komunikacji CPU z urządzeniami pamięci (umożliwia korzystanie z zewnętrznych urządzeń pamięci jako części RAM lub pamięci trwałej, tak jakby ta pamięć była podłączona przez standardowy kontroler pamięci w CPU).
    • Dodano sterownik nvmem do pozyskiwania danych z zarezerwowanych przez firmware obszarów pamięci, bezpośrednio niedostępnych dla systemu Linux (np. pamięć EEPROM, fizycznie dostępna tylko dla firmware, lub dane dostępne tylko na wczesnym etapie uruchamiania).
    • Usunięto wsparcie dla systemu profilowania 'oprofile', który nie zyskał odpowiedniej popularności i został zastąpiony nowocześniejszym mechanizmem perf.
    • W interfejsie asynchronicznego wejścia/wyjścia io_uring zapewniono integrację z cgroup, kontrolującymi wykorzystanie pamięci.
    • Dla architektury RISC-V zrealizowano wsparcie dla systemów NUMA, a także mechanizmów kprobes i uprobes.
    • Dodano możliwość korzystania z wywołania systemowego kcmp() niezależnie od funkcjonalności zrzutów stanu procesów (checkpoint/restore).
    • Usunięto makra EXPORT_UNUSED_SYMBOL() i EXPORT_SYMBOL_GPL_FUTURE(), które od wielu lat nie są używane w praktyce.
  • Wirtualizacja i bezpieczeństwo
    • Dodano mechanizm ochrony KFence (Kernel Electric Fence), który wychwytuje błędy podczas pracy z pamięcią, takie jak przekroczenie granicy bufora i odwołania po zwolnieniu pamięci. W przeciwieństwie do mechanizmu debugowania KASAN, podsystem KFence wyróżnia się dużą szybkością działania i niskimi kosztami, co pozwala na wychwytywanie błędów pracy z pamięcią, które ujawniają się tylko w systemach produkcyjnych lub podczas długotrwałej pracy.
    • Dodano wsparcie dla hipernadzorcy ACRN, stworzonego z myślą o gotowości do realizacji zadań w czasie rzeczywistym oraz przydatności do użycia w systemach krytycznych. ACRN zapewnia minimalne koszty ogólne, gwarantuje niskie opóźnienia (low latency) i odpowiednią responsywność podczas interakcji z sprzętem. Obsługiwane są wirtualizacja zasobów CPU, wejścia/wyjścia, systemu sieciowego oraz operacji z grafiką i dźwiękiem. ACRN może być używany do uruchamiania kilku izolowanych maszyn wirtualnych w elektronicznych jednostkach sterujących, panelach przyrządowych, systemach informacyjnych pojazdów, konsumenckich urządzeniach IoT oraz innej technice wbudowanej. ACRN obsługuje dwa typy systemów gościnnych — uprzywilejowaną Service VM, która służy do zarządzania zasobami systemu (CPU, pamięć, wejście/wyjście itp.), oraz użytkowe User VM, w których można uruchamiać dystrybucje Linux, Android i Windows.
    • W podsystemie IMA (Architektura Pomiaru Integralności), która zapewnia utrzymanie bazy hashów do weryfikacji integralności plików i związanych z nimi metadanych, dodano możliwość weryfikacji integralności danych samego rdzenia, na przykład, do śledzenia zmian w regułach SELinux.
    • W hipernadzorze KVM dodano możliwość przechwytywania hipernadzorów Xen i ich przekazywania do emulatora działającego w przestrzeni użytkownika.
    • Dodano możliwość użycia systemu Linux jako środowiska głównego dla hipernadzoru Hyper-V. Środowisko główne ma bezpośredni dostęp do sprzętu i jest używane do uruchamiania systemów gościnnych (odpowiednik Dom0 w Xen). Do tej pory Hyper-V (Microsoft Hypervisor) obsługiwał Linux tylko w środowiskach gościnnych, podczas gdy sam hipernadzór był zarządzany z środowiska opartego na Windows.
    • Dodano wsparcie dla szyfrowania inline dla kart eMMC, które pozwala na wykorzystanie wbudowanych w kontroler dysku mechanizmów szyfrowania, które przeprowadzają przezroczyste szyfrowanie i deszyfrowanie wejścia/wyjścia.
    • Z kryptosystemu usunięto wsparcie dla nieużywanych w rdzeniu hashów RIPE-MD 128/256/320 oraz Tiger 128/160/192, a także dla strumieniowego szyfru Salsa20, który został zastąpiony algorytmem ChaCha20. Algorytm blake2 został zaktualizowany do realizacji blake2s.
  • Subsystem sieciowy
    • Dodano możliwość przeniesienia obsługi polowania NAPI sieciowych urządzeń do oddzielnego wątku rdzenia, co pozwala na zwiększenie wydajności w przypadku niektórych typów obciążenia. Wcześniej polowanie było wykonywane w kontekście softirq i nie było uwzględniane przez scheduler, co utrudniało precyzyjną optymalizację w celu osiągnięcia maksymalnej wydajności. Wykonywanie w oddzielnym wątku rdzenia umożliwia monitorowanie obsługi polowania z przestrzeni użytkownika, przypisywanie do oddzielnych rdzeni CPU i uwzględnianie w planowaniu przełączania zadań. Aby włączyć nowy tryb w sysfs, zaproponowano parametr /sys/class/net//threaded.
    • Kontynuowana integracja z jądrem MPTCP (MultiPath TCP), rozszerzenia protokołu TCP, które umożliwia jednoczesne przesyłanie pakietów poprzez wiele tras za pomocą różnych interfejsów sieciowych przypisanych do różnych adresów IP. W nowym wydaniu dodano możliwość przypisania priorytetu do określonych strumieni, co pozwala na przykład na organizację pracy zapasowych strumieni, które włączają się tylko w przypadku problemów z głównym strumieniem.
    • W IGMPv3 dodano wsparcie dla mechanizmu EHT (Explicit Host Tracking).
    • W mechanizmie filtracji pakietów netfilter wprowadzono możliwość posiadania określonych tabel dla uzyskania wyłącznej kontroli (na przykład, proces w tle zapory sieciowej może przydzielić sobie określone tabele, uniemożliwiając innym osobom ingerencję w nie).
  • Sprzęt
    • Przeprowadzono czyszczenie nieaktualnych i nieobsługiwanych platform ARM. Usunięto kod platform efm32, picoxcell, prima2, tango, u300, zx oraz c6x, a także związane z nimi sterowniki.
    • W sterowniku amdgpu wprowadzono możliwość podkręcania (OverDrive) kart opartych na GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Dodano wsparcie dla formatu pikseli FP16 dla DCE (engine kontrolera wyświetlacza) od 8 do 11 pokolenia. Dla GPU Navy Flounder (Navi 21) i APU Van Gogh wprowadzono możliwość resetowania GPU.
    • W sterowniku i915 dla kart graficznych Intel wprowadzono parametr i915.mitigations służący do wyłączenia mechanizmów izolacji i ochrony na rzecz zwiększenia wydajności. Dla procesorów od Tiger Lake włączono wsparcie mechanizmu VRR (Variable Rate Refresh), który umożliwia adaptacyjne zmienianie częstotliwości odświeżania monitora w celu zapewnienia płynności i braku zacięć podczas gier. Włączono wsparcie technologii Intel Clear Color dla zwiększenia dokładności odwzorowania kolorów. Dodano wsparcie DP-HDMI 2.1. Wprowadzono możliwość zarządzania podświetleniem paneli eDP. Dla GPU Gen9 z obsługą LSPCON (Level Shifter and Protocol Converter) włączono wsparcie HDR.
    • W sterowniku nouveau dodano początkowe wsparcie dla GPU NVIDIA opartego na architekturze GA100 (Ampere).
    • W sterowniku msm dodano wsparcie dla GPU Adreno 508, 509 i 512, używanych w chipach SDM (Snapdragon) 630, 636 i 660.
    • Dodano wsparcie dla kart dźwiękowych Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s i Pioneer DJM-750. Dodano wsparcie dla systemu dźwiękowego Intel Alder Lake PCH-P. Wprowadzono wsparcie dla programowej symulacji podłączenia i odłączenia gniazda audio w celu debugowania obsługi w przestrzeni użytkownika.
    • Dodano wsparcie dla konsol do gier Nintendo 64, produkowanych w latach 1996-2003 (wcześniejsze próby portowania Linuxa na Nintendo 64 nie zostały ukończone i miały status Vaporware). Motywacją do stworzenia nowego portu na przestarzałą platformę, która nie jest produkowana od prawie dwudziestu lat, jest chęć stymulowania rozwoju emulatorów oraz uproszczenia portowania gier.
    • Dodano sterownik dla kontrolera gier Sony PlayStation 5 DualSense.
    • Dodano wsparcie dla platform ARM, urządzeń i platform: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Dodano wsparcie dla smartfonów Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Dodano sterownik bcm-vk dla kart przyspieszających Broadcom VK (np. kart PCIe Valkyrie i Viper), które można wykorzystać do przeniesienia operacji związanych z przetwarzaniem dźwięku, wideo i obrazów na osobne urządzenie oraz do działań związanych z szyfrowaniem.
    • Dodano wsparcie dla platformy Lenovo IdeaPad z możliwością zarządzania stałym ładowaniem i podświetleniem klawiatury. Zapewnione zostało także wsparcie dla profilu ACPI platformy ThinkPad z opcją zarządzania trybami oszczędzania energii. Dodano sterownik dla podsystemu HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Dodano sterownik ov5647 z obsługą modułu kamery dla Raspberry Pi.
    • Dodano wsparcie dla RISC-V SoC FU740 i płyt HiFive Unleashed. Dodano również nowy sterownik dla chipu Kendryte K210.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster