temps CPU 100%

2008-05-19 Par sujet Vincent Lefevre
Est-ce que c'est normal d'avoir un temps CPU  100%?

courge:... /usr/bin/time ./dblmult 5 -
[...]
0.01user 0.00system 0:00.00elapsed 333%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+213minor)pagefaults 0swaps

Même problème avec le builtin de time de zsh.

Si c'est un bug, d'où vient-il? Du noyau? De l'utilitaire time qui ne
fait pas telle ou telle correction nécessaire?

-- 
Vincent Lefèvre [EMAIL PROTECTED] - Web: http://www.vinc17.org/
100% accessible validated (X)HTML - Blog: http://www.vinc17.org/blog/
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et
Reply-To:

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: temps CPU 100%

2008-05-19 Par sujet Basile STARYNKEVITCH

Vincent Lefevre wrote:

Est-ce que c'est normal d'avoir un temps CPU  100%?

courge:... /usr/bin/time ./dblmult 5 -
[...]
0.01user 0.00system 0:00.00elapsed 333%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+213minor)pagefaults 0swaps

Même problème avec le builtin de time de zsh.

Si c'est un bug, d'où vient-il? Du noyau? De l'utilitaire time qui ne
fait pas telle ou telle correction nécessaire?



A mon avis ce n'est pas un bogue. La commande time doit s'appuyer sur 
l'appel système times ou getrusage qui renvoie le temps CPU, et 
lorsqu'on a plus d'un processeur (cas des multicores actuels) qui 
travaille sur le processus mesuré (ainsi que ses fils et ses threads!) 
le temps cpu est supérieur au temps réel. Par exemple, si les 2 
processeurs tournent à fond pendant une seconde, le temps cpu sera de 2 
secondes.


Par contre, le temps mesuré n'est vraiement significatif que s'il a été 
suffisamment echantillonné. Il faudrait donc lancer une commande qui 
prend un certain temps (typiquement plus d'une seconde de CPU) pour que 
la mesure soit significative.



--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basileatstarynkevitchdotnet mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et
Reply-To:

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: temps CPU 100%

2008-05-19 Par sujet Vincent Lefevre
On 2008-05-19 15:18:59 +0200, Basile STARYNKEVITCH wrote:
 A mon avis ce n'est pas un bogue. La commande time doit s'appuyer sur  
 l'appel système times ou getrusage qui renvoie le temps CPU, et  
 lorsqu'on a plus d'un processeur (cas des multicores actuels) qui  
 travaille sur le processus mesuré (ainsi que ses fils et ses threads!)  

La machine a plus d'un processeur, mais je précise que le processus
ne fait pas de fork, et il ne crée pas de threads non plus. C'est un
programme C standard (ISO C99) tout bête.

 le temps cpu est supérieur au temps réel. Par exemple, si les 2  
 processeurs tournent à fond pendant une seconde, le temps cpu sera de 2  
 secondes.

 Par contre, le temps mesuré n'est vraiement significatif que s'il a été  
 suffisamment echantillonné. Il faudrait donc lancer une commande qui  
 prend un certain temps (typiquement plus d'une seconde de CPU) pour que  
 la mesure soit significative.

Oui, c'est la source du problème, et d'ailleurs dès que la commande
prend plus de temps (valeur donnée en argument plus élevée), le temps
CPU est bien toujours = 100%.

Note: je sais bien que c'est imprécis, mais la commande time ne
devrait-elle pas fournir un comportement *cohérent* avec la réalité?

Je vois deux raisons à vouloir un résultat cohérent:
  _ Pour les humains, qui peuvent se poser des questions lorsqu'une
valeur  100% est obtenue.
  _ Pour les programmes, lorsque la sortie de time est traitée par
un autre programme: celui-ci risque de se comporter de manière
erratique, voire quelque chose de plus sérieux comme un buffer
overflow.

-- 
Vincent Lefèvre [EMAIL PROTECTED] - Web: http://www.vinc17.org/
100% accessible validated (X)HTML - Blog: http://www.vinc17.org/blog/
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et
Reply-To:

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: temps CPU 100%

2008-05-19 Par sujet Basile STARYNKEVITCH

Vincent Lefevre wrote:

On 2008-05-19 15:18:59 +0200, Basile STARYNKEVITCH wrote:
Par contre, le temps mesuré n'est vraiement significatif que s'il a été  
suffisamment echantillonné. Il faudrait donc lancer une commande qui  
prend un certain temps (typiquement plus d'une seconde de CPU) pour que  
la mesure soit significative.


Oui, c'est la source du problème, et d'ailleurs dès que la commande
prend plus de temps (valeur donnée en argument plus élevée), le temps
CPU est bien toujours = 100%.

Note: je sais bien que c'est imprécis, mais la commande time ne
devrait-elle pas fournir un comportement *cohérent* avec la réalité?


Ce n'est pas dans la philosophie d'Unix, au moins à son origine.

A l'époque, on cherchait plutot à implémenter simplement. Une 
implémentation simple serait par exemple


le processeur (ou un autre matériel) émet une interruption temporelle à 
chaque milliseconde la mesure du temps CPU, et une autre sorte 
d'interruption temporelle à chaque centiseconde (qui ne tombe pas en 
même temps que la précédente) pour la mesure du temps d'horloge (temps 
réel).


L'ordonnanceur du noyau:

  quand il recoit une interruption temporelle pour la CPU (chaque 
milliseconde) incrémente un compteur dans le description de tache 
courante et réordonne les processus (donc en active un autre).


  quand il reçoit une interruption temporelle pour le temps d'horloge 
(chaque centiseconde) incémente un compteur global (servant à la mesure 
du temps) et réordonne les processus.


Il me semble quand dans un tel cas il existe un scénario (un peu 
pathologique) où ton processus a deux ou trois top de temps CPU mais un 
seul (voire aucun) top de temps horloge.


Je suis donc suffisamment vieux pour ne pas être choqué par le temps CPU 
 100%.


Je n'exige pas du noyau qu'il soit cohérent, mais qu'il marche à peu 
près. Et quand tu songes qu'il doit faire quelque chose quand on dérègle 
l'heure (et là ça devient compliqué), ou quand le processeur se 
ralentit, ça me suffit. J'ai autrefois lu un papier décrivant un 
algorithme de synchronisation d'horloge, je n'ai rien compris (c'est 
trop matheux pour moi) et j'ai eu la migraine. Dans le détail, c'est un 
métier!


Tu peux toujours réécrire time (utilisant getrusage ou times) qui te 
retourne toujours une charge CPU  100% (par exemple quand les temps 
mesurés sont moins que la demiseconde, retourner une charge aléatoire 
entre 0 et 100%).


--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basileatstarynkevitchdotnet mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et
Reply-To:

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: temps CPU 100%

2008-05-19 Par sujet Vincent Lefevre
On 2008-05-19 17:16:46 +0200, Basile STARYNKEVITCH wrote:
 Je n'exige pas du noyau qu'il soit cohérent, mais qu'il marche à peu  
 près.

En fait, ce n'est probablement pas corrigeable dans le noyau, auquel
cas c'est à la commande time (c'est d'ailleurs cette commande qui va
faire le lien entre les deux types de temps) de s'occuper du problème,
surtout que la documentation est plutôt floue.

-- 
Vincent Lefèvre [EMAIL PROTECTED] - Web: http://www.vinc17.org/
100% accessible validated (X)HTML - Blog: http://www.vinc17.org/blog/
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et
Reply-To:

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]