Se eu tiver um cgroup como user.slice
e tiver CPUAccounting=true
configurado, estou querendo saber como alguém calcularia o uso da CPU desse cgroup específico durante um período de tempo (como 1s), usando cpuacct.usage
ou cpuacct.stat
. Eu sei que cpuacct.usage
fornece o tempo de CPU (em nanossegundos), que pode ser usado para calcular a porcentagem de CPU subtraindo dois instantâneos dele durante um período de tempo e dividindo-o pelo tempo total de CPU do sistema no mesmo período de tempo (correto me se eu estiver errado), mas não tenho certeza de como obter o tempo total da CPU em um período de tempo.
Existe uma maneira de obter o tempo total da CPU durante um período de tempo ou usar um recurso de fórmula/cgroup diferente para calcular o uso da CPU? Desde já, obrigado :)
Nota: Estou ciente de systemd-cgtop
, que fornece algumas dessas informações, porém quero calcular o uso da CPU programaticamente sem precisar analisarsystemd-cgtop
A porcentagem de uso da CPU é a razão entre o tempo total em que a CPU esteve ativa e o tempo decorrido do relógio na parede. Se você tentar comparar um tempo de CPU com outro tempo de CPU, essa não é a porcentagem de uso. Não há nome para isso, é apenas a proporção de um tempo de CPU para outro tempo de CPU.
Você já afirmou que sabe como obter o tempo de CPU decorrido (pegando a diferença do tempo de CPU antes e depois do seu período), então apenas divida isso pelo tempo do relógio de parede.
Se você quiser evitar a chamada para
date
(ecat
), você pode usar algo como:read tstart _ < /proc/uptime
.