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 w fazie inżynieryjnej, ale jest dostępny w standardowym obrazie GKI.
Można go włączyć za pomocą parametru
sysctl.vm.mem_profiling
bootsysctl.vm.mem_profiling
.Działa zarówno w przypadku modułów wbudowanych w jądro, jak i modułów załadowanych.
Szybszy io_uring z odczytem bez kopiowania i wielokrotnym
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 możliwości i obsługa filtra 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ł ładujący BPF umożliwia też korzystanie z nowoczesnego BPF w programach, które są częścią AOSP.
Wykonywanie za pomocą 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 poszczególnych obszarów pamięci wirtualnej, aby rozwiązać problemy z konkurencją w mmap_sem
(wcześniej znanym jako mmap_lock
). 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 aktualizacji kopii do odczytu (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_COMP
ustawienie 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 zwiększa kosztu kompilacji. Obniżony koszt działania umożliwia włączenie KCFI w większej liczbie miejsc niż CFI, zwłaszcza w punktach śledzenia i hakach dostawców.
Oprócz KCFI jądro 6.1 wprowadza wiele funkcji zabezpieczeń, takich jak ścisłe sprawdzanie granic i środki zapobiegające atakom spekulacyjnym.memcpy
Więcej informacji o KCFI znajdziesz w artykule Integralność przepływu sterowania w jądrze.
Wielopokoleniowy algorytm 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 pracy 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 pozwala zwiększyć 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 czasu rzeczywistego. 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