KernelTime & UserTime

Résolu
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 2 mars 2008 à 00:47
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 3 mars 2008 à 15:31
Bonsoir les amis,

Quelqu'un pourrait-il m'expliquer la différence entre le KernelTime et le UserTime dans le taux d'occupation du CPU ?
Sur Internet on en parle comme si tout le monde connaissait.  Je dois être le dernier à ne pas être au courant. Alors une explication pour débile me conviendrait bien.
.
Merci de me brancher.

5 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
2 mars 2008 à 08:34
Bonjour

Pour faire simple  :

Sous XP, il existe 2 modes : Le mode "Kernel" (Noyau) et le mode "User" (Utilisateur)

Le mode "Kernel" c'est le mode réservé au système d'exploitation pour accéder aus données du système et au Hardware. Pour ce faire, il utilise le mode CPU dit "privilégié". Ce mode est accessible par les drivers et les composants système.

Le mode 'User" c'est le mode réservé aux applications.Dans ce mode, il n'y a pas d'accès au données du système ni au Hardware. Ici c'est le mode CPU "non-privilégié".

On sépare ainsi les applications du système d'exploitation, et donc les applications n'ayant pas les mêmes privilèges, elles ne peuvent théoriquement pas modifier l'intégrité de l'OS.

P.S. La notion de privilège est liée à l'architecture du processeur. Celui ci impose des niveaux de privilèges, les rings. Bien que ceux ci soit aux nombres de 4, 2 sont utilisés :
  Le ring 0, de privilège le plus élevé utilisé par le système d'exploitation
  Le ring 3, de privilège le plus faible utilisé pour les applications.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
2 mars 2008 à 16:29
Un thread s’exécute en "User Mode" mais peut passer en "
Kernel Mode" à la suite d’un appel système (I/O, Blocage sur un sémaphore par exemple). C'est pourquoi de connaitre ces deux temps est en pratique nécessaire. Ne pas tenir compte des deux temps revient à coder un thread et à ne tenir compte que d'une portion de celui-ci. Si tu as une boucle mal programmée dans ton thread, qui plus est, si cette dernière appelle des routines systèmes, alors de connaitre le KernelTime prend tout son sens. 
 



N.B. Pour obtenir les temps d'execution de ton thread, on utilise la fonction GetThreadTimes. Celle dernière donne les temps d'execution de ton thread sans tenir compte du temps d'execution des threads du systeme ni de l'etat suspendu de ton thread.

Cordialement.



<hr />
"L'imagination est plus importante que le savoir." Albert Einstein
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 mars 2008 à 15:31
Attention malgré tout que les temps fournis par GetThreadTimes ne sont pas alimentés par un timer de haute résolution.
C'est souvent suffisant si ce qu'on mesure effectue de lourdes opérations mais totalement inadapté en vue d'optimiser une simple partie de code, il faudra passer par QueryPerformanceCounter en ce cas.

ciao...
BruNews, MVP VC++
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
2 mars 2008 à 13:52
Merci d'avoir essayé de simplifier un truc compliqué. :))

Donc, ai-je raison de penser que ces notions sont peu importantes pour le programmeur et qu'elles le dépassent, en quelque sorte?

D'autre part, en essayant de mesurer les performances de mes Threads, je tombe sur ces deux valeurs : KernelTime et UserTime.
Quel pourrait être, à ton avis, l'intérêt de les connaître pour le programmeur?
Ne serait-ce pas le noyer avec quelques informations inutiles de plus quand il ne cherche qu'à connaître le temps CPU global utilisé par son Thread?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
2 mars 2008 à 16:39
Merci pour cette sage réponse white-hippocratique !   

Oui, oui ! J'utilise bien GetThreadTimes.
0
Rejoignez-nous