Warum kann das Betriebssystemdesign den Stromverbrauch senken?

11

Ich habe gelesen, dass Betriebssysteme wie Android und iOS irgendwie optimiert sind, um die Akkulaufzeit zu verbessern.

Mein Verständnis ist, dass eine CPU eine bestimmte Anzahl von Operationen in einer bestimmten Zeit ausführt. Ich würde also denken, dass Sie Anwendungen beschleunigen können, indem Sie die Anzahl der erforderlichen Operationen reduzieren. Da die CPU jedoch weiterhin x Operationen in y Zeit ausführt , sollte dies nicht der Fall sein Macht beeinflussen?

Wenn ein Prozess mehr RAM belegt, verbraucht er dann mehr Strom?

neelsg
quelle

Antworten:

15

Gängige CPUs für Smartphones, Laptops und sogar Desktop-PCs haben eine variable Taktrate. Wenn der Scheduler feststellt, dass er Leerlaufzeit hat, kann er die Taktrate verringern und erneut erhöhen, wenn mehr Prozesse um die CPU-Zeit konkurrieren.

Für batteriebetriebene Geräte optimierte CPUs bestehen in der Regel aus vielen Funktionskomponenten, die jeweils über eine eigene Uhr verfügen (Beispiel: ARM Cortex A8 ). Wenn eine Komponente im Leerlauf ist, kann das Betriebssystem sie ausschalten (oder die Uhrzeit reduzieren), wodurch Strom gespart wird. Beispielsweise kann bei vielen Multicore-CPUs (z. B. bei High-End-Mobilgeräten) jeder Kern separat ein- oder ausgeschaltet werden. ARM ist besonders gut in diesem Spiel, was einer der Gründe ist, warum die meisten Smartphones ARM-CPUs haben.

Das Variieren der Taktrate oder das Ausschalten der Uhr elektronischer Komponenten wird als Energieverwaltung bezeichnet . Es ist in der Regel ein komplexer Teil des Schreibens und Optimierens eines Betriebssystems für ein batteriebetriebenes Gerät, wobei viele Abhängigkeiten vom genauen Hardwaremodell abhängen.

Was für die CPU gilt, gilt auch für Peripheriegeräte. Das hintergrundbeleuchtete Display ist beispielsweise ein Hauptverbraucher von Strom auf einem Smartphone, gefolgt vom Radio. Das CPU-Betriebssystem kann eine Rolle bei der Energieverwaltung von Peripheriegeräten spielen. Sekundärchips führen auch eine eigene Firmware aus, die auch die Energieverwaltung durchführt.

Anwendungen tragen dazu bei, den Stromverbrauch niedrig zu halten: Sie müssen dem Betriebssystem ermöglichen, seine Aufgabe zu erfüllen. Das Schlimmste, was eine Anwendung tun kann, ist das Abrufen - Ausführen einer Schleife wie while (not_ready()) {}. Selbst das Einführen einer kleinen Verzögerung wie in while (not_ready()) {usleep(100);}hilft nicht weiter, da der Prozessor nicht genügend Zeit hat, um in den Energiesparmodus zu wechseln, oder wenn dies der Fall ist, bedeutet jedes unfruchtbare Aufwecken Energieverschwendung. Daher müssen die Betriebssystem-APIs so konzipiert sein, dass Anwendungen niemals abfragen müssen, sondern stattdessen einen Ereignismechanismus abonnieren und inaktiv bleiben können, bis sie über ein relevantes Ereignis informiert werden. Anwendungen wiederum müssen solche Mechanismen nutzen, sodass sich das Design des gesamten Software-Stacks auf den Stromverbrauch auswirkt.

Mit dem Intel Powertop- Dienstprogramm können Sie Informationen darüber abrufen, was für den Stromverbrauch Ihres PCs verantwortlich ist . Smartphones können in der Regel auch feststellen, wie viel Strom Anwendungen verbraucht haben. Die genaue Berücksichtigung des Stromverbrauchs nach Anwendung ist schwierig: Wenn eine Komponente für zwei Anwendungen aufwacht, kann die Weckzeit einer von ihnen etwas willkürlich oder keiner von beiden zugeordnet werden. Der Stromverbrauch von Peripheriegeräten lässt sich auch nicht immer leicht an die zuständige Anwendung verfolgen.

