J'essaie de déterminer l'utilisation du processeur de LWP spécifiques dans des processus spécifiques dans Solaris 10 en utilisant des données du système de fichiers/proc. Le problème que j'ai est que parfois un compteur d'utilisation diminue.Comment un compteur d'utilisation dans le système de fichiers Solaris 10/proc peut-il diminuer?
est ici l'essentiel de celui-ci:
// we'll be reading from the file named /proc/<pid>/lwp/<lwpid>/lwpusage
std::stringstream filename;
filename << "/proc/" << pid << "/lwp/" << lwpid << "/lwpusage";
int fd = open(filename.str().c_str(), O_RDONLY);
// error checking
while(1)
{
prusage_t usage;
ssize_t readResult = pread(usage_fd, &usage, sizeof(prusage_t), 0);
// error checking
std::cout << "sec=" << usage.pr_stime.tv_sec
<< "nsec=" << usage.pr_stime.tv_nsec << std::endl;
// wait
}
close(fd);
Le nombre de nanosecondes rapportés dans la struct prusage_t sont dérivés de horodatages enregistrés chaque fois qu'un LWP change d'état. Cette fonctionnalité est appelée microstate accounting. Ça sonne bien, mais de temps en temps le compteur "appel système temps CPU" diminue environ 1-10 millisecondes. Mise à jour: ce n'est pas seulement le compteur "temps d'appel du système", j'ai vu aussi les autres compteurs diminuer aussi. Une autre curiosité est qu'il semble toujours y avoir exactement un échantillon qui est bidon - jamais deux près l'un de l'autre. Tous les autres échantillons augmentent de façon monotone au taux prévu. Cela semble exclure la possibilité que le compteur soit en quelque sorte réinitialisé dans le noyau.
Des indices sur ce qui se passe ici?
> uname -a
SunOS cdc-build-sol10u7 5.10 Generic_139556-08 i86pc i386 i86pc
Avez-vous eu une réponse à celle-ci? – jasonk