CPU-AUSLASTUNG IN MOBILEN GERÄTEN MESSEN

Wenn Sie schon immer die CPU-Auslastung einer mobilen App oder eines Spiels messen wollten und nicht weiterkommen, lesen Sie weiter, um herauszufinden, wie dies erreicht werden kann.

Das grundlegende Ziel jeder App oder jedes Spiels ist es, dem Benutzer eine großartige Erfahrung zu bieten. Für Spiele ist Frames pro Sekunde ein gutes Maß dafür. Wenn Ihr Spiel keine gute Erfahrung bieten kann, sind Sie natürlich neugierig auf die Ressourcennutzung in Ihrem System. Es könnte wahrscheinlich sein, dass das Spiel entweder durch die CPU / GPU oder die Speicherbandbreite einen Engpass hat. Diese drei grundlegenden Bereiche sind die erste Anlaufstelle bei der Identifizierung von Leistungsproblemen. Schauen wir uns an, wie die CPU-Auslastung in Android- und iOS-Geräten gemessen wird.

Definitionen

Was ist CPU-Auslastung?
Bevor wir Methoden zur Messung der CPU-Auslastung diskutieren können, ist es wichtig zu wissen, was wir unter der Definition CPU-Auslastung verstehen. CPU-Auslastung misst den Arbeitsaufwand, den eine CPU zwischen zwei Abtastintervallen ausführt. Moderne Geräte verfügen über Multi-Core-CPUs, die je nach Rechenaufwand der Software, die die CPU verwendet, mit unterschiedlichen Frequenzen arbeiten können. Infolgedessen kann eine CPU, die mit einer niedrigeren Frequenz vollständig geladen ist, immer noch mehr Jobs vom Betriebssystem akzeptieren, wenn die Frequenz erhöht wird.

Eine wichtige Beobachtung ist die Tatsache, dass die CPU-Auslastung vom Betriebspunkt der CPU abhängt. Eine CPU, die zu 100% mit 500 MHz geladen ist, wird nur zu 50% geladen, wenn die Frequenz auf 1 GHz erhöht wird. Es besteht also die Notwendigkeit, die CPU-Last auf die maximale Betriebsfrequenz der CPU zu normalisieren.

Die CPU-Auslastung kann sowohl für Android als auch für iOS auf verschiedene Arten ermittelt werden. Die CPU-Auslastung kann mehr als 100% betragen. Bei einem iOS-Gerät mit 4 Kernen kann die CPU-Last beispielsweise bis zu 400% betragen (100% Last für jeden CPU-Kern).

Was ist die normalisierte CPU-Auslastung?
Wenn die CPU-Lastmetrik wie oben erwähnt anhand des maximalen Betriebspunkts jedes CPU-Kerns neu berechnet wird, erhalten wir eine normalisierte CPU-Auslastung. Ich weiß, dass dies etwas komplex ist, daher habe ich ein Beispiel, das dies unten erklärt:

Betrachten wir das folgende Szenario auf einem Gerät mit einer Quad-Core–CPU

  • CPU–Auslastung aufgrund der App – 50%
  • Anzahl der Kerne, die online sind – 2 von 4
  • Maximaler Betriebspunkt der CPU-Kerne – 1 GHz
  • Betriebspunkte der beiden Kerne, die eingeschaltet waren – 500 MHz

Die normalisierte CPU-Auslastung wird wie folgt berechnet,

  • Maximal verfügbare CPU-Zyklen – 4 * 1 GHz – 4 GHz
  • Verfügbare CPU-Zyklen, wenn die App 500 Mhz * 2 = 1 GHz
  • Prozentsatz der gesamten CPU-Zyklen, die während der Abtastung verfügbar sind – 1 GHz / 4 GHz = 25% oder 0,25
  • Normalisierte CPU-Auslastung – 50% * (0.25) = 12.5%

Wenn Sie ein Profiling-Tool verwenden, ist es immer nützlich, diese Frage zu stellen. Messe ich die normalisierte CPU-Auslastung? Dies ist wichtig, da die CPU-Auslastung bei normalisierter CPU-Auslastung auf zwei Geräten verglichen werden kann. Die CPU-Auslastung eignet sich nicht für einfache Vergleiche.

Nachdem wir die Definitionen der CPU-Auslastung verstanden haben, schauen wir uns einige der verschiedenen Möglichkeiten an, wie wir dies in Android und iOS messen können

