Android-Leistung steigern: Einführung von AutoFDO für den Kernel
Lesezeit: 4 Minuten
Wir sind das Android LLVM-Toolchain-Team. Eine unserer obersten Prioritäten ist die Verbesserung der Android-Leistung durch Optimierungstechniken im LLVM-Ökosystem. Wir arbeiten ständig daran, Android schneller, reibungsloser und effizienter zu machen. Ein Großteil unserer Optimierungsarbeit findet zwar im Userspace statt, aber der Kernel bleibt das Herzstück des Systems. Heute möchten wir euch zeigen, wie wir die automatische feedbackgesteuerte Optimierung (AutoFDO) in den Android-Kernel integrieren, um die Leistung für Nutzer deutlich zu verbessern.
Was ist AutoFDO?
Während eines Standard-Software-Builds trifft der Compiler Tausende von kleinen Entscheidungen, z. B. ob eine Funktion inline eingefügt werden soll und welcher Zweig einer Bedingung wahrscheinlich genommen wird, basierend auf statischen Code-Hinweisen. Diese Heuristiken sind zwar nützlich, aber sie sagen die Code-Ausführung während der tatsächlichen Nutzung des Smartphones nicht immer genau voraus.
AutoFDO ändert dies, indem es reale Ausführungsmuster verwendet, um den Compiler zu steuern. Diese Muster stellen die gängigsten Ausführungspfade für Anweisungen dar, die der Code bei der tatsächlichen Verwendung nimmt. Sie werden durch Aufzeichnen des Verzweigungsverlaufs der CPU erfasst. Diese Daten können zwar von Geräten im Feld erhoben werden, für den Kernel synthetisieren wir sie jedoch in einer Laborumgebung mit repräsentativen Arbeitslasten, z. B. durch Ausführen der 100 beliebtesten Apps. Wir verwenden einen Sampling-Profiler, um diese Daten zu erfassen und zu ermitteln, welche Teile des Codes „heiß“ (häufig verwendet) und welche „kalt“ sind. Wenn wir den Kernel mit diesen Profilen neu erstellen, kann der Compiler viel intelligentere Optimierungsentscheidungen treffen, die auf die tatsächlichen Android-Arbeitslasten zugeschnitten sind.
Hier sind einige wichtige Fakten, die die Auswirkungen dieser Optimierung verdeutlichen:
- Unter Android macht der Kernel etwa 40% der CPU-Zeit aus.
- Wir verwenden AutoFDO bereits, um native ausführbare Dateien und Bibliotheken im Userspace zu optimieren. Dadurch konnten wir die Kaltstartzeit von Apps um etwa 4% und die Bootzeit um 1% reduzieren.
Leistungssteigerungen in der Praxis
Wir haben durch die Nutzung von Profilen aus kontrollierten Laborumgebungen beeindruckende Verbesserungen bei wichtigen Android-Messwerten festgestellt. Diese Profile wurden durch App-Crawling und -Starts erfasst und auf Pixel-Geräten mit den Kernel-Versionen 6.1, 6.6 und 6.12 gemessen.
Die wichtigsten Verbesserungen sind unten aufgeführt. Details zu den AutoFDO-Profilen für diese Kernel-Versionen finden Sie in den entsprechenden Android-Kernel-Repositories für android16-6.12- und android15-6.6-Kernel.
Das sind nicht nur theoretische Zahlen. Sie sorgen für eine schnellere Benutzeroberfläche, schnelleres Wechseln zwischen Apps, eine längere Akkulaufzeit und ein insgesamt reaktionsschnelleres Gerät für Endnutzer.
Funktionsweise: Die Pipeline
Unsere Bereitstellungsstrategie umfasst eine ausgefeilte Pipeline, um sicherzustellen, dass die Profile relevant und die Leistung stabil bleiben.
Schritt 1: Profilerfassung
Während wir uns bei der Profilerstellung von Userspace-Binärdateien auf unsere interne Testflotte verlassen, haben wir für das Generic Kernel Image (GKI) auf eine kontrollierte Laborumgebung umgestellt. Durch die Entkopplung der Profilerstellung vom Releasezyklus des Geräts sind flexible, sofortige Updates unabhängig von den bereitgestellten Kernel-Versionen möglich. Tests bestätigen, dass diese im Labor erhobenen Daten Leistungssteigerungen liefern, die mit denen von realen Flotten vergleichbar sind.
- Tools und Umgebung:Wir flashen Testgeräte mit dem neuesten Kernel-Image und verwenden simpleperf, um die Ausführung von Befehlen zu erfassen. Dieser Prozess basiert auf Hardwarefunktionen zum Aufzeichnen des Verlaufs von Verzweigungen. Auf Pixel-Geräten werden dazu insbesondere die ARM Embedded Trace Extension (ETE) und die ARM Trace Buffer Extension (TRBE) verwendet.
- Arbeitslasten: Wir erstellen eine repräsentative Arbeitslast mit den 100 beliebtesten Apps aus der Android App Compatibility Test Suite (C-Suite). Um möglichst genaue Daten zu erfassen, konzentrieren wir uns auf Folgendes:
- App-Start: Optimierung für die am besten sichtbaren Nutzerverzögerungen
- KI-gestütztes App-Crawling: Simulation zusammenhängender, sich entwickelnder Nutzerinteraktionen
- Systemweites Monitoring: Es werden nicht nur Aktivitäten von Apps im Vordergrund erfasst, sondern auch wichtige Hintergrundarbeitslasten und die Kommunikation zwischen Prozessen.
- Validierung: Diese synthetisierte Arbeitslast weist eine 85% ige Ähnlichkeit mit Ausführungsmustern auf, die von unserer internen Flotte erfasst wurden.
- Zielgerichtete Daten: Durch ausreichendes Wiederholen dieser Tests erfassen wir hochpräzise Ausführungsmuster, die die tatsächliche Nutzerinteraktion mit den beliebtesten Anwendungen genau darstellen. Darüber hinaus können wir dank dieses erweiterbaren Frameworks zusätzliche Arbeitslasten und Benchmarks nahtlos integrieren, um die Abdeckung zu erweitern.
Schritt 2: Profilverarbeitung
Wir verarbeiten die Rohdaten nach, um sicherzustellen, dass sie sauber, effektiv und für den Compiler bereit sind.
- Aggregation:Wir fassen Daten aus mehreren Testläufen und Geräten in einer einzigen Systemansicht zusammen.
- Konvertierung: Wir konvertieren Roh-Traces in das AutoFDO-Profilformat und filtern bei Bedarf unerwünschte Symbole heraus.
- Profilkürzung:Wir kürzen Profile, um Daten für „kalte“ Funktionen zu entfernen, damit sie die Standardoptimierung verwenden können. So werden Regressionen in selten verwendetem Code verhindert und unnötige Vergrößerungen der Binärdatei vermieden.
Schritt 3: Profil testen
Vor der Bereitstellung werden Profile einer strengen Überprüfung unterzogen, um sicherzustellen, dass sie eine konsistente Leistungssteigerung ohne Stabilitätsrisiken bieten.
- Profil- und Binäranalyse: Wir vergleichen den Inhalt des neuen Profils (einschließlich Hot-Funktionen, Stichprobenanzahl und Profilgröße) strikt mit früheren Versionen. Wir verwenden das Profil auch, um ein neues Kernel-Image zu erstellen. Dabei analysieren wir Binärdateien, um sicherzustellen, dass Änderungen am Textabschnitt den Erwartungen entsprechen.
- Leistungsüberprüfung: Wir führen gezielte Benchmarks für das neue Kernel-Image aus. So wird bestätigt, dass die mit früheren Referenzwerten erzielten Leistungsverbesserungen beibehalten werden.
Kontinuierliche Updates
Code „driftet“ im Laufe der Zeit auf natürliche Weise ab, sodass ein statisches Profil irgendwann seine Wirksamkeit verlieren würde. Damit die Pipeline immer die bestmögliche Leistung erbringt, wird sie kontinuierlich ausgeführt, um regelmäßige Updates zu ermöglichen:
- Regelmäßige Aktualisierung:Wir aktualisieren die Profile in den LTS-Zweigen des Android-Kernels vor jedem GKI-Release, damit jeder Build die neuesten Profildaten enthält.
- Zukünftige Erweiterung: Wir stellen diese Updates derzeit für die Branches
android16-6.12undandroid15-6.6bereit und werden die Unterstützung auf neuere GKI-Versionen wie die kommendeandroid17-6.18ausweiten.
Stabilität gewährleisten
Eine häufige Frage zur profilgesteuerten Optimierung ist, ob sie Stabilitätsrisiken mit sich bringt. Da AutoFDO hauptsächlich Compiler-Heuristiken wie Funktions-Inlining und Code-Layout beeinflusst, anstatt die Logik des Quellcodes zu ändern, bleibt die funktionale Integrität des Kernels erhalten. Diese Technologie hat sich bereits im großen Maßstab bewährt und dient seit Jahren als Standardoptimierung für Android-Plattformbibliotheken, ChromeOS und die eigene Serverinfrastruktur von Google.
Um ein konsistentes Verhalten zu gewährleisten, wenden wir eine standardmäßig konservative Strategie an. Funktionen, die nicht in unseren High-Fidelity-Profilen erfasst werden, werden mit Standard-Compiler-Methoden optimiert. So wird sichergestellt, dass sich die „kalten“ oder selten ausgeführten Teile des Kernels genau so verhalten wie in einem Standard-Build. Dadurch werden Leistungseinbußen oder unerwartetes Verhalten in Grenzfällen verhindert.
Unsere Zukunftspläne
Wir stellen AutoFDO derzeit in den Zweigen android16-6.12 und android15-6.6 bereit. Über diese erste Einführung hinaus sehen wir mehrere vielversprechende Möglichkeiten, die Technologie weiter zu verbessern:
- Erweiterte Reichweite:Wir freuen uns darauf, AutoFDO-Profile auf neueren GKI-Kernel-Versionen und zusätzlichen Build-Zielen über die aktuelle
aarch64-Unterstützung hinaus bereitzustellen. - Optimierung von GKI-Modulen:Derzeit konzentriert sich unsere Optimierung auf die Haupt-Kernel-Binärdatei (
vmlinux). Durch die Ausweitung von AutoFDO auf GKI-Module könnten die Leistungsvorteile auf einen größeren Teil des Kernel-Subsystems ausgeweitet werden. - Unterstützung von Anbietermodulen: Wir möchten AutoFDO auch für Anbietermodule unterstützen, die mit dem Driver Development Kit (DDK) erstellt wurden. Da unser Build-System (Kleaf) und unsere Profiling-Tools (simpleperf) bereits unterstützt werden, können Anbieter diese Optimierungstechniken auch auf ihre spezifischen Hardwaretreiber anwenden.
- Breitere Profilabdeckung: Es besteht die Möglichkeit, Profile aus einer größeren Anzahl von Critical User Journeys (CUJs) zu erfassen, um sie zu optimieren.
Durch die Integration von AutoFDO in den Android-Kernel wird die Grundlage des Betriebssystems für die tägliche Nutzung optimiert.
-
ProduktneuigkeitenApps, die auf die kommende Android-Version ausgerichtet sind, können mit der Berechtigung WRITE_CONTACTS nicht mehr direkt in Kontakte schreiben.
Roxanna Aliabadi Walker • Lesezeit: 6 Minuten -
ProduktneuigkeitenDie Entwicklung von KI-Agenten schreitet rasant voran und die Android-Entwicklung erreicht einen spannenden neuen Meilenstein: von der unterstützenden Codevervollständigung hin zu KI-Agenten, die unter Ihrer Anleitung End-to-End-Aufgaben ausführen. Sie haben die volle Auswahl und Flexibilität bei den Modellen und Agents, die Sie verwenden.
Jason Buchel • Lesezeit: 3 Minuten -
ProduktneuigkeitenHeute haben wir euch gezeigt, wie wir unsere Vision „Mehr als nur ein Store“ weiterentwickeln. Vom Tab „Mein Play“, der mittlerweile die persönliche Anlaufstelle für über 250 Millionen monatlich aktive Nutzer ist, bis hin zu unserer einheitlichen Gaming-Plattform, die über 700 Millionen Spielerprofile verbindet – Google Play ist immer da, wo die Nutzer sind.
Paul Feng • Lesezeit: 3 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.