Bật kích thước trang 16 KB

Android 15 (thử nghiệm AOSP) trở lên có hỗ trợ xây dựng Android có kích thước trang 16 KB. Tuỳ chọn này sử dụng thêm bộ nhớ nhưng cải thiện hiệu suất của hệ thống.

Các trang 16 KB chỉ được hỗ trợ trên các mục tiêu arm64 có nhân 16 KB. Tuy nhiên, cũng có một tuỳ chọn để mô phỏng không gian người dùng 16 KB trên x86_64 cho mực ống.

Để bật trang 16 KB, hãy đặt các tuỳ chọn bản dựng sau trên thiết bị:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true sẽ xoá định nghĩa PAGE_SIZE và làm cho các thành phần xác định kích thước trang trong thời gian chạy.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384 để đảm bảo các tệp ELF của nền tảng được xây dựng với kích thước căn chỉnh 16 KB. Kích thước lớn hơn cần thiết này là để đảm bảo khả năng tương thích trong tương lai. Với căn chỉnh ELF 16 KB, nhân hệ điều hành có thể hỗ trợ kích thước trang 4 KB/16 KB.

Xác minh cờ bản dựng

Sau khi chọn mục tiêu lunch, hãy xác minh rằng cờ bản dựng được thiết lập đúng cách trong môi trường:

$ 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

Nếu 2 lệnh trước đó trả về 16384true tương ứng, thì cờ bản dựng sẽ được thiết lập đúng cách.

Xây dựng thư viện dùng chung với căn chỉnh ELF 16 KB

Để xây dựng các thư viện dùng chung trong dự án Android, bạn chỉ cần đặt những cờ bản dựng này trong mục tiêu của mình:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

Để tạo các thư viện dùng chung không thuộc dự án Android, bạn cần truyền cờ trình liên kết này:

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

Xác minh tệp nhị phân và tệp tạo sẵn để căn chỉnh ELF 16 KB

Cách tốt nhất để xác minh hành vi căn chỉnh và thời gian chạy là kiểm thử và chạy trên nhân biên dịch 16 KB. Tuy nhiên, để phát hiện một số vấn đề sớm hơn:

  • Kể từ Android W (bản thử nghiệm AOSP), bạn có thể đặt PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true tại thời điểm xây dựng. Hãy sử dụng ignore_max_page_size: true trong Android.bpLOCAL_IGNORE_MAX_PAGE_SIZE := true trong Android.mk để tạm thời bỏ qua các hàm này. Các chế độ cài đặt này xác minh tất cả các giá trị tạo sẵn và cho phép bạn phát hiện thời điểm một giá trị được cập nhật nhưng không được căn chỉnh trong kích thước 16 KB.

  • Bạn có thể chạy atest elf_alignment_test để xác minh sự căn chỉnh của các tệp ELF trên thiết bị trên các thiết bị chạy Android 15 (thử nghiệm AOSP) trở lên.