Android
Als Entwickler gibt es viele Möglichkeiten, wie Sie die CPU-Auslastung in Android für Ihre App oder Ihr Spiel messen können.

Befehl “Top”
Der einfachste Weg, die CPU-Auslastung Ihrer Apps schnell in den Griff zu bekommen, ist die Verwendung des Befehls “top”. Android basiert auf Linux, es kommt mit einigen der Kommandozeilen-Goodies auch in Linux.

Wenn Sie ADB-Zugriff auf das Gerät haben, können Sie einen Befehl wie den folgenden ausführen, um die CPU-Auslastung zu ermitteln,

Der Befehl ADB shell top -m 5 -d 1 erzeugt ein Ergebnis wie folgt:

 ABD Shell - Bildschirm

Oben können Sie sehen, dass das Paket com.kiloo.subwa + verbraucht 142% der CPU. Es ist wieder erwähnenswert, dass dies CPU-Last ist und nicht normalisiert wird. Trotzdem können Sie diese Nummer auf demselben Gerät verwenden, um die CPU-Auslastung zu verstehen. Diese Methode ist auch nützlich, um die CPU-Auslastung einer auf dem Gerät ausgeführten App zu ermitteln.

Android Profiler
Wenn Sie Zugriff auf den Quellcode der App haben, können Sie den Android Studio Profiler verwenden, um detaillierte CPU-Nutzungsmetriken abzurufen. Sie können der offiziellen Android-Dokumentation hier folgen, um den CPU-Profiler in Android Studio zu verwenden.

GameBench-Tools
GameBench-Tools bieten die einfachste Möglichkeit, die normalisierte CPU-Auslastung auf einem Android-Gerät für jede App oder jedes Spiel abzurufen, auch wenn Sie nicht der Entwickler sind. Neben der CPU-Auslastung melden die Tools auch CPU-Kernzustände (ob ein CPU-Kern online war) und deren Frequenzen. Zum Beispiel sieht ein Beispieldiagramm für CPU-Kernfrequenzen wie folgt aus,

Das obige Diagramm zeigt einen mobilen Chipsatz mit einer 8-Kern-CPU und mit einem Blick können Sie sehen, dass die CPU-Frequenz für die ersten 25 Sekunden oder so getaktet wurde und dann das Android-Betriebssystem beschloss, alle Kerne auf niedrigere Frequenzen zu takten. In diesem Fall lud die profilierte App Ressourcen von der Festplatte und musste daher alle Kerne 25 Sekunden lang mit einer höheren Frequenz betreiben. Wenn Sie die CPU-Auslastung für Ihr Mobilgerät ausprobieren möchten, melden Sie sich unten für eine GameBench Pro-Testversion an und machen Sie es schnell.

Kontakt aufnehmen

iOS
Wenn Sie ein iOS-Entwickler sind, können Sie die CPU-Auslastung am einfachsten mithilfe des Xcode-Toolsets messen.

Wir haben die folgenden Apple-Tools als besonders nützlich empfunden:

  1. Xcode Debug Gauges
  2. Instrumente
    1. Zeitprofiler
    2. Aktivitätsmonitor

Xcode Debug Gauges
Wenn Sie Zugriff auf den Quellcode Ihrer iOS-App haben, können Sie mit den Debug Gauges schnell und einfach den Ressourcenverbrauch Ihrer App ermitteln. Weitere Informationen zur Verwendung der Debug-Messgeräte finden Sie hier. Sie müssen lediglich die App auf dem angeschlossenen Gerät starten, um sehr nützliche Informationen zur Ressourcennutzung zu erhalten. Bitte beachten Sie, dass in iOS nur die CPU-Auslastung gemeldet wird (nicht normalisiert).

Instruments
Manchmal benötigen Sie Zugriff auf detailliertere Informationen zur CPU-Profilerstellung. Instrumente verfügen über verschiedene Instrumente, mit denen Sie die Leistung Ihrer App messen können.

