啟用 16 KB 頁面大小

Android 15 (Android 開放原始碼計畫實驗功能) 以上版本支援建構 頁面大小為 16 KB 的 Android 裝置。這個選項會使用額外記憶體, 可以改善系統效能

16 KB 頁面僅支援含有 16 KB 核心的 arm64 目標。 不過,您也可以選擇 x86_64 上模擬 Cuttlefish 的 16 KB 使用者空間

如要啟用 16 KB 頁面,請在裝置上設定下列建構選項:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true 移除 PAGE_SIZE ,元件則會在執行階段決定網頁大小。
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384,可確保平台 ELF 檔案 以 16 KB 對齊。這個大於需要的大小適用於 未來相容性。以 16 KB ELF 對齊後,核心可支援 4 KB/16 KB 網頁大小。

驗證建構標記

選取 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

如果前兩個指令分別傳回 16384true,就表示您的建構作業

根據 16 KB ELF 對齊建構共用程式庫

如要建構 Cloud Storage 中的 Android 專案, 您只需要在目標中設定這些建構標記:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

建立不屬於共用程式庫的共用程式庫 Android 專案, 您需要傳遞下列連接器標記:

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

驗證二進位檔,並預先建構以 16 KB ELF 對齊

驗證對齊和執行階段行為的最佳方式,就是利用 16 KB 已編譯的核心。不過,為了提早找出部分問題:

  • 從 Android W (AOSP 實驗功能) 開始,您可以設定 PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true 於建構期間。使用 Android.bpignore_max_page_size: true Android.mk 中的 LOCAL_IGNORE_MAX_PAGE_SIZE := true 可暫時忽略 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件這些設定會驗證所有預先建構的項目,讓您偵測到 已更新,但並未對齊 16 KB。

  • 您可以執行 atest elf_alignment_test,以驗證 裝置端 ELF 檔案 Android 15 (Android 開放原始碼計畫實驗功能) 以上版本。