Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 2019
-
2 mars 2008 à 00:47
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 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?
Vous n’avez pas trouvé la réponse que vous recherchez ?