Linux 6.14

Linux 6.14

Po dwóch miesiącach prac Linus Torvalds przedstawił wydanie jądra Linux 6.14. Wśród najważniejszych zmian: sterownik ntsync z prymitywami synchronizacji Windows NT, konfiguracja równoważenia operacji odczytu w Btrfs RAID1, wsparcie dla reflink w XFS w trybie realtime, możliwość nietrwałego buforowanego wejścia/wyjścia, dmem cgroup do ograniczania pamięci GPU, wykorzystanie io_uring w FUSE, delegowanie atrybutów w NFS, wsparcie dla atomowego zapisu w Device mapper, przyspieszenie dowiązań symbolicznych, zarządzanie możliwością wykonywania skryptów, wsparcie dla chipów Qualcomm Snapdragon 8 Elite, sterownik dla NPU AMD.

W nowej wersji wprowadzono 12115 poprawek od 1984 deweloperów, rozmiar łatki wynosi 39 MB (zmiany dotyczyły 10170 plików, dodano 531586 wierszy kodu, usunięto 235999 wierszy). W poprzednim wydaniu wprowadzono 14172 poprawki od 2086 deweloperów, rozmiar łatki wynosił 46 MB. Około 41% wszystkich zmian wprowadzonych w 6.14 dotyczy sterowników urządzeń, około 13% zmian odnosi się do aktualizacji kodu specyficznego dla architektur sprzętowych, 14% dotyczy stosu sieciowego, 7% – systemów plików i 4% z wewnętrznymi podsystemami jądra.

