C에서 총 CPU 시스템 사용량 계산

C에서 총 CPU 시스템 사용량 계산

총 CPU 계산을 위해 StackOverflow에서 이 답변을 찾았습니다.용법:https://stackoverflow.com/questions/1420426/calculate-cpu-usage-of-a-process-in-linux/4497769#4497769

하지만 사용 가능한 총 CPU 주기의 비율로 이를 어떻게 계산합니까? 저는 다른 프로세스를 생성할 필요 없이 시스템 호출과 파일만 사용하여 이 작업을 수행하려고 합니다.

total이 숫자는 제공된 정보의 속성 일 뿐이라고 생각합니다 glibtop_cpu(그렇게 보이지만 user + nice + sys + idle실제로는 시간이 지남에 따라 변경됩니다.

시간이 지남에 따라 주기가 자연스럽게 변하기 때문일 수도 있다고 생각했는데, 이 경우 왜 다른 숫자를 보고할까요 top? Firefox에서 새 탭을 생성하고 페이지를 로드하면 topFirefox가 몇 초 동안 코어의 약 35%를 사용하는 것으로 표시되지만 다음 코드는 일관된 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);
}

답변1

업데이트 1

time이 명령을 프로그램에 통합하는 것을 고려할 수 있습니다 . 출처는여기. 기본 c 파일( time.c)은 20kb에 불과합니다.

원래

아마도 원하는 것은 아니지만 "게으른" 방법은 다음 time과 같은 명령을 사용하는 것입니다.

time firefox

Firefox가 닫히면 다음 메시지가 나타납니다.

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

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

"NOTE:" 줄을 인쇄하세요 firefox.

시간은 real프로그램이 실행되는 데 걸리는 시간입니다.

그리고 사용된 CPU 시간 user입니다 .sys

답변2

왜냐하면 glibtop_get_cpu()각 카테고리에 사용된 총 jiffies 수를 반환하기 때문입니다.시스템 시작 이후. 또 무엇을 할 수 있나요? 마지막으로 전화한 지 얼마나 되었는지 알 수 없습니다.

하지만 당신은 할 수 있고 해야 합니다. 이 숫자가 한 통화에서 다음 통화로 어떻게 변하는지 측정해야 합니다. 당신은 계산할 수 없습니다현재의(예: 1초 또는 0.5초 등) 과거에는 호출을 한 번만 사용하면 됩니다.

수면 시간을 기준으로 계산할 수도 있지만, 별도의 타이머가 있으면 특히 부하가 걸린 경우 더 정확합니다.

관련 정보