छवि प्रोफ़ाइल बूट करें

एंड्रॉइड 11 या उच्चतर बूट इमेज प्रोफाइल बनाने का समर्थन करता है, जो सिस्टम सर्वर और बूट क्लासपाथ जैसे विभिन्न सिस्टम-स्तरीय घटकों के कोड के बारे में जानकारी को समाहित करता है। एंड्रॉइड रनटाइम (एआरटी) इस जानकारी का उपयोग सिस्टम-व्यापी अनुकूलन करने के लिए करता है, जिनमें से कुछ एंड्रॉइड के प्रदर्शन के लिए महत्वपूर्ण हैं और सभी गैर-मूल कोड (सिस्टम या ऐप स्तर) के निष्पादन को प्रभावित करते हैं। कुछ मामलों में, बूट छवि प्रोफ़ाइल निष्पादन प्रदर्शन और मेमोरी खपत को दोहरे अंक प्रतिशत तक प्रभावित कर सकती है।

बूट प्रोफ़ाइल जानकारी प्राप्त करें

बूट छवि प्रोफ़ाइल महत्वपूर्ण उपयोगकर्ता यात्राओं (सीयूजे) के दौरान निष्पादित ऐप्स की प्रोफाइल से प्राप्त की जाती हैं। एक विशिष्ट डिवाइस कॉन्फ़िगरेशन में, एआरटी ऐप्स द्वारा उपयोग किए जाने वाले बूट क्लासपाथ तरीकों और कक्षाओं को कैप्चर करता है (जेआईटी प्रोफाइल के हिस्से के रूप में), फिर उस जानकारी को ऐप प्रोफाइल में रिकॉर्ड करता है (उदाहरण के लिए, /data/misc/profiles/cur/0/com.android.chrome/primary.prof ), जहां इसे बूट क्लासपाथ डाल्विक एक्ज़ीक्यूटेबल (DEX) फ़ाइल द्वारा अनुक्रमित किया जाता है ( ART प्रोफ़ाइल प्रारूप देखें)।

यह निर्धारित करने के लिए सीयूजे के दौरान रिकॉर्ड किए गए ऐप प्रोफाइल की समीक्षा करें कि बूट क्लासपाथ का कौन सा हिस्सा सबसे अधिक उपयोग किया जाता है और अनुकूलन के लिए सबसे महत्वपूर्ण है (उदाहरण के लिए, एआरटी प्रोफाइल प्रारूप देखें)। सभी विधियों या वर्गों को शामिल करने से प्रदर्शन पर नकारात्मक प्रभाव पड़ता है, इसलिए सबसे अधिक उपयोग किए जाने वाले कोड पथों पर ध्यान केंद्रित करें। उदाहरण के लिए, यदि बूट क्लासपाथ की एक विधि का उपयोग किसी एकल ऐप द्वारा किया जाता है, तो इसे बूट प्रोफाइल का हिस्सा नहीं होना चाहिए। प्रत्येक डिवाइस को सीयूजे चयन और परीक्षण द्वारा उत्पादित डेटा की मात्रा के आधार पर विधि/वर्ग चयन को कॉन्फ़िगर करना चाहिए।

डिवाइस पर सभी अलग-अलग ऐप प्रोफाइल से बूट क्लासपाथ जानकारी एकत्र करने के लिए, adb shell cmd package snapshot-profile android कमांड चलाएं। आप अलग-अलग प्रोफाइलों को मैन्युअल रूप से एकत्र किए बिना एकत्रित जानकारी को प्रसंस्करण और विधि/वर्ग चयन के आधार के रूप में उपयोग कर सकते हैं (हालांकि आप चाहें तो ऐसा कर सकते हैं)।

छवि प्रोफ़ाइल बूट करें

चित्र 1. बूट छवि प्रोफ़ाइल प्राप्त करने की प्रक्रिया

छवि प्रोफ़ाइल डेटा बूट करें

