啟用 16 KB 頁面大小

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

只有具備 16 KB 核心的 arm64 目標才支援 16 KB 頁面。不過,您也可以選擇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 對齊建構共用程式庫

如要建構屬於 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 (Android 開放原始碼計畫實驗功能) 開始,您可以在建構期間設定 PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true。如要暫時忽略這些錯誤,請在 Android.bpAndroid.mk 中使用 ignore_max_page_size: trueLOCAL_IGNORE_MAX_PAGE_SIZE := true這些設定會驗證所有預先建構的項目,讓您偵測到更新但 16 KB 不一致的情況。

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