Inhaltsverzeichnis:

CPU-Lastanzeige für Raspberry Pi - Gunook
CPU-Lastanzeige für Raspberry Pi - Gunook

Video: CPU-Lastanzeige für Raspberry Pi - Gunook

Video: CPU-Lastanzeige für Raspberry Pi - Gunook
Video: A very silly CPU monitor 2024, November
Anonim
Raspberry Pi CPU-Lastanzeige
Raspberry Pi CPU-Lastanzeige

Wenn Raspberry Pi (RPI) als Headless ohne Konsolenmonitor ausgeführt wird, sind keine spezifischen visuellen Hinweise verfügbar, um zu erkennen, dass RPI tatsächlich etwas tut.

Obwohl ein Remote-Terminal mit SSH verwendet wird, ist die Ausführung des Linux-Befehls von Zeit zu Zeit erforderlich, um zu überprüfen, wie viel Systemlast jetzt die CPU belastet.

Diese Schaltung dient also dazu, die reale Aktivität der CPU (möglicherweise halbreal oder nahezu real) sofort zu erkennen, um aktuell angelegte Systemlasten auszuführen.

Obwohl nur die Python-Programmierung und eine viel einfachere Schaltung die gleiche Funktionalität unterstützen können, sind ein wenig komplexe Python-Codes erforderlich, um die ausgeklügelte LED-Steuerungslogik zu simulieren, die von dieser Schaltung erforderlich ist.

Auch die paradoxerweise erhöhte Komplexität des Python-Codes wird die CPU mit erhöhter Systemlast mehr belasten.

Daher ist es sinnvoll, jede Anzeigefunktionalität so weit wie möglich auf eine externe Hardwareschaltung auszulagern, da dieser Dienst die ganze Zeit und häufig, beispielsweise alle 5 Sekunden, ausgeführt werden sollte.

Und diese Schaltung wird dem kopflosen RPI ein kleines lustiges Feature hinzufügen.

Schritt 1: Linux-Befehl zur CPU-Lastprüfung

Linux-Befehl zur CPU-Lastprüfung
Linux-Befehl zur CPU-Lastprüfung

Es stehen verschiedene Linux-Befehle zur CPU-Lastprüfung zur Verfügung, wie z. B. top, iostat, sysstat und uptime.

Jeder Befehl hat spezifische vorteilhafte Eigenschaften hinsichtlich der Informationsvielfalt und der Einfachheit der Anzeige von Daten.

Top-Befehl ist die informationsreichste und sehr detaillierte Daten sind verfügbar, um die Systemlast sofort zu erkennen.

Aber es funktioniert als Iterationsmodus (Daten kontinuierlich auf dem Bildschirm anzeigen) und Informationsformat ist ziemlich komplex, um einfach nur die erforderlichen CPU-Lastdaten zu extrahieren.

Der Befehl iostat liefert detaillierte Systemauslastungsinformationen, indem er Benutzer- und Systemausführungswarteschlangenjobs trennt, die derzeit die CPU belasten.

Es ist aber auch unnötig aufwendig, die aktuelle CPU-Last so zeitnah und intuitiv abzurufen.

Im Falle der Betriebszeit stehen sehr einfache Systemlastdaten in Form von 1-Minuten-Durchschnitt, 5-Minuten-Durchschnitt und 15-Minuten-Durchschnitt zur Verfügung.

Wie oben erwähnt, ist eine Vereinfachung des Python-Codes erforderlich, da er ziemlich oft ausgeführt werden sollte, z. B. alle 5 Sekunden oder 10 Sekunden.

Wenn Python-Code komplex wird, wird die CPU stark belastet.

Es ist irgendwie paradox, dass Sie RPI belasten, um die Systemlast zu überwachen.

Daher wähle ich den Uptime-Befehl, um die CPU-Last zu sammeln und mit der Anzeigeschaltung zu interagieren, da dies am einfachsten ist.

Da die Betriebszeit jedoch eine durchschnittliche Systemlast von 1 Minute anzeigt, sollte die Anzeigeschaltung nicht im strengen Echtzeitmodus betrieben werden.

Dennoch kann diese Schaltung hilfreiche visuelle Hinweise liefern, die zeigen, wie RPI jetzt abschneidet.

Schritt 2: Schaltpläne

Schema
Schema

Diese Schaltung empfängt 4 verschiedene Pegel (z. B. 00->LOW, 01->LIGHT, 10->MEDIUM, 11->HIGH) der aktuellen CPU-Last von RPI über zwei Optokoppler-Eingänge.