बूट छवि प्रोफ़ाइल में निम्नलिखित फ़ाइलें और डेटा शामिल हैं।

  • बूट क्लासपाथ के लिए प्रोफ़ाइल ( frameworks/base/config/boot-image-profile.txt ). यह निर्धारित करता है कि बूट क्लासपाथ से कौन सी विधियाँ अनुकूलित होंगी, कौन सी क्लास बूट .art छवि में शामिल है, और संबंधित DEX फ़ाइलें कैसे रखी जाएंगी।

  • प्रीलोडेड कक्षाओं की सूची. यह निर्धारित करता है कि कौन सी कक्षाएँ Zygote में पहले से लोड की गई हैं।

  • सिस्टम सर्वर घटकों के लिए प्रोफ़ाइल ( frameworks/base/services/art-profile )। यह निर्धारित करता है कि सिस्टम सर्वर से कौन सी विधियाँ अनुकूलित/संकलित होती हैं, बूट .art छवि में कौन सा वर्ग शामिल है, और संबंधित DEX फ़ाइलें कैसे रखी जाती हैं।

एआरटी प्रोफ़ाइल प्रारूप

एआरटी प्रोफ़ाइल प्रत्येक लोड की गई DEX फ़ाइलों से जानकारी कैप्चर करती है, जिसमें अनुकूलन के तरीकों और स्टार्टअप के दौरान उपयोग की जाने वाली कक्षाओं के बारे में जानकारी शामिल है। जब बूट छवि प्रोफ़ाइलिंग सक्षम होती है, तो ART प्रोफ़ाइल में बूट क्लासपाथ और सिस्टम सर्वर JAR फ़ाइलें भी शामिल करता है और प्रत्येक DEX फ़ाइल को उस पैकेज के नाम के साथ एनोटेट करता है जो इसका उपयोग करता है।

उदाहरण के लिए, निम्न आदेश के साथ कच्ची बूट छवि प्रोफ़ाइल को डंप करें:

adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof

यह इसके समान आउटपुट उत्पन्न करता है:

=== Dex files  ===
=== profile ===
ProfileInfo [012]

core-oj.jar:com.google.android.ext.services [index=0] [checksum=e4e3979a]
        hot methods: 520[], 611[] …
        startup methods: …
        classes: …
...
core-oj.jar:com.android.systemui [index=94] [checksum=e4e3979a]
        hot methods: 520[], 521[]…
        startup methods: …
        classes: …

उपरोक्त उदाहरण में:

  • core-oj.jar का उपयोग com.google.android.ext.services और com.android.systemui द्वारा किया जाता है। प्रत्येक प्रविष्टि core-oj.jar से उपयोग किए गए दो पैकेजों को सूचीबद्ध करती है।

  • दोनों प्रक्रियाएँ DEX इंडेक्स 520 के साथ विधि का उपयोग करती हैं, लेकिन केवल systemui प्रक्रिया DEX इंडेक्स 521 के साथ विधि का उपयोग करती है। यही तर्क अन्य प्रोफ़ाइल अनुभागों (उदाहरण के लिए, स्टार्टअप कक्षाएं) पर भी लागू होता है।

डेटा प्रोसेसिंग के दौरान, उपयोग के आधार पर तरीकों/वर्गों को फ़िल्टर करें, सिस्टम-स्तरीय प्रक्रियाओं (उदाहरण के लिए, सिस्टम सर्वर या systemui ) या उन तरीकों को प्राथमिकता दें जिनका आमतौर पर उपयोग नहीं किया जा सकता है लेकिन फिर भी महत्वपूर्ण हैं (उदाहरण के लिए, द्वारा उपयोग किए जाने वाले तरीके) कैमरा ऐप)।

प्रोफ़ाइल प्रारूप आंतरिक रूप से प्रत्येक विधि को एकाधिक फ़्लैग (स्टार्टअप, पोस्ट-स्टार्टअप, हॉटनेस, एबीआई) के साथ एनोटेट करता है, जो डंप-ओनली प्रारूप में प्रदर्शित होने से अधिक है। सभी संकेतों का उपयोग करने के लिए, उपलब्ध स्क्रिप्ट को संशोधित करें।

सिफारिशों