Ein RAM-Chip weiß nicht, welche seiner Bits Daten eines aktiven Prozesses speichern, daher kann er auf diese Weise nicht selektiv ausgeschaltet werden. Der Stromverbrauch eines Prozesses hängt nicht von der Menge des verwendeten Speichers ab (außer insofern, als die RAM-Zugriffe Strom verbrauchen, aber die Wiederverwendung des gleichen Speichers oder die Verwendung unterschiedlicher RAM-Bereiche keinen Unterschied hinsichtlich des Stromverbrauchs macht).

Gilles 'SO - hör auf böse zu sein'
quelle
4

In Bezug auf die Prozessorleistung kann das Betriebssystem hauptsächlich APIs bereitstellen, die Anwendungen vom Abrufen abhalten. (Und eliminieren Sie auch alle Abfragen im Kernel und in den Gerätetreibern, falls vorhanden.) Dann kann der Prozessor in einen Energiesparmodus versetzt werden, wenn nichts zu tun ist.

Für jedes Gerät muss es eine Möglichkeit geben, dass die Benutzer-Apps nach einer Anforderung in den Ruhezustand wechseln und erst dann wieder geweckt werden, wenn das Ergebnis fertig ist.

Offensichtlich sind enge Abfrageschleifen eine Katastrophe (weil sie den Prozessor vollständig wach halten und nutzlose Noops und Sprünge ausführen). Es gibt jedoch subtilere, aber fast ebenso schlimme Fälle, in denen die Benutzer-App Timer einstellt, den Timer-Alarm aktiviert und überprüft Einige Bedingungen, Zurücksetzen des Timers und Wiedereinschlafen.

Ich weiß weniger über diesen Teil, aber ich denke, es gibt auch kreative Möglichkeiten, DMA-Controller (Direct Memory Access) zu verwenden, um lange Zeichenfolgen von Wiederholungsinterrupts zu verarbeiten, ohne den Prozessorkern selbst zu wecken.

Wanderlogik
quelle
3

Die Hauptaufgabe des Betriebssystems besteht darin, eine Laufzeitumgebung bereitzustellen, die so unabhängig wie möglich von der Hardware ist. Es weiß, wer welche Hardware verwendet, wann und wie jemand Hardware verwendet. Dadurch kann das Betriebssystem den Stromverbrauch der Hardware reduzieren, wenn es nicht verwendet wird.

Moderne Hardware bietet viele Möglichkeiten zur Reduzierung des Stromverbrauchs, z

  • Herunterfahren nicht verwendeter Peripheriegeräte und eines Teils des Prozessors (Gleitkomma-Recheneinheiten, Prozessorkerne, ...)
  • Heruntertakten weniger gebrauchter Teile (einschließlich Prozessorkern)
  • Anpassung des Netzteils an die aktuelle Taktfrequenz (Sie können die Arbeitsspannung eines Prozessors im laufenden Betrieb ändern, manchmal um Hunderte von mA).

Wenn ein Prozess mehr RAM belegt, verbraucht er mehr Strom?

Nicht wirklich. Wenn Ihr System über 1 GB DRAM verfügt, Sie jedoch mit einigen Speichercontrollern nur 512 MB verwenden, können Sie die Aktualisierung eines Teils des DRAM beenden, wodurch der Stromverbrauch verringert wird. LPDDR unterstützt Partial Area Self Refresh, um dasselbe während der Selbstaktualisierung zu tun (während der Prozessor gestoppt ist, was auf Mobilgeräten meistens der Fall ist).

Wie Sie vielleicht sehen, gibt es viele Möglichkeiten, den Stromverbrauch moderner Architekturen zu senken, aber das Betriebssystem muss damit umgehen. Einige Funktionen, wie z. B. PASR, sind sehr schwierig zu verwenden. Dies erfordert viel Arbeit am Betriebssystem, um die Speicherverwaltung anzupassen, Suspend / Resume-Prozeduren zu implementieren, ...

