Para medir o tempo total de CPU de um usuário, estou usando o campo "utime" em /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.
(do homem proc (5) )
Portanto, meu "user utime" é a soma utime
de todos os PIDs que este usuário está executando.
Espero que isso me dê um valor exato para o número de segundos de CPU que esse usuário gastou. Estou no caminho certo?
Algumas das coisas que ainda não entendo ou levo em consideração:
- Cada PID também possui um PID pai (ou zero). Mas estou contando todos os PID, não apenas aqueles com um ppid de 0. Isso está correto?
- Existem, além do horário de trabalho, horário, horário e horário. Preciso me preocupar com isso? Estou assumindo que utime é o número total de segundos da CPU para um PID, sem contar o pai.
Se eu calcular o tempo total da CPU do sistema usando /proc/uptime
, esse valor será bastante próximo da minha soma para todos os usuários, mas a diferença é significativa. Por exemplo (em minutos):
system cpu_time: 96.13
sum of users_cputime: 111.45
Correção:
Recebo valores de "aparência sensata" para todos os tipos de coisas. No momento, estou usando a soma de utime, stime, cutime e cstime. E relata valores que, embora eu não os entenda, se correlacionam muito bem com as medidas de time
.
Se eu estou completamente no caminho errado, há outra pergunta:
- Qual é a maneira mais justa de monitorar o tempo total de CPU - por usuário? (+500 Recompensas) no Ask Ubuntu
/proc/uptime
? Então acho que a E / S atribuída à tarefa ociosa explicaria a diferença. Como não sei nada sobre o assunto, suspeito que esteja perdendo algo importante: não esperaria que muita coisa acontecesse na tarefa ociosa, especialmente considerando que sua soma de cputime de usuários provavelmente está perdendo muito tempo. processos vividos.
/proc/cputime
não possui nenhuma informação sobre o tempo gasto pelos processos de execução das CPUs, por isso estou intrigado com o cálculo do seu "system cpu_time". Se você estiver fazendo algo com o segundo número, é o tempo gasto na tarefa inativa ; Não sei exatamente o que isso significa na prática.