Wie man die gesamte cpu-Auslastung in Linux mit C++
Ich versuche, die gesamte cpu-Nutzung in %. Zuerst sollte ich sagen, dass die "top" wird einfach nicht tun, da es eine Verzögerung zwischen cpu-dumps, es erfordert 2 dumps und mehrere Sekunden hängt sich mein Programm (ich weiß nicht möchten geben Sie Ihr einen eigenen thread)
nächste Sache, was ich versucht habe ist "ps" was ist instant aber gibt immer sehr hohe Zahl in der Summe (20+) und wenn ich tatsächlich habe, ist meine cpu etwas zu tun, es blieb bei etwa 20...
Gibt es eine andere Möglichkeit, die ich bekommen konnte, die gesamte cpu-Nutzung? Es spielt keine Rolle, wenn Sie über einen zweiten oder längere Zeit... Mehr Perioden werden mehr nützlich, obwohl.
- Vergessen zu erwähnen: delay argument für oben ist auch nutzlos für mich...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stimme ich mit dieser Antwort oben. Die cpu-Zeile in dieser Datei gibt die Gesamtzahl der "jiffies" Ihr system hat Sie damit verbracht, verschiedene Arten der Verarbeitung.
Was Sie tun müssen, ist nehmen Sie 2 Lesungen dieser Datei, getrennt durch Intervalle der Zeit, die Sie benötigen. Die zahlen sind steigende Werte (vorbehaltlich der integer-rollover), damit man die %cpu müssen Sie berechnen, wie viele jiffies verstrichen sein, über Intervall -, versus-wie viele jiffies wurden, verbringen die Arbeit.
z.B.
Nehme an, bei 14:00:00 Sie haben
und um 14:00:05 Sie haben
Also die %cpu Nutzung in diesem Zeitraum ist:
Hoffe, das hilft ein bisschen.
Versuchen zu Lesen
/proc/loadavg
. Die ersten drei zahlen sind die Anzahl der Prozesse tatsächlich ausgeführt wird (d.h. mit einer CPU), gemittelt über die letzten 1, 5 und 15 Minuten, beziehungsweise.http://www.linuxinsight.com/proc_loadavg.html
/proc/loadavg
sind ebenfalls betroffen, durch I/O.Lesen
/proc/cpuinfo
zu finden, die Anzahl der CPU-Kerne zur Verfügung, um die Systeme.Rufen Sie die
getloadavg()
(oder alternativ Lesen Sie die/proc/loadavg
), nehmen Sie den ersten Wert multiplizieren Sie mit 100 (zum konvertieren in Prozenten), dividieren durch die Anzahl der CPU-Kerne. Wenn der Wert größer als 100 ist, es abschneiden zu 100. Getan.Relevanten Dokumentationen:
man getloadavg
undman 5 proc
N. B. Durchschnittliche Belastung, üblich ist, auf *NIX-Systemen können mehr als 100% (pro CPU/Kern), weil es tatsächlich das misst, Anzahl der Prozesse bereit, die von der scheduler. Mit Windows-wie CPU-Metrik, wenn die Last bei 100%, die Sie nicht wirklich wissen, ob es eine optimale Verwendung von CPU-Ressourcen oder system überlastet ist. Unter *NIX, die optimale Nutzung der CPU-loadavg würde dir Wert ~1.0 (oder 2.0 für dual-system). Wenn der Wert viel größer ist als die Anzahl CPU/cores, dann möchten Sie vielleicht, um plug zusätzlichen CPUs in die box.
Sonst Graben die
/proc
Datei system.iowait
die Länge der Warteschlange nach oben gehen, wenn die tatsächlichen CPU-Auslastung geht runter.cat /proc/stat
http://www.linuxhowtos.org/System/procstat.htm
Schlage ich vor, zwei Dateien zu starten...
/proc/stat und /proc/cpuinfo.
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
cpu-stat ist ein C++ - Projekt, das erlaubt, Lesen, Linux CPU-counter von /proc/stat .
Bekommen CPUData.* und CPUSnaphot.* Dateien von cpu-stat-s src-Verzeichnis.
Schnelle Umsetzung zu bekommen Gesamt-cpu-Auslastung:
Kompilieren: