Skip to content

Commit 8413501

Browse files
authored
Add 100/800 TPS tests and Duration functionality (#90)
In this commit, we making the tests run with two throughputs (100 and 800 TPS) for improved test coverage. Also we add the ability to run tests for a given duration rather than an iteration count. This makes it simple to run tests on a given timeline, which is a more common usecase. Testing: ``` (24-03-01 1:33:36) <0> [~/workplace/python-sdk/aws-otel-python-instrumentation/performance-tests] dev-dsk-thp-2a-bd3a87ed % ./gradlew test > Task :compileTestJava Note: /workplace/thp/python-sdk/aws-otel-python-instrumentation/performance-tests/src/test/java/io/opentelemetry/containers/K6Container.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /workplace/thp/python-sdk/aws-otel-python-instrumentation/performance-tests/src/test/java/io/opentelemetry/distros/DistroConfig.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 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 2m 12s 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 a86fa2e commit 8413501

File tree

6 files changed

+43
-20
lines changed

6 files changed

+43
-20
lines changed

performance-tests/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ An distroConfig is defined in code as a name, description, flag for instrumentat
7878

7979
Pre-requirements:
8080
* Have `docker` installed and running - verify by running the `docker` command.
81-
* Export AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, and S3_BUCKET environment variables.
81+
* Export `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`, and `S3_BUCKET` environment variables.
82+
* By default, each distroConfig runs for 10 seconds. To change this, export `DURATION` environment variable (e.g. `60m`).
8283

8384
Steps:
8485
* From `aws-otel-python-instrumentation` dir, execute:
@@ -90,3 +91,5 @@ cd performance-tests
9091
```
9192

9293
The last step can be run or you can run from IDE (after setting environment variables appropriately).
94+
95+
To diagnose test failures with `./gradlew -i test` or use `-d` for very fine details.

performance-tests/src/test/java/io/opentelemetry/OverheadTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import org.junit.jupiter.api.BeforeAll;
3535
import org.junit.jupiter.api.DynamicTest;
3636
import org.junit.jupiter.api.TestFactory;
37+
import org.slf4j.Logger;
38+
import org.slf4j.LoggerFactory;
3739
import org.testcontainers.containers.GenericContainer;
3840
import org.testcontainers.containers.Network;
3941
import org.testcontainers.containers.startupcheck.OneShotStartupCheckStrategy;
@@ -42,6 +44,7 @@
4244

4345
public class OverheadTests {
4446

47+
private static final Logger logger = LoggerFactory.getLogger(OverheadTests.class);
4548
private static final Network NETWORK = Network.newNetwork();
4649
private static GenericContainer<?> collector;
4750
private final NamingConventions namingConventions = new NamingConventions();
@@ -68,11 +71,17 @@ Stream<DynamicTest> runAllTestConfigurations() {
6871
}
6972

7073
void runTestConfig(TestConfig config) {
74+
logger.warn(
75+
String.format("Running test config %s: %s", config.getName(), config.getDescription()));
7176
runDurations.clear();
7277
config
7378
.getDistroConfigs()
7479
.forEach(
7580
distroConfig -> {
81+
logger.warn(
82+
String.format(
83+
"Running distro config %s: %s (%s)",
84+
distroConfig.getName(), distroConfig.getDescription(), config.getName()));
7685
try {
7786
runAppOnce(config, distroConfig);
7887
} catch (Exception e) {

performance-tests/src/test/java/io/opentelemetry/config/Configs.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,23 @@
1212

1313
/** Defines all test configurations */
1414
public enum Configs {
15-
ALL(
15+
ALL_100_TPS(
1616
TestConfig.builder()
17-
.name("all")
18-
.description("Compares all DistroConfigs")
17+
.name("all-800-tps")
18+
.description("Compares all DistroConfigs (100TPS test)")
1919
.withDistroConfigs(DistroConfig.values())
2020
.warmupSeconds(60)
21+
.maxRequestRate(100)
22+
.duration(System.getenv("DURATION"))
23+
.build()),
24+
ALL_800_TPS(
25+
TestConfig.builder()
26+
.name("all-800-tps")
27+
.description("Compares all DistroConfigs (800TPS test)")
28+
.withDistroConfigs(DistroConfig.values())
29+
.warmupSeconds(60)
30+
.maxRequestRate(800)
31+
.duration(System.getenv("DURATION"))
2132
.build());
2233

2334
public final TestConfig config;

performance-tests/src/test/java/io/opentelemetry/config/TestConfig.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public class TestConfig {
1717

1818
private static final int DEFAULT_MAX_REQUEST_RATE = 0; // none
1919
private static final int DEFAULT_CONCURRENT_CONNECTIONS = 5;
20-
private static final int DEFAULT_TOTAL_ITERATIONS = 5000;
20+
private static final String DEFAULT_DURATION = "10s";
2121

2222
private final String name;
2323
private final String description;
2424
private final List<DistroConfig> distroConfigs;
2525
private final int maxRequestRate;
2626
private final int concurrentConnections;
27-
private final int totalIterations;
27+
private final String duration;
2828
private final int warmupSeconds;
2929

3030
public TestConfig(Builder builder) {
@@ -33,7 +33,7 @@ public TestConfig(Builder builder) {
3333
this.distroConfigs = Collections.unmodifiableList(builder.distroConfigs);
3434
this.maxRequestRate = builder.maxRequestRate;
3535
this.concurrentConnections = builder.concurrentConnections;
36-
this.totalIterations = builder.totalIterations;
36+
this.duration = builder.duration;
3737
this.warmupSeconds = builder.warmupSeconds;
3838
}
3939

@@ -57,8 +57,8 @@ public int getConcurrentConnections() {
5757
return concurrentConnections;
5858
}
5959

60-
public int getTotalIterations() {
61-
return totalIterations;
60+
public String getDuration() {
61+
return duration;
6262
}
6363

6464
public int getWarmupSeconds() {
@@ -75,7 +75,7 @@ static class Builder {
7575
private List<DistroConfig> distroConfigs = new ArrayList<>();
7676
private int maxRequestRate = DEFAULT_MAX_REQUEST_RATE;
7777
private int concurrentConnections = DEFAULT_CONCURRENT_CONNECTIONS;
78-
private int totalIterations = DEFAULT_TOTAL_ITERATIONS;
78+
private String duration = DEFAULT_DURATION;
7979
public int warmupSeconds = 0;
8080

8181
Builder name(String name) {
@@ -103,8 +103,10 @@ Builder concurrentConnections(int concurrentConnections) {
103103
return this;
104104
}
105105

106-
Builder totalIterations(int totalIterations) {
107-
this.totalIterations = totalIterations;
106+
Builder duration(String duration) {
107+
if (duration != null) {
108+
this.duration = duration;
109+
}
108110
return this;
109111
}
110112

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ public GenericContainer<?> build() {
4949
.withCreateContainerCmdModifier(cmd -> cmd.withUser("root"))
5050
.withCommand(
5151
"run",
52-
"-u",
52+
"--vus",
5353
String.valueOf(config.getConcurrentConnections()),
54-
"-i",
55-
String.valueOf(config.getTotalIterations()),
54+
"--duration",
55+
String.valueOf(config.getDuration()),
5656
"--rps",
5757
String.valueOf(config.getMaxRequestRate()),
5858
"--summary-export",

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ public void write(List<AppPerfResults> results) {
2929
out.println("----------------------------------------------------------");
3030
out.println(" Run at " + new Date());
3131
out.printf(" %s : %s\n", config.getName(), config.getDescription());
32-
out.printf(
33-
" %d users, %d iterations\n",
34-
config.getConcurrentConnections(), config.getTotalIterations());
32+
out.printf(" %d users, %s duration\n", config.getConcurrentConnections(), config.getDuration());
3533
out.println("----------------------------------------------------------");
3634

3735
display(results, "DistroConfig", appPerfResults -> appPerfResults.distroConfig.getName());
@@ -68,10 +66,10 @@ public void write(List<AppPerfResults> results) {
6866

6967
private void display(
7068
List<AppPerfResults> results, String pref, Function<AppPerfResults, String> vs) {
71-
out.printf("%-20s: ", pref);
69+
out.printf("%-30s: ", pref);
7270
results.forEach(
7371
result -> {
74-
out.printf("%17s", vs.apply(result));
72+
out.printf("%25s", vs.apply(result));
7573
});
7674
out.println();
7775
}

0 commit comments

Comments
 (0)