19.11.2022

Raspberry Pi 4 Model B Rev 1.5 mit Armbian (Ubuntu) 22.04 effektiv und sicher tunen (knapp 2.3 GHz)

Um die Stromrechnung zu „minifizieren“ verwende ich zumindest zum „Programmieren, Surfen und Mailen“ einen  Raspberry Pi 4 Model B Rev 1.5 mit Armbian (Ubuntu) 22.04 . Im Netz gefundene Anleitungen zum Tunen haben entweder nicht funktioniert oder Bedenken vor einer Überhitzung geweckt.

Mit ein wenig Frickeln hab ich es aber hinbekommen:

Unumgängliche Vorarbeit: Für Kühlung sorgen!

Wer auch immer meint, das probieren zu wollen, sollte sich Gedanken um die Kühlung machen. Auch an einer 5-Watt Birne vom Fahrradlicht kann man sich die Finger verbrennen. Bei mir tut es ein Metallgehäuse, welches sich unter dem Stichwort „Raspberry Pi 4 Gehäuse, Pi 4 Heavy Duty Aluminium Passive Kühlung Gehäuse nur für Raspberry Pi 4B Silber“ um die 13 € findet. Das sieht zwar toll aus, allerdings strahlen schwarze Geräte die Wärme angeblich besser ab. Eine Lösung mit einem rotierendem Lüfter wollte ich „par tout“ nicht. Bisher - mit dem hier vorgestelltem Tuning - hat die Temperatur die Marke von 70′C noch nicht „gerissen“. Wie das wird, wenn im Sommer die Temperaturen in der Wohnung steigen, wird sich zeigen. 

Die Einstellungen:

Um den Raspberry Pi 4 Model B Rev 1.5 mit Armbian (Ubuntu) 22.04 effektiv und sicher zu auf die oben angezeigten Werte tunen wird auf vielen Webseiten vorgeschlagen, eine Datei '/boot/config.txt' zu bearbeiten. Das führt jedoch auf meinem Rechner zu keinem Ergebnis.

Die richtige Datei ist ganz einfach '/boot/firmware/config.txt' .

Dort sind folgende Einstellungen hinzufügen bzw. zu aktivieren:

[pi4]
max_framebuffers=2
over_voltage=8
arm_freq=2275
gpu_freq=750

Danach muss der Raspi einmal neu gebootet werden. Nicht wundern, das dauert etwas länger. Allerdings zeigt mein kleines Pythonskript nicht an, das der Raspi tatsächlich mit der höheren Taktfrequenz läuft.

Der Grund ist einfach:

Im Verzeichnis '/sys/devices/system/cpu/cpu0/cpufreq' finden sich (unter anderem) folgende Dateien

  • cpuinfo_max_freq → Diese Datei zeigt an, welche Taktfrequenz maximal genutzt werden kann und wurde beim Booten vom Kernel mit dem neuen Wert (übrigens '2300000') gefüllt.
  • cpuinfo_minfreq → Diese  Datei zeigt an, welche Taktfrequenz minimal genutzt werden kann und wurde beim Booten vom Kernel dem Default-Wert (übrigens '600000') gefüllt.
  • scaling_max_freq → Diese  Datei zeigt an, welche Taktfrequenz vom Skalierer maximal genutzt werden kann und wurde beim Booten vom Kernel nicht(!) mit dem neuen Wert (soll '2300000' sein) gefüllt.
  • scaling_min_freq → Diese  Datei zeigt an, welche Taktfrequenz minimal genutzt werden kann und wurde beim Booten vom Kernel nicht mit dem von mir gewünschtem Wert (übrigens '1500000') gefüllt. Klar, Den hab ich ja bisher auch nirgendwo angegeben

Tunen und vor Überhitzung schützen

Um die neuen Frequenzen einzustellen und gleichzeitig einer Überhitzung (mit einer gewissen Reserve bei einer Prozessortemperatur über 70′C) vorzubeugen habe ich folgendes Bash-Skript geschrieben:

#!/bin/bash
# File:/opt/setCpuSpeed
maxTemp=70000; #′C *1000
tmp=$(cat /sys/devices/virtual/thermal/thermal_zone0/temp);
maxFreqAkt=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq);
if [ -n "$tmp" -a $tmp -lt $maxTemp -a ! -e /dontSetCpuSpeed ]; then
    if [ -n "$maxFreqAkt" -a $maxFreqAkt -ne 2300000 ]; then
        cpufreq-set -r --cpu 0 --min 1500000  --max 2300000;
        echo "Frequenz der CPU erhöht" | logger -t 'TUNING';
    fi
else
    cpufreq-set -r --cpu 0 --min 600000& --max 1500000
    echo "Temperatur über 70′C: Frequenz der CPU verringert" | logger -t 'TUNING';
fi

Das muss jetzt nur noch regelmäßig gestartet werden, Minütlich sollte reichen.

Also habe ich mit dem Befehl

sudo crontab -e -u root

und folgendem Eintrag:

* * * * * /opt/setCpuSpeed

genau dafür gesorgt. Wer das Skript angeschaut hat wird schnell merken, dass das Erzeugen einer Datei namens /dontSetCpuSpeed, also auf dem Dateiystemroot, z.B. mit

sudo touch /dontSetCpuSpeed

das Hochsetzen abschaltet und sogar das Tuning zurück setzt. Löscht man diese Datei oder benennt sie um wird das Tuning wenig später (binnen 1 Minute) wieder automatisch wirksam. Noch schneller geht beides, wenn man nach dem Erzeugen oder Löschen der Datei

/opt/setCpuSpeed

einmal manuell ausführt.

Kontrolle

Die mache ich mit dem bereits angesprochenen Python-Skript, welches ich in einem Terminal mit

watch -n1 -t cpufreq.py

starte.

watch -n1 -t cpufreq-info -fm
und
watch -n1 -t cat /sys/devices/virtual/thermal/thermal_zone0/temp
gänge auch, ist aber weder so bequem noch, „äh“, hübsch wie mein Skript.

Test

Ich habe eine 1-Terrabyte große Datei gezippt (was mehrere Stundn dauerte) und bei 2,3 GHz wiederholt (nach jeweils mehreren Minuten) die gesetzte Temperaturgrenze „gerissen“. Das Skript hat über Stunden zuverlässig und rechtzeitig die Taktfrequenz herunter (und wieder herauf) geregelt und so dafür gesorgt, dass der Prozessor nicht überhitzte.