Wydanie jądra Linuksa 5.12

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linuksa 5.12. Wśród najbardziej zauważalnych zmian: obsługa urządzeń blokowych strefowych w Btrfs, możliwość mapowania identyfikatorów użytkowników dla systemu plików, czyszczenie starszych architektur ARM, tryb „chętnego” zapisu w NFS, mechanizm LOOKUP_CACHED do określania ścieżek plików z pamięci podręcznej , obsługa instrukcji atomowych w BPF, system debugowania KFENCE do identyfikacji błędów podczas pracy z pamięcią, tryb odpytywania NAPI działający w osobnym wątku jądra w stosie sieciowym, hypervisor ACRN, możliwość zmiany modelu z wywłaszczaniem na bieżąco w zadaniu harmonogram i wsparcie optymalizacji LTO podczas budowania w Clang.

Nowa wersja zawiera 14170 (w poprzednim wydaniu 15480) poprawek od programistów z 1946 (1991), rozmiar łatki to 38 MB (zmiany dotyczyły 12102 (12090) plików, dodano 538599 (868025) linii kodu, 333377 (261456) linie zostały usunięte). Około 43% wszystkich zmian wprowadzonych w wersji 5.12 dotyczy sterowników urządzeń, około 17% zmian dotyczy aktualizacji kodu specyficznego dla architektur sprzętowych, 12% dotyczy stosu sieciowego, 5% dotyczy systemów plików, a 4% są powiązane z wewnętrznymi podsystemami jądra.

