2010-11-30 43 views
3

Je trouve le projet micro Caliper de Google très intéressant mais la documentation est encore (sauf quelques exemples) quasi inexistante.Comment spécifier la ligne de commande lors de l'utilisation de Caliper?

J'ai deux cas différents où j'ai besoin d'influencer la ligne de commande du JVMs Étrier commence:

  1. J'ai besoin de fixer des fixes (idéalement en alternance entre quelques valeurs fixes) paramètres -D
  2. J'ai besoin de spécifier quelques paramètres JVM fixes (idéalement alternés entre quelques valeurs fixes)

J'ai vu une discussion sur l'ajout de fonctionnalités comme celle-ci mais je ne pouvais pas conclure si elle a été ajoutée ou non et dans ce cas ce que le la syntaxe est devenue?

Un exemple ou un pointeur sur un document Java (en supposant que ce soit documenté quelque part), etc. serait très apprécié!

Répondre

6

Pour corriger un paramètre de test avec un argument de ligne de commande, utilisez -Dname=value. Il existe un paramètre spécial nommé benchmark; ses valeurs sont les suffixes de vos méthodes time. Si vous souhaitez limiter un paramètre à plusieurs valeurs, séparez-les par des virgules comme ceci: -Dname=value1,value2.

Pour définir les paramètres JVM, utilisez -Jname=flag1,flag2.

Par exemple, considérons cette référence:

public class StringBuilderBenchmark extends SimpleBenchmark { 

    @Param({"1", "10", "100"}) private int length; 

    public void timeAppendBoolean(int reps) { 
     for (int i = 0; i < reps; ++i) { 
      StringBuilder sb = new StringBuilder(); 
      for (int j = 0; j < length; ++j) { 
       sb.append(true); 
      } 
     } 
    } 

    public void timeAppendChar(int reps) { 
     for (int i = 0; i < reps; ++i) { 
      StringBuilder sb = new StringBuilder(); 
      for (int j = 0; j < length; ++j) { 
       sb.append('c'); 
      } 
     } 
    } 
} 

Pour exécuter cette référence avec des longueurs 5 et 6, et petits et grands tas, utilisez ces paramètres:

java -cp caliper-0.0.jar:build/classes/test \ 
    com.google.caliper.Runner examples.StringBuilderBenchmark \ 
    -Dlength=5,6 -Dbenchmark=AppendBoolean -Jmemory=-Xmx512M,-Xmx16M 

Cela donne les éléments suivants:

0% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=5, memory=-Xmx512M} 81.79 ns; σ=0.31 ns @ 3 trials 
25% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=6, memory=-Xmx512M} 89.72 ns; σ=2.19 ns @ 10 trials 
50% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=5, memory=-Xmx16M} 111.44 ns; σ=6.01 ns @ 10 trials 
75% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=6, memory=-Xmx16M} 120.23 ns; σ=4.59 ns @ 10 trials 

    memory length ns logarithmic runtime 
-Xmx512M  5 81.8 = 
-Xmx512M  6 89.7 ======= 
-Xmx16M  5 111.4 ======================== 
-Xmx16M  6 120.2 ============================= 

vm: java 
trial: 0 
benchmark: AppendBoolean 
+0

Merci beaucoup juste l'information dont j'avais besoin! – Javafanboy

+1

com.google.caliper.Runner n'existe plus dans 1.0beta1, vous devez implémenter votre propre main il semble: 'public void principal (String [] args) {CaliperMain.main (MyBenchmark.class, args); } 'NB: beta-1 ne fonctionnera pas sur Windows *. – eckes