Calculando o uso total do sistema da CPU em C [closed]

2

Encontrei esta resposta no StackOverflow para calcular o uso total de CPU : link

Mas como calcular isso como uma proporção do total de ciclos de CPU disponíveis? Eu estou tentando fazer isso sem ter que gerar outro processo - apenas com syscalls e arquivos.

Eu pensei que esse número seria apenas a propriedade total das informações fornecidas por glibtop_cpu (já que parece ser user + nice + sys + idle , mas na verdade muda com o tempo.

Eu pensei que isso poderia ser apenas porque os ciclos variam naturalmente de segundo para segundo, mas nesse caso, por que ele informa números diferentes para top ? Se eu gerar uma nova aba no Firefox e carregar uma página, top , mostrará o Firefox usando cerca de 35% de um núcleo por alguns segundos - mas o código a seguir mostra apenas 7,24%:

#include <stdio.h>
#include <time.h>
#include <glibtop/cpu.h>
#include <unistd.h>

float // Get CPU usge as a decimal percentage.
get_cpu(glibtop_cpu *cpustruct) {
    glibtop_get_cpu(cpustruct);
    return 100 - (float)cpustruct->idle / (float)cpustruct->total * 100;
}

int
main(void) {
    glibtop_cpu cpustruct;
    unsigned int sleepfor = 5000;
    float usage; 
    for(;;usleep(sleepfor)) {
        usage = get_cpu(&cpustruct);
        printf("%.2f\n", usage); 
    }
    exit(0);
}
    
por Cera 26.12.2012 / 04:26

2 respostas

0

Atualização 1

Você pode considerar incorporar o comando time em seu programa. A fonte é aqui . O arquivo c principal ( time.c ) é de apenas 20kb.

Original

Pode não ser o que você está procurando, mas uma maneira "preguiçosa" é usar o comando time como seguir

time firefox

Quando o firefox é fechado, você obtém o seguinte

~$ time firefox 
NOTE: child process received 'Goodbye', closing down

real    3m16.070s
user    0m17.329s
sys     0m17.045s

A linha "NOTE:" é firefox output.

O tempo real é o tempo que o programa está sendo executado.

O user e sys são o tempo da CPU usado.

    
por 26.12.2012 / 20:39
0

Porque glibtop_get_cpu() retorna o número total de jiffies usados em cada categoria desde que o sistema foi iniciado . O que mais poderia fazer? Não sabe quanto tempo passou desde que você ligou pela última vez.

Mas você pode e deve. Você tem que medir como esses números mudaram de uma chamada para outra. Você não pode calcular o uso de atual (como no segundo, meio segundo ou qualquer outro) com apenas uma chamada.

Você poderia basear isso na quantidade de tempo em que você dorme, embora seja mais preciso, especialmente sob carga, se você tiver um timer separado.

    
por 13.09.2013 / 12:52