2010-09-21 8 views
1

J'utilise le fichier linux/proc // stat pour générer des informations sur l'utilisation du processeur pour une application. Le problème que j'ai rencontré est que sur Fedora 13, les choses semblent étrangement agir sur les choses d'Ubuntu 10.04 comme je le souhaite.Les performances de Linux se comportent bizarrement

Plus précisément:
sur fedora l'application logs plus de temps du système de traitement par un rapport de 3: 1
sur ubuntu l'application enregistre le temps de l'utilisateur plus de processus par un rapport de 4: 1
sur feutre, le temps d'utilisation de processus La valeur arrête d'augmenter après un court moment et ne se poursuit jamais.

Cela me semble très étrange et le fait que le temps de l'utilisateur arrête de s'incrémenter semble être un bug absolu.

J'ai également essayé de lire les valeurs de plusieurs façons avec le même résultat, et j'ai effectué un test pour confirmer que les temps utilisateur et système ne sont pas transposés.

Quelqu'un peut-il nous éclairer sur ce qui pourrait se passer? Existe-t-il une manière valide que l'heure de l'utilisateur du processus cesse d'augmenter pour un processus?

Répondre

0

L'heure de l'utilisateur qui ne s'incrémente pas du tout sonne comme un bogue. Si vous pouvez créer un exemple minimal qui démontre le problème, je le soumettrais au Fedora bug tracker.

(fais-tu beaucoup de travail dans les gestionnaires de signaux, par hasard?)

+0

négative sur les gestionnaires de signal, je vais jeter un oeil à faire un exemple minimal, mais je suppose que je ne serai pas capable de le casser. – radman

0

En supposant que vous voulez dire/proc/[pid]/stat, un processus peut accumuler un rien de temps de l'utilisateur si elle dépense toute sa temps en syscall ou en attente sur wchan (généralement disque ou réseau ou autre E/S).

Le niveau de détail de la comptabilité des processus est contrôlé par un certain nombre de variables de configuration dans les noyaux Linux 2.6.x (et probablement d'autres).

+0

L'application dispose de 20 threads en cours d'exécution et continue à produire une bonne sortie tout au long, c'est une grande application et il est maintenant la façon dont il est assis dans les appels système tout le temps ... – radman

+0

Votre intuition sur ce qui est "sans issue" et vos données semblent entrer en conflit. Les données sont généralement plus correctes que votre intuition. Par exemple, les threads bloqués peuvent empêcher un processus d'accumuler des cycles d'espace utilisateur. – msw

+0

Il est extraordinairement improbable qu'il accumule l'heure de l'utilisateur * zéro * - même les syscalls à exécution longue retourneront finalement à l'espace utilisateur (et bien sûr les processus bloqués dans le noyau n'accumuleront aucune sorte de temps). – caf

Questions connexes