74LS139 (2 bis 4-Decoder und Demultiplexer) dekodiert zwei Bit-Eingänge in einen einzelnen Ausgang unter 4 möglichen Wegen wie 00(LOW)->B0, 01(LIGHT)->B1, 10(MEDIUM)->B2, 11(HOCH)->B3.

Da der 74LS139-Ausgang den umgekehrten Pegel hat (00 Eingang -> B0 wird LOW und die anderen 3 Ausgänge HIGH), wird der 74HC04-Inverter verwendet, um den Ausgang noch einmal umzukehren.

Wenn der Ausgang von 74LS139 normal HIGH ist, ist 74HC04 nicht erforderlich.

Aber irgendwie ist 74LS139 so gemacht. (Bitte überprüfen Sie die Wahrheitstabelle von 74LS139)

Wenn einer der 74LS139-Ausgänge ausgewählt wird, aktiviert er einen bestimmten Analogschalter unter den 4 Schaltern, die im CD4066 IC enthalten sind.

CD4066 kann 4 analoge Schalter unterstützen und jeder Schalter besteht aus 1 Steuereingang und 2 analogen Ausgängen.

Wenn der Steuereingang HIGH wird, werden zwei Ausgänge niederohmig (Widerstand wird 0) und andere werden HIGH (Widerstand zwischen zwei Ausgangspfaden wird mehrere hundert Megaohm).

Einfach Control 1 (Pin 13) von CD4066 HIGH werden, Pfad zwischen Ausgang 1 (Pin 1) und Ausgang 2 (Pin 2) verbunden, während andere Ausgänge nicht verbunden sind (im hochohmigen Zustand).

Ebenso wird der HIGH-Eingang von Control 2 (Pin 5) Ausgang 1 (Pin 4) und Ausgang 2 (Pin 3) verbunden, während andere Ausgänge getrennt werden.

Dann blinkt LM555 zwei LEDs in unterschiedlicher Blinkrate.

Wie Sie im obigen Schema sehen können, arbeitet NE555 mit einem Widerstandswert unter 4 (12k, 24k, 51k, 100k) möglichen Widerstandsstufen.

Schritt 3: NE555 Unterschiedliche Taktgeneration

NE555 Unterschiedliche Taktgeneration
NE555 Unterschiedliche Taktgeneration

Wie im Schaltplan gezeigt, arbeitet NE555 mit einem möglichen Widerstandswert wie 12k, 24l, 51k und 100k.

Tatsächlich ist der NE555-Zeitgeberschaltungsteil ein wichtiger visueller Hinweis, der einen Teil der Schaltung unterstützt.

Das Schaltungsbetriebsschema ist wie folgt.

- Wenn keine signifikante CPU-Last vorhanden ist, sendet das in RPI installierte Python-Programm 00 Ausgänge an die Anzeigeschaltung. Dann werden zwei Ausgangspfade von CD4066 aktiviert und NE555 arbeitet mit einem Widerstandswert von 12k. Daher blinken LEDs 1,5 Mal pro Sekunde (blinken ziemlich schnell)

- CPU ist leicht belastet (Dann wird die Warteschlangenlänge der Betriebszeit 0,1 ~ 0,9), Python sendet 01 an die Schaltung. Dann wird CD4066 aktiviert, wobei die Ausgänge mit einem 24k-Widerstand verbunden sind. Infolgedessen nahm das LED-Blinken 1,2-mal pro Sekunde ab (das LED-Blinken nahm leicht ab, aber immer noch ein bisschen schnell)

- Wenn die CPU-Last erheblich zugenommen hat (dann wird die Laufzeit der Run-Queue-Länge 1,0 ~ 1,9), Python gibt 10 an die Schaltung aus. Dann wird der 51k-Widerstandsverbindungspfad geöffnet und NE555 arbeitet 0,8 Mal pro Sekunde. Jetzt wird die Blinkfrequenz deutlich reduziert.

- Starke Lasten, die die CPU belasten, und die Run-Queue-Länge der Betriebszeit werden länger (mehr als 2 Jobs warten auf die Ausführung durch die CPU und die Betriebszeit meldet mehr als 2.0). Wenn eine 100k-Widerstandsverbindung ausgewählt ist, blinkt NE555 die LED 0,5 Mal pro Sekunde (Blinkgeschwindigkeit wird sehr langsam)

***

Zusammen mit der erhöhten Systemlast wird die LED-Blinkgeschwindigkeit entsprechend reduziert.

Wenn LED recht langsam blinkt, dann ist RPI sicherlich deutlich überlastet.

