Raspberry Pi save power

Energie auf dem Raspberry Pi sparen

Alex Eames hat eine Übersicht veröffentlicht, in der der Stromverbrauch verschiedener Raspberry Pi Modelle in verschiedenen Betriebszuständen verglichen wird:

https://raspi.tv/2018/how-much-power-does-raspberry-pi-3b-use-power-measurements

Im niedrigsten Betriebszustand, Idle (Leerlauf), ziehen die verglichenen Modelle nach Alex wie folgt Strom (nach Strom sortiert):

  • 100 mA - Raspberry Pi Zero
  • 100 mA - Raspberry Pi 1A+
  • 120 mA - Raspberry Pi Zero W
  • 140 mA - Raspberry Pi 1A
  • 200 mA - Raspberry Pi 1B+
  • 230 mA - Raspberry Pi 2B
  • 230 mA - Raspberry Pi 3B
  • 360 mA - Raspberry Pi 1B
  • 400 mA - Raspberry Pi 3B+

Die höhere Leistungsaufnahme des Pi 1B gegenüber dem Raspberry Pi 2 B und dem Pi 3B erklärt sich durch lineare Spannungsregler. Diese wurden auf dem Board eingesetzt um aus 5 V 3,3V zu machen. Die überschüssige Energie wurde dabei in Wärme übergeführt - daher wurden diese Pi's von manchen Nutzern auf  diesen linearen Gleichspannungswandlern Kühlkörper installiert.

Um mit einem Raspberry Pi Energie zu sparen, sollte man daher anhand der Tabelle das kleinste Modell auswählen, das die Anforderungen abdeckt. In Fällen wo weder Ethernet noch mehrere USB Anschlüsse benötigt werden, und nur wenig CPU Power gefordert wird, ist zum Beispiel der Pi Zero W eine gute Wahl.

Bei Einsatz von Windows 10 IoT Core benötigt man zum Beispiel mindestens einen Pi 2B, da Windows 10 IoT Core den ARMv6 Instruction Set der ersten Pi Generation (inklusive den Zeros) nicht unterstützt.

Raspberry Pi Leistungsaufnahme im Vergleich zu anderen Plattformen

Girish Bekaroo und Aditya Santokhee haben im August 2016 die Leistungsaufnahme in Watt der Raspberry Pi Plattform mit anderen Geräten verglichen. Konkret verglichen wurden:

  • 0,12 W: Smartphone Galaxy S6 Edge mit Android OS (Quad-Core 1,5 GHz Cortex A53)
  • 0,16 W: Tablet Samsung Galaxy Note 10.1 (1.9 GHz Quadcore + 1.3 GHz Quadcore)
  • 2,20 W: Raspberry Pi 2 Model B (Quad-Core 900 MHz Cortex A7) mit WiFi Dongle
  • 10,20 W: Notebook 2,3 GHz Core i5-2410M HP ProBook 4530s mit 64-bit Windows 7
  • 33,80 W: Desktop PC 3,3 GHz Core i3-2120 mit 64-bit Windows 7

In meiner Liste habe ich die Leerlauf-Leistungen aus dem Artikel wiedergegeben

https://www.researchgate.net/publication/309917878_Power_consumption_of_the_Raspberry_Pi_A_comparative_analysis

Wie wir sehen ist eventuell sogar die Wahl der Raspberry Pi Plattform nicht das beste, wenn es tatsächlich um die geringst mögliche Leistungsaufnahme geht. Ein Smartphone verbraucht 1/10 bis 1/20 der Energie eines Pi's im Leerlauf.

Einer der Gründe ist dass die Smartphones und Tablets für weitere Leistungsreduzierung optimiert sind, ein anderer sehr wesentlicher Grund ist dass die SoCs dieser Geräte auf einem kleineren Process Node gefertigt werden - durch kleinere Strukturen wird die Leistungsaufnahme reduziert. Erst die Verkleinerung der Strukturen (Transistorgrößen, etc.) bei der Herstellung hat diese mobilen Computer mit annehmbaren Akkulaufzeiten ermöglicht!

