Statistiques de processeur par thread dans Linux

Je souhaite signaler la quantité de temps processeur utilisée par thread dans un processus serveur (écrit en C / C ++ sous Linux). Je ne trouve pas l’équivalent de GetThreadTimes () sur Windows, mais c’est ce que je recherche.

Est-ce que quelqu’un peut-il me montrer la bonne direction?

getrusage (2) avec RUSAGE_THREAD. De la page de manuel:

int getrusage(int who, struct rusage *usage); getrusage() returns resource usage measures for who, which can be one of the following: [...] RUSAGE_THREAD (since Linux 2.6.26) Return resource usage statistics for the calling thread. 

L’interface standard des statistiques du kernel par processus est le système de fichiers /proc . Si vous faites ” man proc “, vous pouvez voir quelles informations sont stockées, mais pour la consommation de ressources par thread, vous voudrez /proc/PID/task/TID/stat , où PID est l’ID du processus et TID l’ID du thread.

Voici un exemple de sortie pour mon shell actuel; vous aurez besoin de regarder la page de manuel pour le déchiffrer:

 > more /proc/25491/task/25491/stat 25491 (bash) R 25490 25491 25491 34820 25515 4194304 955 5748 0 0 0 0 19 4 20 0 1 0 67845700 4792320 505 4294967295 134512640 135194160 3216008544 3216007164 30 86844944 0 65536 3686404 1266761467 0 0 0 17 0 0 0 0 0 0 

clock_gettime (2) avec CLOCK_THREAD_CPUTIME_ID. Voici un exemple pour obtenir le temps CPU par thread en secondes:

 struct timespec ts; if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) == 0) { return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000; } return 0;