Ürün Haberleri

Android Performansını Artırma: Çekirdek için AutoFDO'yu Tanıtıyoruz

Okuma süresi: 4 dakika
Yabin Cui
Yazılım Mühendisi

Android LLVM araç zinciri ekibiyiz. En önemli önceliklerimizden biri, LLVM ekosistemindeki optimizasyon tekniklerini kullanarak Android performansını iyileştirmektir. Android'i daha hızlı, daha sorunsuz ve daha verimli hale getirmenin yollarını sürekli olarak arıyoruz. Optimizasyon çalışmalarımızın çoğu kullanıcı alanında gerçekleşse de çekirdek, sistemin kalbi olmaya devam ediyor. Bugün, kullanıcılara önemli performans avantajları sunmak için Otomatik Geri Bildirim Odaklı Optimizasyonu (AutoFDO) Android çekirdeğine nasıl getirdiğimizi paylaşmaktan heyecan duyuyoruz.

AutoFDO nedir?

Standart bir yazılım derlemesi sırasında derleyici, statik kod ipuçlarına göre bir işlevin satır içi olup olmayacağı ve koşullu bir ifadenin hangi dalının alınacağı gibi binlerce küçük karar verir.Bu sezgisel yöntemler faydalı olsa da gerçek dünyadaki telefon kullanımı sırasında kod yürütmeyi her zaman doğru şekilde tahmin etmez.

AutoFDO, derleyiciye yol göstermek için gerçek dünyadaki yürütme kalıplarını kullanarak bu durumu değiştirir. Bu kalıplar, CPU'nun dallanma geçmişi kaydedilerek yakalanan ve kodun gerçek kullanım sırasında izlediği en yaygın talimat yürütme yollarını temsil eder. Bu veriler filo cihazlarından toplanabilse de çekirdek için en popüler 100 uygulamayı çalıştırmak gibi temsili iş yükleri kullanılarak laboratuvar ortamında sentezlenir. Bu verileri yakalamak için örnekleme profil oluşturucu kullanırız. Bu araç, kodun hangi bölümlerinin "sıcak" (sık kullanılan) ve hangilerinin "soğuk" olduğunu belirler. Çekirdeği bu profillerle yeniden oluşturduğumuzda derleyici, gerçek Android iş yüklerine göre çok daha akıllı optimizasyon kararları verebilir.

Bu optimizasyonun etkisini anlamak için şu temel bilgileri göz önünde bulundurun:

  • Android'de çekirdek, CPU süresinin yaklaşık% 40'ını oluşturur.
  • Kullanıcı alanındaki yerel yürütülebilir dosyaları ve kitaplıkları optimize etmek için AutoFDO'yu zaten kullanıyoruz. Bu sayede, uygulamaların soğuk başlatılmasında yaklaşık% 4 iyileşme ve başlatma süresinde% 1 azalma elde ettik.

Gerçek Dünyadaki Performans Artışları

Kontrollü laboratuvar ortamlarındaki profillerden yararlanarak temel Android metriklerinde etkileyici iyileşmeler gördük. Bu profiller, uygulama tarama ve başlatma kullanılarak toplanmış ve 6.1, 6.6 ve 6.12 çekirdeklerindeki Pixel cihazlarda ölçülmüştür.

En belirgin iyileştirmeler aşağıda listelenmiştir. Bu çekirdek sürümlerine yönelik AutoFDO profilleriyle ilgili ayrıntıları android16-6.12 ve android15-6.6 çekirdeklerine yönelik ilgili Android çekirdek depolarında bulabilirsiniz.

boosting_2.png

Bunlar sadece teorik sayılar değildir. Bu değişiklikler, son kullanıcı için daha hızlı bir arayüz, daha hızlı uygulama değiştirme, daha uzun pil ömrü ve genel olarak daha hızlı yanıt veren bir cihaz anlamına gelir.

İşleyiş şekli: Ardışık Düzen