Główne innowacje:

  • Podsystem dyskowy, wejścia/wyjścia 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 partycji obcej z innym użytkownikiem w bieżącym systemie). Mapowanie jest obsługiwane dla systemów plików FAT, ext4 i XFS. Proponowana funkcjonalność ułatwia udostępnianie plików pomiędzy różnymi użytkownikami i na różnych komputerach, w tym mapowanie zostanie wykorzystane w mechanizmie przenośnych katalogów domowych systemd-homed, umożliwiając użytkownikom przenoszenie swoich katalogów domowych na nośniki zewnętrzne i używanie ich na różnych komputerach, mapowanie identyfikatory użytkowników, które nie pasują. Inną przydatną aplikacją jest organizacja zapewniania współdzielonego dostępu do plików z zewnętrznego hosta, bez faktycznej zmiany danych o właścicielach plików w systemie plików.
    • Do jądra zaadoptowano łatki LOOKUP_CACHED, które umożliwiają wykonywanie operacji określania ścieżki pliku z przestrzeni użytkownika bez blokowania, wyłącznie na podstawie danych dostępnych w pamięci podręcznej. Tryb LOOKUP_CACHED aktywowany jest w wywołaniu openat2() poprzez przekazanie flagi RESOLVE_CACHED, w której podawane są dane wyłącznie z pamięci podręcznej, a jeśli wyznaczenie ścieżki wymaga dostępu do dysku, zwracany jest błąd EAGAIN.
    • W systemie plików Btrfs dodano wstępną obsługę strefowych urządzeń blokowych (urządzenia na twardych dyskach magnetycznych lub dyskach SSD NVMe, których przestrzeń dyskowa jest podzielona na strefy tworzące grupy bloków lub sektorów, do których dozwolone jest jedynie sekwencyjne dodawanie danych, aktualizacja całej grupy bloków). W trybie tylko do odczytu zaimplementowana jest obsługa bloków z metadanymi i danymi mniejszymi niż strona (podstrona).
    • W systemie plików F2FS dodano możliwość wyboru algorytmu i poziomu kompresji. Dodano obsługę wysokiego poziomu kompresji dla algorytmu LZ4. Zaimplementowano opcję montażu checkpoint_merge.
    • Zaimplementowano nową komendę ioctl FS_IOC_READ_VERITY_METADATA do odczytu metadanych z plików chronionych za pomocą fs-verity.
    • Klient NFS implementuje tryb zapisu „eager” (writes=eager), po włączeniu operacje zapisu do pliku są natychmiast przesyłane do serwera z pominięciem pamięci podręcznej strony. Tryb ten pozwala zmniejszyć zużycie pamięci, zapewnia natychmiastowe otrzymanie informacji o końcu wolnego miejsca w systemie plików, a w niektórych sytuacjach umożliwia osiągnięcie zwiększonej wydajności.
    • Do CIFS (SMB) dodano nowe opcje montowania: acregmax do kontrolowania buforowania plików i acdirmax do kontrolowania buforowania metadanych katalogów.
    • W XFS włączono tryb wielowątkowego sprawdzania kwot, przyspieszono wykonywanie fsync oraz przygotowano kod Growfs realizujący funkcję zmniejszania rozmiaru systemu plików.
  • Usługi pamięci i systemu
    • Dodano podsystem DTMP (Dynamic Thermal Power Management), pozwalający na dynamiczną regulację poboru mocy różnych urządzeń w oparciu o ustawione ogólne limity temperatur.
    • Zaimplementowano możliwość budowy jądra przy pomocy kompilatora Clang z uwzględnieniem optymalizacji na etapie linkowania (LTO, Link Time Optimization). Optymalizacje LTO różnią się uwzględnieniem stanu wszystkich plików biorących udział w procesie kompilacji, podczas gdy tradycyjne tryby optymalizacji optymalizują każdy plik osobno i nie uwzględniają warunków wywołania funkcji zdefiniowanych w innych plikach. Na przykład w przypadku LTO możliwe jest wdrożenie inline funkcji z innych plików, niewykorzystany kod nie jest umieszczany w pliku wykonywalnym, sprawdzanie typu i ogólna optymalizacja przeprowadzana jest na poziomie projektu jako całości. Obsługa LTO jest obecnie ograniczona do architektur x86 i ARM64.
    • Można wybrać tryby wywłaszczania (PREEMPT) w harmonogramie zadań na etapie rozruchu (preempt=none/voluntary/full) lub podczas pracy z debugfami (/debug/sched_debug), jeśli podczas budowania jądra określono ustawienie PREEMPT_DYNAMIC. Wcześniej tryb wytłaczania można było ustawić tylko na poziomie parametrów złożenia. Zmiana umożliwia dystrybucjom dostarczanie jąder z włączonym trybem PREEMPT, który zapewnia minimalne opóźnienia dla komputerów stacjonarnych kosztem niewielkiego spadku przepustowości, a w razie potrzeby powrót do PREEMPT_VOLUNTARY (tryb pośredni dla komputerów stacjonarnych) lub PREEMPT_NONE (zapewnia maksymalną przepustowość serwerom). .
    • Do podsystemu BPF dodano obsługę operacji atomowych 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 ze zmiennymi przesunięciami. Na przykład, jeśli wcześniej można było używać tylko indeksu elementu stałego, aby uzyskać dostęp do tablicy na stosie, teraz można użyć indeksu zmiennego. Kontrola dostępu wyłącznie w obrębie istniejących granic prowadzona jest przez weryfikatora BPF. Ta funkcja jest dostępna tylko dla programów uprzywilejowanych ze względu na ryzyko wykorzystania spekulacyjnych luk w zabezpieczeniach związanych z wykonaniem kodu.
    • Dodano możliwość dołączania programów BPF do samych punktów śledzenia, które nie są powiązane ze zdarzeniami śledzenia widocznymi w przestrzeni użytkownika (w przypadku takich punktów śledzenia nie gwarantuje się zachowania ABI).
    • Zaimplementowano obsługę magistrali CXL 2.0 (Compute Express Link), która służy do organizowania szybkiej interakcji pomiędzy procesorem a urządzeniami pamięci (pozwala na wykorzystanie zewnętrznych urządzeń pamięci jako części pamięci RAM lub pamięci stałej, tak jakby pamięć ta zostały połączone poprzez standardowy kontroler pamięci w procesorze).
    • Dodano sterownik nvmem do pobierania danych z obszarów pamięci zarezerwowanych przez oprogramowanie sprzętowe, które nie są bezpośrednio dostępne dla systemu Linux (na przykład pamięć EEPROM, która jest fizycznie dostępna tylko dla oprogramowania sprzętowego lub dane, które są dostępne tylko we wczesnej fazie rozruchu).
    • Usunięto obsługę systemu profilowania „oprofile”, który nie był powszechnie stosowany i zastąpiono go nowocześniejszym mechanizmem perf.
    • Asynchroniczny interfejs we/wy io_uring zapewnia integrację z grupami c, które kontrolują wykorzystanie pamięci.
    • Architektura RISC-V obsługuje systemy NUMA, a także mechanizmy kprobes i uprobes.
    • Dodano możliwość użycia wywołania systemowego kcmp() niezależnie od funkcjonalności migawek stanu procesów (punkt kontrolny/przywracanie).
    • Usunięto makra EXPORT_UNUSED_SYMBOL() i EXPORT_SYMBOL_GPL_FUTURE(), które nie były stosowane w praktyce od wielu lat.
  • Wirtualizacja i bezpieczeństwo
    • Dodano mechanizm ochronny KFence (Kernel Electric Fence), który wychwytuje błędy podczas pracy z pamięcią, takie jak przepełnienie bufora i dostęp po zwolnieniu pamięci. W przeciwieństwie do mechanizmu debugującego KASAN, podsystem KFence charakteryzuje się dużą szybkością działania i niskim narzutem, co pozwala wychwytywać błędy pamięci pojawiające się jedynie na pracujących systemach lub podczas długotrwałej pracy.
    • Dodano obsługę hiperwizora ACRN, napisaną z myślą o gotowości do zadań w czasie rzeczywistym i przydatności do stosowania w systemach o znaczeniu krytycznym. ACRN zapewnia minimalny narzut, gwarantuje niskie opóźnienia i odpowiednią responsywność podczas interakcji ze sprzętem. Obsługuje wirtualizację zasobów procesora, wejść/wyjść, podsystemu sieciowego, operacji graficznych i dźwiękowych. ACRN może być używany do uruchamiania wielu izolowanych maszyn wirtualnych w elektronicznych jednostkach sterujących, tablicach przyrządów, samochodowych systemach informacyjnych, konsumenckich urządzeniach IoT i innych technologiach wbudowanych. ACRN obsługuje dwa typy systemów gościnnych - maszyny wirtualne z uprzywilejowaną usługą, które służą do zarządzania zasobami systemowymi (procesorem, pamięcią, we/wy itp.) oraz niestandardowe maszyny wirtualne użytkowników, na których można uruchamiać dystrybucje systemów Linux, Android i Windows.
    • W podsystemie IMA (Integrity Measurement Architecture), utrzymującym bazę haszującą służącą do sprawdzania integralności plików i powiązanych z nimi metadanych, możliwe stało się sprawdzenie integralności danych samego jądra, np. w celu śledzenia zmian w regułach SELinux .
    • Do hiperwizora KVM dodano możliwość przechwytywania hiperwywołań Xen i przekazywania ich do emulatora działającego w przestrzeni użytkownika.
    • Dodano możliwość używania Linuksa jako środowiska głównego dla hiperwizora Hyper-V. Środowisko root ma bezpośredni dostęp do sprzętu i służy do uruchamiania systemów gościnnych (analogicznie do Dom0 w Xen). Do tej pory Hyper-V (Microsoft Hypervisor) obsługiwał Linuksa tylko w środowiskach gościnnych, ale sam hypervisor był kontrolowany ze środowiska opartego na systemie Windows.
    • Dodano obsługę szyfrowania wbudowanego dla kart eMMC, umożliwiając korzystanie z mechanizmów szyfrujących wbudowanych w kontroler napędu, które w przejrzysty sposób szyfrują i deszyfrują wejścia/wyjścia.
    • Usunięto obsługę nieużywanych w rdzeniu skrótów RIPE-MD 128/256/320 i Tiger 128/160/192, a także szyfr strumieniowy Salsa20, który został zastąpiony algorytmem ChaCha20. podsystem kryptograficzny. Algorytm blake2 został zaktualizowany w celu implementacji blake2s.
  • Podsystem sieciowy
    • Dodano możliwość przeniesienia modułu obsługi odpytywania NAPI dla urządzeń sieciowych do osobnego wątku jądra, co pozwala na poprawę wydajności w przypadku niektórych typów obciążeń. Wcześniej odpytywanie odbywało się w kontekście softirq i nie było objęte harmonogramem zadań, co utrudniało przeprowadzanie precyzyjnych optymalizacji w celu osiągnięcia maksymalnej wydajności. Wykonywanie w oddzielnym wątku jądra pozwala na obserwację procedury obsługi odpytywania z przestrzeni użytkownika, dołączonej do poszczególnych rdzeni procesora i brane pod uwagę podczas planowania przełączania zadań. Aby włączyć nowy tryb w sysfs, zaproponowano parametr /sys/class/net//threaded.
    • Integracja z rdzeniem MPTCP (MultiPath TCP), rozszerzenie protokołu TCP do organizowania działania połączenia TCP z dostarczaniem pakietów jednocześnie kilkoma trasami przez różne interfejsy sieciowe powiązane z różnymi adresami IP. W nowej wersji dodano możliwość nadawania priorytetu poszczególnym wątkom, co pozwala np. organizować pracę wątków zapasowych, które włączają się tylko w przypadku problemów z wątkiem podstawowym.
    • IGMPv3 dodaje obsługę mechanizmu EHT (Explicit Host Tracking).
    • Silnik filtrowania pakietów Netfiltera umożliwia posiadanie określonych tabel w celu uzyskania wyłącznej kontroli (na przykład proces zapory działającej w tle może przejąć na własność określone tabele, uniemożliwiając nikomu ingerowanie w nie).
  • Sprzęt
    • Oczyściliśmy przestarzałe i niekonserwowane platformy ARM. Kod dla platform efm32, picoxcell, prima2, tango, u300, zx i c6x, a także powiązane z nimi sterowniki zostały usunięte.
    • Sterownik amdgpu zapewnia możliwość podkręcania (OverDrive) kart opartych na procesorze graficznym Sienna Cichlid (Navi 22, Radeon RX 6xxx). Dodano obsługę formatu pikseli FP16 dla DCE (silnik kontrolera wyświetlania) od 8. do 11. generacji. Dla GPU Navy Flounder (Navi 21) i APU Van Gogh zaimplementowano możliwość resetowania GPU.
    • Sterownik i915 dla kart graficznych Intel implementuje parametr i915.mitigations w celu wyłączenia mechanizmów izolacji i ochrony na rzecz lepszej wydajności. W przypadku chipów począwszy od Tiger Lake dołączona jest obsługa mechanizmu VRR (Variable Rate Refresh), który umożliwia adaptacyjną zmianę częstotliwości odświeżania monitora, aby zapewnić płynność i brak przerw podczas gier. Dodano obsługę technologii Intel Clear Color, która zapewnia lepszą dokładność kolorów. Dodano obsługę DP-HDMI 2.1. Zaimplementowano możliwość sterowania podświetleniem paneli eDP. W przypadku procesorów graficznych Gen9 z obsługą LSPCON (przesuwanie poziomu i konwerter protokołu) obsługa HDR jest włączona.
    • Sterownik nouveau dodaje początkową obsługę procesorów graficznych NVIDIA opartych na architekturze GA100 (Ampere).
    • Sterownik msm dodaje obsługę procesorów graficznych Adreno 508, 509 i 512 stosowanych w układach SDM (Snapdragon) 630, 636 i 660.
    • Dodano obsługę kart dźwiękowych Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s i Pioneer DJM-750. Dodano obsługę podsystemu audio Intel Alder Lake PCH-P. Zaimplementowano obsługę symulacji programowej podłączania i odłączania złącza audio w celu debugowania procedur obsługi w przestrzeni użytkownika.
    • Dodano obsługę konsol do gier Nintendo 64 wyprodukowanych w latach 1996-2003 (poprzednie próby przeniesienia Linuksa na Nintendo 64 nie zostały zakończone i zostały sklasyfikowane jako Vaporware). Motywacją do stworzenia nowego portu na przestarzałą platformę, która nie była wydawana od prawie dwudziestu lat, jest chęć pobudzenia rozwoju emulatorów i uproszczenia przenoszenia gier.
    • Dodano sterownik dla kontrolera gier Sony PlayStation 5 DualSense.
    • Dodano obsługę płyt, urządzeń i platform ARM: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Dodano obsługę 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 akceleratorów Broadcom VK (na przykład kart Valkyrie i Viper PCIe), którego można użyć do przeniesienia operacji przetwarzania audio, wideo i obrazu, a także operacji związanych z szyfrowaniem na osobne urządzenie.
    • Dodano obsługę platformy Lenovo IdeaPad z możliwością kontrolowania ciągłego ładowania i podświetlenia klawiatury. Zapewniona jest także obsługa profilu ACPI platformy ThinkPad z możliwością kontrolowania trybów zużycia 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 obsługę płyt RISC-V SoC FU740 i HiFive Unleashed. Dodano także nowy sterownik dla układu Kendryte K210.

Źródło: opennet.ru

Dodaj komentarz