clock_gettime을 호출하여 Linux에서 모든 스레드의 CPU 시간을 얻을 수 있습니까?

clock_gettime을 호출하여 Linux에서 모든 스레드의 CPU 시간을 얻을 수 있습니까?

시스템에서 실행 중인 스레드의 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;
}

관련 정보