Die aktuellen Raspberry Pis (inklusive des Pi 3B+) wird auf der 40 nm Process Node gefertigt. Der Wechsel auf eine geringere Strukturgröße ist für die nächste Pi Generation (Raspberry Pi 4) absehbar, allerdings wird er höchstwahrscheinlich auf die 28nm Node erfolgen. Moderne Smartphone SoCs werden auf kleineren (noch sparsameren) Nodes gefertigt, doch ist die 28nm Node der momentane "Sweet Spot" der Wirtschaftlichkeit. Und nachdem der Raspberry Pi vornehmlich über seinen geringen Preis von 35 $ definiert wird, wird die Raspberry Pi Foundation vermutlich auch hier kostensensitiv vorgehen.

Man sollte sich auch die Frage stellen, ob es überhaupt ein Pi und ein komplettes Betriebssystem wie Linux sein muss. Microcontroller haben per se geringe Leistungsaufnahmen, und es gibt welche die auf Tiefschlafzustände optimiert sind.

TL;DR: In der nächsten Raspberry Pi Generation werden wir vermutlich einen sparsameren Raspberry Pi 4 vorfinden, falls Energiesparsamkeit für Dein Projekt sehr wichtig ist, wäre ein Smartphone oder ein Microcontroller vermutlich eine bessere Wahl.

Ref:

https://www.eetimes.com/author.asp?section_id=36&doc_id=1321536

Konkrete Tipps um die Leistungsaufnahme weiter zu reduzieren

Gerade in batteriebetriebenen oder - batteriegestützten Systemen ist es wünschenswert die Leistungsaufnahme des Pi's weiter zu reduzieren, falls man für seine Lösung den Raspberry Pi präferiert.

Ein kurzer Überblick über die Tipps:

  • ~25 mA: HDMI abschalten
  • ~5 mA pro LED: LEDs abschalten
  • SD Benutzung reduzieren
  • ~ 200 mA USB & Ethernet abschalten
  • onboard Wifi abschalten
  • ~100+ mA: Code & Software optimieren
  • ~50+ mA: unbenötigtes USB Zubehör entfernen
  • unbenötigte CPU Kerne abschalten
  • CPU untertakten
  • NO_HZ: clock-ticks reduzieren

geschätzte Strom-Reduktionen, wo angegeben von https://www.jeffgeerling.com/blogs/jeff-geerling/raspberry-pi-zero-conserve-energy

HDMI abschalten

HDMI kann abgeschaltet werden durch:

/usr/bin/tvservice -o

HDMI kann wieder eingeschaltet werden mittels:

/usr/bin/tvservice -p

tvservice ist eine Anwendung der Raspberry Pi Foundation, in der Standard Raspbian Distribution ist sie installiert, bei Alpine Linux bspw. muss man ein Paket nachinstallieren.

REF: https://raspberrypi.stackexchange.com/questions/69312/reduce-power-consumption-script

REF: https://raspberry-projects.com/pi/pi-hardware/raspberry-pi-zero/minimising-power-consumption

REF: https://www.mikeslab.net/raspberry%20pi/raspbian/2015/08/06/raspberry-pi-saving-power.html

REF: https://www.pidramble.com/wiki/benchmarks/power-consumption

LEDs abschalten

um die LEDs abzuschalten, sollte man folgende Zeilen in /boot/config.txt einfügen:

# Disable the ACT LED.

dtparam=act_led_trigger=none

dtparam=act_led_activelow=off

 

# Disable the PWR LED.

dtparam=pwr_led_trigger=none

dtparam=pwr_led_activelow=off

Die Raspberry Pi Zero / Zero W's haben nur die ACT LED.

Ref: https://www.jeffgeerling.com/blogs/jeff-geerling/controlling-pwr-act-leds-raspberry-pi

REF: https://raspberry-projects.com/pi/pi-hardware/raspberry-pi-zero/minimising-power-consumption

SD Benutzung reduzieren

