Ta strona zawiera podsumowanie najważniejszych funkcji w każdej wersji jądra oraz linki do dodatkowych informacji.
Nowe funkcje jądra 6.12
W tej sekcji opisujemy nowe funkcje jądra 6.12.
Profilowanie alokacji pamięci
Kluczem do zrozumienia wykorzystania pamięci jest wiedza o tym, gdzie są dokonywane alokacje.
Jądro 6.12 zawiera nowy system przypisywania alokacji pamięci o nazwie profilowanie alokacji pamięci (CONFIG_MEM_ALLOC_PROFILING w konfiguracji).
Dzięki profilowaniu przydzielania pamięci każde przydzielenie jest przypisywane do unikalnego wiersza kodu źródłowego, co umożliwia szybkie wykrywanie problemów z przydzielaniem.
Dodatkowo profilowanie przydziału pamięci:
Jest używany na etapie projektowania, ale jest dostępny w standardowym obrazie GKI.
Można go włączyć za pomocą parametru
sysctl.vm.mem_profilingboot.Działa zarówno w przypadku modułów wbudowanych w jądro, jak i modułów załadowanych.
Szybsze io_uring dzięki odczytowi bez kopiowania i wielokrotnemu
W jądrze 6.12 moduły statsd i logd korzystają z funkcji sendfile
zero-copy, co zwiększa ich wydajność.
Dodatkowo ta wersja jądra implementuje odczyt wielokrotny, w którym pojedyncza operacja odczytu może pobierać jednocześnie wiele fragmentów danych, co zwiększa wydajność.
Ulepszone funkcje i obsługa Berkeley Packet Filter (BPF)
W jądrze 6.12 łańcuch narzędzi BPF został przeniesiony, aby obsługiwać CO-RE i kilka nowoczesnych funkcji. Nowy moduł wczytywania BPF umożliwia też korzystanie z nowoczesnego BPF w przypadku programów, które są częścią AOSP.
Wykonywanie serwera proxy
Wykonywanie proxy umożliwia harmonogramowi pożyczanie cykli procesora z procesów o wysokim priorytecie w celu odzyskania blokad utrzymywanych przez procesy o niższym priorytecie. Ta funkcja ogranicza problemy z odwróceniem priorytetów.
Nowe funkcje jądra 6.6
W tej sekcji opisujemy nowe funkcje jądra 6.6.
Obsługa języka Rust
Wiele projektów jądra 6.6 korzysta z języka Rust.
Blokady obszaru pamięci wirtualnej (VMA)
Jądro 6.6 używa blokad na obszar pamięci wirtualnej, aby rozwiązać problemy z konkurencją w mmap_lock (wcześniej znanej jako mmap_sem). W związku z tym aplikacje, które używają dużej liczby wątków, mogą uruchamiać się nawet o 20% szybciej.
Harmonogram EEVDF zastępuje CFS
EEVDF zastępuje algorytm CFS (Completely Fair Scheduler), aby lepiej równoważyć dostęp do procesora między krótkimi i długotrwałymi zadaniami.
Zmniejszone zużycie energii przez wywołania zwrotne RCU
Opcja RCU_LAZY wykorzystuje metodę grupowania wywołań zwrotnych RCU opartą na timerze, aby oszczędzać energię. W przypadku systemu o niewielkim obciążeniu lub w stanie bezczynności ta opcja może zmniejszyć zużycie energii o 5–10%.
Lepsza kompresja pamięci ZRAM
Nowe CONFIG_ZRAM_MULTI_COMPustawienie kompilacji umożliwia ponowne kompresowanie stron przez ZRAM za pomocą jednego z 3 alternatywnych algorytmów. Ponowna kompresja dodatkowo zmniejsza skompresowaną pamięć, zapewniając więcej wolnego miejsca na aktywne zadania.
Nowe funkcje jądra 6.1
W tej sekcji opisujemy nowe funkcje jądra 6.1.
Szybsze zabezpieczenia dzięki ochronie integralności przepływu sterowania w jądrze (KCFI)
KCFI zastępuje ochronę integralności przepływu sterowania (CFI), co zmniejsza koszt działania i nie powoduje kosztów kompilacji. Obniżony koszt działania umożliwia włączenie KCFI w większej liczbie miejsc niż CFI, w tym w punktach śledzenia i hakach dostawców.
Oprócz KCFI jądro 6.1 wprowadza wiele funkcji zabezpieczeń, takich jak ścisłe sprawdzanie granic memcpy i środki zapobiegające atakom spekulacyjnym.
Więcej informacji o KCFI znajdziesz w artykule Integralność przepływu sterowania w jądrze.
Multi-Generational LRU (MGLRU)
Do jądra 6.1 dodano MGLRU, aby ulepszyć zarządzanie pamięcią przez lepsze identyfikowanie stron, które są faktycznie używane. Dzięki temu nie trzeba będzie zatrzymywać aplikacji, gdy w systemie zabraknie pamięci. Ta aktualizacja zwiększa też komfort użytkowników, ponieważ poprawia ogólną szybkość reakcji urządzenia.
Implementacja MGLRU obejmuje też obsługę nowego drzewa klonowego bezpiecznego dla RCU, które w niektórych przypadkach może zastąpić drzewo czerwono-czarne (rbtree). Drzewo klonowe bezpieczne dla RCU zwiększa wydajność dzięki mniejszemu rozmiarowi i braku blokad.
Więcej informacji o MGLRU znajdziesz w artykule Multi-Gen LRU.
Harmonogram
Utrzymywanie i aktualizowanie harmonogramu to kluczowy aspekt prac nad ulepszaniem jądra. Aktualizacje jądra w wersji 6.1 obejmują:
- Dodano planowanie z uwzględnieniem klastra, które zwiększa wydajność przez migrację do rdzeni współdzielących pamięć podręczną L2.
- Usunięto niepotrzebną heurystykę marginesu energii. Ograniczenie niektórych migracji zwiększa wykorzystanie energii nawet o 5%.
- Ulepszone równoważenie obciążenia w celu skrócenia czasu oczekiwania na wybudzenie.
- Przeniesiono okresy prolongaty RCU do wątku jądra w czasie rzeczywistym. Ta aktualizacja znacznie zmniejszyła opóźnienia związane z RCU.
Grafika
Jądro 6.1 zawiera nowe metody dma-buf do eksportowania i importowania plików synchronizacji, co jest zgodne z potrzebami interfejsu Vulcan Video API.
Nowa metoda futex_waitv() upraszcza przenoszenie gier z innych platform, ponieważ umożliwia jednoczesne oczekiwanie na wiele futeksów.
Narzędzia do debugowania
Używaj narzędzia Kernel Concurrency SANitizer (KCSAN) w wersjach debugowania, aby identyfikować wyścigi w kodzie jądra.
Dodatkowo użyj narzędzia Kernel Memory SANitizer (KMSAN), aby znaleźć niezainicjowane wartości w jądrze.
Ulepszenia obsługi ARM64
Jądro 6.1 wprowadza wiele ulepszeń architektury ARM64, w tym:
- Obsługa rozszerzeń zegara ARMv8.6
- Obsługa algorytmu uwierzytelniania wskaźników QARMA3
- Wstępna obsługa rozszerzenia Scalable Matrix Extension (SME) dla architektury ARMv9
- Ulepszenia funkcji alternatyw, które skutkują mniejszym rozmiarem obrazu jądra