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.
16 comments
Dietermn
das stimmt
Dietermn
bin nicht vollig einverstanden
Dietermn
ich bestätige
Keith2Stype
Great post
LouisD
Nein! .. Doch! .. Oooh !
Wernermn
ich bestätige Ihre Meinung
Bertmn
wunderbar
Manfredmn
selbstverständlich, bin einverstanden
Detlefmn
ich stimme zu
Kennymn
Stephie
Hallo Ulrichmn,
warum bist du nicht damit einverstanden? Kannst du das näher erklären?
Liebe Grüße.
Ulrichmn
Giuseppemn
stimmt
Diegomn
Arminmn
ja, es ist so
Andreasmn