اخبار محصول

تقویت عملکرد Android: معرفی AutoFDO برای هسته

زمان خواندن: ۴ دقیقه
مشاهده نمایه چارلز مانگر
Yabin Cui مهندس نرم‌افزار

ما تیم زنجیره ابزار LLVM در Android هستیم. یکی از اولویت‌های اصلی ما بهبود عملکرد Android ازطریق تکنیک‌های بهینه‌سازی در بوم‌سازگان LLVM است. ما همواره به‌دنبال راه‌هایی هستیم که Android را سریع‌تر، روان‌تر، و کارآمدتر کنیم. درحالی‌که بیشتر کار بهینه‌سازی ما در فضای کاربر اتفاق می‌افتد، هسته همچنان قلب سیستم است. امروز مشتاقیم تا نحوه آوردن بهینه‌سازی خودکار بازخورد-محور (AutoFDO) به هسته Android را برای ارائه عملکردی بسیار بهتر به کاربران هم‌رسانی کنیم.

AutoFDO چیست؟

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

AutoFDO این وضعیت را بااستفاده از الگوهای اجرای واقعی برای هدایت کامپایلر تغییر می‌دهد. این الگوها نشان‌دهنده رایج‌ترین مسیرهای اجرای دستورالعمل هستند که کد درطول استفاده واقعی طی می‌کند و با ثبت سابقه انشعاب CPU ضبط می‌شوند. اگرچه این داده‌ها را می‌توان از دستگاه‌های ناوگان جمع‌آوری کرد، اما برای هسته، ما آن را در محیط آزمایشگاهی بااستفاده از حجم‌های کاری نمونه، مانند اجرای ۱۰۰ برنامه محبوب برتر، ترکیب می‌کنیم. ما از یک تحلیل‌گر نمونه‌گیری برای ضبط این داده‌ها استفاده می‌کنیم تا بخش‌هایی از کد را که «داغ» (پرکاربرد) و بخش‌هایی را که «سرد» هستند شناسایی کنیم. وقتی هسته را با این نمایه‌ها بازسازی می‌کنیم، کامپایلر می‌تواند تصمیمات بهینه‌سازی بسیار هوشمندانه‌تری را متناسب با حجم کاری واقعی Android اتخاذ کند.

برای درک تأثیر این بهینه‌سازی، این حقایق کلیدی را درنظر بگیرید:

  • در Android، هسته حدود ۴۰٪ از زمان واحد پردازش مرکزی را به خود اختصاص می‌دهد.
  • ما درحال‌حاضر از AutoFDO برای بهینه‌سازی کتابخانه‌ها و فایل‌های اجرایی بومی در فضای کاربر استفاده می‌کنیم و به حدود ۴٪ بهبود در راه‌اندازی سرد برنامه و ۱٪ کاهش در زمان راه‌اندازی دست یافته‌ایم.

بردها در عملکرد دنیای واقعی

با بهره‌گیری از نمایه‌های محیط‌های آزمایشگاهی کنترل‌شده، شاهد بهبودهای چشمگیری در معیارهای کلیدی Android بوده‌ایم. این نمایه‌ها بااستفاده از خزیدن و راه‌اندازی برنامه جمع‌آوری شده‌اند و در دستگاه‌های Pixel در هسته‌های ۶.۱، ۶.۶، و ۶.۱۲ اندازه‌گیری شده‌اند.

قابل‌توجه‌ترین بهبودها در زیر فهرست شده‌اند. جزئیات مربوط به نمایه‌های AutoFDO برای این نسخه‌های هسته را می‌توانید در مخازن هسته Android مربوطه برای هسته‌های android16-6.12 و android15-6.6 پیدا کنید.

boosting_2.png

این‌ها فقط اعداد نظری نیستند. این بهبودها به میانای سریع‌تر، جابه‌جایی سریع‌تر بین برنامه‌ها، عمر باتری طولانی‌تر، و درمجموع دستگاهی با واکنش‌گرایی بیشتر برای کاربر نهایی منجر می‌شود.

