نمایه‌های تصویر راه‌اندازی

‫Android 11 یا بالاتر از تولید نمایه‌های تصویر راه‌اندازی پشتیبانی می‌کند که اطلاعات مربوط به کد اجزای مختلف سطح سیستم مثل سرور سیستم و مسیر کلاس راه‌اندازی را دربرمی‌گیرد. ‫Android Runtime (ART) از این اطلاعات برای انجام بهینه‌سازی‌های سراسری سیستم استفاده می‌کند که برخی‌از آن‌ها برای عملکرد Android حیاتی هستند و بر اجرای همه کدهای غیربومی (سطح سیستم یا برنامه) تأثیر می‌گذارند. در برخی موارد، نمایه‌های تصویر راه‌اندازی می‌توانند بر عملکرد اجرا و مصرف حافظه تا دو رقم درصد تأثیر بگذارند.

دریافت اطلاعات نمایه راه‌اندازی

نمایه‌های تصویر راه‌اندازی از نمایه‌های برنامه‌های اجراشده درطول مسیرهای قطعی کاربر (CUJ) مشتق می‌شوند. در پیکربندی دستگاه خاصی، ART روش‌ها و کلاس‌های مسیر کلاس راه‌اندازی استفاده‌شده توسط برنامه‌ها (به‌عنوان بخشی از نمایه‌های JIT) را ضبط می‌کند، سپس آن اطلاعات را در نمایه برنامه (برای مثال، /data/misc/profiles/cur/0/com.android.chrome/primary.prof) ثبت می‌کند، جایی که توسط فایل اجرایی Dalvik (DEX) مسیر کلاس راه‌اندازی فهرست‌بندی می‌شود (به قالب نمایه ART مراجعه کنید).

نمایه‌های برنامه ضبط‌شده درطول CUJ را مرور کنید تا مشخص شود کدام بخش از مسیر کلاس راه‌اندازی بیشتر استفاده می‌شود و برای بهینه‌سازی مهم‌تر است (برای مثال، قالب نمایه‌های ART را ببینید). گنجاندن همه روش‌ها یا کلاس‌ها تأثیر منفی بر عملکرد دارد، بنابراین روی مسیرهای کد پراستفاده تمرکز کنید. برای مثال، اگر یک روش از مسیر کلاس بوت توسط یک برنامه استفاده شود، نباید بخشی از نمایه‌های بوت باشد. هر دستگاه باید انتخاب روش/کلاس را براساس انتخاب CUJ و مقدار داده‌های تولیدشده توسط آزمایش پیکربندی کند.

برای جمع‌آوری اطلاعات مسیر کلاس راه‌اندازی از همه نمایه‌های برنامه در دستگاه، فرمان adb shell cmd package snapshot-profile android را اجرا کنید. می‌توانید از اطلاعات تجمیع‌شده به‌عنوان مبنایی برای پردازش و انتخاب روش/کلاس استفاده کنید بدون اینکه به‌صورت دستی نمایه‌های فردی را تجمیع کنید (اگرچه درصورت تمایل می‌توانید این کار را انجام دهید).

نمایه تصویر راه‌اندازی

شکل ۱. فرایند دریافت نمایه‌های تصویر راه‌اندازی

داده‌های نمایه تصویر راه‌اندازی

