LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Blog-Übersicht /Raspberry Pi/Tutorials / Raspberry-Pi-Taktfrequenz: CPU-Governor gegenüber Drosselung und was vcgencmd...
Diesen Artikel in anderen Sprachen lesen:

Raspberry-Pi-Taktfrequenz: CPU-Governor gegenüber Drosselung und was vcgencmd get_throttled meldet

Raspberry-Pi-Taktfrequenz: CPU-Governor gegenüber Drosselung und was vcgencmd get_throttled meldet
Inhalt
  1. Zwei Gründe, ein Anblick
  2. Der Regler und seine zehn Stufen
  3. Was get_throttled meldet
  4. Die Zahl hat zwei Hälften
  5. Was eine echte Platine gemeldet hat
  6. Was zu prüfen ist, wenn der Verdacht bleibt
  7. Fragen und Antworten
  8. Quellen

Ein Raspberry Pi, der 700 MHz meldet, wo auf dem Papier 1500 stehen, sieht aus wie ein Rechner, der aufgegeben hat. Der Wert stimmt, und meistens ist trotzdem nichts kaputt.

Zwei völlig verschiedene Vorgänge senken diese Zahl, und sie haben nichts miteinander zu tun. Der eine ist das Betriebssystem, das Strom spart. Der andere ist die Firmware, die die Platine schützt. Ein einziger Befehl sagt, welcher der beiden gerade am Werk ist.

Die acht aussagekräftigen Bits des Drosselregisters, alle auf null, darüber zwanzig Taktproben, von denen eine weit unter den übrigen liegt
Vier Bits beschreiben den Augenblick, vier weitere die ganze Zeit seit dem letzten Start.

Zwei Gründe, ein Anblick

Der erste Grund ist gewöhnlich und beabsichtigt. Linux betreibt ein kleines Stück Programm, dessen ganze Aufgabe darin besteht, den Prozessor nicht schneller laufen zu lassen, als die Arbeit es verlangt. Zwischen zwei Aufgaben senkt es den Takt und hebt ihn in dem Augenblick wieder an, in dem etwas eintrifft.

Der zweite Grund ist eine Schutzmaßnahme. Wenn die Versorgungsspannung einbricht oder der Chip zu heiß wird, senkt die Firmware den Takt selbst, unabhängig vom Betriebssystem, um Fehlverhalten der Platine zu verhindern. Das ist Drosselung, und sie ist ein Anzeichen für ein anderes Problem.

Beides erzeugt dieselbe Anzeige beim selben Befehl. Der Takt allein kann die zwei nicht trennen, und genau deshalb werden so viele völlig gesunde Platinen für defekt erklärt.

Der Regler und seine zehn Stufen

Das Programmstück, das die alltägliche Senkung besorgt, heißt Regler, und auf einem unveränderten Raspberry Pi OS ist es ondemand.

Die hier gemessene Platine bietet zehn Stufen an: 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400 und 1500 MHz. Der Regler wählt fortlaufend zwischen ihnen, im Millisekundenbereich, danach wie beschäftigt die Kerne zuletzt waren.

Ein niedriger Wert ist deshalb die Momentaufnahme eines Augenblicks und kein Zustand. Zwanzig Proben über sechs Sekunden trafen neunzehnmal 1500 MHz und einmal 600 MHz – und genau diese eine Probe hätte für sich genommen beunruhigend ausgesehen.

Was get_throttled meldet

Der Befehl, der die Frage klärt, lautet vcgencmd get_throttled. Er antwortet mit einer einzigen hexadezimalen Zahl, und diese Zahl ist eine Reihe von Schaltern und keine Messung.

Jeder Schalter steht für eine Bedingung: Versorgungsspannung zu niedrig, Takt gedeckelt, gedrosselt, weiche Temperaturgrenze erreicht. Ein Schalter, der an ist, heißt: Die Bedingung trifft zu. Steht die ganze Zahl auf null, trifft keine davon zu.

Entscheidend ist, dass dieses Register vom Regler nichts weiß. Stromsparen setzt kein einziges Bit. Ein Takt von 600 MHz neben throttled=0x0 ist deshalb kein Widerspruch, sondern die Antwort.

Zwei genau gleich hohe Zylinder nebeneinander; über dem linken nur leerer Raum, auf dem rechten ein korallenroter Ring, der oben aufliegt

Die Zahl hat zwei Hälften

An dieser Stelle wird der Wert am häufigsten falsch gelesen. Die vier unteren Bits beschreiben den gegenwärtigen Augenblick. Vier weitere, sechzehn Stellen höher, halten fest, ob dieselbe Bedingung seit dem letzten Start irgendwann einmal zugetroffen hat.

Ein kurzer Spannungseinbruch um drei Uhr nachts ist bis zum Frühstück in den Live-Bits nicht mehr zu sehen, bleibt aber in den gespeicherten Bits vermerkt. Wer das Register ein einziges Mal in einem ruhigen Augenblick abliest und in der unteren Hälfte Nullen findet, hat nur belegt, dass in diesem Moment keine der erfassten Bedingungen vorliegt.

