Ta strona zawiera podsumowanie najważniejszych funkcji w każdej wersji jądra oraz linki do dodatkowych informacji.
Nowe funkcje w jądrze 6.12
W tej sekcji opisano nowe funkcje w jądrze 6.12.
Profilowanie alokacji pamięci
Kluczem do zrozumienia wykorzystania pamięci jest wiedza, gdzie dokonywane są alokacje.
Rdzeń 6.12 zawiera nowy system przypisywania alokacji pamięci o nazwie profilowanie alokacji pamięci (CONFIG_MEM_ALLOC_PROFILING
w konfiguracji).
Dzięki profilowaniu alokacji pamięci każda alokacja jest przypisywana do unikalnej linii źródłowej, co pozwala szybko wykrywać problemy z alokacją.
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_profiling
.Działa zarówno w przypadku modułów wbudowanych w jądro, jak i modułów załadowanych.
Szybsze io_uring z zero-copy i multishot read
W jądrze 6.12 moduły statsd
i logd
korzystają z sendfile zero-copy, co zwiększa ich wydajność.
Dodatkowo ta wersja jądra implementuje odczyt wieloramkowy, w którym pojedyncza operacja odczytu może pobierać wiele elementów danych jednocześnie, co poprawia wydajność.
Ulepszone możliwości i obsługa Berkeley Packet Filter (BPF)
W jądrze 6.12 przeniesiono narzędzia BPF, aby obsługiwały one CO-RE i kilka nowoczesnych funkcji. Dodatkowo nowy ładownik BPF umożliwia korzystanie z nowoczesnych programów BPF w ramach AOSP.
Wykonywanie zadań przez serwer proxy
Wykonywanie zastępcze umożliwia planującemu pożyczanie cykli procesora z procesów o wysokim priorytecie, aby odzyskać blokady trzymane przez procesy o niższym priorytecie. Ta funkcja ogranicza problemy związane z odwróceniem priorytetów.
Nowe funkcje w jądrze 6.6
W tej sekcji opisano nowe funkcje w jądrze 6.6.
Obsługa Rust
Wiele projektów jądra 6.6 korzysta z Rust.
Blokady na obszar pamięci wirtualnej (VMA)
Rdzeń 6.6 używa blokad obszarów pamięci wirtualnej, aby rozwiązywać problemy z konfliktami z mmap_sem
(wcześniej mmap_lock
). W związku z tym czas uruchamiania aplikacji, które używają dużej liczby wątków, może się skrócić nawet o 20%.
Zastępowanie CFS przez harmonogram uruchamiania kampanii z najwcześniejszym możliwym terminem
EEVDF zastępuje algorytm Completely Fair Scheduler (CFS), aby lepiej równoważyć dostęp do procesora między krótkimi a długotrwałymi zadaniami.
Zmniejszenie zużycia energii przez wywołania zwrotne aktualizacji kopii odczytu (RCU)
Opcja RCU_LAZY
używa metody wywołania zwrotnego RCU w grupach na podstawie zegara, aby oszczędzać energię. W przypadku systemu o niewielkim obciążeniu lub nieczynnego ta opcja może zmniejszyć zużycie energii o 5–10%.
Lepsza kompresja pamięci ZRAM
Nowe ustawienie CONFIG_ZRAM_MULTI_COMP
umożliwia ZRAM ponowne skompresowanie stron za pomocą jednego z 3 alternatywnych algorytmów. Ta ponowna kompresja zmniejsza rozmiar skompresowanej pamięci, zapewniając więcej wolnego miejsca na aktywne zadania.
Nowe funkcje w jądrze 6.1
W tej sekcji opisano nowe funkcje w jądrze 6.1.
Większa szybkość zabezpieczeń dzięki integralności przepływu sterowania w jądrze (KCFI)
KCFI zastępuje integralność przepływu sterowania (CFI), co powoduje zmniejszenie kosztów działania i brak kosztów kompilacji. Zmniejszony koszt działania umożliwia włączenie funkcji KCFI w większej liczbie miejsc niż w przypadku funkcji CFI, w tym w punktach śledzenia i elementach dostawcy.
Poza KCFI jądro 6.1 wprowadza wiele funkcji bezpieczeństwa, takich jak rygorystyczne sprawdzanie granic memcpy
i zabezpieczenia przed atakami typu straight-line speculation.
Więcej informacji o KCFI znajdziesz w artykule Integralność przepływu sterowania w rdzeniu.
Wielopokoleniowy algorytm LRU (MGLRU)
Do jądra 6.1 dodano MGLRU, aby poprawić zarządzanie pamięcią przez lepsze rozpoznawanie stron, które są rzeczywiście używane. Dzięki temu nie trzeba będzie zatrzymywać aplikacji, gdy system odczuje niedobór pamięci. Ta aktualizacja zwiększa też wygodę użytkowników, ponieważ poprawia ogólną responsywność urządzenia.
Implementacja MGLRU obejmuje też obsługę nowej struktury Maple, która w niektórych przypadkach może zastąpić czerwono-czarne drzewo (rbtree). Użycie bezpiecznego dla RCU drzewa klonowego zwiększa wydajność dzięki mniejszemu rozmiarowi i braku blokowania.
Więcej informacji o MGLRU znajdziesz w artykule LRU wielopokoleniowy.
Harmonogram
Utrzymywanie i aktualizowanie harmonogramu jest kluczowym aspektem pracy nad ulepszaniem jądra. Aktualizacje jądra w wersji 6.1:
- Dodano planowanie uwzględniające klaster, które zwiększa wydajność przez przeniesienie na rdzenie, które współdzielą pamięć podręczną L2.
- Usunięto niepotrzebną heurystykę dotyczącą marginesu energii. Ta aktualizacja, która ogranicza niektóre migracje, poprawia wykorzystanie energii nawet o 5%.
- Ulepszone równoważenie obciążenia w celu skrócenia czasu oczekiwania na powiadomienie.
- Przeniesienie przyspieszonych okresów karencji RCU do wątku kthread w czasie rzeczywistym. Ta aktualizacja znacznie zmniejszyła odchylenia opóźnień związanych z RCU.
Grafika
Kernel 6.1 zawiera nowe metody dma-buf do eksportowania i importowania plików synchronizacji, które odpowiadają potrzebom interfejsu Vulcan Video API.
Nowa metoda futex_waitv()
upraszcza portowanie gier z innych platform, ponieważ pozwala na jednoczesne oczekiwanie na wiele plików .fut.
Narzędzia debugowania
Używaj narzędzia Kernel Concurrency SANitizer (KCSAN) w kompilacji debugowania, aby wykrywać rywalizację w kodzie jądra.
Dodatkowo możesz użyć narzędzia Kernel Memory SANitizer (KMSAN), aby znaleźć w rdzeniu wartości niezainicjalizowane.
Ulepszenia obsługi ARM64
Kernel 6.1 wprowadza wiele ulepszeń dla architektury ARM64, w tym:
- Obsługa rozszerzeń timera ARMv8.6
- Obsługa algorytmu uwierzytelniania wskaźnika QARMA3
- Wstępna obsługa rozszerzenia skalowanego według macierzy (SME) ARMv9
- Ulepszenia dotyczące funkcji alternatywnych poprawek, które zmniejszają rozmiar obrazu jądra