16 केबी पेज आकार को चालू करें

Android 15 (एओएसपी एक्सपेरिमेंट के तौर पर उपलब्ध) और इसके बाद के वर्शन में, 16 केबी पेज साइज़ वाला Android वर्शन बनाया जा सकता है. यह विकल्प ज़्यादा मेमोरी का इस्तेमाल करता है, लेकिन इससे सिस्टम की परफ़ॉर्मेंस बेहतर होती है.

16 केबी वाले पेज सिर्फ़ 16 केबी कर्नेल वाले arm64 टारगेट पर काम करते हैं. हालांकि, x86_64 पर 16 केबी वाले यूज़रस्पेस को सिम्युलेट करने का एक विकल्प भी है.

16 केबी वाले पेजों को चालू करने के लिए, डिवाइस पर इन बिल्ड विकल्पों को सेट करें:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true, PAGE_SIZE की परिभाषा को हटा देता है. इसकी मदद से, रनटाइम के दौरान कॉम्पोनेंट, पेज का साइज़ तय करते हैं.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384, जो यह पक्का करता है कि प्लैटफ़ॉर्म ELF फ़ाइलें 16 केबी अलाइनमेंट के साथ बनाई गई हैं. यह ज़रूरत से बड़ा साइज़ है, ताकि आने वाले समय में इसे बेहतर तरीके से इस्तेमाल किया जा सके. 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 दिखता है, तो बिल्ड फ़्लैग सही तरीके से सेट अप किए गए हैं.

16 केबी ईएलएफ़ अलाइनमेंट के साथ शेयर की गई लाइब्रेरी बनाएं

अगर शेयर की गई ऐसी लाइब्रेरी बनानी हैं जो Android प्रोजेक्ट का हिस्सा हैं, तो आपको अपने टारगेट में सिर्फ़ इन बिल्ड फ़्लैग को सेट करना होगा:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

जो शेयर की गई लाइब्रेरी Android प्रोजेक्ट का हिस्सा नहीं हैं, उन्हें बनाने के लिए आपको यह लिंकर फ़्लैग पास करना होगा:

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

16 केबी ईएलएफ़ अलाइनमेंट के लिए, बाइनरी और पहले से बनी चीज़ों की पुष्टि करें

अलाइनमेंट और रनटाइम के व्यवहार की पुष्टि करने का सबसे अच्छा तरीका, 16 केबी के कंपाइल किए गए कर्नेल पर जांच करना और चलाना है. हालांकि, कुछ समस्याओं को शुरुआत में ही पकड़ने के लिए:

  • Android W (एओएसपी एक्सपेरिमेंट के तौर पर शुरू) में, बिल्ड के समय PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true को सेट किया जा सकता है. इन्हें कुछ समय के लिए अनदेखा करने के लिए, Android.bp में ignore_max_page_size: true और Android.mk में LOCAL_IGNORE_MAX_PAGE_SIZE := true का इस्तेमाल करें. ये सेटिंग, पहले से बनी सभी चीज़ों की पुष्टि करती हैं. साथ ही, इनकी मदद से यह पता लगाया जा सकता है कि कोई अपडेट कब हुआ है, लेकिन उसका साइज़ 16 केबी से ज़्यादा नहीं होना चाहिए.

  • आपके पास atest elf_alignment_test चलाने का विकल्प है. यह पुष्टि करता है कि उपयोगकर्ता के डिवाइस पर मौजूद ELF फ़ाइलों को Android 15 (प्रयोग के तौर पर उपलब्ध) और उसके बाद के वर्शन वाले डिवाइसों पर अलाइन किया गया है या नहीं.