Die haftende Hälfte wird außerdem bei jedem Start geleert. Nullen auf einem Rechner, der seit einer Minute läuft, bedeuten überhaupt nichts; dieselben Nullen nach drei Wochen Laufzeit bedeuten sehr viel.

Was eine echte Platine gemeldet hat

Die hier gemessene Platine ist ein Raspberry Pi 4 Model B, neunzehn Stunden nach dem Start, und sie hat diese Seite ausgeliefert, während die Messung lief.

Das Register meldete in jeder einzelnen Probe 0x0, in beiden Hälften, auch in jener Probe, die den Takt bei 600 MHz erwischt hat. Die Temperatur blieb durchgehend zwischen 57,4 und 59,9 °C. Das Kernelprotokoll enthielt keinen einzigen Eintrag zu Spannung oder Drosselung.

Die Einstellung ist unverändert: arm_freq=1500, keine von Hand gesetzte Temperaturgrenze, der Regler unangetastet. Hier wurde nichts zurechtgelegt, um ein sauberes Ergebnis zu erzeugen.

Was zu prüfen ist, wenn der Verdacht bleibt

Wo die haftenden Bits gesetzt sind, liegt die Ursache häufiger beim Netzteil als bei der Hitze, und der Kernel macht die Gegenprobe leicht. Er stellt neben dem Temperaturfühler einen Fühler namens rpi_volt bereit und schreibt eine Zeile ins Kernelprotokoll, sobald die Versorgung einbricht. Ein leeres Protokoll ist für sich genommen ein Befund.

Wo die Hitze verdächtigt wird, gehört die Temperatur in eine Reihe statt in einen Einzelwert, und sie muss gemessen werden, während die Platine beschäftigt ist. Ein Wert nach einer Minute Ruhe sagt fast nichts.

Und wo allein der Takt die ganze Beschwerde ist, führt das Register am schnellsten zur Antwort: ein Befehl, eine Zahl, und darin der Unterschied zwischen einem ruhenden Prozessor und einer Platine in Schwierigkeiten.

Fragen und Antworten

Wie lässt sich ein Wert wie 0x50000 von Hand entschlüsseln?

Die Zahl wird in Bits zerlegt, und jedes gesetzte Bit steht für eine Bedingung. Die Dokumentation von Raspberry Pi ordnet sie so zu:

  • Bit 0 (0x1): Unterspannung, jetzt
  • Bit 1 (0x2): Takt gedeckelt, jetzt
  • Bit 2 (0x4): gedrosselt, jetzt
  • Bit 3 (0x8): weiche Temperaturgrenze aktiv, jetzt
  • Bits 16 bis 19 (0x10000, 0x20000, 0x40000, 0x80000): dieselben vier Bedingungen, irgendwann seit dem Start

0x50000 ist die Summe aus 0x10000 und 0x40000: Seit dem Start gab es mindestens einmal Unterspannung und mindestens einmal Drosselung, im Augenblick liegt keines von beiden an. Ein solches Muster passt zu einem Netzteil, das unter Last einbricht und sich in ruhigen Phasen erholt. Steht dagegen 0x50005 da, ist beides auch in diesem Moment der Fall.

Warum meldet ein Pi an einem Handy-Netzteil Unterspannung, obwohl darauf 5 V steht?

Weil zählt, was an der Platine ankommt, nicht, was auf dem Netzteil steht. Jedes Kabel hat einen Widerstand, und unter Last fällt daran Spannung ab; dünne, lange Kabel verlieren dabei mehr als kurze, dicke. Ein Netzteil, das genau 5,0 V liefert, hat für diesen Verlust keinen Spielraum, und deshalb liefert das offizielle Netzteil für den Raspberry Pi 4 5,1 V bei bis zu 3 A.

Manche Handy-Netzteile sind zudem auf geringere Ströme ausgelegt oder lassen die Spannung unter Last absinken. Der Einbruch fällt dann genau in die Augenblicke, in denen alle Kerne arbeiten, und darum können die haftenden Bits gesetzt sein, obwohl jede Messung im Leerlauf sauber aussieht.

Hilft es, den Regler auf performance zu stellen?

Gegen die Anzeige ja, gegen Drosselung nicht. Mit performance bleibt der Takt auch im Leerlauf oben, die Firmware drosselt bei Unterspannung oder Hitze aber weiterhin über den Kopf des Betriebssystems hinweg. Der dauerhaft hohe Takt erzeugt zudem mehr Wärme und bringt die Platine näher an die weiche Temperaturgrenze.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Eine Frage oder eine Idee für ein Webprojekt? Schreib mir kurz, worum es geht. Das Formular nutzt reCAPTCHA zum Schutz vor Spam.

Kommentar schreiben

Erfahrungen mit anderen Modellen und Rückfragen zum Aufbau sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.