اندروید 11 یا بالاتر از تولید نمایههای تصویر راهاندازی پشتیبانی میکند که اطلاعات مربوط به کد اجزای مختلف در سطح سیستم مانند سرور سیستم و مسیر کلاس راهاندازی را در خود محفوظ میدارد. Android Runtime (ART) از این اطلاعات برای انجام بهینهسازیهای کل سیستم استفاده میکند، که برخی از آنها برای عملکرد Android حیاتی هستند و بر اجرای همه کدهای غیربومی (سطح سیستم یا برنامه) تأثیر میگذارند. در برخی موارد، نمایههای تصویر بوت میتوانند بر عملکرد اجرا و مصرف حافظه با درصدهای دو رقمی تأثیر بگذارند.
اطلاعات پروفایل بوت را دریافت کنید
نمایههای تصویر بوت از نمایههای برنامههای اجرا شده در طول سفرهای حیاتی کاربر (CUJ) مشتق شدهاند. در پیکربندی دستگاه خاص، ART (به عنوان بخشی از نمایههای JIT) روشها و کلاسهای مسیر کلاس راهاندازی مورد استفاده برنامهها را ضبط میکند، سپس آن اطلاعات را در نمایه برنامه ثبت میکند (به عنوان مثال، /data/misc/profiles/cur/0/com.android.chrome/primary.prof )، جایی که با نمایهبندی boot EX classpatheecutal ( Data fileecutable EX) فهرستبندی میشود.
نمایههای برنامه ضبطشده در طول CUJ را بررسی کنید تا مشخص کنید کدام قسمت از مسیر کلاس بوت بیشترین استفاده را دارد و برای بهینهسازی مهمتر است (برای مثال، فرمت نمایه ART را ببینید). گنجاندن همه روشها یا کلاسها بر عملکرد تأثیر منفی میگذارد، بنابراین روی رایجترین مسیرهای کد مورد استفاده تمرکز کنید. برای مثال، اگر روشی از مسیر کلاس راهاندازی توسط یک برنامه استفاده میشود، نباید بخشی از نمایههای راهاندازی باشد. هر دستگاه باید انتخاب روش/کلاس را بر اساس انتخاب CUJ و مقدار داده تولید شده توسط آزمایش پیکربندی کند.
برای جمعآوری اطلاعات مسیر کلاس راهاندازی از تمام پروفایلهای برنامه فردی روی دستگاه، دستور adb shell cmd package snapshot-profile android را اجرا کنید. میتوانید از اطلاعات جمعآوری شده به عنوان مبنای پردازش و انتخاب روش/کلاس بدون جمعآوری دستی پروفایلهای فردی استفاده کنید (اگرچه در صورت تمایل میتوانید این کار را انجام دهید).

