Obtenha estatísticas de utilização da CPU a partir do programa C

8

Eu quero ler as estatísticas de utilização da CPU de um programa em C, estou interessado na porcentagem de uso da CPU, roubar tempo etc. Essas estatísticas são mostradas na terceira linha do top comando.

Eu tentei analisar a saída de top com awk ( top -n 1 -b | awk '{print $0}' ), mas parece que top fornece sempre os mesmos valores "fictícios" antes de começar a mostrar estatísticas corretas.

Existe uma maneira do 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.

    
por 0xFF 27.09.2011 / 21:17

2 respostas

5

Você deseja ler as primeiras linhas de /proc/stat . Você precisará lê-lo duas vezes, 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 , você sabe parar de analisar.

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

A documentação autoritativa é, obviamente, o código-fonte. Se você tiver uma cópia do código fonte do kernel do Linux, olhe para fs/proc/stat.c , particularmente a função show_stat .

    
por 28.09.2011 / 02:04
3

algum exemplo na Web que mostra como ler /proc/pid/stat em C.

Você pode ler utime ou stime valores em dois momentos distintos e calcular as estatísticas de utilização da CPU desejadas. (Eu acho que top usa esses dados brutos também.)

(eu esqueci: isso é específico do linux.)

    
por 27.09.2011 / 23:19