روش کار: خط لوله

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

boosting_3.png

مرحله ۱: جمع‌آوری نمایه

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

  • ابزارها و محیط: دستگاه‌های آزمایشی را با جدیدترین تصویر هسته فلش می‌کنیم و از simpleperf برای ضبط جریان‌های اجرای دستورالعمل استفاده می‌کنیم. این فرایند به قابلیت‌های سخت‌افزاری برای ضبط سابقه انشعاب متکی است و به‌طور خاص از  ARM Embedded Trace Extension (ETE) و ARM Trace Buffer Extension (TRBE) در دستگاه‌های Pixel استفاده می‌کند.
  • حجم‌های کاری: ما بااستفاده از ۱۰۰ برنامه محبوب برتر از مجموعه آزمایش سازگاری برنامه Android (C-Suite)، یک حجم کاری نمونه می‌سازیم. برای ثبت دقیق‌ترین داده‌ها، بر موارد زیر تمرکز می‌کنیم:
    • راه‌اندازی برنامه: بهینه‌سازی برای قابل‌مشاهده‌ترین تأخیرهای کاربر
    • خزش برنامه بااستفاده از هوش مصنوعی: شبیه‌سازی تعاملات کاربر به‌صورت پیوسته و درحال تکامل
    • پایش سراسری سیستم: ضبط کردن نه‌تنها فعالیت‌های برنامه پیش‌زمینه، بلکه حجم‌های کاری مهم پس‌زمینه و ارتباطات بین‌فرایندی
  • اعتبارسنجی: این حجم کاری ترکیبی ۸۵٪ شباهت به الگوهای اجرایی جمع‌آوری‌شده از ناوگان داخلی ما نشان می‌دهد.
  • داده‌های هدفمند: با تکرار کافی این آزمایش‌ها، الگوهای اجرایی با وفاداری بالا را ضبط می‌کنیم که به‌طور دقیق تعامل کاربر در دنیای واقعی با محبوب‌ترین برنامه‌ها را نشان می‌دهند. علاوه‌براین، این چارچوب قابل‌توسعه به ما امکان می‌دهد تا حجم‌های کاری و محک‌های بیشتری را به‌طور یکپارچه ادغام کنیم تا پوشش خود را گسترش دهیم.

مرحله ۲: پردازش نمایه

ما داده‌های ردیابی خام را پس‌پردازش می‌کنیم تا مطمئن شویم که تمیز، مؤثر، و آماده برای کامپایلر است.

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

مرحله ۳: آزمایش نمایه

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

  • تجزیه‌وتحلیل نمایه و باینری: ما محتوای نمایه جدید (ازجمله توابع داغ، تعداد نمونه‌ها، و اندازه نمایه) را به‌طور دقیق با نسخه‌های قبلی مقایسه می‌کنیم. همچنین از نمایه برای ساختن تصویر هسته جدید استفاده می‌کنیم و باینری‌ها را تجزیه‌وتحلیل می‌کنیم تا مطمئن شویم تغییرات بخش نوشتار با انتظارات مطابقت دارد.
  • درستی‌سنجی عملکرد: ما محک‌های هدفمندی را روی تصویر هسته جدید اجرا می‌کنیم. این کار تأیید می‌کند که بهبودهای عملکردی که توسط خطوط پایه قبلی ایجاد شده‌اند حفظ می‌شوند.

به‌روزرسانی‌های مداوم

