Android 15 (AOSP deneysel) ve sonraki sürümler 16 KB sayfa boyutuna sahip Android oluşturmayı destekler. Bu seçenek ek bellek kullanır ancak sistem performansını iyileştirir.
16 KB sayfalar yalnızca 16 KB çekirdeklere sahip arm64
hedeflerinde desteklenir.
Ancak, Mürekkep balığı için x86_64
üzerinde 16 KB kullanıcı alanını simüle etme seçeneği de vardır.
16 KB sayfaları etkinleştirmek için bir cihazda aşağıdaki derleme seçeneklerini ayarlayın:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
,PAGE_SIZE
tanımlamasını kaldırır ve bileşenlerin çalışma zamanında sayfa boyutunu belirlemesini sağlar.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, platform ELF dosyalarının 16 KB hizalamayla oluşturulmasını sağlar. Gerekenden daha büyük olan bu boyut, gelecekteki uyumluluk içindir. 16 KB ELF hizalaması sayesinde çekirdek, 4 KB/16 KB sayfa boyutunu destekleyebilir.
Derleme işaretlerini doğrulama
lunch
hedefini seçtikten sonra, derleme işaretlerinin ortamda doğru şekilde ayarlandığını doğrulayın:
$ 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
Önceki iki komut sırasıyla 16384
ve true
döndürüyorsa derleme işaretleriniz doğru şekilde ayarlanmıştır.
16 KB ELF hizalaması ile paylaşılan kitaplıklar oluşturma
Android projesinin parçası olan paylaşılan kitaplıklar oluşturmak için yalnızca şu derleme işaretlerini hedefinizde ayarlamanız gerekir:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Android projesinin parçası olmayan paylaşılan kitaplıklar oluşturmak için şu bağlayıcı işaretini iletmeniz gerekir:
-Wl,-z,max-page-size=16384
16 KB ELF hizalaması için ikili programları ve önceden oluşturulmuş öğeleri doğrulayın
Hizalamayı ve çalışma zamanı davranışını doğrulamanın en iyi yolu, 16 KB'lık derlenmiş bir çekirdekte test edip çalıştırmaktır. Ancak bazı sorunları daha erken tespit etmek için:
Android W (AOSP deneysel) sürümünden itibaren, derleme sırasında
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
değerini ayarlayabilirsiniz. Bunları geçici olarak yoksaymak içinAndroid.bp
içindeignore_max_page_size: true
veAndroid.mk
içindeLOCAL_IGNORE_MAX_PAGE_SIZE := true
kullanın. Bu ayarlar, önceden oluşturulmuş tüm öğeleri doğrular ve bir tanesinin ne zaman güncellendiğini, ancak 16 KB ile uyumlu olmadığını tespit etmenizi sağlar.Android 15 (AOSP deneysel) ve sonraki sürümlerin yüklü olduğu cihazlarda cihaz üzerindeki ELF dosyalarının uyumluluğunu doğrulayan
atest elf_alignment_test
komutunu çalıştırabilirsiniz.