2010-09-23 18 views
3

RésuméComment interpréter les temps de référence tels que rapportés par le module Perl's Benchmark?

Lorsque j'exécute un programme très simple en utilisant l'utilitaire Perl's Benchmark. Je reçois des valeurs qui ne sont pas (apparaissant comme) millisecondes ou nanosecondes. Les données de référence renvoyées ne me sont pas utiles car je ne sais pas comment l'interpréter.

Exemple:

use Benchmark; 

my $start = Benchmark->new; 
print "foo!"; 
my $end = Benchmark->new; 

my $diff = timediff($end, $start); 

print timestr($diff); 

Retours: foo! 0 wallclock secs (0.00 usr + 0.00 sys = 0.00 CPU)

Qu'est-ce que les différents champs signifient: secondes wallclock, Util, Sys, CPU? Peuvent-ils être extrapolés pour obtenir une valeur de milliseconde? À l'heure actuelle, pour mon analyse comparative, tout ce dont j'ai besoin est d'un temps réel pour une seule exécution, sans avoir besoin de prendre en compte certains des aspects les plus ésotériques des tests de performance.

+3

Vous voulez vraiment, vraiment "utiliser Benchmark ': hireswallclock'" ou éviter d'utiliser le module de cette façon en premier lieu. Le temps "wallclock" est votre "temps réel". Essayez de comparer des morceaux de code avec des temps d'exécution macroscopiques. Si ce n'est pas possible parce que la boucle supplémentaire fausse trop le résultat, alors vous optimisez votre micro et nous savons tous que vous ne devriez pas faire cela. – tsee

+1

Courir quelque chose ne va pas vous donner un bon résultat. Vous devez exécuter votre opération des milliers de fois pour obtenir des données réelles (moyennées) utiles. – Ether

Répondre

7

Les secondes de l'horloge murale correspondent au temps écoulé réel, comme si vous regardiez votre montre pour la chronométrer.

Les secondes usr dans le temps effectivement passé sur le processeur, en user space.

La seconde sys est le temps réellement passé sur la CPU, dans l'espace noyau.

Le temps CPU est le temps total passé sur la CPU.

Cependant, une fois que vous avez tout cela, vous devez comprendre ce que vous essayez réellement de mesurer. Le module Benchmark ne mesure que ce que vous faites sur la machine locale. Si vous devez déclencher des processus sur une machine distante (par exemple un serveur de base de données ou un serveur Web), les durées d'UC de ces machines ne font pas partie du résultat. Cependant, le temps que vous passez à attendre leurs réponses fait partie de l'heure de l'horloge murale. Vos résultats montrent que tout s'est passé presque instantanément. Vous avez besoin de quelque chose de plus charnu, alors cela prend du temps. Si vous avez juste besoin de l'heure de l'horloge pour une seule exécution, vous n'avez pas du tout besoin d'utiliser Perl. Utilisez l'utilitaire times à partir de la ligne de commande.

J'entrevois assez largement dans Mastering Perl et certains de mes entretiens d'analyse comparative. Cependant, cette semaine, je pense que le module Benchmark est devenu obsolète. Steffen Müller's Dumbbench fait un bien meilleur travail. Voir ses entrées de blog dumbbench au blogs.perl.org.

+0

Je serais prudent de dire Benchmark.pm est obsolète. Il fait ce qu'il annonce, même si l'interface est ... intéressante. Le but même de Dumbbench est de prendre un certain contrôle de l'utilisateur pour réduire la probabilité de P des statistiques de malentendu EBKAC. Cela conduit à devoir exécuter plus d'itérations de commandes de longue durée que nécessaire si vous vous souciez uniquement de la valeur d'attente. – tsee

+1

Je n'ai jamais vraiment aimé Benchmark. J'attends avec impatience le jour où ce n'est pas l'outil que nous utilisons. :) –