Berita Produk

Meningkatkan Performa Android: Memperkenalkan AutoFDO untuk Kernel

Waktu baca: 4 menit
Yabin Cui
Software Engineer

Kami adalah tim toolchain Android LLVM. 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 inti sistem. Hari ini, kami dengan senang hati ingin membagikan cara kami menghadirkan Pengoptimalan yang Diarahkan oleh Masukan Otomatis (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 kondisi 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 menunjukkan jalur eksekusi instruksi paling umum yang diambil kode selama penggunaan sebenarnya, yang diambil dengan merekam histori percabangan CPU. Meskipun data ini dapat dikumpulkan dari perangkat armada, untuk kernel, kami mensintesisnya di lingkungan lab menggunakan beban kerja representatif, seperti menjalankan 100 aplikasi paling populer. Kami menggunakan profiler pengambilan sampel untuk merekam data ini, mengidentifikasi bagian kode mana yang 'panas' (sering digunakan) dan mana yang 'dingin'. Saat kita membangun ulang kernel dengan profil ini, compiler dapat membuat keputusan pengoptimalan yang jauh lebih cerdas yang disesuaikan dengan beban kerja Android yang sebenarnya.

Untuk memahami dampak pengoptimalan ini, pertimbangkan fakta-fakta penting berikut:

  • Di Android, kernel menyumbang sekitar 40% waktu CPU.
  • Kami sudah menggunakan AutoFDO untuk mengoptimalkan library dan file yang dapat dieksekusi native di ruang pengguna, sehingga mencapai peningkatan peluncuran aplikasi dingin sekitar 4% dan pengurangan waktu booting 1%.

Peningkatan Performa Dunia Nyata

Kami telah melihat peningkatan yang mengesankan di seluruh metrik Android utama dengan memanfaatkan profil dari lingkungan lab yang terkontrol. Profil ini dikumpulkan menggunakan crawling dan peluncuran aplikasi, serta diukur pada 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.

boosting_2.png

Ini bukan hanya angka teoretis. Hal ini menghasilkan antarmuka yang lebih cepat, peralihan aplikasi yang lebih cepat, daya tahan baterai yang lebih lama, dan perangkat yang secara keseluruhan lebih responsif bagi pengguna akhir.

Cara Kerjanya: Pipeline

Strategi deployment kami melibatkan pipeline canggih untuk memastikan profil tetap relevan dan performa tetap stabil.

boosting_3.png

Langkah 1: Pengumpulan Profil

Meskipun kami mengandalkan armada pengujian internal untuk memprofilkan biner ruang pengguna, kami beralih ke lingkungan lab terkontrol untuk Generic Kernel Image (GKI). Dengan memisahkan pembuatan profil dari siklus rilis perangkat, update yang fleksibel dan langsung dapat dilakukan secara independen dari versi kernel yang di-deploy. Yang terpenting, pengujian mengonfirmasi bahwa data berbasis lab ini memberikan peningkatan performa yang sebanding dengan yang diperoleh dari armada dunia nyata.

  • Alat & Lingkungan: Kami mem-flash perangkat pengujian dengan image kernel terbaru dan menggunakan simpleperf untuk merekam aliran eksekusi perintah. 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.
  • Beban Kerja: Kami membuat beban kerja 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 yang Didukung AI: Mensimulasikan interaksi pengguna yang berkesinambungan dan terus berkembang
    • Pemantauan di Seluruh Sistem: Mencatat tidak hanya aktivitas aplikasi latar depan, tetapi juga beban kerja latar belakang yang penting dan komunikasi antar-proses
  • Validasi: Workload yang disintesis ini menunjukkan kemiripan 85% dengan pola eksekusi yang dikumpulkan dari armada internal kami.
  • Data yang Ditargetkan: Dengan mengulangi pengujian ini secara memadai, kami menangkap pola eksekusi dengan tingkat keakuratan tinggi yang secara akurat merepresentasikan interaksi pengguna di dunia nyata dengan aplikasi paling populer. Selain itu, framework yang dapat di-extend ini memungkinkan kami mengintegrasikan beban kerja dan tolok ukur tambahan secara lancar untuk memperluas cakupan kami.

Langkah 2: Pemrosesan Profil

Kami memproses data rekaman aktivitas mentah setelahnya untuk memastikan data tersebut bersih, efektif, dan siap untuk compiler.

  • Agregasi: Kami menggabungkan data dari beberapa perangkat dan eksekusi pengujian ke dalam satu tampilan sistem.
  • Konversi: Kami mengonversi rekaman aktivitas mentah ke dalam format profil AutoFDO, memfilter simbol yang tidak diinginkan sesuai kebutuhan.
  • Pemangkasan Profil: Kami memangkas profil untuk menghapus data fungsi "dingin", 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 di-deploy, 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 aktif, jumlah sampel, dan ukuran profil) dengan versi sebelumnya secara ketat. Kami juga menggunakan profil untuk membuat image kernel baru, menganalisis biner untuk memastikan bahwa perubahan pada bagian teks konsisten dengan ekspektasi.
  • Verifikasi Performa: Kami menjalankan tolok ukur yang ditargetkan pada image kernel baru. Hal ini mengonfirmasi bahwa model mempertahankan peningkatan performa yang ditetapkan oleh dasar pengukuran sebelumnya.

Update Berkelanjutan

Kode secara alami "berubah" seiring waktu, sehingga profil statis pada akhirnya akan kehilangan efektivitasnya. Untuk mempertahankan performa puncak, kami menjalankan pipeline secara berkelanjutan untuk mendorong update rutin:

  • Pembaruan Reguler: Kami memperbarui profil di cabang LTS kernel Android sebelum setiap rilis GKI, sehingga setiap build menyertakan data profil terbaru.
  • Perluasan pada Masa Mendatang: Saat ini kami memberikan update ini ke cabang android16-6.12 dan android15-6.6, serta akan memperluas dukungan ke versi GKI yang lebih baru, seperti android17-6.18 yang akan datang.

Memastikan Stabilitas

Pertanyaan umum terkait pengoptimalan yang dipandu profil adalah apakah pengoptimalan tersebut menimbulkan risiko stabilitas. Karena AutoFDO terutama memengaruhi heuristik compiler, seperti penyisipan fungsi dan tata letak kode, bukan mengubah logika kode sumber, AutoFDO mempertahankan integritas fungsional kernel. Teknologi ini telah terbukti efektif dalam skala besar, dan telah menjadi 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 tercatat dalam profil fidelitas tinggi kami dioptimalkan menggunakan metode compiler standar. Hal ini memastikan bahwa bagian kernel yang "dingin" atau jarang dieksekusi berperilaku persis seperti pada 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 cara menjanjikan untuk lebih meningkatkan kualitas 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 aarch64 saat ini.
  • Pengoptimalan Modul GKI: Saat ini, pengoptimalan kami berfokus pada biner kernel utama (vmlinux). Memperluas AutoFDO ke modul GKI dapat memberikan manfaat performa ke sebagian besar subsistem kernel.
  • 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 kami (Kleaf) dan alat pembuatan profil (simpleperf), vendor dapat menerapkan teknik pengoptimalan yang sama ini ke driver hardware tertentu 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.

Ditulis oleh:

Lanjutkan membaca