質問
私はシンプルを書きました ロードテストツール 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-------------->
この場合、実際のスループットは測定されたスループットのためにはるかに優れています 最も遅いスレッドに囲まれています. 。したがって、私の質問は、マルチスレッド環境でのコード実行のスループットをどのように測定すべきかということです。
解決
どうですか throughput[t] = numberOfTests[t] / overallTime[t]
スレッドごとに個別に t
, 、そして、すべての平均を計算します throughput
?
また、範囲や標準偏差などを計算して、より良い画像を取得することもできます。個人的に私はとても好きです ボックスプロット. 。しかし、数字自体だけが面白いでしょう。
他のヒント
少し遅れていることは知っていますが、あなたの質問に関連する2つのブログ投稿があります。最初の説明 スループットの測定方法 (および応答時間)。二番目 スループットをグラフ化する方法について説明します.
所属していません StackOverflow