Wiadomości o usługach
Zwiększanie wydajności Androida: wprowadzenie AutoFDO w jądrze
Czas czytania: 4 minuty
Jesteśmy zespołem ds. łańcucha narzędzi Android LLVM. Jednym z naszych głównych priorytetów jest zwiększanie wydajności Androida za pomocą technik optymalizacji w ekosystemie LLVM. Stale szukamy sposobów na to, aby Android działał szybciej, płynniej i wydajniej.Chociaż większość naszych prac optymalizacyjnych odbywa się w przestrzeni użytkownika, jądro systemu pozostaje sercem systemu. Dziś z radością informujemy, że wprowadzamy automatyczną optymalizację opartą na informacjach zwrotnych (AutoFDO) w jądrze Androida, aby zapewnić użytkownikom znaczną poprawę wydajności.
Czym jest AutoFDO?
Podczas standardowego tworzenia oprogramowania kompilator podejmuje tysiące drobnych decyzji, np. czy wstawić funkcję w kodzie, czy też którą gałąź warunku należy wybrać. Decyzje te są podejmowane na podstawie statycznych wskazówek w kodzie. Chociaż te heurystyki są przydatne, nie zawsze dokładnie przewidują wykonanie kodu podczas rzeczywistego korzystania z telefonu.
AutoFDO zmienia to, wykorzystując rzeczywiste wzorce wykonania do kierowania kompilatorem. Wzorce te reprezentują najczęstsze ścieżki wykonywania instrukcji, które kod przyjmuje podczas rzeczywistego użycia. Są one rejestrowane przez zapisywanie historii rozgałęzień procesora. Chociaż te dane można zbierać z urządzeń w ramach floty, w przypadku jądra syntetyzujemy je w środowisku laboratoryjnym za pomocą reprezentatywnych obciążeń, takich jak uruchamianie 100 najpopularniejszych aplikacji. Do zbierania tych danych używamy profilera próbek, który identyfikuje, które części kodu są „gorące” (często używane), a które „zimne”.Gdy ponownie tworzymy jądro z tymi profilami, kompilator może podejmować znacznie bardziej inteligentne decyzje optymalizacyjne dostosowane do rzeczywistych obciążeń Androida.
Aby zrozumieć wpływ tej optymalizacji, weź pod uwagę te kluczowe fakty:
- W Androidzie jądro odpowiada za około 40% czasu procesora.
- Używamy już AutoFDO do optymalizacji natywnych plików wykonywalnych i bibliotek w przestrzeni użytkownika, co pozwala uzyskać około 4% poprawy w przypadku uruchamiania aplikacji na zimno i 1% skrócenia czasu uruchamiania.
Poprawa wydajności w rzeczywistych warunkach
Dzięki wykorzystaniu profili z kontrolowanych środowisk laboratoryjnych zaobserwowaliśmy imponującą poprawę kluczowych danych Androida. Profile te zostały zebrane za pomocą indeksowania i uruchamiania aplikacji oraz zmierzone na urządzeniach Pixel z jądrami 6.1, 6.6 i 6.12.
Najbardziej zauważalne ulepszenia są wymienione poniżej. Szczegółowe informacje o profilach AutoFDO dla tych wersji jądra znajdziesz w odpowiednich repozytoriach jądra Androida dla jąder android16-6.12 i android15-6.6.
To nie są tylko teoretyczne liczby. Przekładają się one na szybszy interfejs, szybsze przełączanie aplikacji, dłuższą żywotność baterii i ogólnie lepszą responsywność urządzenia dla użytkownika.
Jak to działa: potok
Nasza strategia wdrażania obejmuje zaawansowany potok, który zapewnia, że profile pozostają aktualne, a wydajność stabilna.
Krok 1. Zbieranie profili
Do profilowania plików binarnych w przestrzeni użytkownika korzystamy z naszej floty testu wewnętrznego, ale w przypadku ogólnego obrazu jądra (GKI) przeszliśmy na kontrolowane środowisko laboratoryjne. Oddzielenie profilowania od cyklu wydawania urządzenia umożliwia elastyczne i natychmiastowe aktualizacje niezależne od wdrożonych wersji jądra. Co najważniejsze, testy potwierdzają, że dane z laboratorium zapewniają wzrost wydajności porównywalny z danymi z rzeczywistych flot.
- Narzędzia i środowisko: urządzenia testowe flashujemy najnowszym obrazem jądra i używamy simpleperf do przechwytywania strumieni wykonywania instrukcji. Proces ten opiera się na możliwościach sprzętowych w zakresie rejestrowania historii rozgałęzień, w szczególności na wykorzystaniu ARM Embedded Trace Extension (ETE) i ARM Trace Buffer Extension (TRBE) na urządzeniach Pixel.
- Obciążenia: tworzymy reprezentatywne obciążenie, używając 100 najpopularniejszych aplikacji z Android App Compatibility Test Suite (C-Suite). Aby uzyskać jak najdokładniejsze dane, skupiamy się na:
- Uruchamianie aplikacji: optymalizacja pod kątem najbardziej widocznych opóźnień użytkownika
- **Indeksowanie aplikacji oparte na AI**: symulowanie ciągłych, ewoluujących interakcji użytkownika
- Monitorowanie całego systemu: przechwytywanie nie tylko aktywności aplikacji na pierwszym planie, ale także krytycznych obciążeń w tle i komunikacji międzyprocesowej
- Weryfikacja: to syntetyczne obciążenie wykazuje 85% podobieństwa do wzorców wykonania zebranych z naszej wewnętrznej floty.
- Ukierunkowane dane: dzięki powtarzaniu tych testów wystarczająco często możemy przechwytywać wzorce wykonania o wysokiej wierności, które dokładnie reprezentują interakcje użytkowników z najpopularniejszymi aplikacjami. Ponadto ten rozszerzalny framework umożliwia nam bezproblemowe integrowanie dodatkowych obciążeń i testów porównawczych, aby zwiększyć zasięg.
Krok 2. Przetwarzanie profili
Przetwarzamy wstępnie nieprzetworzone dane śledzenia, aby mieć pewność, że są one czyste, skuteczne i gotowe do użycia przez kompilator.
- Agregacja: konsolidujemy dane z wielu testów i urządzeń w jeden widok systemu.
- Konwersja: przekształcamy nieprzetworzone ślady w format profilu AutoFDO, w razie potrzeby odfiltrowując niechciane symbole.
- Przycinanie profili: przycinamy profile, aby usunąć dane dotyczące „zimnych” funkcji, co pozwala na stosowanie standardowej optymalizacji. Zapobiega to regresjom w rzadko używanym kodzie i niepotrzebnemu zwiększaniu rozmiaru pliku binarnego.
Krok 3. Testowanie profili
Przed wdrożeniem profile przechodzą rygorystyczną weryfikację, aby mieć pewność, że zapewniają stały wzrost wydajności bez ryzyka utraty stabilności.
- Analiza profilu i pliku binarnego: dokładnie porównujemy zawartość nowego profilu (w tym często używane funkcje, liczbę próbek i rozmiar profilu) z poprzednimi wersjami. Używamy też profilu do utworzenia nowego obrazu jądra, analizując pliki binarne, aby mieć pewność, że zmiany w sekcji tekstowej są zgodne z oczekiwaniami.
- Weryfikacja wydajności: uruchamiamy ukierunkowane testy porównawcze na nowym obrazie jądra. Potwierdza to, że utrzymuje on wzrost wydajności ustalony przez poprzednie wartości bazowe.
Ciągłe aktualizacje
Kod naturalnie „dryfuje” z czasem, więc statyczny profil z czasem traci skuteczność. Aby utrzymać najwyższą wydajność, stale uruchamiamy potok, aby regularnie aktualizować:
- Regularne odświeżanie: odświeżamy profile w gałęziach LTS jądra Androida przed każdą wersją GKI, dzięki czemu każda kompilacja zawiera najnowsze dane profilu.
- Przyszłe rozszerzenie: obecnie dostarczamy te aktualizacje do gałęzi
android16-6.12iandroid15-6.6. Rozszerzymy też obsługę na nowsze wersje GKI, takie jak nadchodzącaandroid17-6.18.
Zapewnianie stabilności
Często zadawane pytanie dotyczące optymalizacji opartej na profilach brzmi, czy wprowadza ona ryzyko utraty stabilności. Ponieważ AutoFDO wpływa głównie na heurystyki kompilatora, takie jak wstawianie funkcji w kodzie i układ kodu, a nie na logikę kodu źródłowego, zachowuje integralność funkcjonalną jądra. Technologia ta sprawdziła się już na dużą skalę, od lat służąc jako standardowa optymalizacja bibliotek platformy Android, ChromeOS i infrastruktury serwerowej Google.
Aby dodatkowo zagwarantować spójne działanie, stosujemy strategię „domyślnie konserwatywną”. Funkcje, które nie zostały przechwycone w naszych profilach o wysokiej wierności, są optymalizowane za pomocą standardowych metod kompilatora. Dzięki temu „zimne” lub rzadko wykonywane części jądra działają dokładnie tak samo jak w standardowej kompilacji, co zapobiega regresjom wydajności lub nieoczekiwanym zachowaniom w przypadkach brzegowych.
Co dalej
Obecnie wdrażamy AutoFDO w gałęziach android16-6.12 i android15-6.6. Oprócz tego wstępnego wdrożenia widzimy kilka obiecujących sposobów na dalsze ulepszanie tej technologii:
- Rozszerzony zasięg: planujemy wdrożyć profile AutoFDO w nowszych wersjach jądra GKI i dodatkowych celach kompilacji poza obecną obsługą
aarch64. - Optymalizacja modułów GKI: obecnie nasza optymalizacja koncentruje się na głównym pliku binarnym jądra (
vmlinux). Rozszerzenie AutoFDO na moduły GKI może przynieść korzyści w zakresie wydajności większej części podsystemu jądra. - Obsługa modułów dostawców: chcemy też obsługiwać AutoFDO w przypadku modułów dostawców tworzonych za pomocą zestawu Driver Development Kit (DDK). Dzięki obsłudze dostępnej już w naszym systemie kompilacji (Kleaf) i narzędziach do profilowania (simpleperf) dostawcy mogą stosować te same techniki optymalizacji do swoich sterowników sprzętowych.
- Szerszy zakres profili: istnieje możliwość zbierania profili z szerszego zakresu krytycznych ścieżek użytkownika (CUJ) w celu ich optymalizacji.
Wprowadzając AutoFDO do jądra Androida, zapewniamy, że sama podstawa systemu operacyjnego jest zoptymalizowana pod kątem codziennego korzystania z urządzenia.
Czytaj dalej
-
Wiadomości o usługach
Podczas Google I/O 2026 ogłosiliśmy, że Android przestaje być systemem operacyjnym, a staje się systemem inteligencji. Pokazaliśmy też, jak możesz tworzyć inteligentne rozwiązania natywnie w systemie i wykorzystywać możliwości AI od Google w swoich aplikacjach.
Jingyu Shi • Czas czytania: 2 minuty
-
Wiadomości o usługach
Z przyjemnością informujemy, że w Androidzie XR pojawiła się oficjalna obsługa Unreal Engine i Godot. Uruchamiamy też nowe narzędzia, które mają zwiększyć Twoją produktywność i umożliwić korzystanie z nowych funkcji XR: Android XR Engine Hub i Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Czas czytania: 4 minuty
-
Wiadomości o usługach
Wraz z wydaniem Androida 17 przechodzimy na standard tworzenia adaptacyjnego. Użytkownicy nie korzystają już tylko z jednego formatu. W ciągu dnia przełączają się między telefonami, urządzeniami składanymi, tabletami, laptopami, wyświetlaczami samochodowymi i środowiskami XR.
Fahd Imtiaz • Czas czytania: 4 minuty
Bądź na bieżąco
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.