Измерения пропускной способности
-
30-09-2019 - |
Вопрос
Я написал простое Инструмент тестирования нагрузки Для тестирования производительности Java модулей. Одна проблема с которой столкнулась, является алгоритм измерений пропускной способности. Испытания выполняются в нескольких потоках (Client Configure, сколько времени необходимо повторить тест), а время выполнения регистрируется. Итак, когда тесты заканчиваются, у нас есть следующая история:
4 test executions
2 threads
36ms overall time
- idle
* test execution
5ms 9ms 4ms 13ms
T1 |-*****-*********-****-*************-|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-----|
<-----------------36ms--------------->
На данный момент я рассчитываю пропускную способность (в секунду) следующим образом: 1000 / overallTime * threadCount
.
Но есть проблема. Что, если одна нить завершит свои собственные тесты быстрее (по какой-либо причине):
3ms 3ms 3ms 3ms
T1 |-***-***-***-***----------------|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-|
<--------------32ms-------------->
В этом случае фактическая пропускная способность намного лучше из-за измеренной пропускной способности ограничен самым медленным потоком. Отказ Итак, мой вопрос заключается в том, как я должен измерить пропускную способность выполнения кода в многопоточной среде.
Решение
Как насчет throughput[t] = numberOfTests[t] / overallTime[t]
отдельно для каждого потока t
, а затем рассчитать среднее значение throughput
?
Тогда вы также можете рассчитать такие вещи, как диапазон и стандартное отклонение, чтобы получить лучшее изображение. Лично я очень люблю коробочные участки. Отказ Но только сами номера будут интересны.
Другие советы
Я знаю немного поздно, но у меня есть два блога, связанные с вашим вопросом. Первый описан Как вы измеряете пропускную способность (и время отклика). Второй описывает способ пропускной способности графа.