Nowości dotyczące usług
Zwiększanie wydajności Androida: wprowadzenie AutoFDO w jądrze
4 minuty czytania
Jesteśmy zespołem ds. łańcucha narzędzi LLVM w Androidzie. Jednym z naszych głównych priorytetów jest zwiększanie wydajności Androida dzięki technikom 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 pozostaje sercem systemu. Dziś z radością informujemy, że wprowadzamy do jądra Androida automatyczną optymalizację opartą na informacjach zwrotnych (AutoFDO), 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óra gałąź warunku jest bardziej prawdopodobna. Opiera się przy tym na statycznych wskazówkach 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. Te wzorce 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, używając 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 skompilujemy 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 wskaźników Androida. Te profile 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
Chociaż do profilowania plików binarnych w przestrzeni użytkownika korzystamy z naszej wewnętrznej floty testowej, 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. Ten proces opiera się na możliwościach sprzętu 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 tych aspektach:
- 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 też 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 przechwytujemy wzorce wykonania o wysokiej wierności, które dokładnie reprezentują interakcje użytkownika z najpopularniejszymi aplikacjami w rzeczywistych warunkach. Ponadto ten rozszerzalny framework umożliwia nam bezproblemowe integrowanie dodatkowych obciążeń i testów porównawczych, aby poszerzyć zakres.
Krok 2. Przetwarzanie profili
Przetwarzamy dane śledzenia, aby były 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 surowe ślady w format profilu AutoFDO, w razie potrzeby filtrują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 zapewnić stały wzrost wydajności bez ryzyka utraty stabilności.
- Analiza profilu i pliku binarnego: dokładnie porównujemy zawartość nowego profilu (w tym gorące 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. Ta technologia 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 zachowują się dokładnie tak, 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ętu.
- 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
-
r.r.
Nowości dotyczące usług
Każdego roku podczas Google I/O ogłaszamy nowe informacje i udostępniamy zasoby dotyczące ekosystemów i usług, w tym tworzenia aplikacji na Androida. W miarę jak tworzenie aplikacji staje się coraz bardziej oparte na AI i narzędziach wspomaganych przez agentów, rozszerzyliśmy naszą ofertę, aby lepiej Cię wspierać niezależnie od tego, jak zdecydujesz się tworzyć aplikacje na Androida.
Simona Milanovic • 2 minuty czytania
-
Nowości dotyczące usług
Podczas Google I/O 2026 pokazaliśmy, jak najnowsze osiągnięcia w ekosystemie Androida mogą pomóc Ci podnieść jakość aplikacji i jednocześnie zmaksymalizować wydajność tworzenia.
Ataul Munim • 3 minuty czytania
-
Nowości dotyczące usług
Podczas Google I/O 2026 ogłosiliśmy, że Android przestaje być systemem operacyjnym, a staje się systemem inteligentnym. Pokazaliśmy też, jak możesz tworzyć inteligentne aplikacje natywnie w systemie i wykorzystywać możliwości AI Google w swoich aplikacjach.
Jingyu Shi • 2 minuty czytania
Bądź na bieżąco
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.