شکل 1. فرآیند دریافت نمایه های تصویر بوت
داده های نمایه تصویر را بوت کنید
نمایه های تصویر بوت شامل فایل ها و داده های زیر است.
نمایه مسیر کلاس راهاندازی (
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 520 استفاده می کنند، اما فقط فرآیند
systemuiاز روش با شاخص DEX 521 استفاده می کند. همین منطق در مورد سایر بخش های نمایه (به عنوان مثال، کلاس های راه اندازی) صدق می کند.
در طول پردازش دادهها، روشها/کلاسها را بر اساس استفاده فیلتر کنید و به فرآیندهای سطح سیستم (مثلاً سرور سیستم یا systemui ) یا روشهایی که ممکن است معمولاً استفاده نمیشوند اما همچنان مهم هستند (مثلاً روشهایی که توسط برنامه دوربین استفاده میشود) اولویت دهید.
قالب نمایه به صورت داخلی هر روش را با چندین پرچم (راه اندازی، پس از راه اندازی، داغ بودن، abi) حاشیه نویسی می کند، که بیش از آن چیزی است که در قالب فقط dump نمایش داده می شود. برای استفاده از همه سیگنال ها، اسکریپت های موجود را تغییر دهید.
توصیه ها
برای بهترین نتیجه از دستورالعمل های زیر استفاده کنید.
پیکربندی ایجاد نمایههای تصویر بوت را در چندین دستگاه آزمایشی پیادهسازی کنید و نتایج را قبل از ایجاد نمایه تصویر بوت نهایی جمعآوری کنید. ابزار
profmanاز جمعآوری و انتخاب چندین پروفایل تصویر بوت پشتیبانی میکند، اما فقط با همان نسخه از تصویر بوت (همان مسیر کلاس راهاندازی) کار میکند.اولویت انتخاب را به روشها/کلاسهایی که توسط فرآیندهای سیستم استفاده میشوند، بدهید. این روشها/کلاسها ممکن است از کدی استفاده کنند که اغلب توسط برنامههای دیگر استفاده نمیشود، اما هنوز برای بهینهسازی آن حیاتی است.
شکل دادههای یک دستگاه واحد در مقایسه با دستگاههای آزمایشی که CUJهای دنیای واقعی را اجرا میکنند بسیار متفاوت به نظر میرسد. اگر ناوگان زیادی از دستگاههای آزمایشی ندارید، از یک دستگاه برای اجرای چندین CUJ استفاده کنید تا اطمینان حاصل کنید که بهینهسازیهای نمایه تصویر بوت در تولید به خوبی کار خواهند کرد (این سناریو در زیر توضیح داده شده است).
پیکربندی دستگاه ها
برای فعال کردن پیکربندی پروفایل بوت از طریق ویژگی های سیستم، از یکی از روش های زیر استفاده کنید.
گزینه 1: تنظیم دستی props (تا راه اندازی مجدد کار می کند):
adb rootadb shell stopadb shell setprop dalvik.vm.profilebootclasspath trueadb shell setprop dalvik.vm.profilesystemserver trueadb shell startگزینه 2: از یک
local.prop(اثر دائمی تا زمانی که فایل حذف شود) استفاده کنید. برای انجام این کار:یک فایل
local.propبا محتوای زیر ایجاد کنید:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=trueدستورات زیر را اجرا کنید:
adb push local.prop /data/adb shell chmod 0750 /data/local.propadb reboot
گزینه 3: از پیکربندی دستگاه برای تنظیم ویژگی های سمت سرور زیر استفاده کنید:
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
پروفایل های تصویر بوت را ایجاد کنید
از دستورالعمل های زیر برای ایجاد نمایه تصویر اولیه بوت با استفاده از آزمایش بر روی یک دستگاه استفاده کنید.
دستگاه را راه اندازی کنید.
دستگاه را همانطور که در پیکربندی دستگاه ها توضیح داده شده پیکربندی کنید.
(اختیاری) زمان می برد تا قالب نمایه جدید پاک شود و سایر پروفایل ها جایگزین شود. برای تسریع در جمع آوری نمایه، تمام نمایه های دستگاه را بازنشانی کنید.
adb shell stopadb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"adb shell startCUJ ها را روی دستگاه اجرا کنید.
با استفاده از دستور زیر نمایه را ضبط کنید:
adb shell cmd package snapshot-profile androidنمایه را با استفاده از دستور زیر استخراج کنید:
adb pull /data/misc/profman/android.profبا استفاده از دستورات زیر به فایل های JAR classpath boot بروید:
m distls $ANDROID_PRODUCT_OUT/boot.zipپروفایل تصویر بوت را با استفاده از دستور
profmanزیر ایجاد کنید.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...با استفاده از داده، دستور
profmanرا با استفاده از پرچمهای آستانه انتخاب موجود تغییر دهید.-
--method-threshold -
--class-threshold -
--clean-class-threshold -
--preloaded-class-threshold -
--upgrade-startup-to-hot -
--special-package
برای مشاهده لیست کامل به صفحه راهنمای
profmanیا کد منبع مراجعه کنید.-