Что такое столбец cnt в результатах jmh?

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

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

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

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

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


jmh
person Glide    schedule 11.06.2018    source источник


Ответы (2)


Честно говоря, я не знаю, как рассчитывается 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.

Я надеюсь, что это помогает!

person ulubeyn    schedule 13.06.2018

Ваша предпосылка:

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

Это неверно.

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

person Nitsan Wakart    schedule 15.06.2018