Leistungsaufnahme

Raspberry Pi unter Strom

9. Dezember 2019, 8:53 Uhr | Klaus Dembowski
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Einfluss der CPU-Kern-Anzahl

TU Hamburg
Bild 3: In der Datei config.txt kann man die Takt- und Spannungseinstellung manuell anpassen.
© Klaus Dembowski

In der Datei /boot/config.txt lässt sich festlegen wie viele CPU-Kerne maximal genutzt werden sollen, indem die Zeile maxcpus=N ergänzt wird – falls sie nicht vorhanden sein sollte. Der Einfluss der Anzahl genutzter Kerne auf die Stromaufnahme im Idle-Betrieb und auf die Bootzeit veranschaulicht Tabelle 1. Beide Werte steigen an, je weniger Kerne zur Verfügung stehen, wobei der Unterschied in der Bootzeit mit circa 1,4 s besonders groß ist, wenn statt zwei Kernen nur einer verwendet wird. Ob zwei, drei oder vier Kerne eingesetzt werden, hat demgegenüber nur einen geringen Einfluss. Die Stromaufnahme verhält sich genau umgekehrt. Hier ergibt sich bei einem Wechsel von vier auf drei Kernen die größte Differenz mit einem Mehrverbrauch von 40 mA und die kleinste bei einem Wechsel von zwei auf einen Kern.

Die Unterschiede in der Bootzeit kommen durch die Parallelisierung des Bootvorgangs zustande, wenn mehr als ein Kern zur Verfügung steht. Die Parallelisierung ist jedoch nicht unendlich skalierbar, weil die ablaufenden Prozesse nicht alle voneinander unabhängig sind. Durch diese Abhängigkeiten entsteht eine Prozesskette, die die minimale Bootzeit vorgibt. Je näher diese Zeit rückt, desto geringer wird die Anzahl noch nicht parallelisierter Prozesse und entsprechend auch die Zeitersparnis, die sich durch zusätzliche Kerne erreichen lässt. Tabelle 1 zeigt auch, dass die Stromaufnahme des Raspberry Pi am geringsten ist, wenn maximal vier Kerne im Einsatz sind. Sie wird größer, je weniger Kerne bereit stehen.

Deshalb ist es effektiver, viele Kerne nur leicht auszulasten, als wenige stärker. Der Grund für dieses Ergebnis liegt im Power Management des Raspberry Pi, das die Taktfrequenzen der Kerne drosselt, je nachdem wie viel Leistung nötig ist. Je weniger Kerne verwendet werden können, desto höher werden sie getaktet. Sie verbrauchen daher mehr Energie als eine größere Anzahl niedrig getakteter Kerne. Die optimale Einstellung ist demnach maxcpus=4, weil damit sowohl die Stromaufnahme als auch die Bootzeit am geringsten sind.

Mal abschalten

Die allgemein gültige Empfehlung, möglichst alle Einheiten abzuschalten, die nicht für die konkrete Applikation notwendig sind, gilt auch für einen Raspberry Pi. Trennt oder entfernt man die rote Power-LED, die im Halt-Modus leuchtet, kann man zunächst 2 mA einsparen. Für Embedded-Systeme ist oftmals keine Videoausgabe notwendig, weshalb ein Abschalten des PAL- und des HDMI-Ausgangs sinnvoll ist, um Strom zu sparen. Typischerweise führt dies zu einem um circa 20 mA geringeren Verbrauch. Ausgelöst wird dies durch folgende Zeile: pi@raspberrypi: ~ $ /opt/vc/bin/# tvservice -off.

Anbieter zum Thema

zu Matchmaker+
TU Hamburg
Bild 4: Die Stromaufnahme (blau) steigt mit der CPU-Frequenz an, während die Bootzeit (grün) geringer wird und der Idle-Strom (rot) nahezu konstant bleibt.
© Klaus Dembowski

Nach dem nächsten Boot ist die Ausgabe automatisch wieder aktiviert, sofern die Zeile nicht für eine automatisierte Verarbeitung in eine der zuständigen Dateien (z. B. in boot/config.txt bzw. /etc/modules) eingetragen wird. Durch das Ausschalten des Ethernet-Ports lassen sich ungefähr 46 mA einsparen, während das Abschalten der USB-Ports zusammen eine etwa 4 mA geringere Stromaufnahme zur Folge hat. Das entspricht der Idle-Stromaufnahme einer angeschlossenen Tastatur, sodass man durch Abschalten des USB keinen Gewinn erzielen kann – genauso wenig wie durch das Abschalten des WiFi/Bluetooth-Chips.