Auf diese Weise meldet die Lastanzeigeschaltung den aktuellen Lastpegel von RPI.

Schritt 4: Teile

Zur Herstellung dieser Schaltung werden verschiedene IC-Chips verwendet.

Obwohl ich 74LSxx, CD40xx-Typ alter IC-Chips erwähne, können Sie neuere Typen von TTL- und CMOS-Chips wie 74HC4066 und 74ASxx verwenden, wenn der ausgewählte IC-Chip vom DIP-Typ ist.

Die Oberflächenmontage eines winzigen IC-Gehäuses kann auch verwendet werden, wenn Sie die kleinen richtig auf der Universalplatine löten können.

Andere sind übliche Teile, die Sie leicht in Internet-E-Shops kaufen können.

- 74LS139 (2 bis 4 Decoder, Demultiplexer) x 1

- 74HC04 (6 Wechselrichter) x 1

- CD4066 (4 analoge Schalter IC) x 1

- NE555 Timer-IC x 1

- Kondensatoren: 10uF x 1, 0,1uF x 1

- PC817 Optokoppler x 2 (Jeder gängige 4-Pin Optokoppler kann verwendet werden)

- Widerstände: 220 Ohm x 4 (LED-Strombegrenzung), 4,7K (Optokoppler-Schnittstelle) x 2, 12K, /24K/51K/100K (Taktsteuerung) x 1

- LED x 2 (beliebige verschiedene Farben wie Gelb, Grün oder Rot, Grün)

- Universalplatine 30 (W) mal 20 (H) Lochgröße (Sie können jede Universalplatine für diese Schaltung zuschneiden)

- Zinndraht (Zum Erstellen von Verdrahtungsmustern auf der Universalplatine)

- Stiftkopf (3 Stifte) x 3

- IC-Stiftkopf (4 Stifte) x 4

- Kabel in rot/blauer Farbe

***

Schritt 5: PCB-Zeichnung erstellen

Erstellen von PCB-Zeichnungen
Erstellen von PCB-Zeichnungen

Obwohl ich in jedem Projekt eine PCB-Zeichnung zeige, ist das Verdrahtungsdesign nur eine Referenz, die Sie beim korrekten Löten jedes Teils auf der Universal-PCB unterstützt.

Aber Sie müssen sich nicht unbedingt an dieses Verdrahtungsschema halten.

Wie Sie dem obigen Schaltplan entnehmen können, ist es ziemlich komplex und erfordert eine erheblich große Leiterplatte.

Sie können ein normales Kabel verwenden, um Teile anstelle von Zinndraht zu verbinden, um die Größe der fertig gelöteten Leiterplatte zu reduzieren.

Verwenden Sie die PCB-Zeichnung nur zum Überprüfen und Bestätigen des korrekten Lötens zwischen den Teilen.

Wenn die Anzahl der TTL- oder CMOS-ICs erhöht wird, wird das PCB-Zeichnen normalerweise ziemlich komplex und geht über die richtige Integration auf einer einzigen Seite der PCB hinaus.

Daher werden mehrschichtige PCBs üblicherweise für digitale Schaltungen in Industriequalität verwendet, die viele TTL-, CMOS- und Mikroprozessoren umfassen.

Schritt 6: Löten

Löten
Löten

Ich verwende Zinndraht und gemeinsames Verdrahtungskabel zusammen, um die Leiterplattengröße so weit wie möglich zu minimieren.

Beim Vergleich mit der PCB-Zeichnung wird die Position jedes Teils vollständig geändert.

Trotzdem wird das PCB-Zeichnen verwendet, um die korrekte Verbindung zwischen den Teilen während des Lötens zu überprüfen.

Sie können sehen, dass 12k/24k/51k/100k-Widerstände ohne Löten auf den IC-Stiftkopf gesteckt sind.

Daher können Sie Widerstände durch andere Werte ersetzen, um das Betriebsschema der Schaltung später bequem zu ändern.

Schritt 7: Zusammenbauen

Montage
Montage

Die abgeschlossene Lastanzeigeschaltung (im Folgenden als INDIKATOR) wird wie in der Abbildung oben gezeigt an der RPI-Box des Musikplayers installiert.

Dieser Musikplayer ist mit DAC installiert und ich verwende diesen kürzlich zum Abspielen von Musikvideos.

Über diese RPI-Box werde ich später erklären und uns jetzt auf INDICATOR konzentrieren, da die Schaltung das Hauptthema dieses Projekts ist.

