• # Temps processeur variable ?

    Posté par (site web personnel) . En réponse au message Mesurer le temps cpu. Évalué à 2.

    Là question que je me pose, c'est que si la fréquence de ton processeur est gérée dynamiquement, est-ce que cela n'influe pas sur le pas de mesure du processeur ?

    En C, il existe une fonction clock_gettime, mais dont l'implémentation est dépendante du système.

    En shell, tu as sûrement utilisé quelque chose comme date +%F-%T.%N, qui permet d'afficher les nanosecondes, mais est-ce stable ?

    En fait, à cette précision-là, c'est impossible à prévoir, et ça va dépendre de l'ordonanceur, qui peu décider de lancer un autre bout de processus avant de lancer la commande date à la fin de ton processus, ce qui va fausser tes résultats.

    L'utilisation de proc_sched_show_task est la meilleure idée, mais pas la panacée : le fait même que tu veuilles lire cette valeur entre en compétition avec la tâche dont tu essais de mesurer le temps d'exécution, donc tu en allonges le temps.

    Par exemple, il te faut prendre en compte nr_voluntary_switches, qui représente le nombre de fois que le processus à été arrêté pour un autre, et le temps moyen passé à attendre... c'est vraiment dûr.

    Le cas en multi-processeurs est pareillement difficile, et dépend évidement de la charge.

    Il te reste la solution de lancer un grand nombre de fois ton processus dans un environnement parfaitement maîtriser, et d'en déduire la tendance statistique. Tout dépend de la confiance que tu veux avoir en tes résultats !

    Tu trouveras plus d'infos sur les valeurs de l'ordonanceur, je te conseille de voir la note écrite quand il a été dévoilé : http://lwn.net/Articles/242900/