W Androidzie 15 (AOSP Experiment) i nowszych można tworzyć Androida o rozmiarze strony 16 KB. Ta opcja wymaga dodatkowej pamięci, ale zwiększa wydajność systemu.
Strony o rozmiarze 16 KB są obsługiwane tylko w celach arm64
z jądrem o rozmiarze 16 KB.
Dostępna jest też opcja symulacji 16 KB przestrzeni użytkownika w x86_64
w przypadku mątwy.
Aby włączyć strony o rozmiarze 16 KB, ustaw na urządzeniu te opcje kompilacji:
- Funkcja
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
usuwa definicję typuPAGE_SIZE
i sprawia, że komponenty określają rozmiar strony w czasie działania. PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, dzięki czemu pliki ELF platformy są kompilowane z dopasowaniem 16 KB. Zbyt duży rozmiar ma na celu zapewnienie zgodności w przyszłości. Jeśli plik ELF jest dopasowany do rozmiaru 16 KB, jądro obsługuje rozmiary stron 4/16 KB.
Zweryfikuj flagi kompilacji
Po wybraniu środowiska docelowego lunch
sprawdź, czy flagi kompilacji są prawidłowo 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 2 poprzednie polecenia zwracają odpowiednio 16384
i true
, flagi kompilacji są prawidłowo skonfigurowane.
Twórz biblioteki udostępnione, dopasowując pliki ELF o rozmiarze 16 KB
Aby utworzyć biblioteki udostępnione będące częścią projektu Androida, wystarczy ustawić w środowisku docelowym te flagi kompilacji:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Aby utworzyć biblioteki udostępnione, które nie są częścią projektu Android, musisz przekazać tę flagę kreatora linków:
-Wl,-z,max-page-size=16384
Zweryfikuj pliki binarne i gotowe pliki pod kątem dopasowania ELF o rozmiarze 16 KB
Najlepszym sposobem na sprawdzenie dopasowania i działania w środowisku wykonawczym jest przetestowanie i uruchomienie go na skompilowanym jądrze o rozmiarze 16 KB. Aby jednak wykryć niektóre problemy wcześniej:
Począwszy od Androida W (AOSP w wersji eksperymentalnej) możesz ustawić właściwość
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
w momencie kompilacji. Aby tymczasowo je zignorować, użyj właściwościignore_max_page_size: true
wAndroid.bp
iLOCAL_IGNORE_MAX_PAGE_SIZE := true
wAndroid.mk
. Te ustawienia weryfikują wszystkie gotowe ustawienia i pozwalają wykryć, czy któreś z nich zostały zaktualizowane, ale nie mają zgodności o 16 KB.Możesz uruchomić polecenie
atest elf_alignment_test
, aby sprawdzić dopasowanie plików ELF znajdujących się na urządzeniu na urządzeniach z Androidem 15 (eksperymentalnym AOSP) i nowszym.