Android 15 (eksperymentalny AOSP) i nowsze wersje obsługują tworzenie Androida o rozmiarze strony 16 KB. Ta opcja zużywa dodatkową pamięć, ale poprawia wydajność systemu.
Strony 16kB są obsługiwane tylko na obiektach docelowych arm64
z jądrami 16kB. Istnieje jednak również opcja symulowania przestrzeni użytkownika 16 KB na x86_64
dla mątwy.
Aby włączyć strony o rozmiarze 16 KB, ustaw na urządzeniu następujące opcje kompilacji:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
usuwa definicjęPAGE_SIZE
i sprawia, że komponenty określają rozmiar strony w czasie wykonywania. -
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
co zapewnia, że pliki ELF platformy są budowane z wyrównaniem 16kB. Ten większy niż potrzebny rozmiar ma na celu zapewnienie przyszłej kompatybilności. Przy wyrównaniu ELF 16 kB jądro może obsługiwać strony o rozmiarach 4 kB/16 kB.
Sprawdź flagi kompilacji
Po wybraniu celu lunch
sprawdź, czy flagi kompilacji są poprawnie skonfigurowane w środowisku:
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
Jeśli poprzednie dwa polecenia zwrócą odpowiednio 16384
i true
, flagi kompilacji są ustawione poprawnie.
Twórz biblioteki współdzielone z wyrównaniem ELF 16kB
Aby zbudować biblioteki współdzielone, które są częścią projektu na Androida , wystarczy ustawić te flagi kompilacji w swoim celu:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
-
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Aby zbudować biblioteki współdzielone, które nie są częścią projektu Android , musisz przekazać tę flagę linkera:
-Wl,-z,max-page-size=16384