cpu/ram/network stats mit leds

  • Hi
    ich hatte das folgende schon mal mit c probiert, was mit dann aber zu schwierig geworden ist... Darum hier das ganze nochmal mit Python.
    Mit dem code komme ich jetzt wesentlich besser zurecht, ein kleines problem habe ich allerdings noch: Wie frage ich mit Python die ausgabe werte von top ab?
    vcgencmd ist ja noch einfach -->

    Code
    cmd = '/opt/vc/bin/vcgencmd measure_temp'


    Nur bei der CPU auslastung komme ich nicht so richtig weiter :/
    Beim Ram verhält es sich ähnlich; ich kan die daten per "free -o -h" abfragen aber wie weise ich Python nun an nur die Zeile mit "Mem:" auszuwerten?

    Danke für eure Antworten,
    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Ram used:

    Code
    free -o -h | head -n2 | tail -n1 | awk '{print $3}' | tr -d [=M=]

    Ram free:

    Code
    free -o -h | head -n2 | tail -n1 | awk '{print $4}' | tr -d [=M=]

    Die CPU-Auslastung ist etwas komplizierter. Mir ist bisher noch kein Befehl begegnet, welcher in der Ausgabe die CPU-Auslastung als ganzes enthält. top splittet die CPU-Usage ja.

    Code
    %Cpu(s):  0,1 us,  0,2 sy,  0,0 ni, 99,6 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
  • Danke für deine Antwort :)
    bezüglich top hab ich noch mal bisschen gesucht und auf stackoverflow was sehr gut verwendbares gefunden:

    Ich glaube mit deinen und den info die der Typ von dem der code ist (https://stackoverflow.com/questions/1694…infos-with-ruby)
    schaff ich das :D

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Ich weiß nicht was ich davon halten soll. Die CPU-Infos kommen in dem Programm vom Befehl:

    Code
    top -n1 | awk '/Cpu\(s\):/ {print $2}'

    Was einfach nur dem ersten Wert entspricht:

    top:
    ..
    %Cpu(s): 0,1 us, 0,2 sy, 0,0 ni, 99,6 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
    ..

  • war nicht böse gemeint oder so ^^
    ich find das von stackoverflow einfach nur besser nachvollziehbar :)
    aber in grunde ist ja wirklich das selbe :danke_ATDE:

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Oder vmstat (vor allem vmstat -s) ;) ...

    cu,
    -ds-

  • Hallo zusammen,

    die einzelnen Kommandos habe ich gerade einmal ausprobiert.

    Bei der CPU-Usage kommen mir Bedenken.

    TOP liefert mir Werte zwischen 3und 5 % - rufe ich dagegen die hier vorgestellte Pipe auf, komme ich konstant auf Werte von 19,4 bis 19,6%. Dies sagt mir, dass die Pipe rund 15% der CPU-Usage benötigt.

    Damit scheidet dieser Befehl wohl aus, da er das Messergebnis zu sehr beeinflusst.

    Ich versuche, etwas Besseres zu finden.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (16. Dezember 2014 um 07:32)

  • So wie ich das sehe ist die Pipe in dem vorgestellten Python-Code sowieso unbrauchbar, da es nicht die tatsächliche CPU-Usage ausgibt, sondern nur die des aufrufenden Benutzers. Man müsste die Werte aus

    Code
    top -n1 | grep "%Cpu(s)"


    addieren. Da die Pipe aber ja das Ergebnis verfälscht, muss ne ganz andere Lösung her.

  • Danke, das ist gut zu wissen, dass top weniger ressourcen verbraucht als pipe

    @ds stimmt, die /proc sind immer noch am scchonensten für die cpu :)

    nebenbei hier mein code für das ganze projekt, ist noch nicht fertig, auf Zeile 152 gibt der compiler noch nen error zurück, aber das werd ich auch noch fixen, ist zum Teil auch als konzept mit gehalten und noch nicht sauber ausgeschrieben, aber man kann es lesen :^^:

    Ob ich die disk stats mit rein nehm weis ich noch nicht, darum sind die erstmal auskommentieren :) evt könnte man da später was reinbauen was die disk activity anzeigt oder so ;)

    wenn ihr fehler in dem code findet oder verbesserungs vorschläge habt sagt bescheid

    :thumbs1:
    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

    Einmal editiert, zuletzt von hehxes (14. Dezember 2014 um 17:02)


  • wenn ihr fehler in dem code findet..


    Ich glaube du verstehst nicht ganz, was das Problem ist. Ich versuchs nochmal zu erklären:

    Es geht um diesen Codeausschnitt:

    Code
    def getCPUuse(): # Return % of CPU used by user as a character string
        return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip(\
                   )))

    Python holt an der Stelle die Infos zur CPU-Auslastung aus diesem Teil (Der Teil hinter os.popen):

    Code
    top -n1 | awk '/Cpu\(s\):/ {print $2}'

    Die Zeile liefert dir aber falsche Ergebnisse, was das ganze getCPUuse() sinnlos macht.

    Grund für die falschen Ergebnisse:
    Es wird top -n1 aufgerufen.

    Die Ausgabe hiervon wird mit einer Pipe | an awk weitergeleitet. awk sucht in der Ausgabe von top nach dem Ausdruck Cpu(s), und gibt das zweite Token mit {print $2} aus.

    Problem 1: Das zweite Token aus der CPU Zeile von top enthält nicht die gesamte CPU-Usage
    Problem 2: Alleine das Aufrufen von top und die Weiterleitung (Pipe: | ) der Ausgabe an awk löst ~15% CPU Usage aus.

    Zum nachvollziehen: Installier dir doch mal htop

    Code
    sudo apt-get install htop

    Dann startest du htop und schaust dir die echte CPU-Auslastung an. Jetzt schaust du was dir dein Programm für eine CPU-Auslastung anzeigt. Die Werte werden weit auseinander liegen.

  • asoooo jetzt kann ichs nachvollziehen :D
    alles klar danke ;)

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Hallo zusammen,


    Die Ausgabe hiervon wird mit einer Pipe | an awk weitergeleitet. awk sucht in der Ausgabe von top nach dem Ausdruck Cpu(s), und gibt das zweite Token mit {print $2} aus.

    auch wenn man ... print $2 ... so setzt, dass nicht der User-Anteil herausgezogen wird sondern der IDLE-Anteil (Leerlauf), den Wert von 100 % abzieht, bleibt immer noch, dass die Abfrage selber rund 15% CPU-Usage benötigt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (14. Dezember 2014 um 21:01)

  • Die 15% könnte man auch runterrechnen, dann passts. Bei mir verursacht die Abfrage aber nur ~5%. Scheint deswegen auch keine verlässliche Lösung zu sein.

  • Zitat

    auch wenn man ... print $2 ... so setzt, dass nicht der User-Anteil herausgezogen wird sonder der IDLE-Anteil (Leerlauf), den Wert von 100 % abzieht, bleibt immer noch, dass die Abfrage selber rund 15% CPU-Usage benötigt.

    Beste Grüße

    Andreas


    weis jmd wie man awk dazu bringt den Leerlauf rauszuziehen? das umrechnen wäre jetzt nicht das problem, nur man müsste halt wissen welche print anweisung das wäre, wie Andreas schon gesagt hat :)
    Mit das top die ganze Zeit im hintergrund läuft dürfte für mich jetzt nicht das problem sein... bei starten verbraucht top zwar ~ 15% aber pegelt sich nach ner zeit wieder bei mir bei 2% ein und das finde ich akzeptabel :3

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Beim ersten Aufruf liefert top immer 99% Idle, unabhängig davon was läuft. Also ruf ich es 2 mal im Intervall von 1 Sekunde auf und parse dann den Output vom zweiten Aufruf.

    Erziele mit dieser Kombi brauchbare Ergebnisse:

    Idle:

    Code
    top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1

    100-Idle:

    Code
    echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"

    Beispiel Leerlauf ohne mplayer:

    Code
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    4
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    3
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    4

    Beispiel mit mplayer im Hintergrund:

    Code
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    11
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    11
    pi@raspberrypi ~ $ echo "$[100-$(top -bn 2 -d 1 | grep "Cpu(s)" | tail -n1 | awk '{print $8}' | cut -d "," -f1)]"
    10

    Die Werte sind bei mir identisch mit der CPU-Usage, die htop liefert.

  • :bravo2: danke für die ausfühliche Auflistung, ich werds morgen oder je nachdem wie unsere Lehrer uns mit Hausaufgaben belasten im Laufe der Woche in den code einbetten :)
    :danke_ATDE::heart:

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Hallo zusammen,

    das Ding hat mich heute nicht mehr losgelassen.

    Hier ist die Lösung:

    Das Programm liest /proc/stat aus. Vielen :danke_ATDE: an Dreamshader.

    Beim ersten Auslesen werden die entsprechenden Werte in ein Array eingelesen.

    Kurz danach wird die Datei nochmals eingelesen und die Differenz zum ersten Einlesen ermittelt.

    Dies entspricht der CPU-Usage zwischen 1. und 2. Einlesen - also das, was ermittelt werden sollte.

    Der Wert entspricht meiner heute Mittag berichteten CPU-Usage.
    EDIT ...

    Was mir bei dem hier eingefügten Screenshot auffällt, ist die gelegentlich auftauchende Menge an schwebenden IO-Vorgängen. Außer Geany, dem angegebenen Programm und Midori war nichts aktiv - ansonsten nur das, was der Raspberry so laufen hat.
    ... EDIT

    Ähem, somit ist auch ganz nebenbei der Nachweis erbracht, dass dieses in der Programmiersprache Icon geschriebene Programm keinen nennenswerten Beitrag zur CPU-Usage beiträgt - das Ergebnis wird im Gegensatz zum Bash-Skript / Pipe nicht verfälscht.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (14. Dezember 2014 um 23:00)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!