Betriebssystem und Dienste

Das verwendete Betriebssystem hat einen nicht zu vernachlässigenden Einfluss auf die Stromaufnahme. Für Low-Power-Anwendungen empfiehlt es sich generell, nicht in eine grafische Oberfläche zu booten, sondern in der textbasierten (Konsolenmodus) zu verbleiben. Für jede neue Raspberry-Pi-Version wird stets auch eine aktualisierte abwärtskompatible Raspbian-Version veröffentlicht, um die neuen oder auch geänderten Hardware-Eigenschaften nutzen zu können. Grundsätzlich ist es möglich, die aktuellste Version auch auf einem älteren Raspberry-Pi-Board einzusetzen, was Einfluss auf die Stromaufnahme haben kann und letztlich anwendungsspezifisch ist. Eine neuere Version auf einem älteren Board hat bei den Versuchen mitunter zu einer geringeren Stromaufnahme geführt. Eine ältere Version auf einem neuen Board macht hingegen keinen Sinn, falls es überhaupt funktioniert.

Ein Embedded-System muss nicht zwangsläufig mit einem Betriebssystem arbeiten, sodass auch die Möglichkeit besteht, den Raspberry Pi direkt mit einem Programm (Assembler, C) auszustatten. Im Internet sind hierzu einige Beispiele zu finden, beispielsweise von David Welch [2]. Die dadurch erzielte Stromersparnis fällt nach eigenen Messungen mit einer einfachen GPIO-Applikation allerdings nicht so stark aus, wie zunächst vermutet. Im Idle-Modus beträgt der Unterschied circa 10 mA. Beim Ablauf eines exklusiv laufenden Programms im Konsolenmodus fällt die Stromaufnahme, die durch die Systemroutinen des Betriebssystems verursacht wird, kaum ins Gewicht.

Bootzeit
  Einsparung
 KernelUserspaceTotal 
Ausgangssituation2,344 s10,162 s12,507 s
hciuart2,344s6,840 s9,184 s3,323 s
networking2,344 s5049 s7,393 s1,791 s
gammu-smsd2,344 s4,830 s7,175 s218 ms
ntp2,344 s4,763 s7,091 s840 ms
caspi-config2,344 s3,874 s6,217 s874 ms
fake-hwclock"""minimal
avahi-daemon""""
alsa-restore""""
triggerhappy""""
 Summe6,290 s

 

Tabelle 2: Einfluss verschiedener Systemdienste auf die Bootzeit.

Ein Vergleich bekannter Betriebssysteme (Raspbian, Arch Linux, Pidora) für den Raspberry Pi zeigt, dass sich die Stromaufnahmen im Idle- und auch im Sleep-Modus (shutdown) zwar kaum voneinander unterscheiden, die Bootzeit jedoch sehr unterschiedlich ist. Arch Linux beispielsweise benötigt nur etwa ein Drittel der Bootzeit, das heißt, der Energieverbrauch (E = P * t) gegenüber Raspbian beträgt auch nur ein Drittel für diesen Vorgang. Falls ein System nach dem Boot für nur kurze Zeit Messungen ausführen und danach wieder in den Schlafmodus gehen soll, ist deshalb ein schnell bootendes Betriebssystem zu bevorzugen.

Dabei ist auch interessant, welche Dienste des Betriebssystems wie lange aktiv sind. Nützlich für diese Analyse ist das Kommando systemd-analyze, welches die jeweilige Bootzeit ausgibt (Bild 2). Mit systemd-analyze blame, systemd-analyze critical-chain und systemd-analyze plot erhält man Informationen über die zeitlichen Abläufe beim Starten des Raspberry Pi. Es ist leicht zu erkennen, welche Dienste für die Länge der Bootzeit maßgeblich sind und welche eine eher untergeordnete Rolle spielen. Nicht benötigte Kernelmodule (z. B. joydev, ipv6, snd_bcm2835) lassen sich in die Blacklist aufnehmen, und auch das Deaktivieren oder Umsortieren von Skripten, die beim Systemstart in den verschiedenen Runlevels des Systems ausgeführt werden, versprechen kürzere Bootzeiten.

