Включить размер страницы 16 КБ

Android 15 (экспериментальная AOSP) и более поздние версии поддерживают сборку Android с размером страницы 16 КБ. Этот вариант использует дополнительную память, но повышает производительность системы.

Страницы размером 16 КБ поддерживаются только на устройствах arm64 с ядрами 16 КБ. Однако существует также возможность имитировать пользовательское пространство размером 16 КБ на x86_64 для Cuttlefish.

Чтобы включить страницы размером 16 КБ, установите на устройстве следующие параметры сборки:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true удаляет определение PAGE_SIZE и заставляет компоненты определять размер страницы во время выполнения.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384 который гарантирует, что файлы ELF платформы создаются с выравниванием 16 КБ. Этот размер, превышающий необходимый, предназначен для совместимости в будущем. При выравнивании ELF 16 КБ ядро ​​может поддерживать размеры страниц 4 КБ/16 КБ.

Проверьте флаги сборки

После выбора цели lunch убедитесь, что флаги сборки правильно установлены в среде:

$ 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

Если предыдущие две команды возвращают 16384 и true соответственно, ваши флаги сборки установлены правильно.

Создавайте общие библиотеки с выравниванием ELF размером 16 КБ.

Чтобы создать общие библиотеки, являющиеся частью проекта Android , вам нужно всего лишь установить эти флаги сборки в вашей цели:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

Чтобы создать общие библиотеки, которые не являются частью проекта Android , вам необходимо передать этот флаг компоновщика:

-Wl,-z,max-page-size=16384