CPU in Prozent anzeigen

  • Hallo Zusammen,


    Ich habe eine kleine Frage:


    Man kann ja Temparatur, Speicher, Spannung ect vom Raspberry auslesen.
    Dies Funktioniert bei mir auch, jedoch würde ich gerne auch die CPU Auslastung in % auslesen, ist dies auch machbar?


    Ich rede von solchen ssh Befehlen
    /opt/vc/bin/vcgencmd measure_temp | tr -d ""temp="" | tr -d ""'C"""
    "/opt/vc/bin/vcgencmd measure_volts | tr -d ""volt="" | tr -d ""V"""



    p.s.
    Oder zumindest CPU Gesamt
    und
    CPU Belegt damit ich es rechnen kann.
    Danke

    Ready when you are :bravo2:

    Edited once, last by schnibli ().

  • Hallo und Vielen Dank, dies wusste ich schon...
    Ich frage über mein vb.net Programm gewisse Daten ab und da brauche ich nur den wert nicht die laufenden Prozesse :s
    Beispiele:


    ich hoffe ich hab es diesmal richtig erklärt :)

    Ready when you are :bravo2:

  • Dies Funktioniert bei mir auch, jedoch würde ich gerne auch die CPU Auslastung in % auslesen, ist dies auch machbar?


    Selbstverständlich, aber nicht über vcgencmd.


    Die trügerisch vermeintlich einfachste Möglichkeit (aber leider auch die Irrtümlichste) wäre die Ausgabe von top oder htop zu filtern - da der PI nur einen CPU Core hat gestaltet sich das recht einfach:

    Code
    top -b -n1 | grep "%Cpu"

    Die dabei ausgegeben Werte bedeuten:

    Code
    us, user : time running un-niced user processes
    sy, system : time running kernel processes
    ni, nice : time running niced user processes
    wa, IO-wait : time waiting for I/O completion
    hi : time spent servicing hardware interrupts
    si : time spent servicing software interrupts
    st : time stolen from this vm by the hypervisor


    Das ist aber vergleichsweise ziemlich langsam aber das größte Problem ist dass der Aufruf von top oder htop selbst ebenfalls eine nicht zu verachtende CPU Belastung erzeugt und somit die Ausgabe verfälscht!
    Aus diesem Grund würde ich von dieser einfachen Weise Abstand nehmen und strickt abraten!



    Ein weiterer Wert der von so manch einem verwendet wird sind die LOAD Averages, wie man sie vom uptime Befehl ausgegeben kriegt oder die Datei /proc/loadavg enthält. Aber auch diese lassen keine eindeutigen Rückschlüsse auf die Prozentuale CPU Auslastung zu.


    Du könntest auch die % Werte von ps aux auslesen und zusammenrechnen, aber das ist auch nicht sonderlich genau.



    Die aus meiner Sicht besten Werte - wie ich sie auch in der cpu.php verwendet habe - stehen in der virtuellen Datei /proc/stat wobei uns im Fall des PI's nur die erste 'cpu' Zeile interessiert.


    Dabei muss man beachten das sich die Auslastung aus mehreren Werten zusammensetzt und somit ist die Berechnung etwas aufwändiger.


    Hinweis:
    Die CPU-Werte in /proc/stat sind Zähler. Um den "Verbrauch" zwischen zwei Messungen zu ermitteln, muss man deshalb die Werte der vorherigen Messung zwischenspeichern (natürlich für jeden Core getrennt --> Arrays "TOTAL_LAST" und "BUSY_LAST") und dann die Differenz zwischen dem aktuellen Messwert/Zählerstand und den vorherigen Werten berechnen.
    Die Multiplikation mit "1000" statt mit "100" ermöglicht die Ausgabe einer Dezimalstelle, da in der Bash nur mit ganzen Zahlen gerechnet werden kann.


    Und hier das Script:


    Lass das Script mal ein paar mal durch laufen bevor du dir da nur das raus pickst wovon du glaubst das nur zu brauchen...

  • Vielen Dank für die Ausführliche erklärung. Ich werde dies mal versuchen.


    Aber es nimmt mich dennoch wunder wie es mit vmstat Funktioniert :)

    Ready when you are :bravo2:

  • Naja führt man vmstat aus sieht das so aus:

    Code
    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
    r b swpd free buff cache si so bi bo in cs us sy id wa
    0 0 0 15668 31428 393072 0 0 2 4 144 32 0 0 99 0


    Dich interessiert nur der letzte Abschnitt unter 'cpu' also "us", "sy", "id" und "wa"
    us -> user
    sy -> system
    id -> idle
    wa -> waiting


    Wenn da 99 unter Idle steht, ist das System also nur zu 1% ausgelastet - allerdings wird nirgends das eine Prozent angezeigt und deshalb hab ich diese Möglichkeit im vorherigen Beitrag nicht in Betracht gezogen da das wie ich finde zu ungenau ist:


    Das lässt sich leider sehr einfach feststellen indem man einfach ein 2.PuTTY auf macht und dort top -c -d 1 ausführt und im 1.PuTTY vmstat kontrolliert --> obwohl top eine CPU Auslastung von 3,8% bis 4,8% erzeugt zeigt vmstat weiterhin 99 Idle an - das kann also nicht passen!

  • Halli hallo ...
    Naja, stimmt schon ... vmstat ist der Durchschnitt seit bootup ...


    Aber: da fällt mir noch was anderes ein:
    Im Zusammenhang mit dem Nokia 5110 Display war doch ein Programm mit einer kleinen C-routine zur Abfrage der CPU-Last und anderen Parametern.
    Guckst Du mal -> hier <- ...


    cu,
    -ds-

  • meigrafd , Ich habe dein Script ein bischen überarbeitet :)


    eine Lösung in Form von einem fertigen Programm habe ich nicht gefunden, einzig und allein htop zeigt mir aktuelle Werte an, top sar und co berechnen die CPU Last irgendwie anders ( seit systemstart, tagesdurchschnitt ? ).




    Änderungen vom Ausgans script :


    * Loopfunktion entfernt ( script jetzt einfach mit watch -n1 ausführen )
    * erste Messung korrekt ( beim org. script war die erste Messung immer fehlerhaft da kein Vergleichswert )
    * Dezimalstellen für Nachkommawerte auf 3 Zeichen beschränkt ( org. script gab für Werte über 0.999 0.1000 aus )
    * Formatierung hinzugefügt
    * Durchschnittswert aller CPU Kerne hinzugefügt.

    Edited once, last by speefak ().

  • Auch wenn es schon lange her ist...evtl. stolpern dennoch noch einige über dieses Thema.


    Wenn man die beiden Skripte von meigrafd und speefak mit der Auslastungsanzeige in der Taskleiste vergleicht, so scheint es, dass das Skript von speefak die CPU-Auslastung bereits wieder deutlich beeinflusst und daher den von meigrafd beschriebenen Vorteil wieder eliminiert. Es liefert reproduzierbar höhere Werte.


    Eine längere Wartezeit (z.B. 5 s wie bei meigrafd ist auf jeden Fall von Vorteil). Evtl. wird dadurch die CPU-Auslastung durch den Start des Skripts zeitlich ausgeglichen/rausgemittelt.


    Das ist meine Beobachtung. Mit bash-Skripten bin ich leider blutiger Anfänger.

    Verbessert mich gerne! (: