0

Javaモジュールのパフォーマンスをテストするための簡単な負荷テストツールを作成しました。私が直面した問題の1つは、スループット測定のアルゴリズムです。テストは複数のスレッドで実行され(クライアントはテストを繰り返す回数を構成します)、実行時間がログに記録されます。したがって、テストが終了すると、次の履歴があります。

4 test executions
2 threads
36ms overall time

- idle
* test execution
       5ms    9ms     4ms      13ms
T1  |-*****-*********-****-*************-|
      3ms  6ms     7ms      11ms
T2  |-***-******-*******-***********-----|
    <-----------------36ms--------------->

今のところ、次の方法でスループット(1秒あたり)を計算します1000 / overallTime * threadCount

しかし、問題があります。1つのスレッドが(何らかの理由で)それ自体のテストをより迅速に完了するとしたらどうでしょうか。

      3ms 3ms 3ms 3ms
T1  |-***-***-***-***----------------|
      3ms  6ms     7ms      11ms
T2  |-***-******-*******-***********-|
    <--------------32ms-------------->

この場合、測定されたスループットは最も遅いスレッドによって制限されるため、実際のスループットははるかに優れています。したがって、私の質問は、マルチスレッド環境でのコード実行のスループットをどのように測定する必要があるかということです。

4

2 に答える 2

1

throughput[t] = numberOfTests[t] / overallTime[t]スレッドごとに分けてt、全体の平均を計算してみてはどうthroughputでしょうか。

次に、範囲や標準偏差などを計算して、より良い画像を取得することもできます. 個人的には箱ひげ図がとても好きです。しかし、数字自体だけでも興味深いでしょう。

于 2010-04-21T10:03:35.227 に答える
1

少し遅れていることは承知していますが、あなたの質問に関連する 2 つのブログ投稿があります。最初のセクションでは、スループット(および応答時間) を測定する方法について説明します。2 つ目は、スループットをグラフ化する方法を説明しています

于 2010-09-09T14:05:00.930 に答える