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]