Obter estatísticas de utilização da CPU do programa C

8

Quero ler as estatísticas de utilização da CPU de um programa C, estou interessado na porcentagem de uso da CPU, no tempo de roubo , etc. Essas estatísticas são mostradas na terceira linha do topcomando.

Tentei analisar topa saída de awk( top -n 1 -b | awk '{print $0}'), mas parece que topsempre dá os mesmos valores 'fictícios' antes de começar a mostrar estatísticas corretas.

Existe uma maneira de código, ou analisando a saída de algum comando para obter as estatísticas de utilização da CPU?

Editar:

A plataforma é Linux

Obrigado.

0xFF
fonte
Claro, mas não há uma maneira padrão. Precise os SOs de destino.
Jlliagre

Respostas:

5

Você quer ler as primeiras linhas de /proc/stat. Você precisará lê-lo duas vezes, com um intervalo de tempo medido e subtrair o primeiro conjunto de números do segundo. As linhas são assim:

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

A primeira linha é agregada para todos os núcleos. As próximas linhas mostram cada núcleo. Quando você vê a linha que começa com intr, interrompe a análise.

Cada número é a quantidade de tempo que a CPU passou em um estado específico. As unidades são tipicamente centésimos de segundo. Os campos são user, nice, system, idle, iowait, irq, softirq, steal, guest, e guest_nice.

A documentação autorizada é, obviamente, o código fonte. Se você tem uma cópia da fonte do kernel Linux à mão, observe fs/proc/stat.c, particularmente a show_statfunção.

David Schwartz
fonte
Você sabe com que frequência o proc / stat está sendo atualizado? como uma vez a cada 1 ms ou algo assim, obrigado.
0xFF 29/09
Eles não são arquivos reais. O conteúdo deles é calculado quando você os abre.
David Schwartz
3

algum exemplo na web que mostra como ler /proc/pid/statem C.

Você pode ler utimeou stimevalores em dois momentos distintos e calcular as estatísticas de utilização da CPU desejada. (Acho que também topusa esses dados brutos.)

(Eu esqueci: isso é específico para linux.)

Stéphane Gimenez
fonte