Po dwóch miesiącach prac nad Linusem Torvaldsem wydanie jądra . Wśród najbardziej zauważalnych zmian: nowy interfejs dla asynchronicznego I/O io_uring, możliwość wykorzystania NVDIMM jako RAM, obsługa współdzielonej pamięci wirtualnej w Nouveau, obsługa skalowalnego monitorowania bardzo dużych systemów plików poprzez fanotify, możliwość konfiguracji kompresji Zstd poziomów w Btrfs, nowy moduł obsługi TEO procesora, implementacja wywołań systemowych w celu rozwiązania problemu 2038, możliwość uruchamiania z urządzeń mapujących urządzenia bez initramfs, moduł SafeSetID LSM, obsługa połączonych łatek na żywo.
:
- Podsystem dyskowy, wejścia/wyjścia i systemy plików
- Zaimplementowano nowy interfejs dla asynchronicznych wejść/wyjść - , który wyróżnia się obsługą odpytywania we/wy i możliwością pracy z buforowaniem lub bez. Przypomnijmy, że zaproponowany wcześniej mechanizm asynchronicznego wejścia/wyjścia „aio” nie obsługiwał buforowanych wejść/wyjść, mógł działać jedynie w trybie O_DIRECT (bez buforowania i omijania pamięci podręcznej), miał problemy z blokowaniem w związku z oczekiwaniem na dostępność metadanych oraz wykazywały duże koszty ogólne wynikające z kopiowania danych do pamięci.
W ramach API
Programiści io_uring starali się wyeliminować niedociągnięcia starego interfejsu aio. Przez io_uring jest bardzo blisko i znacznie wyprzedza libaio podczas pracy z włączonym odpytywaniem. Przygotowano bibliotekę umożliwiającą wykorzystanie io_uring w aplikacjach końcowych działających w przestrzeni użytkownika , który zapewnia framework wysokiego poziomu dla interfejsu jądra; - W mechanizmie śledzenia zdarzeń w FS fanotify() wsparcie dla śledzenia sytuacji superbloków i zmian strukturalnych (zdarzenia tworzenia, usuwania i przenoszenia katalogów). Zaprezentowane funkcje pomagają rozwiązać problemy ze skalowalnością, które pojawiają się podczas tworzenia rekurencyjnego śledzenia zmian w bardzo dużych systemach plików przy użyciu mechanizmu inotify (bezpośrednie zmiany można było wcześniej śledzić tylko za pomocą inotify, ale
wydajność w warunkach rekurencyjnego śledzenia dużych zagnieżdżonych katalogów pozostawia wiele do życzenia). Teraz takie monitorowanie można skutecznie przeprowadzić za pomocą fanotify; - W systemie plików Btrfs możliwość dostosowania poziomu kompresji dla algorytmu zstd, co można uznać za optymalny kompromis pomiędzy szybką, ale nieefektywną kompresją lz4 i powolną, ale dobrą kompresją xz. Przez analogię do tego, jak poprzednio można było ustawić poziom kompresji podczas korzystania z zlib, do zstd dodano obsługę opcji montowania „-o compress=zstd:level”. Podczas testów minimalny pierwszy poziom zapewnił kompresję danych 2.658 razy przy prędkości kompresji 438.47 MB/s, prędkości dekompresji 910.51 MB/s i zużyciu pamięci 780 MB, a maksymalny poziom 15 zapewnił 3.126 razy, ale przy kompresji prędkość 37.30 MB/s, rozpakowywanie 878.84 MB/s i zużycie pamięci 2547 MB;
- możliwość rozruchu z systemu plików znajdującego się na urządzeniu mapującym urządzenia, bez użycia initramfs. Począwszy od bieżącej wersji jądra, urządzenia mapujące urządzenia mogą być używane bezpośrednio podczas procesu uruchamiania, na przykład jako partycja z głównym systemem plików. Partycję konfiguruje się za pomocą parametru rozruchowego „dm-mod.create”. Dopuszczalne do ładowania moduły mapowania urządzeń obejmują: „krypt”, „opóźnienie”, „liniowy”, „snapshot-origin” i „verity”;
- Do systemu plików F2FS zorientowanego na dyski Flash dodano flagę F2FS_NOCOW_FL, która pozwala na wyłączenie trybu kopiowania przy zapisie dla danego pliku;
- System plików usunięty z jądra , który jest odmianą ext2, przystosowaną do pracy z obiektowymi magazynami danych OSD (Object-Based Storage Device). Usunięto również obsługę protokołu SCSI dla takich obiektowych urządzeń pamięci masowej;
- Zaimplementowano nowy interfejs dla asynchronicznych wejść/wyjść - , który wyróżnia się obsługą odpytywania we/wy i możliwością pracy z buforowaniem lub bez. Przypomnijmy, że zaproponowany wcześniej mechanizm asynchronicznego wejścia/wyjścia „aio” nie obsługiwał buforowanych wejść/wyjść, mógł działać jedynie w trybie O_DIRECT (bez buforowania i omijania pamięci podręcznej), miał problemy z blokowaniem w związku z oczekiwaniem na dostępność metadanych oraz wykazywały duże koszty ogólne wynikające z kopiowania danych do pamięci.
- Wirtualizacja i bezpieczeństwo
- Dodano opcję PR_SPEC_DISABLE_NOEXEC do prctl() w celu kontrolowania spekulatywnego wykonywania instrukcji dla wybranego procesu. Nowa opcja umożliwia selektywne wyłączanie wykonywania spekulatywnego dla procesów, które mogą potencjalnie zostać zaatakowane przez atak Spectre. Blokada trwa do pierwszego wywołania exec();
- Wdrożony moduł LSM , który umożliwia usługom systemowym bezpieczne zarządzanie użytkownikami bez zwiększania uprawnień (CAP_SETUID) i bez uzyskiwania uprawnień roota. Uprawnienia nadawane są poprzez zdefiniowanie reguł w securityfs w oparciu o białą listę ważnych powiązań (w postaci „UID1:UID2”);
- Dodano zmiany niskiego poziomu wymagane do ładowania modułów bezpieczeństwa (LSM) w oparciu o stos. Wprowadzono opcję rozruchu jądra „lsm”, aby kontrolować, które moduły są ładowane i w jakiej kolejności;
- Do podsystemu audytu dodano obsługę przestrzeni nazw plików;
- możliwości wtyczki GCC structleak, która pozwala blokować potencjalne wycieki zawartości pamięci.Zapewniona jest inicjalizacja dowolnych zmiennych użytych w kodzie poprzez dostęp referencyjny na stosie;
- Podsystem sieciowy
- Do gniazd nowa opcja „SO_BINDTOIFINDEX” podobna do
„SO_BINDTODEVICE”, ale przyjmując jako argument numer indeksu interfejsu sieciowego zamiast nazwy interfejsu; - Stos mac80211 dodał możliwość przypisywania wielu identyfikatorów BSSID (adresów MAC) do jednego urządzenia. W ramach projektu optymalizacji wydajności Wi-Fi, stos mac80211 dodał rozliczanie czasu połączenia i możliwość dystrybucji czasu połączenia pomiędzy wieloma stacjami (podczas pracy w trybie punktu dostępowego przydzielanie mniejszego czasu transmisji powolnym stacjom bezprzewodowym, zamiast równomiernego rozdzielania czasu pomiędzy wszystkie stacje);
- Dodano mechanizm „", który dostarcza powiadomienia w przypadku wystąpienia problemów z interfejsem sieciowym;
- Do gniazd nowa opcja „SO_BINDTOIFINDEX” podobna do
- Usługi pamięci i systemu
- bezpieczne dostarczanie sygnału, które pozwala na ponowne wykorzystanie PID. Przykładowo, przy wcześniejszym wywołaniu kill może dojść do sytuacji, w której zaraz po wysłaniu sygnału docelowy PID może zostać zwolniony w związku z zakończeniem procesu i zajęty przez inny proces, a sygnał zostanie ostatecznie przekazany do innego procesu. Aby wyeliminować takie sytuacje, dodano nowe wywołanie systemowe pidfd_send_signal, które wykorzystuje deskryptory plików z /proc/pid w celu zapewnienia stabilnego powiązania procesu. Nawet jeśli PID zostanie ponownie użyty podczas przetwarzania wywołań systemowych, deskryptor pliku nie ulegnie zmianie i można go bezpiecznie wykorzystać do wysłania sygnału do procesu;
- możliwość wykorzystania urządzeń pamięci trwałej (np. pamięć trwała). ) jako pamięć RAM. Do tej pory jądro obsługiwało takie urządzenia jako urządzenia pamięci masowej, ale teraz można je również wykorzystać jako dodatkową pamięć RAM. Funkcja ta została wdrożona w odpowiedzi na opinie użytkowników, którzy akceptują spadek wydajności i chcą korzystać z natywnego interfejsu API jądra do zarządzania pamięcią. Linux zamiast korzystać z istniejących systemów alokacji pamięci w przestrzeni użytkownika, które działają na podstawie mmap dla pliku dax;
- Dodano nowy moduł obsługi bezczynności procesora (cpuidle decyduje, kiedy procesor może zostać przełączony w tryb głębokiego oszczędzania energii; im głębszy tryb, tym większe oszczędności, ale także dłuższy czas potrzebny na wyjście z trybu) - TEO (gubernator zorientowany na zdarzenia czasowe ). Do tej pory zaproponowano dwie procedury obsługi procesora – „menu” i „drabina”, różniące się heurystyką. Program obsługi „menu” ma znane problemy z podejmowaniem decyzji heurystycznych, aby je wyeliminować zdecydowano się przygotować nowy moduł obsługi. TEO jest alternatywą dla obsługi „menu”, pozwalając na wyższą wydajność przy zachowaniu tego samego poziomu zużycia energii.
Możesz aktywować nowy moduł obsługi za pomocą parametru rozruchowego „cpuidle.governor=teo”; - W ramach pracy do wyeliminowania , spowodowane przepełnieniem 32-bitowego typu time_t, zawiera wywołania systemowe oferujące 32-bitowe liczniki czasu dla architektur 64-bitowych. W rezultacie 64-bitowa struktura time_t może być teraz używana na wszystkich architekturach. Podobne zmiany zaimplementowano także w podsystemie sieciowym dla opcji gniazda sieciowe;
- Do systemu łatania na gorąco dla rdzenia (łatanie na żywo) Funkcja „Atomic Zamień” umożliwiająca atomowe zastosowanie serii zmian w jednej funkcji. Ta funkcja pozwala na dystrybucję podsumowujących poprawek obejmujących kilka zmian na raz, zamiast procesu etapowego nakładania żywych poprawek w ściśle określonej kolejności, co jest dość trudne w utrzymaniu. Podczas gdy poprzednio każda kolejna zmiana musiała opierać się na stanie funkcji po ostatniej zmianie, obecnie możliwe jest propagowanie kilku zmian jednocześnie związanych z jednym stanem początkowym (tj. opiekunowie mogą zamiast tego utrzymywać jedną skonsolidowaną łatkę w stosunku do podstawowego jądra łańcucha łatek, które są od siebie zależne);
- przestarzała obsługa formatu pliku wykonywalnego a.out i
Kod do generowania plików rdzeniowych w formacie a.out, który został porzucony. Format a.out od dawna nie jest używany w systemach z Linux, a generowanie plików a.out od dawna nie jest obsługiwane przez nowoczesne narzędzia w konfiguracjach Linux domyślnie. Dodatkowo, moduł ładujący pliki a.out może być w całości zaimplementowany w przestrzeni użytkownika; - Do mechanizmu weryfikacji programu BPF dodano możliwość identyfikacji i usunięcia niewykorzystanego kodu. Jądro zawiera także łatki obsługujące spinlock dla podsystemu BPF, zapewniające dodatkowe możliwości zarządzania równoległym wykonywaniem programów BPF;
- Sprzęt
- W stylu Nouveau kierowcy obsługa heterogenicznego zarządzania pamięcią, umożliwiająca procesorowi i procesorowi graficznemu dostęp do wspólnych zsynchronizowanych obszarów pamięci. System współdzielonej pamięci wirtualnej (SVM, wspólna pamięć wirtualna) realizowany jest w oparciu o podsystem HMM (Heterogeneous memory Management), który pozwala na wykorzystanie urządzeń posiadających własne jednostki zarządzania pamięcią (MMU, memory Management Unit), do których można uzyskać dostęp pamięć główna. W szczególności za pomocą HMM można zorganizować wspólną przestrzeń adresową pomiędzy procesorem graficznym i procesorem, w której procesor graficzny może uzyskać dostęp do pamięci głównej procesu. Obsługa SVM jest obecnie włączona tylko dla procesorów graficznych z rodziny Pascal, chociaż zapewniona jest także obsługa procesorów graficznych Volta i Turing. Co więcej, w Nouveau nowy ioctl do kontroli migracji obszarów pamięci procesowej do pamięci GPU;
- W sterowniku Intel DRM dla GPU Skylake i nowszych wersji (gen9+) Domyślnie tryb fastboot eliminuje niepotrzebne zmiany trybu podczas uruchamiania. identyfikatory urządzeń oparte na mikroarchitekturach Coffelake i Ice Lake. Do chipsów Coffelake Wsparcie GVT (). Dla wirtualnych procesorów graficznych Obsługa VFIO EDID. Do paneli LCD MIPI/DSI obsługa elementów ACPI/PMIC. nowe tryby telewizji 1080p30/50/60;
- Dodano obsługę procesora graficznego Vega10/20 BACO do sterownika amdgpu. Zaimplementowano zarządzanie energią Vega 10/20 i tablice sterujące chłodnicy Vega 10. Dodano nowe identyfikatory urządzeń PCI dla procesorów graficznych Picasso. interfejs do zarządzania planowanymi zależnościami w celu uniknięcia zakleszczeń;
- Sterownik DRM/KMS dla akceleratorów ekranowych (Mali D71);
- Dodano obsługę paneli ekranowych Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 i Kingdisplay kd097d04;
- Dodano obsługę kodeków audio Rockchip RK3328, Cirrus Logic CS4341 i CS35L36, MediaTek MT6358, Qualcomm WCD9335 i Ingenic JZ4725B, a także platformy audio Mediatek MT8183;
- Dodano obsługę kontrolerów NAND Flash STMicroelectronics FMC2, Amlogic Meson;
- Dodano obsługę akceleratorów dla systemów sprzętowych Habana AI;
- Dodano obsługę kontrolerów Gigabit Ethernet NXP ENETC oraz interfejsów bezprzewodowych MediaTek MT7603E (PCIe) i MT76x8.
Jednocześnie Latynoamerykańska Fundacja Wolnego Oprogramowania
вариант Do , oczyszczone z elementów oprogramowania sprzętowego i sterowników zawierających niewolne komponenty lub sekcje kodu, których zakres jest ograniczony przez producenta. W nowej wersji ładowanie obiektów BLOB jest wyłączone w sterownikach mt7603 i goya. Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk i touchscreen_dmi. Czyszczenie obiektów blob w programie ładującym oprogramowanie sprzętowe lantiq xrx200 zostało zatrzymane z powodu jego usunięcia z jądra.
Źródło: opennet.ru
