System kompilacji Androida, który został wprowadzony w Androidzie 12, obsługuje optymalizację natywnych modułów Androida, które mają reguły kompilacji szablonów za pomocą automatycznej optymalizacji kierowanej przez opinie (AutoFDO). AutoFDO to technika optymalizacji oparta na próbkowaniu. AutoFDO rejestruje zachowanie binarek systemowych w czasie wykonywania, co umożliwia kompilatorom lepsze optymalizowanie wydajności przy jednoczesnym zmniejszaniu rozmiaru binarek. Android obsługuje zbieranie profili z urządzeń X86, X86_64, ARM i ARM64, ale można ich używać w różnych architekturach.
AutoFDO jest następcą optymalizacji opartej na profilowaniu (PGO).
W porównaniu z innymi profilami opartymi na pomiarach AutoFDO ma te dodatkowe zalety:
Nieinwazyjne zbieranie danych: profile AutoFDO można zbierać z urządzeń programistów i użytkowników bez wprowadzania zmian w regułach kompilacji.
Reprezentacja rzeczywistego korzystania: AutoFDO odzwierciedla rzeczywiste zachowanie użytkowników, zakładając, że profile są zbierane z ich urządzeń, podczas gdy instrumentacja PGO dotyczy tylko syntetycznego zbioru danych. Zwykle nie jest łatwo utworzyć zbiorczy zestaw zadań, który idealnie odpowiadałby rzeczywistemu wykorzystaniu.
AOSP jest dostarczany z profilami AutoFDO w przypadku większości projektów, w których kluczowe znaczenie ma wydajność. Te profile zostały zebrane z telefonów i tabletów i reprezentują ogólne wzorce korzystania z urządzeń. Profile znajdują się w sekcji toolchain/pgo-profiles/sampling
. Domyślnie w AOSP jest włączone AFDO.
Włączanie AutoFDO w zasadzie kompilacji blueprintu
Aby włączyć AutoFDO w przypadku reguł kompilacji szablonów, dodaj afdo: true
do reguły wspólnej biblioteki lub binarnej.
Zbieranie profili
Profil wstępnie załączony do AOSP nie obsługuje tych scenariuszy:
- uwzględnienie dodatkowych projektów AutoFDO,
- obecność zmodyfikowanego lokalnie kodu;
- unikalne wzorce użytkowania powiązane z Twoim systemem;
Jeśli występuje jeden z tych scenariuszy, musisz zebrać profile bezpośrednio z urządzeń deweloperskich lub użytkowników.
Szczegółowe instrukcje dotyczące przygotowywania urządzeń z procesorem ARM do zbierania profili AutoFDO znajdziesz w artykule Zbieranie danych ETM na potrzeby AutoFDO.
Szczegółowe instrukcje dotyczące przygotowywania urządzeń X86 do zbierania profili AutoFDO znajdziesz w artykule Zbieranie danych LBR na potrzeby AutoFDO.
Informacje o tym, jak włączyć automatyczne zbieranie, przetwarzanie i przesyłanie profili w tle, znajdziesz w sekcji Profcollect.
Analizowanie profili AutoFDO
Android używa standardowych profili LLVM AutoFDO. Profile AFDO można odczytać za pomocą narzędzia llvm-profdata
firmy LLVM. Skrypt afdo_summary.sh
(toolchain/pgo-profiles/scripts/afdo_summary.sh
) automatycznie generuje najczęściej wykonywane funkcje zgodnie z profilem AutoFDO.