اخبار محصول

افزایش عملکرد اندروید: معرفی AutoFDO برای هسته

مطالعه ۴ دقیقه‌ای
Yabin Cui
مهندس نرم‌افزار

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

اتو اف دی او چیست؟

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

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

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

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

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

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

قابل توجه‌ترین بهبودها در زیر فهرست شده‌اند. جزئیات مربوط به پروفایل‌های AutoFDO برای این نسخه‌های کرنل را می‌توانید در مخازن کرنل اندروید مربوط به کرنل‌های 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.
  • حجم کار: ما با استفاده از ۱۰۰ برنامه محبوب از مجموعه تست سازگاری برنامه اندروید (C-Suite)، یک حجم کار نمونه ایجاد می‌کنیم. برای جمع‌آوری دقیق‌ترین داده‌ها، روی موارد زیر تمرکز می‌کنیم:
    • راه‌اندازی برنامه : بهینه‌سازی برای قابل مشاهده‌ترین تأخیرهای کاربر
    • خزش اپلیکیشن مبتنی بر هوش مصنوعی : شبیه‌سازی تعاملات پیوسته و در حال تکامل کاربر
    • نظارت در سطح سیستم: نه تنها فعالیت‌های برنامه‌های پیش‌زمینه، بلکه حجم کارهای حیاتی پس‌زمینه و ارتباطات بین فرآیندی را نیز ثبت می‌کند.
  • اعتبارسنجی: این حجم کار سنتز شده، شباهت ۸۵ درصدی با الگوهای اجرایی جمع‌آوری‌شده از ناوگان داخلی ما نشان می‌دهد.
  • داده‌های هدفمند: با تکرار کافی این آزمایش‌ها، الگوهای اجرایی با دقت بالا را ثبت می‌کنیم که به طور دقیق تعامل کاربر در دنیای واقعی با محبوب‌ترین برنامه‌ها را نشان می‌دهند. علاوه بر این، این چارچوب توسعه‌پذیر به ما امکان می‌دهد تا بارهای کاری و معیارهای اضافی را به طور یکپارچه ادغام کنیم تا پوشش خود را گسترش دهیم.

مرحله 2: پردازش پروفایل

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

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

مرحله ۳: تست پروفایل

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

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

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

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

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

تضمین ثبات

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

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

نگاه به آینده

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

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

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

    نوشته شده توسط:

    ادامه مطلب