Afin de mesurer le temps CPU total d'un utilisateur, j'utilise le champ "utime" parmi /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.
(de l' homme proc (5) )
Donc, mon "temps utilisateur" est la somme utime
de tous les PID que cet utilisateur exécute.
J'espère que cela me donnera une valeur précise pour le nombre de secondes CPU que cet utilisateur a passé. Suis-je sur la bonne voie?
Certaines des choses que je ne comprends pas ou ne prennent pas encore en compte:
- Chaque PID a également un PID parent (ou zéro). Mais je compte chaque PID, pas seulement ceux avec un ppid de 0. Est-ce correct?
- Il existe, en plus d'utime, stime, cutime et cstime. Dois-je m'en préoccuper? Je suppose que utime est le nombre total de secondes cpu pour un PID, sans compter le parent.
Si je calcule le temps processeur total du système en utilisant /proc/uptime
, cette valeur est assez proche de ma somme pour tous les utilisateurs, mais la différence est significative. Par exemple (en minutes):
system cpu_time: 96.13
sum of users_cputime: 111.45
Correction:
J'obtiens des valeurs "d'apparence raisonnable" pour toutes sortes de choses. Pour le moment, j'utilise la somme de utime, stime, cutime et cstime. Et il rapporte des valeurs qui, bien que je ne les comprenne pas, correspondent très bien aux mesures de time
.
Si je suis complètement sur la mauvaise voie, il y a une autre question:
- Quelle est la façon la plus équitable de surveiller le temps CPU total - par utilisateur? (+500 Bounty) sur Ask Ubuntu
/proc/uptime
? Ensuite, je suppose que les E / S attribuées à la tâche inactive expliqueraient la différence. Je ne sais rien du sujet, donc je soupçonne que je manque quelque chose de majeur: je ne m'attendrais pas à ce qu'il se passe autant de choses dans la tâche inactive, surtout si l'on considère que votre somme d'utilisateurs cputime manque probablement de beaucoup de court- processus vécus.
/proc/cputime
ne dispose d'aucune information sur le temps passé par les processeurs à exécuter les processus, je suis donc perplexe quant au calcul de votre «système cpu_time». Si vous faites quelque chose avec le deuxième nombre, c'est le temps passé par la tâche inactive ; Je ne sais pas exactement ce que cela signifie dans la pratique.