시스템에서 실행 중인 스레드의 TID를 알고 있으면 해당 스레드의 pthread CPU 클럭 ID를 쉽게 계산할 수 있습니다. 하지만 clock_gettime
내 프로그램에서 호출하여 CPU 시간을 얻을 수 있나요? 내 실험에서는 이것이 불가능하다는 것을 보여주었지만 이를 확인할 수 있는 출처를 찾을 수 없습니다.
그렇지 않은 경우 특정 스레드에 대해 고해상도 CPU 시간을 얻을 수 있는 방법이 있습니까? /proc/stat
정보는 제공되지만 jiffies보다 더 정확한 정보를 원합니다.
답변1
내 실험에서는 각 스레드의 CPU 시간을 추적하기 위해 생성된 시계가 프로세스별 시계 범주에 속하므로 다른 프로세스 내에서 쉽게 액세스할 수 없는 것으로 나타났습니다. 내가 이런 결론을 내리곤 했었지
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
int clockid(int tid) {
return -(2 | (tid << 3));
}
int main(int argc, char ** argv) {
int tid = (argc == 2) ? atoi(argv[1]) : gettid();
struct timespec tp;
if (clock_gettime(clockid(tid), &tp) == -1) {
printf("Error getting time (error no. %d)\n", errno);
exit(errno);
}
printf("Time: %ld\n", tp.tv_nsec);
return 0;
}