Dağıtım stratejimiz, profillerin alaka düzeyini korumasını ve performansın sabit kalmasını sağlamak için gelişmiş bir ardışık düzen içerir.

boosting_3.png

1. adım: Profil koleksiyonu

Kullanıcı alanı ikili programlarını profillemek için dahili test filomuzu kullanırken Genel Çekirdek Görüntüsü (GKI) için kontrollü bir laboratuvar ortamına geçtik. Profillendirmeyi cihaz sürüm döngüsünden ayırmak, dağıtılan çekirdek sürümlerinden bağımsız olarak esnek ve anında güncellemeler yapılmasına olanak tanır. En önemlisi, testler bu laboratuvar verilerinin, gerçek dünyadaki filoların performans artışına benzer performans artışları sağladığını doğrulamaktadır.

  • Araçlar ve Ortam: Test cihazlarına en yeni çekirdek görüntüsünü yükleriz ve talimat yürütme akışlarını yakalamak için simpleperf'ü kullanırız. Bu işlem, dallanma geçmişini kaydetmek için donanım özelliklerine dayanır. Özellikle Pixel cihazlarda  ARM Embedded Trace Extension (ETE) ve ARM Trace Buffer Extension (TRBE) kullanılır.
  • İş yükleri: Android Uygulama Uyumluluk Test Paketi (C-Suite)'ndeki en popüler 100 uygulamayı kullanarak temsili bir iş yükü oluştururuz. En doğru verileri elde etmek için şunlara odaklanıyoruz:
    • Uygulama başlatma: En görünür kullanıcı gecikmeleri için optimizasyon
    • Yapay Zeka Destekli Uygulama Tarama: Sürekli gelişen kullanıcı etkileşimlerini simüle etme
    • Sistem genelinde izleme: Yalnızca ön planda çalışan uygulama etkinliklerini değil, aynı zamanda kritik arka plan iş yüklerini ve süreçler arası iletişimi de yakalama
  • Doğrulama: Bu sentezlenmiş iş yükü, dahili filomuzdan toplanan yürütme kalıplarıyla % 85 benzerlik gösteriyor.
  • Hedeflenen Veriler: Bu testleri yeterince tekrarlayarak, en popüler uygulamalarla gerçek dünyadaki kullanıcı etkileşimini doğru şekilde temsil eden yüksek doğruluklu yürütme kalıpları elde ederiz. Ayrıca, bu genişletilebilir çerçeve, kapsamımızı genişletmek için ek iş yüklerini ve kıyaslamaları sorunsuz bir şekilde entegre etmemize olanak tanır.

2. adım: Profil işleme

Ham izleme verilerinin temiz, etkili ve derleyiciye hazır olmasını sağlamak için bu verileri sonradan işleriz.

  • Toplama: Birden fazla test çalıştırması ve cihazdan gelen verileri tek bir sistem görünümünde birleştiririz.
  • Dönüşüm: Gerekirse istenmeyen sembolleri filtreleyerek ham izleri AutoFDO profil biçimine dönüştürürüz.
  • Profil Kırpma: "Soğuk" işlevlere ait verileri kaldırmak için profilleri kırparız. Böylece, profillerin standart optimizasyonu kullanmasına olanak tanırız. Bu sayede, nadiren kullanılan kodda gerileme yaşanması önlenir ve ikili boyutunda gereksiz artışlar olmaz.

3. adım: Profil testi

Profiller, tutarlı performans artışları sağladığından ve kararlılık riski içermediğinden emin olmak için dağıtımdan önce titiz bir doğrulama sürecinden geçer.

  • Profil ve İkili Analizi: Yeni profilin içeriğini (sık kullanılan işlevler, örnek sayıları ve profil boyutu dahil) önceki sürümlerle titizlikle karşılaştırırız. Ayrıca, metin bölümündeki değişikliklerin beklentilerle tutarlı olmasını sağlamak için ikili dosyaları analiz ederek yeni bir çekirdek görüntüsü oluşturmak üzere profili kullanırız.
  • Performans Doğrulaması: Yeni çekirdek görüntüsünde hedeflenen karşılaştırmalar yaparız. Bu, önceki temel çizgilerle belirlenen performans iyileştirmelerinin korunduğunu onaylar.

