Die Google Pixel-Smartphones gehören zu den schnellsten Android-Handys auf dem Markt. Energy Aware Scheduling (EAS) ist einer der Gründe, warum das Telefon so reibungslos funktioniert.
Vor langer Zeit, als Linux nur eine Idee im Kopf von Linus Torvalds war, waren CPUs Single-Core-Einheiten, die eine enorme Energiemenge für wenig Leistung benötigten. Der erste kommerziell erhältliche Prozessor, der Intel 4004, lief mit einer Taktrate von 740 kHz auf einem einzelnen Kern. Damals war kein Lastplaner erforderlich. Die Lastplanung war den Dual-Core-„Giganten“ wie dem IBM Power 4 vorbehalten, der einige Jahrzehnte später auf den Markt kam. Diese liefen mit unglaublichen 1,1 GHz bis 1,9 GHz und erforderten Programme und das System, um diese Kerne korrekt zu nutzen. Wie sind wir von diesen Maschinen zu Softwarealgorithmen gekommen, die mehrere Kerne nutzen? Möglicherweise haben Sie in unseren Foren schon einmal von Energy Aware Scheduling (EAS) gehört. Dies ist einer der Gründe, warum die Google Pixel-Smartphones so gut abschneiden. Was ist das Tolle an EAS und wie sind wir überhaupt an diesen Punkt gekommen? Bevor wir das erklären können, müssen wir über Linux-Ladeplaner sprechen.
Die Entwicklung der Linux-Ladeplaner
Round-Robin-Planung
Die Round-Robin-Verarbeitung ist ein Konzept, das einfach zu erklären und zu verstehen ist, und noch einfacher, seine Nachteile zu verstehen. Round-Robin verwendet Zeitscheiben, um jedem Prozess Zeit zuzuweisen. Nehmen wir an, auf unserem Computer laufen vier Prozesse.
- Prozess A
- Prozess B
- Prozess C
- Prozess D
Lassen Sie uns nun die Arbeit des Round-Robin-Schedulers erledigen. Wir werden jedem Prozess 100 Millisekunden (Zeitscheiben) zuweisen, bevor wir mit dem nächsten fortfahren. Das bedeutet, dass die Verarbeitung von Prozess A 100 Millisekunden dauern kann, dann zu Prozess B übergeht und so weiter. Wenn die Arbeit einer Anwendung 250 Millisekunden dauert, muss sie diesen Prozess dreimal durchlaufen, um ihre Arbeit zu beenden! Skalieren Sie dies nun über verschiedene Kerne hinweg, sodass Prozess A und Prozess B Kern 1 und Prozess C und Prozess D Kern 2 zugeordnet werden. Dies wurde durch O(n)-Scheduling ersetzt (das einem Round-Robin-Verfahren ähnelte, aber Epochen verwendete und eine dynamische Zuweisung ermöglichte). Zeit), dann O(1)-Scheduling (minimierter Overhead, unbegrenzte Prozessunterstützung), dann schließlich der Completely Fair Scheduler (CFS). CFS wurde im Oktober 2007 in die Linux-Kernel-Version 2.6.23 integriert. Es wurde seitdem überarbeitet und ist immer noch der Standard-Scheduler in Linux-Systemen.
Völlig fairer Planer
Der Completely Fair Scheduler existiert seit seiner Einführung in Android und wird auf nicht großen Geräten verwendet. KLEINE Geräte. Es verwendet einen intelligenten Algorithmus, um die Verarbeitungsreihenfolge, die zugewiesene Zeit usw. zu bestimmen. Es ist ein Beispiel für eine funktionierende Implementierung des gut untersuchten Planungsalgorithmus namens „Weighted Fair Queueing“. Dabei geht es im Wesentlichen darum, Systemprozessen und anderen darauf ausgeführten Prozessen mit hoher Priorität Priorität einzuräumen Maschine. Wenn es auf einem großen laufen würde. KLEINES Gerät, alle Kerne würden als gleich wahrgenommen. Das ist schlecht, da Kerne mit geringer Leistung möglicherweise gezwungen werden, intensive Anwendungen auszuführen, oder noch schlimmer, das Gegenteil kann eintreten. Die Dekodierung zum Musikhören kann beispielsweise auf dem großen Kern erfolgen, wodurch der Stromverbrauch unnötig steigt. Deshalb brauchen wir einen neuen Planer für Big. LITTLE, eines, das die Unterschiede zwischen den Kernen tatsächlich erkennen und auf energieeffiziente Weise nutzen kann. Hier kommt Heterogeneous Multi-Processing (HMP) ins Spiel, der Standard-Ladeplaner, den die meisten Android-Telefone derzeit ausführen.
Heterogene Multiverarbeitung
Dies ist der Standard-Ladeplaner für alle großen Unternehmen. KLEINES Gerät, das in den letzten Jahren herausgebracht wurde, abgesehen vom Google Pixel. HMP nutzt das Große. LITTLE-Architektur, die weniger intensive Arbeit mit niedriger Priorität an die kleinen Kerne delegiert, die weniger Strom verbrauchen. HMP ist „sicher“, da es weiß, was an die großen Kerne und was an die kleinen Kerne gehen soll, ohne Fehler zu machen. Es funktioniert einfach und erfordert viel weniger Aufwand bei der Einrichtung auf der Entwicklungsseite als etwas wie EAS, auf das wir gleich eingehen werden. HMP ist lediglich eine Erweiterung von CFS, um es leistungsbewusst zu machen.
HMP geht weder von Vermutungen aus, noch prognostiziert es zukünftige Prozesse. Das ist gut, aber aus diesem Grund kann das Gerät nicht so flüssig sein wie Geräte mit EAS und verbraucht auch etwas mehr Batterie. Dies bringt uns schließlich zum Energy Aware Scheduling (EAS), von dem ich fest überzeugt bin, dass es die Zukunft in der ROM- und Kernel-Entwicklung ist, da immer mehr OEMs es übernehmen.
Energiebewusste Planung
Energy Aware Scheduling (EAS) ist das nächste große Thema, über das Benutzer in unseren Foren sprechen. Wenn Sie ein OnePlus 3 (oder natürlich ein Google Pixel) verwenden, haben Sie in den Foren bestimmt schon davon gehört. Mit dem Qualcomm Snapdragon 845 gelangte es in den Mainstream. Wenn Sie also eines dieser Geräte besitzen, verfügen Sie bereits über ein EAS-fähiges Smartphone. EAS in Form von Kerneln wie z RenderZenith und ROMs wie VertexOS Und PureFusion eroberten in seiner Blütezeit die OnePlus 3-Foren im Sturm. Natürlich ist auch das Google Pixel mit EAS ausgestattet. Was ist der Haken an den Versprechungen einer längeren Akkulaufzeit und einer besseren Leistung?
Energiebewusste Planung ist nicht so einfach, da sie nicht für jedes Gerät wie CFS oder HMP universell ist. EAS erfordert ein Verständnis des Prozessors, auf dem es läuft, basierend auf einem Energiemodell. Diese Energiemodelle werden von Ingenieurteams entwickelt, die ständig Tests durchführen und daran arbeiten, eine optimale Leistung zu erzielen. Da Snapdragon 820 und 821 grundsätzlich identisch sind, verwenden benutzerdefinierte Kernel auf dem OnePlus 3 das Google Pixel-Energiemodell. Geräte mit dem Snapdragon 845 können EAS nutzen, und das OnePlus 6 tut dies bis zu einem gewissen Grad. Es ist nicht so gut abgestimmt wie ein Google Pixel-Gerät, aber es erfüllt seinen Zweck. Hier ist ein Beispiel dafür, wie das Pixel 2 XL, obwohl das OnePlus 6 über einen besseren Prozessor mit EAS verfügt, es in puncto Laufruhe immer noch übertrifft. Beide Bilder stammen von uns geschwindigkeitsorientierte Überprüfung des OnePlus 6.
Wenn Sie Schwierigkeiten haben, die Grafiken zu verstehen, können Sie sich zur Orientierung das Bild unten ansehen. Alles, was die grüne Linie überschreitet, weist auf ausgelassene Frames und im schlimmsten Fall auf spürbares Stottern hin.
Die OnePlus 6-Implementierung von EAS ist interessant, da es sich offenbar nicht um eine vollwertige Implementierung handelt, wie man sie bei einem Google Pixel mit demselben SoC finden würde. Auch die Scheduler-Tunings machen nicht viel Sinn, was wahrscheinlich erklärt, warum es nicht so leistungseffizient ist, wie man es erwarten würde. Der Stromverbrauch ist äußerst konservativ, da das System den Kernen mit geringem Stromverbrauch für den Großteil der Arbeit Vorrang einräumt.
Bei Tunables handelt es sich einfach um eine Reihe von Parametern, die an den CPU-Governor übergeben werden und die die Art und Weise ändern, wie der Governor hinsichtlich der Frequenz auf bestimmte Situationen reagiert. Der Scheduler entscheidet dann, wo er Aufgaben auf verschiedenen Prozessoren platziert. Die Optimierungsmöglichkeiten des OnePlus 6 sind so eingestellt, dass sie der Arbeit an leistungsschwachen Kernen Priorität einräumen. Es hilft auch nicht, dass das Google Pixel 2 über einen enormen Input-Boost verfügt, sodass alle 8 Kerne ständig online bleiben. Google verwendet auch eine Balancer unterbrechen Dies hilft, Frame-Drops zu beseitigen und die Leistung zu verbessern.
Wie funktioniert EAS? Warum ist es nur unter bestimmten Bedingungen so effizient?
Die energiebewusste Planung erfordert die Verwendung eines Energiemodells und erfordert, wie oben erwähnt, eine Menge Tests und Arbeit, um es perfekt zu machen. EAS versucht, drei verschiedene Kernteile des Kernels zu vereinen, die alle unabhängig voneinander agieren, und das Energiemodell hilft dabei, sie zu vereinen.
- Linux-Scheduler (CFS, oben erwähnt)
- Linux-Cpuidle
- Linux CPU-Frequenz
Durch die Zusammenführung aller drei Teile unter dem Zeitplaner und deren gemeinsame Berechnung ergibt sich ein Potenzial für Energieeinsparungen, da die gemeinsame Berechnung eine größtmögliche Effizienz ermöglicht. CPUIdle versucht zu entscheiden, wann die CPU in den Leerlaufmodus wechseln soll, während CPUFreq versucht zu entscheiden, wann die CPU hoch- oder heruntergefahren werden soll. Beide Module haben das primäre Ziel, Energie zu sparen. Darüber hinaus werden Prozesse in vier Kontrollgruppen kategorisiert: Top-App, Systemhintergrund, Vordergrund und Hintergrund. Zu bearbeitende Aufgaben werden in eine dieser Kategorien eingeordnet. Anschließend erhält die Kategorie CPU-Leistung und die Arbeit wird auf verschiedene CPU-Kerne verteilt. Top-App hat die höchste Abschlusspriorität, gefolgt von Vordergrund, Hintergrund und Systemhintergrund. Hintergrund hat technisch gesehen die gleiche Priorität wie System-Hintergrund, aber System-Hintergrund hat normalerweise auch Zugriff auf mehr kleine Kerne. Tatsächlich übernimmt Energy Aware Scheduling Kernteile des Linux-Kernels und vereint alles in einem Prozess.
Beim Aufwecken des Geräts wählt EAS den Kern im flachsten Ruhezustand aus, wodurch die zum Aufwecken des Geräts erforderliche Energie minimiert wird. Dies trägt dazu bei, den Stromverbrauch des Geräts zu reduzieren, da es den großen Cluster nicht aufweckt, wenn dies nicht erforderlich ist. Die Ladungsverfolgung ist ebenfalls ein äußerst wichtiger Bestandteil von EAS, und es gibt zwei Optionen. „Per-Entity Load Tracking“ (PELT) wird normalerweise zur Lastverfolgung verwendet. Die Informationen werden dann verwendet, um Häufigkeiten zu bestimmen und wie Aufgaben über die CPU verteilt werden. „Window-Assisted Load Tracking“ (WALT) kann ebenfalls verwendet werden und wird auf dem Google Pixel verwendet. Viele EAS-ROMs in unseren Foren, wie z. B. VertexOS, entscheiden sich für die Verwendung von WALT. Viele ROMs veröffentlichen zwei Versionen des Kernels mit WALT oder PELT, sodass die Entscheidung dem Benutzer überlassen bleibt. WALT ist stoßartiger und weist hohe Spitzen bei der CPU-Frequenz auf, während PELT versucht, konsistenter zu bleiben. Der Load-Tracker hat keinen wirklichen Einfluss auf die CPU-Frequenz, er teilt dem System lediglich mit, wie hoch die CPU-Auslastung ist. Eine höhere CPU-Auslastung erfordert eine höhere Frequenz und daher besteht eine konsistente Eigenschaft von PELT darin, dass die CPU-Frequenz langsam ansteigt oder abfällt. PELT neigt dazu, eine höhere CPU-Auslastung zu melden, sodass es möglicherweise eine höhere Leistung bei höheren Batteriekosten bietet. Allerdings kann derzeit niemand wirklich sagen, welches Lastverfolgungssystem besser ist, da beide Lastverfolgungsmethoden ständig gepatcht und verfeinert werden.
So oder so liegt es auf der Hand, dass es unabhängig von der verwendeten Lastverfolgungsmethode zu einer Effizienzsteigerung kommt. Anstatt nur Aufgaben auf einem beliebigen Prozessor zu verarbeiten, wird die Aufgabe analysiert und die für ihre Ausführung erforderliche Energiemenge geschätzt. Diese clevere Aufgabenplatzierung führt dazu, dass Aufgaben deutlich effizienter erledigt werden und das System insgesamt schneller wird. Bei EAS geht es darum, eine möglichst reibungslose Benutzeroberfläche bei minimalem Stromverbrauch zu erhalten. Hier kommen weitere externe Komponenten wie schedtune ins Spiel.
Schedtune wird in jeder Kontrollgruppe durch zwei einstellbare Parameter definiert, die eine genauere Kontrolle über die auszuführenden Aufgaben gewährleisten. Es steuert nicht nur die Verteilung von Aufgaben auf mehrere CPUs, sondern auch, ob die wahrgenommene Last erhöht werden soll, um sicherzustellen, dass zeitkritische Aufgaben schneller erledigt werden. Auf diese Weise werden Vordergrundanwendungen und -dienste, die der Benutzer nutzt, nicht langsamer und verursachen unnötige Leistungsprobleme.
Während die energiebewusste Planung das nächste große Ding ist, kann man auch argumentieren, dass sie bereits da ist und zwar schon seit einiger Zeit. Da immer mehr Geräte mit Energy Aware Scheduling den Mainstream erreichen, bricht ein neues Zeitalter der mobilen Verarbeitungseffizienz an.
Die Vor- und Nachteile von Round-Robin, CFS, HMP und EAS
Obwohl meine grafischen Fähigkeiten unterdurchschnittlich sind, habe ich ein Bild zusammengestellt, das die Vor- und Nachteile jedes dieser Planer zusammenfassen soll.
Ich möchte mich ganz besonders bei XDA Recognized Contributor bedanken Mostafa Wael deren Erklärungen zu verschiedenen Aspekten von EAS sehr dazu beigetragen haben, diesen Artikel zu ermöglichen. Ich möchte mich auch bei XDA Recognized Developer bedanken joschartig, XDA-anerkannter Entwickler RenderBroken Und Mostafa Wael für seinen Artikel über EAS. Für diejenigen unter Ihnen, die Interesse an EAS-bezogenen Teilen haben, bietet Linaro zahlreiche Dokumentationen zu EAS, die Sie lesen können.