کد به‌طور طبیعی درطول زمان «تغییر می‌کند»، بنابراین نمایه ایستا درنهایت اثربخشی خود را ازدست می‌دهد. برای حفظ عملکرد در بالاترین سطح، خط لوله را به‌طور مداوم اجرا می‌کنیم تا به‌روزرسانی‌های منظم را هدایت کنیم:

  • بازآوری منظم: ما نمایه‌ها را در شاخه‌های LTS هسته Android پیش‌از هر انتشار GKI بازآوری می‌کنیم تا مطمئن شویم هر ساخت شامل جدیدترین داده‌های نمایه است.
  • گسترش در آینده: درحال‌حاضر این به‌روزرسانی‌ها را برای شاخه‌های android16-6.12 و android15-6.6 ارائه می‌کنیم و پشتیبانی را به نسخه‌های جدیدتر GKI، مثل نسخه آتی android17-6.18، گسترش خواهیم داد.

تضمین پایداری

یک سؤال رایج درباره بهینه‌سازی نمایه-محور این است که آیا این روش خطراتی برای پایداری ایجاد می‌کند یا نه. ازآنجایی‌که AutoFDO عمدتاً بر اکتشافات کامپایلر، مانند درون‌خطی کردن تابع و چیدمان کد، تأثیر می‌گذارد و منطق کد منبع را تغییر نمی‌دهد، یکپارچگی عملکردی هسته را حفظ می‌کند. این فناوری قبلاً در مقیاس بزرگ اثبات شده است و سال‌ها به‌عنوان بهینه‌سازی استاندارد برای کتابخانه‌های پلاتفرم Android،‏ ChromeOS، و زیرساخت سرور خود Google عمل کرده است.

برای تضمین بیشتر رفتار سازگار، راهبرد «محافظه‌کارانه به‌طور پیش‌فرض» را اعمال می‌کنیم. توابعی که در نمایه‌های با کیفیت بالا ثبت نشده‌اند بااستفاده از روش‌های استاندارد کامپایلر بهینه‌سازی می‌شوند. این کار تضمین می‌کند که بخش‌های «سرد» یا به‌ندرت اجراشده هسته دقیقاً مانند یک ساخت استاندارد رفتار کنند و از افت عملکرد یا رفتارهای غیرمنتظره در موارد خاص جلوگیری می‌کند.

نگاهی به آینده

درحال‌حاضر AutoFDO را در شاخه‌های android16-6.12 و android15-6.6 مستقر می‌کنیم. فراتر از این عرضه اولیه، چندین مسیر امیدوارکننده برای بهبود بیشتر این فناوری می‌بینیم:

  • گسترش دسترسی: مشتاقانه منتظر استقرار نمایه‌های AutoFDO در نسخه‌های جدیدتر هسته GKI و اهداف ساخت اضافی فراتر از پشتیبانی فعلی aarch64 هستیم.
  • بهینه‌سازی ماژول GKI: درحال‌حاضر، بهینه‌سازی ما بر دودویی هسته اصلی (vmlinux) متمرکز است. گسترش AutoFDO به ماژول‌های GKI می‌تواند مزایای عملکردی را برای بخش بزرگ‌تری از زیرسیستم هسته به‌همراه داشته باشد.
  • پشتیبانی از ماژول فروشنده: همچنین علاقه‌مندیم از AutoFDO برای ماژول‌های فروشنده ساخته‌شده بااستفاده از کیت توسعه درایور (DDK) پشتیبانی کنیم. با پشتیبانی‌ای که ازقبل در سیستم ساخت ما (Kleaf) و ابزارهای نمایه‌سازی (simpleperf) دردسترس است، فروشندگان می‌توانند همین تکنیک‌های بهینه‌سازی را برای درایورهای سخت‌افزاری خاص خودشان اعمال کنند.
  • پوشش گسترده‌تر نمایه: پتانسیل جمع‌آوری نمایه‌ها از طیف وسیع‌تری از «مسیرهای قطعی کاربر» (CUJ) برای بهینه‌سازی آن‌ها وجود دارد.

با آوردن AutoFDO به هسته Android، مطمئن می‌شویم که پایه و اساس سیستم‌عامل برای نحوه استفاده روزانه شما از دستگاهتان بهینه‌سازی شده است.

نویسنده:
ادامه خواندن