A partir do manpage mpstat:
The interval parameter specifies the amount of time in seconds between each report. A value of 0 (or no parameters at all) indicates that processors statistics are to be reported for the time since system startup (boot)
A execução do mpstat apenas fornece uma estimativa de uso a longo prazo. Executar o mpstat com um argumento de intervalo fornecerá números mais precisos.
Essa discrepância é um acúmulo de erros de arredondamento, que aumenta com a atividade e o tempo de atividade do sistema. As estatísticas reais dispayed são coletadas de /proc/stat
e /proc/uptime
. As estatísticas são contadas em USER_HZ (geralmente 100Hz, getconf CLK_TCK
confirmará isso), portanto sua resolução é de apenas 1/100 de segundo; e uma CPU faz muito em 0,01 segundos.
Como exemplo:
$ cat /proc/stat; cat /proc/uptime
cpu 414821 51578 226720 66535103 73932 0 4548 0 0 0
cpu0 205014 22950 114302 33188492 36369 0 2071 0 0 0
cpu1 209807 28628 112418 33346611 37563 0 2477 0 0 0
<...>
335694.91 665351.03
Na minha estação de trabalho, que só está funcionando há alguns dias, obtemos os números acima. Se calcularmos a porcentagem do tempo total das estatísticas de CPU em comparação com o tempo de atividade, obteremos
(414821 + 51578 + 226720 + 66535103 + 73932 + 4548) / 335694.91 / 2
100.25%
Também há uma observação (não muito útil) sobre estatísticas de processo na página ps
man.
CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal, and it does not conform to the standards that ps otherwise conforms to. CPU usage is unlikely to add up to exactly 100%