Durch Reduktion unnötiger Logs und Zugriffe auf die SD Karte kann weitere Energie gespart werden, zudem wird das System stabiler (die SD Karte ist nach wie vor die Achillesferse in einem Langzeitbetrieb des Pi's, idealerweise sollte ein read-only System wie Alpine Linux eingesetzt werden!)

siehe: http://www.earth.org.uk/note-on-Raspberry-Pi-setup.html

 

USB & Ethernet abschalten

/etc/init.d/networking stop

echo 0 > /sys/devices/platform/bcm2708_usb/buspower

um den LAN9512 wieder zu aktivieren:

echo 1 > /sys/devices/platform/bcm2708_usb/buspower

Hinweis: eventuell müssen folgende Kommandos stattdessen ausgeführt werden:

Aus:

echo 0x0 > /sys/devices/platform/soc/20980000.usb/buspower  

 An:

 echo 0x1 > /sys/devices/platform/soc/20980000.usb/buspower

Und auf einem Pi 2 und 3 eventuell folgende (da mehr RAM verfügbar ist):

Aus:

echo 0x0 > /sys/devices/platform/soc/3f980000.usb/buspower

An:

echo 0x1 > /sys/devices/platform/soc/3f980000.usb/buspower

Es scheint nicht möglich zu sein einzelne USB Ports zu deaktivieren.

Auf dem Pi Zero / Zero W sind die USB Ports direkt vom Netzteil mit Strom versorgt, d.h. es ist nicht möglich die Stromversorgung für die Ports per Software abzuschalten.

REF: https://raspberrypi.stackexchange.com/questions/8498/disable-lan9512/8633#8633

REF: https://www.raspberrypi.org/forums/viewtopic.php?t=32781

REF: https://gist.github.com/hfreire/32deb6be3791f15692feaa8954e954fe

REF: https://forum-raspberrypi.de/forum/thread/22523-usb-port-deaktivieren/

onboard Wifi abschalten

in config.txt folgendes eintragen um WiFi und Bluetooth zu deaktivieren:

dtoverlay=pi3-disable-bt

dtoverlay=pi3-disable-wifi

Service für Bluetooth deaktivieren:

sudo systemctl disable hciuart

Erstellen einer Blacklist für die Kernel Module:

/etc/modprobe.d/raspi-blacklist.conf

#wifi

blacklist brcmfmac

blacklist brcmutil

 

#bt

blacklist btbcm

blacklist hci_uart

REF: https://raspberrypi.stackexchange.com/questions/53149/disable-power-on-wifi-and-bluetooth-interfaces-during-boot

REF: https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=138610

Code & Software optimieren

Jeder ausgeführte Daemon kostet Energie, die CPU muss aus dem Schlafmodus / Leerlaufmodus aufgeweckt werden um ihn auszuführen. Je weniger Daemons wiederum, desto weniger Softwarepflege muss betrieben werden.

Idealerweise sollten Skriptsprachen (Python, Ruby, etc.) vermieden werden, und kompilierte Anwendungen ausgeführt werden, da die Skriptsprachen zusätzlichen Overhead haben.

unbenötigtes USB Zubehör entfernen

Tastaturen, Mäuse, WiFi Dongles - alles benötigt Strom, auch wenn es nicht aktiv genutzt wird. Je weniger Geräte am Raspberry Pi dranhängen, desto besser.

Falls Logging auf einen USB Stick erfolgen muss, lohnt es sich verschiedene Modelle auszuprobieren und deren konkrete Leistungsaufnahme beim Schreiben, im Leerlauf und beim Lesen zu vergleichen.

unbenötigte CPU Kerne abschalten

Unbenötigte CPU Kerne können ab Pi 2B abgeschaltet werden (die früheren Modelle und die Zeros haben nur einen CPU Kern).

Dazu wird in /boot/cmdline.txt hinzugefügt:

maxcpus=N

dabei ist N eine Zahl von 1 bis 4.

Die Änderung hat gemäß jdb aus dem Raspberry Pi Forum keinen oder wenig Einfluss auf leerlauf-Leistungsaufnahme, limitiert jedoch die maximale Stromaufnahme unter Last (da weniger Kerne genutzt werden).

Hinweis: Diese Änderung scheint aktuell noch zu sporadischen Bootproblemen zu führen, siehe popcornmix' Kommentare im Github issue 1989:

REF: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=99372

REF: https://github.com/raspberrypi/linux/issues/1989

CPU untertakten

Das untertakten von modernen ARM CPU Kernen soll wenig bis gar keine Effekte haben:

REF: https://raspberrypi.stackexchange.com/questions/39098/underclocking-pizero-for-power-saving-worth-it

Der Grund ist dass die CPUs bei geringer Auslastung automatisch in einen Energiesparmodus gehen, und der Takt dynamisch angepasst wird.

Es kann durch editieren der /boot/config.txt durchgeführt werden. Beispielsweise mit folgenden Einstellugnen:

force_turbo=0

arm_freq_min=250

core_freq_min=100

sdram_freq_min=150

over_voltage_min=0

Hinweis: für unterschiedliche Pi Modelle sind u.U. unterschiedliche Einstellungen notwendig; evtl. kann noch weiter reduziert werden.

Das Programm cpufreq bzw. das Paket cpufrequtils kann dazu benutzt werden, um die CPU Frequenz bzw. den "Governor" während der Pi ausgeführt wird einzustellen. Der governor reguliert in dem von der config.txt vorgegebenen CPU Frequenzbereich, welche Frequenz genutzt wird.

Von Interesse sind hier vor allem der powersave und der performance governor:

sudo cpufreq-set -g powersave

führt den Pi dann mit der niedrigsten CPU Frequenz die von config.txt vorgegeben wurde aus, und

sudo cpufreq-set -g performance

führt den Pi mit der höchsten Frequenz aus.

cpufreq-info kann dazu benutzt werden um die aktuelle Frequenz auszulesen.

REF: https://www.mikeslab.net/raspberry%20pi/raspbian/2015/08/06/raspberry-pi-saving-power.html

REF: https://raspberrypi.stackexchange.com/questions/28754/underclock-raspberry-pi-without-rebooting

NO_HZ: clock-ticks reduzieren / Weitere Kerneloptionen

Es geht hierbei darum, dass die CPU im idle Zustand keine scheduling-clock interrupts bekommt, da dieses zusätzliche Energie verbrauchen würde.

CONFIG_NO_HZ_IDLE=y ist die empfohlene Einstellung um Energie zu sparen. Diese wurde von der Raspberry Pi Foundation bereits bei der Kernelcompilierung angewendet.

Ref: https://www.kernel.org/doc/Documentation/timers/NO_HZ.txt

Ref: https://gist.github.com/pierre-haessig/3a925dfc6d0f7c540355

Weitere Linuxoptimierungen

http://www.thinkwiki.org/wiki/How_to_reduce_power_consumption gibt generische Tipps um Linux' Stromverbrauch zu optimieren. Das Tool powertop ist nur für x86.

Es gibt hier allerdings neben CONFIG_NO_HZ noch eine Liste von weiteren Linux Kernel Parametern, die auf den Stromverbrauch eine Auswirkung haben.

EnergiePi zero wRaspberry piSparenStromStromkosten senken

16 comments

Dietermn

Dietermn

das stimmt

Dietermn

Dietermn

bin nicht vollig einverstanden

Dietermn

Dietermn

ich bestätige

Keith2Stype

Keith2Stype

Great post

LouisD

LouisD

Nein! .. Doch! .. Oooh !

Wernermn

Wernermn

ich bestätige Ihre Meinung

Bertmn

Bertmn

wunderbar

Manfredmn

Manfredmn

selbstverständlich, bin einverstanden

Detlefmn

Detlefmn

ich stimme zu

Kennymn

Kennymn

Sie haben recht, aber passiert nicht oft
Stephie

Stephie

Hallo Ulrichmn,

warum bist du nicht damit einverstanden? Kannst du das näher erklären?

Liebe Grüße.

Ulrichmn

Ulrichmn

ich bin nicht einverstanden mit ihre Meinung
Giuseppemn

Giuseppemn

stimmt

Diegomn

Diegomn

stimmt 100%
Arminmn

Arminmn

ja, es ist so

Andreasmn

Andreasmn

So wie ich erinnere, es ist nicht so

Leave a comment

All comments are moderated before being published