Mehr CPU am Raspberry Pi Zero nutzen

Kein Übertackten!

Diese Seite beschreibt nicht, wie man die CPU des Raspberry Pi Zero übertakten kann. Da müsst Ihr auf andere Seiten lesen, um Euer Gerät eventuell zu zerstören.

Auf dem Image der Debian-Gemeinschaft für die Modelle Zero ist oft nur ein "Standard-Kernel" vorhanden, welcher die CPU nicht voll austaktet. Für die meisten Aufgaben ist das vollkommend ausreichend.

Wer aber die CPU ab und zu kurzzeitig richtig rennen lassen möchte, wäre über ein paar MHz Taktfrequenz mehr schon erfreut. Ob da noch was geht und welche Schritte Ihr dann unternehmen müsst, möchte ich auf dieser Seite beschreiben.

Mehr CPU-Leistung, um Energie zu sparen?

Das Problem mit der CPU-Frequenz und dem Energie sparen, dieses Thema wurde schon oft diskutiert. Und dabei sprechen die Fakten für sich selbst.

Ein Grundsystem im Leerlauf mit CPU, RAM, Speichermedium und WLAN benötigt nun mal Energie. Hat das System dann mal richtig was zu tun, benötigt es etwa die doppelte Energie für diese "kurze" Zeit (Wirkungsgrad 50%).

Es bringt nichts an Energieeinsparung, wenn man aufwendige Aufgaben mit niedriger CPU-Frequenz erledigen lässt (Wirkungsgrad < 30%).

Im Leerlauf machen sich höhere Taktraten der CPU nur bei starken Systemen im Energieverbrauch gering merkbar. Aber nicht bei einem Raspberry Pi.

Feststellen, ob das System CPU-Frequenzen händelt

Die CPU des Raspberry PI Zero W agiert mit folgende Frequenzen: 700MkHz, 800MHz, 900MHz, 1000MHz.

Normalerweise besitzt der Debian-Kernel eine Funktion, die bei Belastung die CPU-Frequenz blitzschnell erhöht. Ist die Belastung vorbei, wird die CPU-Frequenz verringert.

Ob diese Funktion aktiv ist, erfährt man mit:

ls /sys/devices/system/cpu/cpufreq/

Sind dort weitere Verzeichnisse angelegt, hat sich dieses Thema erledigt, die CPU wird mit verfügbaren Taktfrequenzen genutzt.

Ist dieses Verzeichnis leer, dann sieht es wohl so aus: Die CPU läuft dauerhaft mit einer Frequenz, die unterhalb der maximalen Frequenz liegt. Größere Aufgaben werden langsamer ausgeführt, um die CPU vor Überhitzung zu schützen.

Wem das alles so OK erscheint, kann das auch so lassen. Wer da dann ein paar MHz mehr möchte, kann hier weiterlesen.

Neues Linux-Image von den Backports

Wer ab und zu mal ein wenig Power für kurze Zeit (ein paar Minuten) auf der CPU haben will, um größere Aufgaben effizienter zu erledigen, sollte doch diese Kernel-Funktion nutzen.

Natürlich kennt die Debian-Gemeinschaft dieses Problem. Für solche Fälle gibt es den Kanal backports. In der Regel wird dort ein Linux-Imgage für Raspberry Pi bereitgestellt, was diese Kernel-Funktion beinhaltet.

Um backports nutzen zu können, müssen wir die Datei /etc/apt/sources.list ändern. Beispiel:

deb http://ftp.tu-chemnitz.de/debian bullseye main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free
# Backports are _not_ enabled by default.
# Enable them by uncommenting the following line:
deb http://deb.debian.org/debian buster-backports main contrib non-free

Danach müssen die Packetquellen neu eingelesen werden.

sudo apt update

Um ein Packet mit entsprechendem Kernel-Image zu suchen, nutzt man:

apt search Raspberry

Dort wählt man in Ruhe ein Packet passend zum Modell aus und installiert es mit:

sudo apt install linux-image-...-rpi

Da der Kernel neu gebaut wird, ist ein Neustart danach erforderlich:

sudo shutdown -r now

Nach erneutem Anmelden kann man mit

ls /sys/devices/system/cpu/cpufreq/

nachsehen, ob dort weitere Verzeichnisse angelegt wurden.

Da ein Raspberry Pi nur stufenweise die CPU-Frequenzen takten kann, kann man sich verfügbare Frequenzen ausgeben lassen:

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies

Die Frequenzen werden in kHz (Kilohertz) ausgegeben.

Ich sehe es doch in Euren Augen, ihr wollt mehr.

Minimale Taktfrequenz:

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq

Maximale Taktfrequenz:

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq

Aktuelle Taktfrequenz, wobei hier berücksichtigt werden muss, dass der Aufruf des Programms cat die Taktfrequenz erhöhen kann:

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq

Kurzes Zwischenfazit: Bei voll ausgelastetem Aufgaben steigt der Stromverbrauch um etwa 20mA (0.1W) gegenüber vorher. Die CPU-Temperatur steigt unter Belastung etwas höher. Programme werden schneller kompiliert. Dauerbetrieb unter Vollast sollte aber vermieden werden. Der Stromverbrauch im Leerlauf scheint sich um einen unerheblichen Teil gegenüber vorher zu vermindern.

Die grüne LED blinkt jetzt!

Damit man die CPU-Leistung auch mal irgendwie von außen sehen kann ohne online drauf zu sein, wurde die grüne LED auf der Platine in den Heartbeat-Modus geschaltet.

Das Blinken gleicht einem Herzschlag des Menschen. Ist ein Puls von 60 da, befindet sich das System nahezu im Leerlauf. Ist der Puls bei 120, hat die CPU richtig was zu tun.

Im Stromverbrauch kann ich das nicht messen, da die LED nur für sehr kurze Zeit eingeschaltet ist. Der Verbrauch ist einfach zu gering.

Wem es stört, der kann das ausschalten:

echo "none" | sudo tee /sys/class/leds/ACT/triggers