نمایه‌های تصویر راه‌اندازی شامل فایل‌ها و داده‌های زیر است.

  • نمایه مسیر کلاس راه‌اندازی (frameworks/base/config/boot-image-profile.txt. تعیین می‌کند کدام روش‌ها از مسیر کلاس راه‌اندازی بهینه‌سازی شوند و کدام کلاس در تصویر .art راه‌اندازی گنجانده شود.

  • فهرست کلاس‌های پیش‌بارشده. تعیین می‌کند کدام کلاس‌ها در Zygote ازپیش بارگذاری شوند.

  • نمایه برای مؤلفه‌های سرور سیستم (frameworks/base/services/art-profile). تعیین می‌کند کدام روش‌ها از سرور سیستم بهینه‌سازی/کامپایل می‌شوند، کدام کلاس در تصویر راه‌اندازی .art گنجانده می‌شود، و فایل‌های DEX مربوطه چگونه چیده می‌شوند.

قالب نمایه ART

نمایه ART اطلاعات را از هریک از فایل‌های 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‏ ۵۲۰ استفاده می‌کنند، اما فقط فرایند systemui از روشی با نمایه DEX‏ ۵۲۱ استفاده می‌کند. همین منطق برای سایر بخش‌های نمایه (برای مثال، کلاس‌های راه‌اندازی) نیز اعمال می‌شود.

درطول پردازش داده‌ها، روش‌ها/کلاس‌ها را براساس استفاده فیلتر می‌کنیم و به فرایندهای سطح سیستم (برای مثال، سرور سیستم یا systemui) یا روش‌هایی که ممکن است معمولاً استفاده نشوند اما همچنان مهم هستند (برای مثال، روش‌های استفاده‌شده توسط برنامه دوربین) اولویت می‌دهیم.

قالب نمایه به‌طور داخلی هر روش را با چند پرچم (راه‌اندازی، پس‌از راه‌اندازی، داغی، abi) حاشیه‌نویسی می‌کند که بیشتر از چیزی است که در قالب فقط تخلیه نمایش داده می‌شود. برای استفاده از همه سیگنال‌ها، دستورگان‌های دردسترس را اصلاح کنید.

توصیه‌ها

برای کسب بهترین نتایج، از دستورالعمل‌های زیر استفاده کنید.

  • پیکربندی تولید نمایه‌های تصویر راه‌اندازی را در چند دستگاه آزمایشی مستقر کنید و نتایج را قبل‌از تولید نمایه تصویر راه‌اندازی نهایی جمع‌آوری کنید. ابزار profman از تجمیع و انتخاب چندین نمایه تصویر راه‌اندازی پشتیبانی می‌کند، اما فقط با همان نسخه تصویر راه‌اندازی (همان مسیر کلاس راه‌اندازی) کار می‌کند.

  • به روش‌ها/کلاس‌هایی که توسط فرایندهای سیستم استفاده می‌شوند اولویت انتخاب بدهید. این روش‌ها/کلاس‌ها ممکن است از کدی استفاده کنند که اغلب توسط برنامه‌های دیگر استفاده نمی‌شود اما همچنان برای بهینه‌سازی حیاتی است.

  • شکل داده‌های اجرای یک دستگاه با دستگاه‌های آزمایشی که CUJهای دنیای واقعی را اجرا می‌کنند بسیار متفاوت است. اگر ناوگان بزرگی از دستگاه‌های آزمایشی ندارید، از همان دستگاه برای اجرای چندین «سفر مشتری حیاتی» استفاده کنید تا اطمینان بیشتری پیدا کنید که بهینه‌سازی‌های نمایه تصویر راه‌اندازی در محیط تولید به‌خوبی کار خواهد کرد (این سناریو در زیر توضیح داده شده است).

پیکربندی دستگاه‌ها

برای فعال کردن پیکربندی نمایه راه‌اندازی ازطریق خصوصیات سیستم، از یکی از روش‌های زیر استفاده کنید.

  • گزینه ۱: راه‌اندازی دستی لوازم (تا زمان بازراه‌اندازی کار می‌کند):

    adb root
    adb shell stop
    adb shell setprop dalvik.vm.profilebootclasspath true
    adb shell setprop dalvik.vm.profilesystemserver true
    adb shell start
  • گزینه ۲: از 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
  • گزینه ۳: از پیکربندی دستگاه برای تنظیم خصوصیات سمت سرور زیر استفاده کنید:

    adb shell device_config put runtime_native_boot profilebootclasspath true
    adb shell device_config put runtime_native_boot profilesystemserver true
    

تولید نمایه‌های تصویر راه‌اندازی

از دستورالعمل‌های زیر برای تولید نمایه تصویر راه‌اندازی پایه بااستفاده از آزمایش در یک دستگاه استفاده کنید.

  1. دستگاه را راه‌اندازی کنید.

    1. دستگاه را طبق روشی که در پیکربندی دستگاه‌ها توضیح داده شده است پیکربندی کنید.

    2. (اختیاری) مدتی طول می‌کشد تا قالب نمایه جدید پاک شود و جایگزین نمایه‌های دیگر شود. برای تسریع جمع‌آوری نمایه، همه نمایه‌ها را در دستگاه بازنشانی کنید.

      adb shell stop
      adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
      adb shell start
    3. «سفرهای کاربر مشترک» را در دستگاه اجرا کنید.

  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 یا کد منبع مراجعه کنید.