После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.12. Среди наиболее заметных изменений: поддержка зонированных блочных устройств в Btrfs, возможность маппинга идентификаторов пользователей для ФС, чистка устаревших ARM-архитектур, режим «нетерпеливой» записи в NFS, механизм LOOKUP_CACHED для определения файловых путей из кэша, поддержка атомарных инструкций в BPF, отладочная система KFENCE для выявления ошибок при работе с памятью, работающий в отдельном потоке ядра режим NAPI poll-инга в сетевом стеке, гипервизор ACRN, возможность изменения на лету preempt-модели в планировщике задач и поддержка LTO-оптимизаций при сборке в Clang.
В новую версию принято 14170 (в прошлом выпуске 15480) исправлений от 1946 (1991) разработчиков, размер патча — 38 Мб (изменения затронули 12102 (12090) файлов, добавлено 538599 (868025) строк кода, удалено 333377 (261456) строк). Около 43% всех представленных в 5.12 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% — с файловыми системами и 4% c внутренними подсистемами ядра.
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.
- В клиенте NFS реализован режим «нетерпеливой» записи (writes=eager), при включении которого операции записи в файл сразу передаются на сервер, минуя страничный кэш. Указанный режим позволяет сократить потребление памяти, обеспечивает мгновенное получение информации о завершении свободного места в ФС и в некоторых ситуациях даёт возможность добиться повышения производительности.
- 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.
- Добавлена возможность прикрепления BPF-программ к «голым» точкам трассировки (bare tracepoints), не связанным с видимыми в пространстве пользователя событиями трассировки (для подобных точек трассировки не гарантируется сохранение 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).
- Удалена поддержка системы профилирования «oprofile», которая не получила должного распространения и вытеснена более современным механизмом 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 в электронных блоках управления, приборных панелях, автомобильных информационных системах, потребительских IoT-устройств и другой встраиваемой технике. ACRN поддерживает два типа гостевых систем — привилегированные Service VM, которые используются для управления ресурсами системы (CPU, память, ввод/вывод и т.п.), и пользовательские User VM, в которых может запускаться Linux-дистрибутивы, Android и 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