Jacen
quelle
Randnotiz: Obwohl dies nicht unbedingt direkt mit dem RAM-hungrigen Prozess zusammenhängt, kann eine stärkere RAM-Nutzung zu weniger Dateisystem-Caching führen, was die Energieeffizienz (sowie die Leistung) beeinträchtigen kann.
Paul A. Clayton
3

Wie Sie zweifellos wissen, verwaltet das Betriebssystem eine Vielzahl von Listen. Zwei dieser Listen sind die Bereitschaftsliste und die Timerliste. Die Bereitschaftsliste gibt an, welche Aufgaben / Threads zur Ausführung bereit sind. Die Timer-Liste identifiziert die Aufgaben / Threads, die sich in einem blockierten Zustand mit einer Zeitüberschreitung befinden.

Stellen Sie sich vor, das Betriebssystem verfügt über eine leere Bereitschaftsliste. Das heißt, es sind keine Aufgaben mehr ausgeführt werden können (es befindet sich im Ruhezustand). Einige Prozessoren (wie z. B. der x86) verfügen über eine Stopp-Anweisung, die das Betriebssystem aufrufen kann, um den Prozessor anzuhalten, bis er von einem externen Interrupt (z. B. einem Tick-Interrupt) geweckt wird. Während dieser Zeit verbraucht es weniger Strom. Diese Technik kann durch einen Blick auf die Timer-Liste weiter verbessert werden. Wenn Sie im Leerlauf sind und wissen, dass eine Aufgabe, sobald sie von einem Timer-Tick aufwacht, 100 Ticks entfernt ist, kann die Tick-Rate vorübergehend so geändert werden, dass sie beispielsweise 100-mal langsamer ist. Auf diese Weise kann der Prozessor über einen längeren Zeitraum noch weniger Energie verbrauchen, da er nicht bis zu 100 Tick-Interrupts warten muss.

Sobald der externe Interrupt eintrifft, muss die Tick-Rate neu berechnet werden. Wenn der externe Interrupt eine Aufgabe vorbereitet hat, wird die Tick-Rate wieder normal. Wenn nicht, muss die Anzahl der zu schlafenden Zecken zusammen mit der neuen (verlangsamten) Zeckenrate neu berechnet werden.

Hoffe das hilft.


quelle
2

Um die anderen Antworten zu ergänzen:
Ihre Frage betrachtet iOS und Android als Betriebssysteme, aber das "Betriebssystem" ist nur ein Teil davon.
Sowohl Android als auch iOS sind Frameworks und enthalten viele Teile, die nicht Teil des eigentlichen Betriebssystems sind, aber aktiv zur Reduzierung des Stromverbrauchs beitragen.
Mit Android by Design können die Anwendungsentwickler beispielsweise ihren Status speichern, wenn sie ausgeblendet sind, sodass Prozesse beendet werden können, wenn sie nicht aktiv verwendet werden. Auf diese Weise wird die Anzahl der bereitgestellten Threads reduziert und das Herunterfahren des Kerns und die Reduzierung der Taktrate ermöglicht.
Es gibt Funktionen im "Betriebssystem", die die adaptive Helligkeit, den WLAN-Ruhezustand, Bereinigungsthreads, das Pooling von Zeitplänen, LED-Anzeigen, das Standby-Verhalten von Mobiltelefonen und andere Aspekte festlegen, die den Stromverbrauch drastisch beeinflussen.
Darüber hinaus haben einige mobile Plattformen intensiv an der Optimierung ihres CPU / GPU-Nutzungsverhältnisses gearbeitet, da die GPU besser an Grafiken angepasst ist und eine relativ neue Ergänzung der mobilen Landschaft darstellt, auf die immer mehr grafikbezogene Teile des Betriebssystems umsteigen Die GPU, die die Arbeit von der CPU löscht und die Verwendung von CPU-Leistungsoptimierungen ermöglicht (und in vielen Fällen auch das Gesamtsystem beschleunigt).

Didi Kohen
quelle