Как указать командную строку при использовании Caliper? - PullRequest
3 голосов
/ 30 ноября 2010

Я нахожу микро-тестовый проект Google Caliper очень интересным, но документация по-прежнему (за исключением некоторых примеров) совершенно отсутствует.

У меня есть два разных случая, когда мне нужно повлиять на командную строку запуска JVM Caliper:

  1. Мне нужно установить некоторые фиксированные (в идеале чередующиеся между несколькими фиксированными значениями) -D параметры
  2. Мне нужно указать некоторые фиксированные (в идеале чередующиеся между несколькими фиксированными значениями) параметры JVM

Я видел некоторые обсуждения о добавлении таких функций, как это, но я не мог прийти к выводу, если этобыл добавлен или нет, и в этом случае, какой синтаксис стал?

Некоторые примеры или указатели на Java doc (при условии, что это вообще где-то задокументировано) и т. д. будут очень благодарны!

1 Ответ

6 голосов
/ 30 января 2011

Чтобы исправить параметр теста с аргументом командной строки, используйте -Dname=value. Существует один специальный параметр с именем benchmark; его значения являются суффиксами ваших time методов. Если вы хотите ограничить параметр несколькими значениями, разделите их запятыми следующим образом: -Dname=value1,value2.

Чтобы установить параметры JVM, используйте -Jname=flag1,flag2.

Например, рассмотрим этот тест:

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');
            }
        }
    }
}

Чтобы запустить этот тест с длинами 5 и 6, большими и маленькими кучами, используйте следующие параметры:

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

Это дает следующее:

 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
...