Ich habe kürzlich Raspberry Pi 4 Model B 2GB (im Folgenden RPI 4B) gekauft, um die Videowiedergabeanwendung zu unterstützen.

Da RPI 4B die Leistung der 4-Kern-CPU erhöht hat, wird die Handhabung der Systemlasten gegenüber RPI 3B+ erheblich verbessert.

Daher sollte die Ausgabe der Laufzeit der Run-Queue-Länge anders behandelt werden als bei RPI 3B+.

- Für die sehr konventionelle Systemlast wie das Abspielen von Videos beträgt die Run-Queue-Länge normalerweise weniger als 0,5 (die LOW-Systemlast beträgt also 0,0 ~ 0,5)

- Wenn eine geringfügige zusätzliche Systemlast hinzugefügt wird, wie z. B. das Abspielen von Videos und das Kopieren von Dateien aus und in ein lokales Verzeichnis, führen die Arbeiten zu einer leichten Belastung der CPU. (Das LICHT-Lastniveau beträgt also 0,5 ~ 1,0)

- Wenn erhebliche Lasten angewendet werden, z. B. beim Abspielen von Videos im Browser auf der Youtube-Site und beim Surfen im Web in einem anderen Browser, wird die Laufgeschwindigkeit von RPI 4 etwas träge (also der MITTEL-Lastwert sollte 1,0 bis 2,0 betragen).

- Schließlich wird die RPI 4-Systemlast HOCH, wenn mehrere Webbrowser ausgeführt werden und große Dateimengen über das Netzwerk auf einen anderen RPI-Server kopiert werden (dann wird die Warteschlangenlänge mehr als 2,0).

***

Diese Lastlevel-Daten werden im nächsten Schritt von einem zu entwickelnden Python-Code verwendet.

Schritt 8: Überarbeitung der ursprünglichen Schaltung

Überarbeitung der ursprünglichen Schaltung
Überarbeitung der ursprünglichen Schaltung

Aufgrund mehrerer Mängel des ursprünglichen Schaltungsdesigns ändere ich die Schaltung wie im Bild oben gezeigt.

Die Gründe für den Wechsel sind folgende.

