Informacje o wersji jądra

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_profilingbootsysctl.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 statsdlogd 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