Ü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 teknikleriyle 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 büyük olasılıkla kullanılacağı 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 filodaki cihazlardan toplanabilir ancak ç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 profili 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 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 özellikler, daha hızlı bir arayüz, daha hızlı uygulama değiştirme, daha uzun pil ömrü ve son kullanıcı için 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 toplama

Kullanıcı alanı ikililerini profillendirmek 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 yayınlama 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 tabanlı verilerin gerçek dünyadaki filolardan elde edilenlere 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 ve özellikle Pixel cihazlarda  ARM Embedded Trace Extension (ETE) ve ARM Trace Buffer Extension (TRBE)'yi kullanır.
  • İş yükleri: Android Uygulama Uyumluluğu Test Paketi (C-Suite)'ndeki en popüler 100 uygulamayı kullanarak temsili bir iş yükü oluşturuyoruz. 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 plandaki 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ıyaslama testlerini 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: Gerektiğinde istenmeyen sembolleri filtreleyerek ham izleri AutoFDO profil biçimine dönüştürürüz.
  • Profil Kırpma: "Soğuk" işlevlerin verilerini kaldırmak için profilleri kırparak standart optimizasyon kullanmalarına olanak tanırız. Bu, nadiren kullanılan kodda gerilemeleri önler ve ikili boyutunda gereksiz artışları engeller.

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 doğrular.

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, bu optimizasyonun kararlılık riskleri oluşturup oluşturmadığıdır. AutoFDO, kaynak kodun mantığını değiştirmek yerine öncelikle derleyici sezgilerini (ör. işlev satır içi yapma ve kod düzeni) 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ışı daha da garanti etmek için "varsayılan olarak muhafazakar" bir strateji uyguluyoruz. 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 köşe durumlarında performans gerilemelerini veya beklenmedik davranışları önler.

Geleceğe Bakış

Şu anda AutoFDO'yu android16-6.12 ve android15-6.6 şubelerinde 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: Şu anda optimizasyonumuz ana çekirdek ikilisine (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, satıcıların aynı optimizasyon tekniklerini kendi donanım sürücülerine uygulamasına olanak tanır. Bu destek, derleme sistemimizde (Kleaf) ve profil oluşturma araçlarımızda (simpleperf) zaten mevcuttur.
  • Daha geniş profil kapsamı: Daha geniş bir aralıktaki kritik kullanıcı yolculuklarından (KUY) profiller toplayıp bunları optimize etme potansiyeli vardır.

AutoFDO'yu Android çekirdeğine getirerek işletim sisteminin temelini, cihazınızı her gün kullanma şeklinize göre optimize ediyoruz.

Yazan:

Okumaya devam edin