Включить размер страницы 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

Проверьте двоичные файлы и готовые сборки на соответствие ELF размером 16 КБ.

Лучший способ проверить выравнивание и поведение во время выполнения — протестировать и запустить скомпилированное ядро ​​размером 16 КБ. Однако, чтобы выявить некоторые проблемы раньше:

  • Начиная с Android W (экспериментальная версия AOSP), вы можете установить PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true во время сборки. Используйте ignore_max_page_size: true в Android.bp и LOCAL_IGNORE_MAX_PAGE_SIZE := true в Android.mk , чтобы временно игнорировать их. Эти параметры проверяют все готовые сборки и позволяют определить, когда одна из них обновлена, но не выровнена по размеру 16 КБ.

  • Вы можете запустить atest elf_alignment_test , который проверяет выравнивание файлов ELF на устройстве на устройствах, запускаемых с Android 15 (экспериментальная AOSP) и более поздних версиях.