Meningkatkan Performa Android: Memperkenalkan AutoFDO untuk Kernel
Waktu baca: 4 menit
Kami adalah tim toolchain LLVM Android. Salah satu prioritas utama kami adalah meningkatkan performa Android melalui teknik pengoptimalan di ekosistem LLVM. Kami terus mencari cara untuk membuat Android lebih cepat, lancar, dan efisien. Meskipun sebagian besar pekerjaan pengoptimalan kami terjadi di ruang pengguna, kernel tetap menjadi jantung sistem. Hari ini, kami dengan senang hati mengumumkan bahwa kami menghadirkan Automatic Feedback-Directed Optimization (AutoFDO) ke kernel Android untuk memberikan peningkatan performa yang signifikan bagi pengguna.
Apa itu AutoFDO?
Selama build software standar, compiler membuat ribuan keputusan kecil, seperti apakah akan menyisipkan fungsi dan cabang kondisional mana yang kemungkinan akan diambil, berdasarkan petunjuk kode statis.Meskipun heuristik ini berguna, heuristik ini tidak selalu memprediksi eksekusi kode secara akurat selama penggunaan ponsel di dunia nyata.
AutoFDO mengubah hal ini dengan menggunakan pola eksekusi di dunia nyata untuk memandu compiler. Pola ini mewakili jalur eksekusi petunjuk paling umum yang diambil kode selama penggunaan sebenarnya, yang diambil dengan mencatat histori percabangan CPU. Meskipun data ini dapat dikumpulkan dari perangkat fleet, untuk kernel, kami menyintesisnya di lingkungan lab menggunakan workload yang representatif, seperti menjalankan 100 aplikasi paling populer. Kami menggunakan profiler sampel untuk mengambil data ini, mengidentifikasi bagian kode mana yang 'hot' (sering digunakan) dan mana yang 'cold'. Saat kita membangun ulang kernel dengan profil ini, compiler dapat membuat keputusan pengoptimalan yang jauh lebih cerdas yang disesuaikan dengan workload Android yang sebenarnya.
Untuk memahami dampak pengoptimalan ini, pertimbangkan fakta-fakta penting berikut:
- Di Android, kernel menyumbang sekitar 40% waktu CPU.
- Kami telah menggunakan AutoFDO untuk mengoptimalkan file yang dapat dieksekusi dan library native di ruang pengguna, sehingga mencapai peningkatan peluncuran aplikasi cold sekitar 4% dan pengurangan waktu booting sebesar 1%.
Peningkatan Performa di Dunia Nyata
Kami telah melihat peningkatan yang mengesankan di berbagai metrik Android utama dengan memanfaatkan profil dari lingkungan lab yang terkontrol. Profil ini dikumpulkan menggunakan crawling dan peluncuran aplikasi, serta diukur di perangkat Pixel di seluruh kernel 6.1, 6.6, dan 6.12.
Peningkatan yang paling terlihat tercantum di bawah. Detail tentang profil AutoFDO untuk versi kernel ini dapat ditemukan di repositori kernel Android masing-masing untuk kernel android16-6.12 dan android15-6.6.
Ini bukan sekadar angka teoretis. Hal ini menghasilkan antarmuka yang lebih cepat, peralihan aplikasi yang lebih cepat, masa pakai baterai yang lebih lama, dan perangkat yang secara keseluruhan lebih responsif bagi pengguna akhir.
Cara Kerjanya: Pipeline
Strategi deployment kami melibatkan pipeline yang canggih untuk memastikan profil tetap relevan dan performa tetap stabil.
Langkah 1: Pengumpulan Profil
Meskipun kami mengandalkan fleet pengujian internal untuk membuat profil biner userspace, kami beralih ke lingkungan lab terkontrol untuk Generic Kernel Image (GKI). Memisahkan pembuatan profil dari siklus rilis perangkat memungkinkan update yang fleksibel dan langsung, terlepas dari versi kernel yang di-deploy. Yang terpenting, pengujian mengonfirmasi bahwa data berbasis lab ini memberikan peningkatan performa yang sebanding dengan data dari perangkat pengguna di dunia nyata.
- Alat & Lingkungan: Kami mem-flash perangkat pengujian dengan image kernel terbaru dan menggunakan simpleperf untuk menangkap aliran eksekusi petunjuk. Proses ini mengandalkan kemampuan hardware untuk merekam histori percabangan, khususnya menggunakan ARM Embedded Trace Extension (ETE) dan ARM Trace Buffer Extension (TRBE) di perangkat Pixel.
- Workload: Kami membuat workload yang representatif menggunakan 100 aplikasi terpopuler dari Android App Compatibility Test Suite (C-Suite). Untuk mendapatkan data yang paling akurat, kami berfokus pada:
- Peluncuran Aplikasi: Mengoptimalkan penundaan pengguna yang paling terlihat
- Crawling Aplikasi Berbasis AI: Menyimulasikan interaksi pengguna yang berdekatan dan terus berkembang
- Pemantauan Seluruh Sistem: Tidak hanya menangkap aktivitas aplikasi latar depan, tetapi juga workload latar belakang yang penting dan komunikasi antarproses
- Validasi: Workload yang disintesis ini menunjukkan kemiripan 85% dengan pola eksekusi yang dikumpulkan dari fleet internal kami.
- Data yang Ditargetkan: Dengan mengulangi pengujian ini secara memadai, kami menangkap pola eksekusi fidelitas tinggi yang secara akurat mewakili interaksi pengguna di dunia nyata dengan aplikasi paling populer. Selain itu, framework yang dapat diperluas ini memungkinkan kami mengintegrasikan workload dan benchmark tambahan dengan lancar untuk memperluas cakupan kami.
Langkah 2: Pemrosesan Profil
Kami melakukan pascapemrosesan data rekaman aktivitas mentah untuk memastikan data tersebut bersih, efektif, dan siap untuk compiler.
- Agregasi: Kami menggabungkan data dari beberapa pengujian dan perangkat ke dalam satu tampilan sistem.
- Konversi: Kami mengonversi trace mentah ke format profil AutoFDO, dengan memfilter simbol yang tidak diinginkan sesuai kebutuhan.
- Pemangkasan Profil: Kami memangkas profil untuk menghapus data untuk fungsi "cold", sehingga fungsi tersebut dapat menggunakan pengoptimalan standar. Hal ini mencegah regresi dalam kode yang jarang digunakan dan menghindari peningkatan ukuran biner yang tidak perlu.
Langkah 3: Pengujian Profil
Sebelum deployment, profil menjalani verifikasi yang ketat untuk memastikan profil memberikan peningkatan performa yang konsisten tanpa risiko stabilitas.
- Analisis Profil & Biner: Kami membandingkan konten profil baru (termasuk fungsi hot, jumlah sampel, dan ukuran profil) dengan versi sebelumnya secara ketat. Kami juga menggunakan profil untuk mem-build image kernel baru, menganalisis biner untuk memastikan bahwa perubahan pada bagian teks sesuai dengan ekspektasi.
- Verifikasi Performa: Kami menjalankan tolok ukur yang ditargetkan pada image kernel baru. Hal ini mengonfirmasi bahwa model tersebut mempertahankan peningkatan performa yang ditetapkan oleh dasar pengukuran sebelumnya.
Update Berkelanjutan
Kode secara alami "bergeser" seiring waktu, sehingga profil statis pada akhirnya akan kehilangan efektivitasnya. Untuk mempertahankan performa puncak, kami menjalankan pipeline secara terus-menerus untuk mendorong update rutin:
- Pembaruan Rutin: Kami memperbarui profil di cabang LTS kernel Android sebelum setiap rilis GKI, sehingga memastikan setiap build menyertakan data profil terbaru.
- Perluasan di Masa Mendatang: Saat ini kami mengirimkan update ini ke cabang
android16-6.12danandroid15-6.6, serta akan memperluas dukungan ke versi GKI yang lebih baru, sepertiandroid17-6.18yang akan datang.
Memastikan Stabilitas
Pertanyaan umum terkait pengoptimalan yang dipandu profil adalah apakah pengoptimalan ini menimbulkan risiko stabilitas. Karena AutoFDO terutama memengaruhi heuristik compiler, seperti inlining fungsi dan tata letak kode, bukan mengubah logika kode sumber, AutoFDO mempertahankan integritas fungsional kernel. Teknologi ini telah terbukti dalam skala besar, berfungsi sebagai pengoptimalan standar untuk library platform Android, ChromeOS, dan infrastruktur server Google sendiri selama bertahun-tahun.
Untuk lebih menjamin perilaku yang konsisten, kami menerapkan strategi "konservatif secara default". Fungsi yang tidak dicatat dalam profil fidelitas tinggi kami dioptimalkan menggunakan metode compiler standar. Hal ini memastikan bahwa bagian kernel yang "cold" atau jarang dieksekusi berperilaku persis seperti dalam build standar, sehingga mencegah regresi performa atau perilaku yang tidak terduga dalam kasus ekstrem.
Rencana ke Depan
Saat ini kami men-deploy AutoFDO di cabang android16-6.12 dan android15-6.6. Selain peluncuran awal ini, kami melihat beberapa peluang menjanjikan untuk lebih meningkatkan teknologi ini:
- Jangkauan yang Diperluas: Kami berharap dapat men-deploy profil AutoFDO ke versi kernel GKI yang lebih baru dan target build tambahan di luar dukungan
aarch64saat ini. - Pengoptimalan Modul GKI: Saat ini, pengoptimalan kami berfokus pada biner kernel utama (
vmlinux). Memperluas AutoFDO ke modul GKI dapat memberikan manfaat performa ke bagian subsistem kernel yang lebih besar. - Dukungan Modul Vendor: Kami juga tertarik untuk mendukung AutoFDO untuk modul vendor yang dibuat menggunakan Driver Development Kit (DDK). Dengan dukungan yang sudah tersedia di sistem build (Kleaf) dan alat pembuatan profil (simpleperf), vendor dapat menerapkan teknik pengoptimalan yang sama ini ke driver hardware spesifik mereka.
- Cakupan Profil yang Lebih Luas: Ada potensi untuk mengumpulkan profil dari berbagai Perjalanan Penting Pengguna (CUJ) yang lebih luas untuk mengoptimalkannya.
Dengan menghadirkan AutoFDO ke kernel Android, kami memastikan bahwa fondasi OS dioptimalkan untuk cara Anda menggunakan perangkat setiap hari.
-
Berita ProdukHari ini, di Android Dev Summit, kami mengumumkan ketersediaan luas berbagai alat dan API yang dirancang untuk menghilangkan hambatan sehari-hari dan memberi Anda lebih banyak fleksibilitas untuk membuat aplikasi Android yang hebat.
Matthew McCullough • Waktu baca: 4 menit -
Berita ProdukAndroid Studio Rabbit 2 kini stabil dan siap digunakan dalam produksi. Rilis ini menyertakan fitur utama untuk meningkatkan kualitas pengembangan Anda, seperti Bring Your Own Agent, fitur XR Emulator baru, update LeakCanary, alat pengelola keterampilan agen baru, peninjauan kode AI, dan banyak lagi.
Matthew Warner • Waktu baca: 3 menit -
Berita ProdukAplikasi yang menargetkan rilis Android mendatang tidak akan dapat lagi menulis langsung ke kontak dengan izin WRITE_CONTACTS.
Roxanna Aliabadi Walker • Waktu baca: 6 menit
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.