Time Profiler
Das Time Profiler-Instrument kann eine zeitbasierte Abtastung von Prozessen mit geringem Overhead durchführen, die auf den CPUs des Systems ausgeführt werden. Es gibt ein paar verschiedene Ansichten in diesem Instrument, das verwendet werden kann. Die CPU-Strategienutzungsansicht kann verwendet werden, um die Kernauslastung über bestimmte Zeiträume zu vergleichen. Sie können die Arbeitslast auf jedem Kern des Geräts anzeigen und unerwartetes Verhalten erkennen. Die Ansicht Threads-Strategie kann verwendet werden, um die Verwendung von Threads durch Ihre App bei der Ausführung von Arbeiten zu untersuchen. Es ist erwähnenswert, dass Quellcode benötigt wird, um die Engpässe zu verstehen.

Aktivitätsmonitor
Der Aktivitätsmonitor kann einen guten Gesundheitsindikator für die zu profilierende App bereitstellen. Dieses Instrument kann die CPU- und Speichernutzung aller auf dem Gerät ausgeführten Apps anzeigen. Dies ist nützlich, wenn Sie einen lang andauernden Test durchführen und Leistungsparameter für die App / das Spiel messen möchten.

GameBench Tools
Mit unseren Tools können Sie die CPU-Auslastung Ihrer App messen, auch wenn Sie keinen Zugriff auf den Quellcode haben. Dies ist besonders nützlich, wenn Sie einen Release Candidate ohne Debug-Informationen profilieren möchten. Außerdem können Sie mit unseren Tools die CPU-Auslastung von einem Windows-PC aus messen, was sehr nützlich sein kann, da die oben genannten Methoden zur Verwendung von Xcode und Instrumenten nur auf einem Mac mit OSX funktionieren.

 Core Frequenz Diagramm

Ein wichtiger Punkt ist, dass die von GameBench gemeldete CPU-Auslastung je nach Anzahl der Kerne variiert. Jeder Kern darf 100% nutzen und so kann bei einem Sechs-Kern-System die maximale CPU-Auslastung auf 600% steigen.

Ein wichtiger Punkt ist, dass die von GameBench gemeldete CPU-Auslastung je nach Anzahl der Kerne variiert. Jeder Kern darf 100% nutzen und so kann bei einem Sechs-Kern-System die maximale CPU-Auslastung auf 600% steigen.

Worauf sollten Sie achten?

iOS
Anhaltende Werte hoher CPU-Last müssen genauer betrachtet werden (Verstehen Sie, was auf dem Bildschirm passiert ist, indem Sie die Screenshots für den Kontext verwenden), da dies höchstwahrscheinlich zu einem erhöhten Batterieverbrauch führt. Aufgrund der Funktionsweise moderner CPUs führt eine Erhöhung der CPU-Last normalerweise dazu, dass die CPU in die nächsthöhere Betriebsfrequenz wechselt. Der Übergang zum nächsten Betriebspunkt sollte zu einem niedrigeren CPU-Lastwert führen. Wenn eine Anwendung die CPU konsistent lädt, erhöht das Betriebssystem den Betriebspunkt weiter, bis der Maximalwert erreicht ist. Dies ist kein wünschenswertes Verhalten und sollte untersucht werden.

Sie sollten sich auch CPU-Auslastungswerte ansehen, die mehr als 25% des zulässigen Maximums betragen. In einem 6-Kern-System weist eine anhaltende CPU-Auslastung von mehr als 150% normalerweise auf ein Problem hin, und Sie möchten möglicherweise das Time Profiler-Instrument verwenden, um dies genauer zu untersuchen.

Kurze Bursts mit hoher CPU-Last sind in Ordnung.

Android
Dies hängt von der Anzahl der Kerne in dem zum Testen verwendeten Gerät ab. Auf einem Quad-Core-System würde ein Wert von mehr als 25% bedeuten, dass ein Kern für die Anwendung vollständig ausgelastet ist und daher als hohe CPU-Auslastung angesehen wird, obwohl dies in kurzen Bursts in Ordnung ist. Konsistente CPU-Auslastung > 25% bedarf weiterer Untersuchungen.

Alle in der App verwendeten Threads sollten “benannt” sein, um die bereitgestellten Informationen bestmöglich zu nutzen. Es ist immer eine gute Idee zu überprüfen, ob einer der “leichten” Threads unerwartet mehr CPU-Zyklen verbraucht

Was als nächstes?

Wenn Sie mehr über die von den GameBench Pro Tools gesammelten Metriken erfahren möchten, finden Sie unten mehrere Blogbeiträge zu diesem Thema.

Blogs zu Leistungsmetriken

Leave a Reply