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 (प्रयोग के तौर पर उपलब्ध) और उसके बाद के वर्शन वाले डिवाइसों पर अलाइन किया गया है या नहीं.