सर्वोत्तम परिणामों के लिए निम्नलिखित दिशानिर्देशों का उपयोग करें।

  • बूट छवि प्रोफ़ाइल बनाने के लिए कॉन्फ़िगरेशन को कई परीक्षण उपकरणों पर तैनात करें और अंतिम बूट छवि प्रोफ़ाइल बनाने से पहले परिणामों को एकत्रित करें। profman टूल एकाधिक बूट छवि प्रोफ़ाइलों को एकत्र करने और चुनने का समर्थन करता है, लेकिन यह केवल बूट छवि के समान संस्करण (समान बूट क्लासपाथ) के साथ काम करता है।

  • सिस्टम प्रक्रियाओं द्वारा उपयोग की जाने वाली विधियों/वर्गों को चयन प्राथमिकता दें। ये विधियाँ/वर्ग ऐसे कोड का उपयोग कर सकते हैं जो अक्सर अन्य ऐप्स द्वारा उपयोग नहीं किया जाता है लेकिन अनुकूलन के लिए यह अभी भी महत्वपूर्ण है।

  • एकल डिवाइस रन से डेटा आकार वास्तविक दुनिया सीयूजे निष्पादित करने वाले परीक्षण उपकरणों की तुलना में बहुत अलग दिखता है। यदि आपके पास परीक्षण उपकरणों का बड़ा बेड़ा नहीं है, तो यह विश्वास बढ़ाने के लिए कि बूट छवि प्रोफ़ाइल अनुकूलन उत्पादन में अच्छा काम करेगा (यह परिदृश्य नीचे वर्णित है) कई सीयूजे चलाने के लिए एक ही डिवाइस का उपयोग करें।

डिवाइस कॉन्फ़िगर करें

सिस्टम गुणों के माध्यम से बूट प्रोफ़ाइल कॉन्फ़िगरेशन को सक्षम करने के लिए, निम्न विधियों में से एक का उपयोग करें।

  • विकल्प 1: प्रॉप्स को मैन्युअल रूप से सेट करें (रीबूट तक काम करता है):

    adb root
    adb shell stop
    adb shell setprop dalvik.vm.profilebootclasspath true
    adb shell setprop dalvik.vm.profilesystemserver true
    adb shell start
    
  • विकल्प 2: local.prop उपयोग करें (फ़ाइल हटाए जाने तक स्थायी प्रभाव)। ऐसा करने के लिए:

    1. सामग्री के साथ एक local.prop फ़ाइल बनाएँ:

      dalvik.vm.profilebootclasspath=true
      dalvik.vm.profilesystemserver=true
      
    2. निम्नलिखित आदेश चलाएँ:

      adb push local.prop /data/
      adb shell chmod 0750 /data/local.prop
      adb reboot
      
  • विकल्प 3: निम्नलिखित सर्वर-साइड गुण सेट करने के लिए डिवाइस कॉन्फ़िगरेशन का उपयोग करें:

    persist.device_config.runtime_native_boot.profilesystemserver
    persist.device_config.runtime_native_boot.profilebootclasspath`
    

बूट छवि प्रोफ़ाइल जनरेट करें

एकल डिवाइस पर परीक्षण का उपयोग करके मूल बूट छवि प्रोफ़ाइल तैयार करने के लिए निम्नलिखित निर्देशों का उपयोग करें।

  1. डिवाइस सेट करें.

    1. डिवाइस को कॉन्फ़िगर करना में वर्णित अनुसार डिवाइस को कॉन्फ़िगर करें।

    2. (वैकल्पिक) नए प्रोफ़ाइल प्रारूप को अन्य प्रोफ़ाइलों को साफ़ करने और बदलने में समय लगता है। प्रोफ़ाइल संग्रह को तेज़ करने के लिए, डिवाइस पर सभी प्रोफ़ाइल रीसेट करें।

      adb shell stop
      adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
      adb shell start
      
    3. डिवाइस पर CUJ चलाएँ।

  2. निम्न आदेश का उपयोग करके प्रोफ़ाइल कैप्चर करें:

    adb shell cmd package snapshot-profile android
    
  3. निम्न आदेश का उपयोग करके प्रोफ़ाइल निकालें:

    adb pull /data/misc/profman/android.prof
    
  4. निम्नलिखित आदेशों का उपयोग करके बूट क्लासपाथ JAR फ़ाइलों पर नेविगेट करें:

    m dist
    ls $ANDROID_PRODUCT_OUT/boot.zip
    
  5. निम्नलिखित profman कमांड का उपयोग करके बूट छवि प्रोफ़ाइल जेनरेट करें।

    profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
    
  6. डेटा का उपयोग करके, उपलब्ध चयन थ्रेशोल्ड फ़्लैग का उपयोग करके profman कमांड को ट्विक करें।

    • --method-threshold
    • --class-threshold
    • --clean-class-threshold
    • --preloaded-class-threshold
    • --upgrade-startup-to-hot
    • --special-package

    पूरी सूची देखने के लिए, profman सहायता पृष्ठ या स्रोत कोड देखें।