Skip to content

Commit 7b61128

Browse files
authored
Improve metrics recorded from K6 (#93)
In this commit we are improving the data we are harvesting from K6 to cover average, P0/50/90/99/100, and count. As well, we are reporting request rate. Testing: ``` OverheadTests > runAllTestConfigurations() > all-800-tps STANDARD_OUT ---------------------------------------------------------- Run at Fri Mar 01 21:37:18 UTC 2024 all-800-tps : Compares all DistroConfigs (800TPS test) 5 users, 10s duration ---------------------------------------------------------- DistroConfig : none app_signals_disabled app_signals_no_traces app_signals_traces Run duration : 00:00:12 00:00:13 00:00:13 00:00:13 Avg. CPU (user) % : 0.0 0.0 0.0 0.0 Max. CPU (user) % : 0.0 0.0 0.0 0.0 Avg. mch tot cpu % : 0.0 0.0 0.0 0.0 Startup time (ms) : 4014 5013 5013 5013 Total allocated MB : 0.00 0.00 0.00 0.00 Thread switch rate : 0.0 0.0 0.0 0.0 GC time (ms) : 0 0 0 0 GC pause time (ms) : 0 0 0 0 Req. Count : 490.00 504.00 504.00 504.00 Req. Rate : 47.32 44.74 44.15 44.16 Req. Lat. mean (ms) : 102.98 102.85 103.17 103.16 Req. Lat. p0 (ms) : 1.73 3.84 5.11 6.22 Req. Lat. p50 (ms) : 59.92 59.92 59.92 59.92 Req. Lat. p90 (ms) : 369.88 345.52 359.25 349.92 Req. Lat. p99 (ms) : 431.02 427.52 419.90 427.45 Req. Lat. p100 (ms) : 459.95 469.94 469.93 457.82 Net read avg (bps) : 0.00 0.00 0.00 0.00 Net write avg (bps) : 0.00 0.00 0.00 0.00 Peak threads : 0 0 0 0 Gradle Test Executor 7 finished executing tests. > Task :test Finished generating test XML results (0.051 secs) into: /workplace/thp/python-sdk/aws-otel-python-instrumentation/performance-tests/build/test-results/test Generating HTML test report... Finished generating test html results (0.06 secs) into: /workplace/thp/python-sdk/aws-otel-python-instrumentation/performance-tests/build/reports/tests/test Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.6/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 3m 29s 3 actionable tasks: 3 executed ``` By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
1 parent 2ddee07 commit 7b61128

File tree

5 files changed

+59
-49
lines changed

5 files changed

+59
-49
lines changed

performance-tests/src/test/java/io/opentelemetry/containers/K6Container.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public GenericContainer<?> build() {
5757
String.valueOf(config.getMaxRequestRate()),
5858
"--summary-export",
5959
k6OutputFile.toString(),
60+
"--summary-trend-stats",
61+
"avg,p(0),p(50),p(90),p(99),p(100),count",
6062
"/app/performanceTest.js")
6163
.withStartupCheckStrategy(
6264
new OneShotStartupCheckStrategy().withTimeout(Duration.ofMinutes(15)));

performance-tests/src/test/java/io/opentelemetry/results/AppPerfResults.java

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ public class AppPerfResults {
1313

1414
final DistroConfig distroConfig;
1515
final TestConfig config;
16-
final double iterationAvg;
17-
final double iterationP95;
18-
final double requestAvg;
19-
final double requestP95;
16+
final double requestCount;
17+
final double requestRate;
18+
final double requestLatencyAvg;
19+
final double requestLatencyP0;
20+
final double requestLatencyP50;
21+
final double requestLatencyP90;
22+
final double requestLatencyP99;
23+
final double requestLatencyP100;
2024
final long totalGCTime;
2125
final long totalAllocated;
2226
final MinMax heapUsed;
@@ -34,10 +38,14 @@ public class AppPerfResults {
3438
private AppPerfResults(Builder builder) {
3539
this.distroConfig = builder.distroConfig;
3640
this.config = builder.config;
37-
this.iterationAvg = builder.iterationAvg;
38-
this.iterationP95 = builder.iterationP95;
39-
this.requestAvg = builder.requestAvg;
40-
this.requestP95 = builder.requestP95;
41+
this.requestCount = builder.requestCount;
42+
this.requestRate = builder.requestRate;
43+
this.requestLatencyAvg = builder.requestLatencyAvg;
44+
this.requestLatencyP0 = builder.requestLatencyP0;
45+
this.requestLatencyP50 = builder.requestLatencyP50;
46+
this.requestLatencyP90 = builder.requestLatencyP90;
47+
this.requestLatencyP99 = builder.requestLatencyP99;
48+
this.requestLatencyP100 = builder.requestLatencyP100;
4149
this.totalGCTime = builder.totalGCTime;
4250
this.totalAllocated = builder.totalAllocated;
4351
this.heapUsed = builder.heapUsed;
@@ -81,10 +89,14 @@ static class Builder {
8189
private long startupDurationMs;
8290
private DistroConfig distroConfig;
8391
private TestConfig config;
84-
private double iterationAvg;
85-
private double iterationP95;
86-
private double requestAvg;
87-
private double requestP95;
92+
public double requestCount;
93+
public double requestRate;
94+
public double requestLatencyAvg;
95+
public double requestLatencyP0;
96+
public double requestLatencyP50;
97+
public double requestLatencyP90;
98+
public double requestLatencyP99;
99+
public double requestLatencyP100;
88100
private long totalGCTime;
89101
private long totalAllocated;
90102
private MinMax heapUsed;
@@ -112,26 +124,6 @@ Builder config(TestConfig config) {
112124
return this;
113125
}
114126

115-
Builder iterationAvg(double iterationAvg) {
116-
this.iterationAvg = iterationAvg;
117-
return this;
118-
}
119-
120-
Builder iterationP95(double iterationP95) {
121-
this.iterationP95 = iterationP95;
122-
return this;
123-
}
124-
125-
Builder requestAvg(double requestAvg) {
126-
this.requestAvg = requestAvg;
127-
return this;
128-
}
129-
130-
Builder requestP95(double requestP95) {
131-
this.requestP95 = requestP95;
132-
return this;
133-
}
134-
135127
Builder totalGCTime(long totalGCTime) {
136128
this.totalGCTime = totalGCTime;
137129
return this;

performance-tests/src/test/java/io/opentelemetry/results/CsvPersister.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ class CsvPersister implements ResultsPersister {
2828
FieldSpec.of("totalAllocatedMB", r -> r.getTotalAllocatedMB()),
2929
FieldSpec.of("totalGCTime", r -> r.totalGCTime),
3030
FieldSpec.of("maxThreadContextSwitchRate", r -> r.maxThreadContextSwitchRate),
31-
FieldSpec.of("iterationAvg", r -> r.iterationAvg),
32-
FieldSpec.of("iterationP95", r -> r.iterationP95),
33-
FieldSpec.of("requestAvg", r -> r.requestAvg),
34-
FieldSpec.of("requestP95", r -> r.requestP95),
31+
FieldSpec.of("requestCount", r -> r.requestCount),
32+
FieldSpec.of("requestRate", r -> r.requestRate),
33+
FieldSpec.of("requestLatencyAvg", r -> r.requestLatencyAvg),
34+
FieldSpec.of("requestLatencyP0", r -> r.requestLatencyP0),
35+
FieldSpec.of("requestLatencyP50", r -> r.requestLatencyP50),
36+
FieldSpec.of("requestLatencyP90", r -> r.requestLatencyP90),
37+
FieldSpec.of("requestLatencyP99", r -> r.requestLatencyP99),
38+
FieldSpec.of("requestLatencyP100", r -> r.requestLatencyP100),
3539
FieldSpec.of("netReadAvg", r -> r.averageNetworkRead),
3640
FieldSpec.of("netWriteAvg", r -> r.averageNetworkWrite),
3741
FieldSpec.of("peakThreadCount", r -> r.peakThreadCount),

performance-tests/src/test/java/io/opentelemetry/results/PrintStreamPersister.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,14 @@ public void write(List<AppPerfResults> results) {
5555
results,
5656
"GC pause time (ms)",
5757
res -> String.valueOf(NANOSECONDS.toMillis(res.totalGcPauseNanos)));
58-
display(results, "Req. mean (ms)", res -> format(res.requestAvg));
59-
display(results, "Req. p95 (ms)", res -> format(res.requestP95));
60-
display(results, "Iter. mean (ms)", res -> format(res.iterationAvg));
61-
display(results, "Iter. p95 (ms)", res -> format(res.iterationP95));
58+
display(results, "Req. Count", res -> format(res.requestCount));
59+
display(results, "Req. Rate", res -> format(res.requestRate));
60+
display(results, "Req. Lat. mean (ms)", res -> format(res.requestLatencyAvg));
61+
display(results, "Req. Lat. p0 (ms)", res -> format(res.requestLatencyP0));
62+
display(results, "Req. Lat. p50 (ms)", res -> format(res.requestLatencyP50));
63+
display(results, "Req. Lat. p90 (ms)", res -> format(res.requestLatencyP90));
64+
display(results, "Req. Lat. p99 (ms)", res -> format(res.requestLatencyP99));
65+
display(results, "Req. Lat. p100 (ms)", res -> format(res.requestLatencyP100));
6266
display(results, "Net read avg (bps)", res -> format(res.averageNetworkRead));
6367
display(results, "Net write avg (bps)", res -> format(res.averageNetworkWrite));
6468
display(results, "Peak threads", res -> String.valueOf(res.peakThreadCount));

performance-tests/src/test/java/io/opentelemetry/results/ResultsCollector.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,23 @@ private AppPerfResults.Builder addK6Results(
6464
AppPerfResults.Builder builder, DistroConfig distroConfig) throws IOException {
6565
Path k6File = namingConvention.k6Results(distroConfig);
6666
String json = new String(Files.readAllBytes(k6File));
67-
double iterationAvg = read(json, "$.metrics.iteration_duration.avg");
68-
double iterationP95 = read(json, "$.metrics.iteration_duration['p(95)']");
69-
double requestAvg = read(json, "$.metrics.http_req_duration.avg");
70-
double requestP95 = read(json, "$.metrics.http_req_duration['p(95)']");
71-
return builder
72-
.iterationAvg(iterationAvg)
73-
.iterationP95(iterationP95)
74-
.requestAvg(requestAvg)
75-
.requestP95(requestP95);
67+
double requestCount = read(json, "$.metrics.http_reqs.count");
68+
double requestRate = read(json, "$.metrics.http_reqs.rate");
69+
double requestLatencyAvg = read(json, "$.metrics.http_req_duration.avg");
70+
double requestLatencyP0 = read(json, "$.metrics.http_req_duration['p(0)']");
71+
double requestLatencyP50 = read(json, "$.metrics.http_req_duration['p(50)']");
72+
double requestLatencyP90 = read(json, "$.metrics.http_req_duration['p(90)']");
73+
double requestLatencyP99 = read(json, "$.metrics.http_req_duration['p(99)']");
74+
double requestLatencyP100 = read(json, "$.metrics.http_req_duration['p(100)']");
75+
builder.requestCount = requestCount;
76+
builder.requestRate = requestRate;
77+
builder.requestLatencyAvg = requestLatencyAvg;
78+
builder.requestLatencyP0 = requestLatencyP0;
79+
builder.requestLatencyP50 = requestLatencyP50;
80+
builder.requestLatencyP90 = requestLatencyP90;
81+
builder.requestLatencyP99 = requestLatencyP99;
82+
builder.requestLatencyP100 = requestLatencyP100;
83+
return builder;
7684
}
7785

7886
private static double read(String json, String jsonPath) {

0 commit comments

Comments
 (0)