Sürekli Güncellemeler

Kod zaman içinde doğal olarak "kayar". Bu nedenle, statik bir profil sonunda etkinliğini kaybeder. En yüksek performansı korumak için düzenli güncellemeler sağlamak amacıyla ardışık düzeni sürekli olarak çalıştırırız:

  • Düzenli Yenileme: Android kernel LTS dallarındaki profilleri her GKI sürümünden önce yenileyerek her derlemenin en son profil verilerini içermesini sağlarız.
  • Gelecekteki genişleme: Şu anda bu güncellemeleri android16-6.12 ve android15-6.6 dallarına sunuyoruz. Gelecekte ise desteği, yakında kullanıma sunulacak android17-6.18 gibi daha yeni GKI sürümlerine genişleteceğiz.

Kararlılığı Sağlama

Profil yönlü optimizasyonla ilgili sık sorulan sorulardan biri, kararlılık riskleri oluşturup oluşturmadığıdır. AutoFDO, kaynak kodun mantığını değiştirmek yerine öncelikle işlev içi yerleştirme ve kod düzeni gibi derleyici sezgilerini etkilediğinden çekirdeğin işlevsel bütünlüğünü korur. Bu teknoloji, Android platform kitaplıkları, ChromeOS ve Google'ın kendi sunucu altyapısı için yıllardır standart bir optimizasyon olarak hizmet vererek ölçekli olarak zaten kanıtlanmıştır.

Tutarlı davranışları daha da garanti etmek için "varsayılan olarak muhafazakar" bir strateji uygularız. Yüksek doğruluklu profillerimizde yakalanmayan işlevler, standart derleyici yöntemleri kullanılarak optimize edilir. Bu, çekirdeğin "soğuk" veya nadiren yürütülen kısımlarının standart bir derlemede olduğu gibi davranmasını sağlayarak performans gerilemelerini veya köşe durumlarında beklenmedik davranışları önler.

Geleceğe Bakış

Şu anda AutoFDO'yu android16-6.12 ve android15-6.6 dallarında kullanıma sunuyoruz. Bu ilk kullanıma sunma sürecinin ötesinde, teknolojiyi daha da geliştirmek için çeşitli umut verici yollar görüyoruz:

  • Daha geniş erişim: AutoFDO profillerini, mevcut aarch64 desteğinin ötesinde daha yeni GKI çekirdek sürümlerine ve ek derleme hedeflerine dağıtmayı dört gözle bekliyoruz.
  • GKI Modülü Optimizasyonu: Optimizasyonumuz şu anda ana çekirdek ikili programına (vmlinux) odaklanmıştır. AutoFDO'nun GKI modüllerine genişletilmesi, çekirdek alt sisteminin daha büyük bir bölümüne performans avantajları sağlayabilir.
  • Tedarikçi Modülü Desteği: Sürücü Geliştirme Kiti (DDK) kullanılarak oluşturulan tedarikçi modüllerinde AutoFDO'yu desteklemek de istiyoruz. Bu özellik, derleme sistemimizde (Kleaf) ve profil oluşturma araçlarımızda (simpleperf) zaten destekleniyor. Böylece satıcılar, bu optimizasyon tekniklerini kendi donanım sürücülerine uygulayabiliyor.
  • Daha geniş profil kapsamı: Kritik kullanıcı yolculuklarının (KUY) daha geniş bir aralığından profiller toplayarak bunları optimize etme potansiyeli vardır.

AutoFDO'yu Android çekirdeğine getirerek işletim sisteminin temelinin, cihazınızı her gün kullanma şeklinize göre optimize edilmesini sağlıyoruz.

Yazan:

Okumaya devam edin