rusage, utilisation CPU précise à la microseconde ?
Bonjour, dans un code existant que je dois maintenir un calcul est fait pour déterminer l'utilisation CPU de certaines parties du programme qui sont très brèves (en dizaines/centaines de microsecondes).
Le code utilise la fonction getrusage :
Code:
1 2 3 4 5 6 7
| struct rusage usage;
if (getrusage(RUSAGE_THREAD, &usage) == 0)
{
// calculate time in microseconds
currentCpuUsage = usage.ru_utime.tv_sec*1000000 + usage.ru_utime.tv_usec
+ usage.ru_stime.tv_sec*1000000 + usage.ru_stime.tv_usec;
} |
Classique, le code enregistre la valeur courante au début de la période que l'on veut mesurer puis fait la différence avec la valeur courante à la fin de cette période.
Le problème, les deux valeurs sont la plupart du temps égales (différence nulle donc) et parfois avec une différence de 4000 (4 ms donc). Est-ce que c'est une limitation de la précision ? Est-ce qu'il y a quelque chose à faire dans le code ou bien un autre moyen de récupérer l'utilisation CPU avec une meilleure précision ?
Merci d'avance !