Podstawowe nowości:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • W systemie plików Btrfs pojawiła się wsparcie dla nowych metod równoważenia operacji odczytu pomiędzy nośnikami wchodzącymi w skład tablicy RAID1. Oprócz dotychczasowego rozkładu obciążenia na podstawie identyfikatorów procesów (pid), w nowej wersji wprowadzono trzy nowe tryby równoważenia: „rotation” (równomierny rozkład obciążenia pomiędzy wszystkimi nośnikami, tryb włączony domyślnie); „latency” (rozkład z uwzględnieniem opóźnień, może być przydatny w przypadku awarii lub niestabilnej pracy nośników); devid (ręczne zarządzanie). Aby zmienić tryb równoważenia dodano interfejs /sys/fs/btrfs//read_policy. Wśród innych zmian w Btrfs – realizacja ioctl FS_IOC_READ_VERITY_METADATA.
    • Dodano tryb nietrwałego buforowanego wejścia/wyjścia, w którym dane są usuwane z pamięci podręcznej zaraz po zakończeniu operacji odczytu lub zapisu. Zmiana może być korzystna przy używaniu bardzo szybkich urządzeń pamięci masowej, gdzie buforowanie operacji w pamięci RAM jest nadmiarowe. Dla takich urządzeń nowy tryb pozwala na wyeliminowanie zbędnego zużycia pamięci przez pamięć podręczną bez konieczności korzystania z bardziej skomplikowanego API bezpośredniego wejścia/wyjścia (Direct I/O).
    • W fsnotify, mechanizm śledzenia zmian w systemie plików, dodano Nowe zdarzenie FS_PRE_ACCESS, generowane na etapie przed dostępem do zawartości pliku. Zdarzenie jest przetwarzane w trybie synchronicznym, tj. jądro wysyła zdarzenie i czeka na odpowiedź. Jeśli odpowiedź zostanie odebrana – operacja jest wykonywana, a jeśli wystąpi błąd – wywołanie systemowe zwraca do przestrzeni użytkownika kod błędu. Dzięki FS_PRE_ACCESS proces w przestrzeni użytkownika może np. zorganizować wypełnianie pliku w miarę gotowości danych w wolnym magazynie.
    • Do podsystemu FUSE, który umożliwia tworzenie implementacji systemów plików w przestrzeni użytkownika, dodano wsparcie wymiany danych między jądrem a obsługą w przestrzeni użytkownika z wykorzystaniem mechanizmu wejścia/wyjścia io_uring. Zmiana ta pozwala zwiększyć wydajność FUSE poprzez ograniczenie przełączeń kontekstu między jądrem a przestrzenią użytkownika.
    • Do systemu plików XFS dodano możliwość wykorzystanie odwrotnego mapowania (rmap, reverse-mapping) w trybie pracy z przewidywalnymi opóźnieniami ("device realtime"). Odwrotne mapowanie pozwala określić, dla jakiego pliku wykorzystywany jest dany blok na urządzeniu magazynującym. Dzięki rmap w trybie realtime XFS zaimplementowano wsparcie dla operacji reflink, która umożliwia tworzenie kopii plików poprzez klonowanie metadanych pliku i tworzenie odniesienia do istniejących danych bez ich faktycznego kopiowania.
    • W VFS została wdrożona cache'owanie rozmiaru linków symbolicznych, co pozwoliło na 1.5% przyspieszenie wykonania operacji readlink (w teście z /initrd.img w ext4). Cache'owanie włączono w FS ext4 i tmpfs.
    • W implementacji NFSv4.2 dodano wsparcie delegowania atrybutów plików, które umożliwia zarządzanie takimi atrybutami plików, jak czas modyfikacji (mtime), po stronie klienta NFS, bez konieczności wyzwalania zmian na serwerze. W NFS poprawiono również wsparcie dla protokołu "LOCALIO", który pozwala określić, czy klient i serwer NFS znajdują się na tym samym hoście, aby wykorzystać odpowiednie optymalizacje, takie jak użycie bezpośredniego wejścia/wyjścia przez klienta (Direct I/O).
    • Zwiększona wydajności operacji odczytu w systemach plików NETFS, CIFS i AFS (Andrew File System).
    • W Squashfs włączono tryb bezpośredniego ładowania bloków do pamięci podręcznej strony (SQUASHFS_FILE_DIRECT), umożliwiający obejście oddzielnej pamięci podręcznej read_page. Zmiana ta pozwoliła na zmniejszenie ilości pamięci używanej podczas pracy Squashfs.
    • W wywołaniu systemowym statx() zrealizowano flaga STATX_DIO_READ_ALIGN, do określenia wymaganego wyrównania dla operacji odczytu z pliku.
    • W systemie plików Bcachefs został zaktualizowany i stabilizowany format struktur dyskowych. Jakiekolwiek dalsze zmiany w formacie będą uznawane za opcjonalne i będą wdrażane w formie opcjonalnych dodatków. Znacząco zwiększono szybkość sprawdzania integralności FS. Co więcej, w Bcachefs poprawiono działanie w trybie tylko do odczytu; rozwiązano problemy prowadzące do odwołań do pamięci po jej zwolnieniu (use after free); naprawiono problemy z reflink-wskazówkami w fsck; poprawiono przetwarzanie restartu transakcji.
    • Przywrócono moduł md-linear, przeznaczony do scalania urządzeń blokowych. Moduł ten wcześniej został uznany za przestarzały i usunięty z jądra 6.8, ale okazał się potrzebny, dlatego został teraz przywrócony.
    • Systemy plików F2FS i SQUASHFS przeszły na używanie folio pamięci (folio strony).
    • W sterownikach null_blk wprowadzono atrybut „rotational”, ustawiany za pomocą configfs, który pozwala symulować pracę z urządzeniem na bazie dysków obracających się w celu ułatwienia testowania funkcji jądra.
    • W systemie Device mapper oraz w modułach dm-mirror, dm-io, dm-table, dm-linear, dm-stripe i dm-raid1 zrealizowano wsparcie dla atomowej zapisu.
  • Pamięć i usługi systemowe
    • Zakończono integracja w jądrze sterownika ntsync, implementującego urządzenie symboliczne /dev/ntsync oraz zestaw prymitywów synchronizacji używanych w jądrze Windows NT. Realizacja takich prymitywów na poziomie jądra znacznie podnosi wydajność gier Windows uruchamianych przy użyciu Wine. Wzrost wydajności osiągany jest dzięki eliminacji narzutów związanych z używaniem RPC w przestrzeni użytkownika. Stworzenie oddzielnego sterownika dla jądra Linuksa tłumaczy się problematycznością właściwej realizacji API synchronizacji NT na istniejących prymitywach w jądrze.
    • Dodano nowy kontroler cgroup DMEM do oddzielnego śledzenia obszarów pamięci urządzeń, takich jak GPU. DMEM pozwala na tworzenie oddzielnych cgroup dla różnych zadań działających z GPU, aby mogły one działać bez wpływu na siebie. Nowa funkcjonalność rozwiązuje problem wymuszania zakończenia operacji z GPU przy wyczerpaniu dostępnej pamięci, dzięki śledzeniu pamięci odzwierciedlonej GPU i używanej przez sterowniki pamięci CPU w oddzielnych cgroup.
    • Wprowadzono optymalizacje skalowania operacji menedżera pamięci TLB (Translation Lookaside Buffer), stosowane w celu przyspieszenia konwersji adresów wirtualnych na fizyczne. Dodane optymalizacje polegają na opóźnionym aktualizowaniu niektórych struktur danych podczas przełączania kontekstu, co pozwala zwiększyć wydajność w trakcie wykonywania niektórych testów.
    • Zwiększona wydajność mechanizmu MGLRU (Multi-Generational LRU), stosowany do określenia, które strony pamięci są używane, a które można usunąć do wymiany.
    • Kontynuowano przenoszenie zmian z gałęzi Rust-for-Linux, związanych z użyciem języka Rust jako drugiego języka do tworzenia sterowników i modułów jądra (wsparcie dla Rust nie jest domyślnie włączone i nie prowadzi do włączenia Rust wśród obowiązkowych zależności do kompilacji jądra). Umożliwiono stosowanie w kodzie jądra makr „derive(CoercePointee)”, co pozwala na korzystanie z inteligentnych wskaźników z obiektami trait. W skład jądra włączone Rust-owalne dla PCI, platform, Open Firmware, urządzeń symbolicznych i niektórych funkcji wejścia/wyjścia. Greg Kroah-Hartman, odpowiedzialny za wsparcie stabilnej gałęzi jądra Linux, opisał aktualny stan jako „prawie gotowy do napisania rzeczywistego sterownika w Rust”.
    • W scenariuszach budowy zaproponowano nowy kod do generowania wersji symboli debugowania dla ładowanych modułów, który teraz korzysta z informacji zawartych w zapisach debugowych w formacie DWARF, a nie analizuje bezpośrednio kodu źródłowego. Zmiana pozwala na stosowanie wersjonowania symboli debugowych dla modułów napisanych w języku Rust. Stara implementacja również została pozostawiona w jądrze, a wybór generatora dokonywany jest na poziomie opcji budowy.
    • Dla architektury PowerPC zrealizowano wsparcie trybu leniwego odbierania zadań (PREEMPT_LAZY, lazy preemption), który odpowiada trybowi pełnego odbierania („full preemption”) dla zadań czasu rzeczywistego (RR/FIFO/DEADLINE), ale opóźnia odbieranie zwykłych zadań (SCHED_NORMAL) do granicy tików.
    • W subsystemie profilowania wydajności perf dodano wsparcie liczników zużycia energii procesorów AMD. Dodano możliwość działania na systemach mających do 2048 rdzeni CPU.
    • Dostarczono możliwość użycia parametru sysctl pid_max z przestrzeniami nazw identyfikatorów procesów (ID namespace). Parametr pid_max służy do ograniczenia maksymalnej wartości identyfikatorów procesów (PID) i może być teraz stosowany do ograniczenia maksymalnej liczby procesów uruchomionych w danej przestrzeni nazw. Przetwarzanie parametru odbywa się hierarchicznie, tzn. ograniczenia w zewnętrznych przestrzeniach nazw stosują się do zagnieżdżonych przestrzeni nazw.
    • Podczas używania wywołania systemowego do uruchomienia procesu execveat w systemie plików /proc teraz będzie wyświetlana nazwa uruchomionego pliku, a nie numer deskryptora pliku.
    • W składzie kodu źródłowego jądra (w katalogu samples) dodano narzędzie mountinfo, ilustrujące użycie wywołań systemowych statmount() i listmount().
    • W podsyle BPF zaproponowano nowe funkcje bpf_local_irq_save() i bpf_local_irq_restore() do tymczasowego wyłączania przerwań na lokalnym CPU. Funkcje mogą być wykorzystywane do realizacji struktur, których przetwarzanie nie jest wstrzymywane przez przerwania.
    • W wywołaniu systemowym madvise() przy użyciu flag MADV_DONTNEED i MADV_FREE zapewniono zwalnianie tabel stron pamięci powiązanych z zwalnianym zakresem adresów, ponieważ w niektórych sytuacjach puste strony pamięci mogą zajmować dość dużo pamięci.
    • Dla architektury OpenRISC wdrożono wsparcie mechanizmu sekwencji restartowalnych (rseq, restartable sequences), przeznaczonego do szybkiego atomowego wykonania operacji, które w przypadku przerwania przez inny wątek są czyszczone i podejmowana jest ponowna próba wykonania.
    • Przeprowadzono reorganizację kodu z wdrożeniem algorytmów CRC32 i CRC-T10DIF, który już nie koliduje z subsystemem crypto i jest wywoływany bezpośrednio z interfejsu bibliotecznego. Zmiana pozwoliła uprościć kod i zwiększyć jego wydajność.
    • W systemie asynchronicznego wejścia/wyjścia io_uring dodano interfejs do przesyłania dodatkowych metadanych o integralności podczas operacji odczytu i zapisu.
  • Wirtualizacja i bezpieczeństwo
    • Do wywołania systemowego execveat dodano flaga AT_EXECVE_CHECK, umożliwiająca przeprowadzenie kontroli dopuszczalności wykonania pliku bez jego faktycznego uruchomienia, z uwzględnieniem polityk bezpieczeństwa, praw dostępu i aktywnych modułów LSM. Aby używać razem z AT_EXECVE_CHECK, zaproponowano flagi securebit SECBIT_EXEC_RESTRICT_FILE i SECBIT_EXEC_DENY_INTERACTIVE, które można wykorzystać do ograniczenia wykonania plików skryptowych w interpretowanych językach programowania. Flaga SECBIT_EXEC_RESTRICT_FILE nakazuje kompilatorom i interpreterom użycie opcji AT_EXECVE_CHECK do weryfikacji dopuszczalności wykonania, a flaga SECBIT_EXEC_DENY_INTERACTIVE zabrania przetwarzania interaktywnych poleceń. Główną ideą zmiany jest możliwość zastosowania polityk bezpieczeństwa nie tylko do tradycyjnych plików wykonywalnych, ale także do plików tekstowych ze skryptami, które mogą być załadowane przez uruchomienie interpretera (tj. zakaz wykonania może być realizowany nie tylko przy uruchamianiu „./script.sh”, ale także przy wykonaniu w formie „sh script.sh”).
    • Na systemach x86 wdrożono wsparcie dla chronionych liczników czasu dla systemów gościnnych, które nie pozwalają na zmianę systemowego zegara gościa z środowiska hosta. Możliwość ta jest realizowana na podstawie mechanizmu AMD SEV (Secure Encrypted Virtualization), stosowanego w systemach wirtualizacji do ochrony maszyn wirtualnych przed ingerencją ze strony hipernadzorcy lub administratora systemu hosta.
    • W systemie mantedowanego dostępu SELinux dodano wsparcie xperm-reguł, pozwalających na powiązanie polityk SELinux z określonymi wywołaniami ioctl() lub komunikatami netlink.
    • Do podpisywania modułów jądra cyfrowym podpisem zamiast SHA1 domyślnie zaangażowany używany jest algorytm SHA512.
    • W sterownikach dla systemów gościnnych VirtualBox wliczona wsparcie dla architektury ARM64.
    • W hypervisorze KVM są kontynuowane prace z wykorzystaniem mechanizmu Intel TDX (Trusted Domain Extensions) do szyfrowania pamięci systemów gościnnych.
    • W virtio_blk dodano wsparcie trybu przywracania błędów.
  • Subsystem sieciowy
    • W implementacji protokołu RxRPC pojawiła się możliwość użycia dużych ramek UDP w celu zwiększenia przepustowości.
    • Dla TCP dodano wsparcie dla algorytmu RACK-TLP do określania utraty pakietów.
    • Dodano nowy parametr sysctl tcp_tw_reuse_delay, działający w kontekście przestrzeni nazw (network namespace) i umożliwiający określenie opóźnienia, jakie występuje przed ponownym użyciem numeru portu sieciowego po zamknięciu gniazda TCP.
    • Dodano możliwość wyboru dostawcy czasu (PTP) do generowania znaczników czasowych na poziomach PHY i MAC.
    • Dla IPsec zrealizowano wsparcie mechanizmu agregacji i fragmentacji enkapsulowanych pakietów IP – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
    • W systemie gniazd sieciowych dodano wsparcie przekazywanie informacji o priorytecie (SO_PRIORITY) w formie komunikatów kontrolnych (cmsg). Dla gniazd sieciowych dodano opcja SO_RCVPRIORITY, włączająca w funkcji recvmsg() przekazywanie informacji o priorytecie gniazda.
  • Sprzęt
    • Dodano napędem amdxdna dla zintegrowanych w procesorach AMD akceleratorów NPU (Neural Processing Unit) opartych na architekturze XDNA, przeznaczonych do przyspieszania operacji związanych z uczeniem maszynowym. NPU oparty na architekturze XDNA jest dostarczany w seriach procesorów AMD Ryzen 7040 i 8040, akceleratorach AMD Alveo V70 oraz SoC AMD Versal.
    • W sterowniku i915 dodano identyfikatory nowych GPU, w których wprowadzono obsługę błędów inicjalizacji HDMI, zwiększono niezawodność resetowania GPU w systemach Haswell i starszych.
    • Kontynuowano prace nad sterownikiem drm (Direct Rendering Manager) Xe dla GPU opartych na architekturze Intel Xe, wykorzystywanych w kartach graficznych Intel z rodziny Arc oraz zintegrowanej grafice, zaczynającej się od procesorów Tiger Lake.
    • W sterowniku Nouveau dodano możliwość przesyłania buforów z logami GSP-RM przez debugfs.
    • W sterowniku AMDGPU wprowadzono wsparcie mechanizmu DRM panic, który wyświetla coś w rodzaju "niebieskiego ekranu śmierci" w przypadku awarii. Kontynuowane są przygotowania do wsparcia przyszłej serii kart graficznych Radeon RX 9000 na bazie architektury RDNA4. Zaktualizowano wsparcie dla DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS i ISP.
    • W sterowniku DRM msm (GPU Qualcomm Adreno) dodano wsparcie dla platformy Qualcomm SM6150 (QCS615).
    • W sterowniku DRM panfrost dodano wsparcie dla SoC MediaTek MT8188 z GPU Mali-G57.
    • W sterowniku DRM vc4 dodano wsparcie dla SoC Broadcom BCM2712 (Raspberry Pi 5).
    • W sterowniku vfio nvgrace-gpu dodano wsparcie chipów NVIDIA Grace Blackwell 200.
    • W skład włączono sterownik do kontrolerów Intel THC (Touch Host Controller), stosowany do interakcji z ekranami dotykowymi i touchpadami w niektórych laptopach. Dodano wsparcie dla urządzeń Wacom z interfejsem PCI. Dodano wsparcie dla kontrolerów gier QH Electronics.
    • Dodano wsparcie Platformy ARM, SoC i urządzenia: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Dodano wsparcie dla SoC. SpacemiT K1 oparty na architekturze RISC-V.
    • W systemie dźwiękowym ALSA dla MIDI 2.0 rozszerzone API rawmidi i sequencer. W API, które przenosi operacje kompresji na stronę karty dźwiękowej, dodano wsparcie dla ASRC (Asynchronous Sample Rate Conversion).
    • Dodano wsparcie dla systemów dźwiękowych urządzeń Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 i 18i20. Dodano wsparcie dla bezprzewodowych słuchawek SteelSeries Arctis 9.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster