Para medir el tiempo total de CPU de un usuario, estoy usando el campo "utime" de /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 man proc (5) )
Entonces, mi "tiempo de usuario" es la suma utime
de todos los PID que este usuario está ejecutando.
Espero que esto me dé un valor preciso para la cantidad de segundos de CPU que este usuario ha gastado. ¿Estoy en el camino correcto?
Algunas de las cosas que aún no entiendo o que no tengo en cuenta:
- Cada PID también tiene un PID primario (o cero). Pero estoy contando cada PID, no solo los que tienen un ppid de 0. ¿Es esto correcto?
- Hay, además de utime, stime, cutime y cstime. ¿Debo preocuparme por eso? Supongo que utime es el número total de segundos de CPU para un PID, sin contar el padre.
Si calculo el tiempo de CPU total del sistema usando /proc/uptime
, este valor es bastante cercano a mi suma para todos los usuarios, pero la diferencia es significativa. Por ejemplo (en minutos):
system cpu_time: 96.13
sum of users_cputime: 111.45
Corrección:
Obtengo valores de "apariencia sensata" para todo tipo de cosas. En este momento estoy usando la suma de tiempo, tiempo, tiempo de corte y cstime. E informa valores que, aunque no los entiendo, se correlacionan muy bien con las mediciones de time
.
Si estoy completamente en el camino equivocado, hay otra pregunta:
- ¿Cuál es la forma más justa de monitorear el tiempo total de CPU por usuario? (+500 Bounty) en Ask Ubuntu
/proc/uptime
? Entonces supongo que la E / S atribuida a la tarea inactiva explicaría la diferencia. No sé nada sobre el tema, por lo que sospecho que me estoy perdiendo algo importante: no esperaría que suceda tanto en la tarea inactiva, especialmente teniendo en cuenta que su suma de usuarios cputime probablemente falte mucho procesos vividos
/proc/cputime
no tiene ninguna información sobre el tiempo que pasan las CPUs ejecutando procesos, por lo que estoy desconcertado sobre cuál es el cálculo de su "sistema cpu_time". Si está haciendo algo con el segundo número, es el tiempo que dedica la tarea inactiva ; No sé exactamente qué significa eso en la práctica.