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: basile<at>starynkevitch<dot>net 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]

Répondre à