Измерения пропускной способности - PullRequest
0 голосов
/ 21 апреля 2010

Я написал простой инструмент для нагрузочного тестирования для тестирования производительности модулей Java. Одна проблема, с которой я столкнулся, - это алгоритм измерения пропускной способности. Тесты выполняются в несколько потоков (клиент настраивает, сколько раз тест должен быть повторен), и время выполнения записывается в журнал. Итак, когда тесты завершены, мы имеем следующую историю:

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

В этом случае фактическая пропускная способность намного лучше, поскольку измеренная пропускная способность ограничена самая медленная нить . Итак, мой вопрос: как мне измерить пропускную способность выполнения кода в многопоточной среде?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Я знаю, что уже немного поздно, но у меня есть два сообщения в блоге, связанные с вашим вопросом. Первый описывает как вы измеряете пропускную способность (и время отклика). Второй описывает способ построения графика пропускной способности .

1 голос
/ 21 апреля 2010

Как насчет throughput[t] = numberOfTests[t] / overallTime[t] отдельно для каждого потока t, а затем вычислить среднее значение для всех throughput?

Затем вы также можете рассчитать такие вещи, как диапазон и стандартное отклонение, чтобы получить лучшую картинку. Лично мне очень нравятся сюжеты . Но сами цифры были бы интересны.

...