Portanto, a melhor maneira de ver isso são as estatísticas cumulativas de todas as CPUs. Eu apenas corri o seguinte:
cat /proc/stat | grep "cpu "; sleep 1; cat /proc/stat | grep "cpu "
cpu 72793 633 14979 2271004 2783 0 517 0 0 0
cpu 72794 633 14980 2271403 2783 0 518 0 0 0
A mudança entre os dois conjuntos de resultados é o número de USER_HZ consumidos. Então, eu pego
usuário: 72794 - 72793 = 1
legal: 633 - 633 = 0
system: 14980 - 14979 = 1
ocioso: 2271403 - 2271004 = 399
iowait: 2783 - 2783 = 0
irq: 0 - 0 = 0
softirq: 518 - 517 = 1
roubar: 0 - 0 = 0
convidado: 0 - 0 = 0
guest_nice: 0 - 0 = 0
Assim, o total de USER_HZ consumido é 1 + 0 + 1 + 399 + 0 + 1 + 0 + 0 + 0 = 402. Isto é para uma máquina de 4 threads, de modo que chega a ~ 100.5 USER_HZ por CPU, que é aproximadamente certo para alguma amostragem estatística em um relógio de 100Hz. Um período de amostragem mais longo levará a um resultado mais próximo da taxa de clock inicial.
Você pode fazer o mesmo para todas as n CPUs em um sistema, cpu0 .. CPUn-1. Apenas calcule o delta das estatísticas entre cada período de amostragem, some os deltas e ele será invariavelmente mais ou menos igual ao número de CPUs x taxa de clock.