- Der NE555-Taktimpuls besteht aus einer HIGH- und LOW-Wellenform. Aber normalerweise ist die Signaldauer von HIGH und LOW (t = 1/f) nicht gleich (zum Beispiel ist HIGH 70% und LOW 30% in der ursprünglichen Schaltung). Daher ist die Blinkrate von zwei LEDs (grüne/gelbe LED im Originaldesign) nicht gleich (eine LED leuchtet länger als andere). Aus diesem Grund ist die visuelle Anzeige durch LED-Blinken nicht leicht zu erkennen.`

- Daher füge ich weitere LEDs hinzu und erstelle ein kreisförmiges Iterationsmuster mit CD4017, um eine einfache Erkennung des Betriebszustands zu gewährleisten

- Auch das Wechseln des LED-Blinkschemas in umgekehrter Richtung, z. B. langsames Blinken bei LOW-Last und schnelleres Blinken bei HIGH-Last. (Die ursprüngliche Schaltung blinkt bei LOW-Last schneller und bei HIGH-Last langsam). In der HOHEN Lastsituation werden alle RPI-Aktionen träge. Und langsames LED-Blinken wird Sie nicht glücklich machen. (Im psychologischen Aspekt wähle ich ein positiveres Anzeigeschema)

***

Obwohl der LED-Anzeigeteil erheblich modifiziert wurde, ist der Gesamtänderungspegel mit der Originalschaltung nicht viel, wie Sie im nächsten Schritt sehen können.

Schritt 9: Ursprüngliche Schaltplanänderung

Ursprüngliche Schaltplanänderung
Ursprüngliche Schaltplanänderung

Das Hinzufügen von CD4017 und 8 LEDs ist eine wesentliche Änderung.

Um auch die Taktfrequenz des NE555 zu ändern und das LED-Blinkschema umzukehren, werden die Widerstandswerte wie in den obigen Schemata gezeigt geändert.

Da der hinzugefügte Schaltungsteil eine einfache CD4017-basierte Chaser-Schaltung ist, überspringe ich andere detaillierte Erklärungen der modifizierten Schaltung.

Alle geänderten Schaltungsteile können als Tochterplatine hergestellt werden, auf die CD4017 und 8 LEDs gelötet sind.

Die Tochterplatine kann wie in Schritt 8 gezeigt an der Hauptplatine (Motherboard) befestigt werden.

Schritt 10: Testen

Testvideos aller Betriebsphasen (LOW, LIGHT, MEDIUM und HIGH Lastzustand) werden in der unten im Google-Laufwerk gespeicherten Datei angezeigt.

***

drive.google.com/file/d/1CNScV2nlqtuH_CYSW…

***

Je nach aktueller Systemlast wird die Blinkfrequenz zwischen einem von 4 im Video gezeigten Zuständen geändert.

Schritt 11: Python-Code

Python-Code
Python-Code

Da die meisten Steuerlogiken in die externe Hardwareschaltung integriert sind, ist die Betriebslogik des Python-Codes einschließlich der folgenden Schritte relativ einfach.

- Abrufen von CPU-Temperaturdaten zum Vergleich der Relativität zwischen Systemlast und Temperaturerhöhung

- Erfassen der durchschnittlichen Systemlast von 1 Minute aus der Betriebszeitausgabe

- Erstellen eines Zeitstempels im Format jj-mm-tt hh:mm:ss

- Schreibtemperatur, Systemlast zusammen mit Zeitstempel

- Entsprechend den aktuellen Systemlast-Ausgangsdaten (00, 01, 10, 11) an den INDIKATOR-Kreis

- Schlafen Sie 5 Sekunden, bevor Sie mit den oben genannten Schritten beginnen

Da Python-Programme eine strikte Einrückung im Quellcode benötigen, laden Sie bitte die Quelldatei von Google Drive herunter, indem Sie dem folgenden Link folgen.

***

drive.google.com/file/d/1BdaRVXyFmQrRHkxY8…

***

Da ich RPI nicht als Desktop-Computer verwende, ist das Ausführen von Libre-Office-Anwendungen oder Webbrowsern sehr selten.

Normalerweise spiele ich Musikvideos, das Kopieren/Verschieben von Dateien oder die Python-Programmierung mit neu gekauftem RPI 4B 2GB ab.

Daher beträgt die durchschnittliche Last in meinem Fall normalerweise weniger als 1,0 und dementsprechend ändere ich die LOW/LIGHT/MEDIUM/HIGH-Stufen in meinem Code. (Sie können die Testbedingungen ansonsten ändern)

Wenn Sie jedoch häufig Youtube-Videos mit RPI anzeigen, treten häufig mehr als 2,0 der Systemlasten auf.

Schritt 12: Relativität zwischen Systemlast und CPU-Temperatur

Relativität zwischen Systemlast und CPU-Temperatur
Relativität zwischen Systemlast und CPU-Temperatur

Normalerweise vermute ich und bin sicher, dass eine zunehmende Systemlast die CPU-Temperatur erhöht.

Aber bis jetzt habe ich kein klares Bild von der gegenseitigen Interaktion zwischen ihnen.

Wie Sie in der obigen Grafik sehen können, sind sie wie folgt sehr stark korreliert.

- Zum einfachen Vergleich multipliziere ich 10 mit der durchschnittlichen Systemlast. Andernfalls ist die Systemlast sehr klein (0,0 ~ 2,0), ein direkter Vergleich wird schwierig.

- Da die Lüfterschaltung für die Musikwiedergabe in der Pi-Box installiert ist, überschreitet die CPU-Temperatur nie mehr als 50 ° C

- Wenn die Systemlast im Bereich von 0,0 bis 1,0 liegt, die Temperatur im Bereich von 45 bis 48 °C liegt (CPU-Metallabdeckung erwärmt sich leicht)

- Aber hohe Last wird angewendet (normalerweise Webbrowser und Abspielen von Youtube-Videos), die Last steigt und damit die Temperatur

***

Da RPI 4B mit einer 4-Kern-CPU installiert ist, wird die Leistung theoretisch bis zum Lastniveau (Uptime Running Queue) nicht stark beeinträchtigt 4.

Aber immer noch unter der durchschnittlichen Laststufe 4 ist eine entsprechende Temperaturregelung erforderlich.

Schritt 13: Finalisierung

Abschluss
Abschluss

Ich beende dieses Projekt, indem ich INDICATOR in der Pi-Box wie im Bild oben installiere.

Während des gelegentlichen Gebrauchs dieser Pi-Box zeigt INDICATOR selten einen HIGH-Pegel und ein dynamisches LED-Blinken an.

Normalerweise blieb es in langsam blinkenden LED-Zuständen (also LOW oder LIGHT).

Wie auch immer, der hinzugefügte visuelle Indikator macht ein bisschen lustig, zumindest zeigt er, dass RPI gerade etwas tut.

Vielen Dank für das Lesen dieser Geschichte…..

Empfohlen: