Вопрос

Я написал простое Инструмент тестирования нагрузки Для тестирования производительности 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?

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top