Um die Gesamt-CPU-Zeit eines Benutzers zu messen, verwende ich das Feld "utime" aus /proc/[pid]/stat
:
utime %lu Amount of time that this process has been scheduled in user
mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time
(time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do
not lose that time from their calculations.
(von man proc (5) )
Meine "Benutzerzeit" ist also die Summe utime
aller PIDs, die dieser Benutzer ausführt.
Ich hoffe, dies gibt mir einen genauen Wert für die Anzahl der CPU-Sekunden, die dieser Benutzer verbracht hat. Bin ich auf dem richtigen Weg?
Einige der Dinge, die ich noch nicht verstehe oder berücksichtige:
- Jede PID hat auch eine übergeordnete PID (oder Null). Aber ich zähle jede PID, nicht nur die mit einer ppid von 0. Ist das richtig?
- Es gibt neben utime auch stime, cutime und cstime. Muss ich mir darüber Sorgen machen? Ich gehe davon aus, dass utime die Gesamtzahl der CPU-Sekunden für eine PID ist, ohne die übergeordnete.
Wenn ich die Gesamt-CPU-Zeit des Systems mit berechne /proc/uptime
, liegt dieser Wert für alle Benutzer ziemlich nahe an meiner Summe, aber der Unterschied ist erheblich. Zum Beispiel (in Minuten):
system cpu_time: 96.13
sum of users_cputime: 111.45
Korrektur:
Ich bekomme "vernünftig aussehende" Werte für alle möglichen Dinge. Im Moment verwende ich die Summe aus Utime, Stime, Cutime und Cstime. Und es werden Werte gemeldet, die, obwohl ich sie nicht verstehe, sehr gut mit Messungen von korrelieren time
.
Wenn ich völlig auf dem falschen Weg bin, gibt es eine andere Frage:
- Was ist der fairste Weg, um die gesamte CPU-Zeit zu überwachen - pro Benutzer? (+500 Kopfgeld) auf Ask Ubuntu
/proc/uptime
? Dann würde die E / A, die der Leerlaufaufgabe zugeordnet ist, den Unterschied erklären. Ich weiß nichts über das Thema, daher vermute ich, dass mir etwas Wichtiges fehlt: Ich würde nicht erwarten, dass bei der Leerlaufaufgabe so viel passiert, insbesondere wenn man bedenkt, dass Ihrer Cputime-Summe der Benutzer wahrscheinlich viel Kurzzeit fehlt. gelebte Prozesse.
/proc/cputime
Ich habe keine Informationen über die Zeit, die die CPUs für die Ausführung von Prozessen aufgewendet haben. Daher bin ich verwirrt, wie hoch Ihre Berechnung für die System-CPU-Zeit ist. Wenn Sie etwas mit der zweiten Nummer tun, ist dies die Zeit, die für die Leerlaufaufgabe aufgewendet wird . Ich weiß nicht genau, was das in der Praxis bedeutet.