Forum Linux.noyau Mesurer le temps cpu

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
18
sept.
2014

Bonjour,

J'ai fait une procédure pour mesurer le temps en user space, hors ce n'est pas stable. J'aimerai donc un truc plus générique dans le noyau linux.
J'ai trouvé:
/proc/5456/task/5456/sched
Et:
/proc/5456/task/5456/stat
Ces valeurs sont la pour m'aider a faire un benchmark continue, et donc voir les régressions que je pourrai introduire dans certain commit, j'ai besoin d'un précision a la micro secondes, mais l'idéal serai a la nano secondes.

Cordialement,

  • # Temps processeur variable ?

    Posté par  (site web personnel) . É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/

    • [^] # Re: Temps processeur variable ?

      Posté par  (site web personnel) . Évalué à 1.

      Les variations hardware sont a ma charge (fréquence via le gouvernor, …).

      proc_sched_show_task Je ne vois pas comment ont s'en sert. Je m'en fiche que ça rajoute du temps si ce temps est fixe, c'est pas la valeur mais la variation de valeur qui m'importe.
      J'ai vu: se.sum_exec_runtime, je pense que c'est la valeur que je cherche, mais j'aimerai confirmation.

      Surtout avec le PREAMPT, la fréquence de découpage, …

      nr_voluntary_switches déjà pris en compte vu que je pompe mes résultats directement de la boucle d'event en skippant le epoll_wait. Par contre j'ai pas de contrôle sur nr_involuntary_switches

      Mon process est mono-thread avec epoll, donc pas de complication multi-cpu.

      J'été déjà tomber sur cette note, mais je ne m'en été pas sortie.

      Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.