Um schnell eine deutlich geringere Bootzeit zu erreichen, ist das Deaktivieren von zeitkritischen und nicht benötigten Systemdiensten am effektivsten. Dafür muss aber die genaue Funktion dieser Dienste bekannt sein, damit das System dadurch nicht die gewünschten Funktionen einbüßt. Das Deaktivieren eines Dienstes erfolgt über die Eingabe von: pi@raspberrypi:~ $ sudo systemctl disable <Dienstname>.service, wobei man <Dienstname> durch die jeweilige Bezeichnung ersetzt. In Tabelle 2 sind hierfür einige Beispiele mit den gemessenen Bootzeiten angegeben.

TU Hamburg
Bild 5: Die Taktschaltung mit RUN-Header beim Raspberry Pi 3.
© Klaus Dembowski

Aktuell nachgemessen

Die Leistungsangaben für die unterschiedlichen Modelle (z. B. Modell B: 3,5 W, Modell B+: 3 W, Modell A: 2,5 W, RP 4: 15 W) sind für konkrete Leistungsberechnungen viel zu ungenau, was demnach genauer zu untersuchen ist. In Tabelle 3 sind gemessene Werte für den maximalen Strom in der Raspbian-Standard-Konfiguration angegeben, der nach dem Einschalten und während des Bootens (Boot) – wenn auch nur kurzzeitig – bei den verschiedenen Raspberry-Pi-Versionen auftritt.

Wenn das System mit Raspbian gebootet hat, ist ein weiterer Messwert (Run) ermittelt worden. Dieser Zustand wird auch mit der Bezeichnung Idle ausgewiesen, was allgemein für einen Leerlaufprozess steht – in diesem Fall für denjenigen Zustand, bei dem der Raspberry Pi keine (merkliche) Aktion durchführt. Bei genauerer Betrachtung ist der Raspberry Pi selbstverständlich aktiv, denn es laufen – quasi im Hintergrund – verschiedene Prozesse ab, was jedoch nicht weiter von Bedeutung ist, weil hier vergleichende Relativmessungen durchgeführt wurden.

Der dritte Messwert wurde im Stromsparmodus (Shutdown) ermittelt, nachdem das System per sudo halt heruntergefahren worden ist. Bei den neueren Modellen ist außerdem der RUN-Pin für den Test auf Masse gezogen worden, was ebenfalls in den Shutdown-Modus führt. Durch das Verbinden des Power-Enable-Pins (PEN) mit Masse schaltet der Raspberry Pi in den niedrigsten Stromsparmodus, was von externen Schaltungen nutzbar ist, um den Raspberry Pi schlafen zu legen.

Der Aufbau war bei den getesteten Systemen stets gleich, mit angeschlossenem Monitor an HDMI und einer Tastatur, jedoch ohne Netzwerkverbindung und ohne weitere Peripherie. Ein angeschlossenes Netzwerkkabel führt bei den beiden getesteten Raspberry-Pi-4B-Platinen im Run-Modus zu einer höheren Stromaufnahme von etwa 40 mA, wobei die eine mit 1-GByte-Flash (Samsung K4F8E) und die andere mit 4-GByte-Flash (Micron D9WHV/MT53D102M32) bestückt war.

TU Hamburg
Bild 6: Reset- und Power Enable-Kontakte beim Raspberry Pi 4.
© Klaus Dembowski

Die Vermutung, dass ein größerer Flash-Speicher einer höheren Stromaufnahme zur Folge hat, hat sich bei den fünf überprüften Modi nicht bestätigt. Im Gegenteil: Denn sowohl der maximale Wert beim Boot als auch der im Idle-Modus sowie bei Run Enable lagen beim 4-GByte-Typ unter dem des 1-GByte-Typs (Tabelle 3). Möglicherweise ist der Unterschied darin begründet, dass die Chips von unterschiedlichen Herstellern (Samsung, Micron) stammen. Aus dem Raspberry-Pi-Aufdruck lässt sich nicht erkennen, über welche Kapazität der Flash-Speicher verfügt. Auch die unterschiedlichen Bestückungen sowie Herstellerbezeichnungen erleichtern die Identifizierung nicht. Details zum Speicher lassen sich unter Raspbian beispielsweise mit cat /proc/meminfo anzeigen.


  1. Raspberry Pi unter Strom
  2. Einfluss der CPU-Kern-Anzahl
  3. Takte und Spannungen anpassen

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu TU Hamburg-Harburg Inst. Für Mikrosystemtechnik

Weitere Artikel zu Broadcom

Weitere Artikel zu Leistungsmodule

Weitere Artikel zu Maker-Boards

Weitere Artikel zu SBCs / CPU-Boards / CoM / SoM