총 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에서 새 탭을 생성하고 페이지를 로드하면 top
Firefox가 몇 초 동안 코어의 약 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초 등) 과거에는 호출을 한 번만 사용하면 됩니다.
수면 시간을 기준으로 계산할 수도 있지만, 별도의 타이머가 있으면 특히 부하가 걸린 경우 더 정확합니다.