Durchsatzmessungen
-
30-09-2019 - |
Frage
Ich schrieb einfach Lasttest-Tool für die Leistung von Java-Module zu testen. Ein Problem, das ich konfrontiert ist Algorithmus von Durchsatzmessungen. Die Tests werden in mehrere Thread (Client konfiguriert, wie viel mal Test wiederholt werden soll) ausgeführt, und die Ausführungszeit protokolliert. Also, wenn die Tests abgeschlossen sind haben wir folgende Geschichte:
4 test executions
2 threads
36ms overall time
- idle
* test execution
5ms 9ms 4ms 13ms
T1 |-*****-*********-****-*************-|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-----|
<-----------------36ms--------------->
Für den Moment, als ich berechnet Durchsatz (pro Sekunde) auf folgende Weise:. 1000 / overallTime * threadCount
Aber es gibt Probleme. Was passiert, wenn ein Thread füllen Sie es schneller eigenen Tests ist (aus irgendeinem Grund):
3ms 3ms 3ms 3ms
T1 |-***-***-***-***----------------|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-|
<--------------32ms-------------->
In diesem Fall tatsächlichen Durchsatz ist viel besser, weil die gemessene Durchsatz ist begrenzt durch der langsame Thread . Also, meine Frage ist, wie soll ich in Multithread-Umgebung Durchsatz von Codeausführung messen.
Lösung
Wie wäre es throughput[t] = numberOfTests[t] / overallTime[t]
separat für jeden Thread t
, und berechnen dann den Mittelwert aller throughput
?
Dann können Sie auch Dinge wie Bereich und Standardabweichung berechnen um ein besseres Bild zu bekommen. Persönlich bin ich sehr gern Box-Plots . Aber nur die Zahlen selbst wäre interessant.
Andere Tipps
Ich weiß, es ist ein bisschen spät, aber ich habe zwei Blog-Posts mit Ihrer Frage verbunden. Das beschreibt zunächst , wie Sie Durchsatz messen (und Reaktionszeit). Die zweite beschreibt einen Weg, um Graph Durchsatz .