Włącz rozmiar strony 16 KB

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ę typu PAGE_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ści ignore_max_page_size: true w Android.bp i LOCAL_IGNORE_MAX_PAGE_SIZE := true w Android.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.