محک: آیا Runnerهای ARM ارزش مهاجرت دارند؟
سه هفته اجرای موازی خط لوله روی x86 و ARM، روی چهار مخزن واقعی. نتیجه یکنواخت نبود و بستگی به بار کاری داشت.
ادعای رایج این است که مهاجرت Runnerهای CI به ARM حدود چهل درصد هزینه را کم میکند. ما این را روی چهار مخزن تولیدی و به مدت سه هفته سنجیدیم، با اجرای همزمان هر خط لوله روی هر دو معماری.
روش
هر Commit روی شاخهی اصلی دو بار اجرا شد، روی ماشینهای هماندازه با چهار vCPU و شانزده گیگابایت حافظه. هیچ کش اشتراکی میان دو معماری وجود نداشت.
mizban ci benchmark --repos payments,ledger,web,ingest \
--arch amd64,arm64 --runs 240 --output csvنتایج
میانهی زمان کل خط لوله، بر حسب ثانیه:
| مخزن | زبان | x86 | ARM | تغییر |
|---|---|---|---|---|
| payments | Go | ۱۴۲ | ۱۱۹ | −۱۶٪ |
| ledger | Rust | ۴۰۶ | ۳۴۱ | −۱۶٪ |
| web | TypeScript | ۲۱۸ | ۲۳۷ | +۹٪ |
| ingest | Python | ۹۵ | ۱۶۸ | +۷۷٪ |
چه چیزی این تفاوت را توضیح میدهد
مخازنی که کد بومی کامپایل میکنند — Go و Rust — سود بردند. مخزن TypeScript کمی کند شد، چون بخش زیادی از زمانش صرف کاری میشود که تکرشتهای است و ARM در آن مزیت ساعتی ندارد.
فاجعه اما ingest بود. این پروژه به numpy و دو کتابخانهی دیگر وابسته است که Wheel از پیش ساختهشده برای manylinux_aarch64 منتشر نمیکردند. pip هر بار آنها را از سورس کامپایل میکرد.
عددی که در بازاریابی ابری میبینید، برای بار کاریای اندازهگیری شده که کسی برایش زحمت کشیده تا روی ARM خوب اجرا شود. بار کاری شما آن نیست، مگر خلافش را ثابت کنید.
چه کردیم
سه مخزن اول مهاجرت کردند. ingest روی x86 ماند تا وقتی که وابستگیهایش Wheel منتشر کنند. صرفهجویی واقعی نه چهل درصد بود و نه صفر — حدود نوزده درصد هزینهی کل CI، که به زحمتش میارزید.
نکتهی روششناختی: اگر فقط payments را میسنجیدیم، الان یک مهاجرت کامل و یک خط لولهی خراب داشتیم. یک محک باید بدترین بار کاری شما را هم شامل شود، نه دوستداشتنیترینش را.