خانه / اخبار تکنولوژی / گوگل زمان کامپایل اندروید را بدون افت کیفیت، ۱۸ درصد بهبود داد

گوگل زمان کامپایل اندروید را بدون افت کیفیت، ۱۸ درصد بهبود داد

گوگل زمان کامپایل اندروید را بدون افت کیفیت، ۱۸ درصد بهبود داد

نویسنده:

انتشار:

به‌روزرسانی:

تعداد نظرات: 0

زمان مطالعه: 3 دقیقه
👀 خبر در یک نگاه:

تیم ART گوگل با اندازه‌گیری دقیق، پروفایل‌گیری و حذف کارهای غیرضروری در کامپایلر، زمان کامپایل اندروید را ۱۸ درصد کاهش داد، بدون افت کیفیت یا افزایش مصرف حافظه. این بهینه‌سازی‌ها باعث بهبود عملکرد دستگاه، کاهش مصرف باتری و عملکرد حرارتی بهتر شدند.

تیم Android Runtime (ART) گوگل موفق شده زمان کامپایل کدهای اندروید را ۱۸ درصد کاهش دهد بدون این که کیفیت کد افت کند یا مصرف اوج حافظه افزایش یابد. این بهبود، افزایش کارایی قابل توجهی را هم برای کامپایل لحظه اجرا (Just-in-Time – JIT) و هم پیش از اجرا (Ahead-of-Time – AOT) به همراه داشته است.

به گفته مهندسان نرم‌افزار گوگل سانتیاگو آبوی سولانس (Santiago Aboy Solanes) و ولادیمیر مارکو (Vladimír Marko)، کاهش زمان کامپایل در کدهای کامپایل‌شده به صورت لحظه اجرا (Just-in-Time – JIT) باعث می‌شود بهینه‌سازی‌ها زودتر در زمان اجرا فعال شوند و در نتیجه عملکرد کلی دستگاه مستقیما بهبود پیدا کند.

برای کدهای کامپایل‌شده به صورت لحظه اجرا (JIT) و پیش از اجرا (Ahead-of-Time – AOT)، سریع‌تر شدن فرایند ساخت فشار کاری دستگاه را کاهش می‌دهد و به بهبود عمر باتری و عملکرد حرارتی کمک می‌کند، به‌ویژه روی سخت‌افزارهای رده‌پایین.

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

«تنها منبعی که حاضر بودیم هزینه کنیم، زمان توسعه خودمان بود تا عمیق بررسی کنیم، دقیق تحقیق کنیم و راهکارهای هوشمندانه‌ای پیدا کنیم که این معیارهای سخت‌گیرانه را برآورده کند.»

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

آن‌ها روی سه محور کلیدی تمرکز کردند و کار را با اندازه‌گیری دقیق زمان کامپایل آغاز کردند. برای این کار از ابزارهایی مثل pprof استفاده شد تا یک خط مبنا برای مقایسه عملکرد قبل و بعد از تغییرات به دست بیاید.

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

آن‌ها توضیح می‌دهند:

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

با آماده شدن این زیرساخت اولیه، مهندسان ART با حذف کارهای غیرضروری در فازهای داخلی کامپایلر، بهینه‌سازی را پیش بردند. آن‌ها تکرارهایی که خروجی موثری نداشتند را حذف کردند، با استفاده از هیوریستیک‌ها و کش‌های اضافی از انجام محاسبات پرهزینه جلوگیری کردند، محاسبه لیزی (Lazy Computation) را به کار گرفتند تا چرخه‌های تکراری حذف شود، انتزاع‌ها را پاک‌سازی کردند و اقدامات دیگری در همین راستا انجام دادند.

شناسایی از ابتدا این که کدام بهینه‌سازی‌ها ارزش دنبال کردن دارند نیازمند دقت بالایی بود تا تلاش‌های بی‌حاصل به حداقل برسد.

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

در همین راستا، تیم ART تلاش کرد برآورد کند هر معیار (Metric) با کمترین میزان تلاش تا چه حد قابل بهبود است. این کار گاهی با تکیه بر داده‌های اندازه‌گیری‌شده قبلی انجام می‌شد و گاهی هم صرفا بر اساس یک حس شهودی.

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

آبوی و مارکو همچنین فهرستی از بهینه‌سازی‌های اعمال‌شده ارائه می‌کنند. از جمله این موارد می‌توان به کاهش پیچیدگی جستجوی تابع FindReferenceInfoOf از O(n) به O(1)، ارسال ساختارهای داده به‌صورت ارجاعی (by Reference) برای جلوگیری از ایجاد و تخریب غیرضروری داده‌ها، کش‌کردن مقادیر محاسبه‌شده و بهینه‌سازی‌های متعدد دیگر اشاره کرد که امکان پوشش همه آن‌ها در اینجا وجود ندارد.

بخشی از این بهبودهای سرعت در انتشار ژوئن ۲۰۲۵ اندروید ارائه شده‌اند و سایر بهینه‌سازی‌ها در انتشار پایان سال در دسترس قرار گرفته‌اند. علاوه بر این، اندروید نسخه ۱۲ و بالاتر می‌توانند این بهبودها را از طریق به‌روزرسانی‌های مین‌لاین (Mainline Updates) دریافت کنند.

منبع: infoq.com

فرصت‌های شغلی

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

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *