Что такое столбец cnt в результатах jmh? - PullRequest
0 голосов
/ 11 июня 2018

В моем классе jmh я использую

@BenchmarkMode(Mode.SampleTime)
@Measurement(iterations = 10)
@Threads(value = 10)

на уровне класса.

И в результатах для столбца cnt я вижу 132, для одногометод и 155 для другого.Я предполагал, что cnt может означать количество выполнений, но эти цифры не соответствуют ожидаемым.

Разве число выполнений не должно быть 10 (потоков) * 10 (итераций) = 100?

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Ваше предположение:

10 (threads) * 10 (iterations) = 100 = number of executions

Неправильно.

Метод эталонного теста будет запускаться повторно в течение 10 итераций измерения, каждая продолжительностью одна секунда, от 10потоки.Если метод занимает ровно 1 секунду, то количество выполнений будет совпадать.Сообщаемое cnt - это количество выполненных выборок собранных.Режим sample не требует времени для каждого и каждого выполнения метода.Существует эвристика, позволяющая отключить ее, если время, затрачиваемое этим методом, очень мало.

0 голосов
/ 13 июня 2018

Честно говоря, я не знаю, как вычисляется cnt, когда режим бенчмарка равен Mode.SampleTime, но я хочу уточнить пару моментов.

Прежде всего, сравнение с JMH является параллельным по своей природе,В аннотации @Threads указывается, что для выполнения теста необходимо выделить десять потоков (по умолчанию 4).Если вы не укажете @Threads, он выделит только один поток для бенчмаркинга.

Во-вторых, если вы измените свой режим на Mode.Throughput и добавите аннотацию @Fork(value = 5), вы увидите столбец cnt сзначение 50. Потому что ваш тест будет выполнен в 5 форках, и каждый форк будет иметь 10 итераций.Проще говоря, cnt для этого случая - forkNumber * measurementIterations.

Наконец, этот расчет изменяется, когда режим равен Mode.SampleTime или когда вы используете аннотацию @Param (cnt = numOfParams * forkNumber * measurementIterations).Например, если вы запускаете другой тест с одинаковыми аннотациями (Mode.SampleTime), вы увидите разные цифры в столбце cnt.

Надеюсь, это поможет!

...