9
votes

Temps rapide écoulé sur Linux

Je cherche un moyen rapide d'obtenir le temps écoulé entre deux appels d'une fonction en c.

J'ai envisagé d'utiliser des jiffes, mais ils ne sont pas disponibles dans Userland. Donc, devrais-je utiliser getimeofday () ou y a-t-il un moyen le plus rapide de le faire?

Je ne suis intéressé que par le temps élaspété entre deux appels, pour utiliser dans un outil de référence.


0 commentaires

7 Réponses :


2
votes

Si vous êtes sur une architecture X86 / X64 et que vous utilisez un seul processeur, vous pourriez envisager de lire le compteur de time-timbre sur la CPU pour obtenir un décompte de cycle. Wikipedia a Plus d'informations . Notez que cette approche est moins utile si votre application est en cours d'exécution sur plusieurs processeurs, car chaque CPU aura son propre TSC. Également méfiez-vous de la mise à l'échelle de la fréquence si vous décidez que vous souhaitez convertir des cycles -> unités de temps.


0 commentaires

3
votes

Oui, GettimeOfday () suffirait si vous souhaitez trouver la réalité écoulée. Si vous avez besoin de trouver le temps de la CPU, vous pouvez utiliser l'horloge (). Dans de nombreux cas, les deux approches donneraient des résultats similaires (sauf s'il y a un sommeil ou une sorte d'attente en code). Un exemple d'horloge () peut être trouvé ici:
http: //www.cs.utah. EDU / DEPT / OUVANT / TEXINFO / GLIBC-Manual-0.02 / Bibliothèque_19.html


0 commentaires


9
votes

J'aurais le temps de processeur via horloge () de time.h . Pour obtenir des valeurs utiles, convertir en millisecondes via clocks_per_sec : xxx


3 commentaires

Horloge () Le temps ne semble pas égal à l'heure réelle. Stackoverflow.com/questions/556405/...


Après avoir testé le temps d'horloge () renvoie le système de l'utilisateur + mais pas le temps réel. utiliser gettimeofday à la place


@xhan: dépend de votre cas d'utilisation - pour un outil d'analyse comparative, le temps du processeur est probablement une meilleure métrique que le temps de Wallclock



1
votes

Si votre noyau prend en charge GetTimeOdday () en tant que VSYSCALL (appel du système virtuel), il sera plus rapide que d'appeler un appel système régulier tel que horloge () . Voir Présentation de Andrea Arcangeli pour des informations sur la façon dont VSYSCALLS travail.


0 commentaires

0
votes

Bit d'ajout tardif, cependant, le temps utilitaire disponible sur n'importe quel Linux / Unix peut être un moyen de poids plus léger d'atteindre ce que vous voulez. Voici 2 exemples xxx


0 commentaires

0
votes

Les œuvres suivantes pour moi sur Centos 6:

$ make dur
cc     dur.c   -o dur
/tmp/cc1yF58x.o: In function `main':
dur.c:(.text+0x1c): undefined reference to `clock_gettime'
dur.c:(.text+0x4e): undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [dur] Error 1
$ LDFLAGS="-lrt" make dur
cc   -lrt  dur.c   -o dur
$ ./dur
start == {tv_sec: 206247, tv_nsec: 411717209}
stop  == {tv_sec: 206247, tv_nsec: 411759791}
stop.tv_nsec - start.tv_nsec == 42582


0 commentaires