Skip to content

Commit d3196d5

Browse files
committed
Introduce Netty benchmark suite.
JAVA-5813
1 parent 304f854 commit d3196d5

25 files changed

+311
-70
lines changed

.evergreen/.evg.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,8 +780,12 @@ functions:
780780
type: test
781781
params:
782782
working_dir: "src"
783+
env:
784+
PROVIDER: ${PROVIDER}
783785
script: |
784786
${PREPARE_SHELL}
787+
echo "Running performance tests provider ${PROVIDER}"
788+
PROVIDER=${PROVIDER}
785789
PROJECT_DIRECTORY=${PROJECT_DIRECTORY} .evergreen/run-perf-tests.sh
786790
787791
"send dashboard data":
@@ -1559,6 +1563,20 @@ tasks:
15591563
- func: "run perf tests"
15601564
- func: "send dashboard data"
15611565

1566+
- name: "netty-perf"
1567+
tags: [ "perf" ]
1568+
commands:
1569+
- func: "bootstrap mongo-orchestration"
1570+
vars:
1571+
VERSION: "v6.0-perf"
1572+
TOPOLOGY: "server"
1573+
SSL: "nossl"
1574+
AUTH: "noauth"
1575+
- func: "run perf tests"
1576+
vars:
1577+
PROVIDER: "Netty"
1578+
- func: "send dashboard data"
1579+
15621580
- name: "aws-lambda-deployed-task"
15631581
commands:
15641582
- command: ec2.assume_role
@@ -2311,6 +2329,7 @@ buildvariants:
23112329
run_on: rhel90-dbx-perf-large
23122330
tasks:
23132331
- name: "perf"
2332+
- name: "netty-perf"
23142333

23152334
- name: plain-auth-test
23162335
display_name: "PLAIN (LDAP) Auth test"

.evergreen/run-perf-tests.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,14 @@ RELATIVE_DIR_PATH="$(dirname "${BASH_SOURCE:-$0}")"
1717
export TEST_PATH="${PROJECT_DIRECTORY}/driver-performance-test-data/"
1818
export OUTPUT_FILE="${PROJECT_DIRECTORY}/results.json"
1919

20+
if [ "${PROVIDER}" = "Netty" ]; then
21+
TASK="driver-benchmarks:runNetty"
22+
else
23+
TASK="driver-benchmarks:run"
24+
fi
25+
2026
start_time=$(date +%s)
21-
./gradlew -Dorg.mongodb.benchmarks.data=${TEST_PATH} -Dorg.mongodb.benchmarks.output=${OUTPUT_FILE} driver-benchmarks:run
27+
./gradlew -Dorg.mongodb.benchmarks.data=${TEST_PATH} -Dorg.mongodb.benchmarks.output=${OUTPUT_FILE} ${TASK}
2228
end_time=$(date +%s)
2329
elapsed_secs=$((end_time-start_time))
2430

driver-benchmarks/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ tasks.register("jmh", JavaExec) {
4545
classpath = sourceSets.main.runtimeClasspath
4646
}
4747

48+
tasks.register("runNetty", JavaExec) {
49+
group = 'application'
50+
description = 'Run the Netty main class.'
51+
mainClass = 'com.mongodb.benchmark.benchmarks.netty.BenchmarkNettyProviderSuite'
52+
classpath = sourceSets.main.runtimeClasspath
53+
jvmArgs applicationDefaultJvmArgs
54+
}
55+
4856
javadoc {
4957
enabled = false
5058
}

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/AbstractBsonDocumentBenchmark.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,20 @@
2929
import java.io.ByteArrayOutputStream;
3030
import java.io.IOException;
3131
import java.nio.charset.StandardCharsets;
32+
import java.util.Collections;
3233

3334
public abstract class AbstractBsonDocumentBenchmark<T> extends Benchmark {
3435

3536
protected final PowerOfTwoBufferPool bufferPool = PowerOfTwoBufferPool.DEFAULT;
3637
protected final Codec<T> codec;
37-
38-
private final String name;
3938
private final String resourcePath;
4039

4140
protected T document;
4241
protected byte[] documentBytes;
4342
private int fileLength;
4443

4544
public AbstractBsonDocumentBenchmark(final String name, final String resourcePath, final Codec<T> codec) {
46-
this.name = name;
45+
super(Collections.emptyList(), name);
4746
this.resourcePath = resourcePath;
4847
this.codec = codec;
4948
}
@@ -58,11 +57,6 @@ public void setUp() throws IOException {
5857
documentBytes = getDocumentAsBuffer(document);
5958
}
6059

61-
@Override
62-
public String getName() {
63-
return name;
64-
}
65-
6660
@Override
6761
public int getBytesPerRun() {
6862
return fileLength * NUM_INTERNAL_ITERATIONS;

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/AbstractFindBenchmark.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,20 @@
3232
public abstract class AbstractFindBenchmark<T> extends AbstractMongoBenchmark {
3333
protected MongoCollection<T> collection;
3434

35-
private final String name;
3635
private final String resourcePath;
3736
private final Class<T> clazz;
3837

3938
private int fileLength;
4039

41-
public AbstractFindBenchmark(final String name, final String resourcePath, final Class<T> clazz) {
42-
this.name = name;
40+
public AbstractFindBenchmark(final List<String> tags,
41+
final String name,
42+
final String resourcePath,
43+
final Class<T> clazz) {
44+
super(tags, name);
4345
this.resourcePath = resourcePath;
4446
this.clazz = clazz;
4547
}
4648

47-
@Override
48-
public String getName() {
49-
return name;
50-
}
51-
5249
public void setUp() throws Exception {
5350
super.setUp();
5451
collection = client.getDatabase(DATABASE_NAME).getCollection(COLLECTION_NAME, clazz);

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/AbstractGridFSBenchmark.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,18 @@
2121
import com.mongodb.client.gridfs.GridFSBucket;
2222
import com.mongodb.client.gridfs.GridFSBuckets;
2323

24+
import java.util.List;
25+
2426
public abstract class AbstractGridFSBenchmark extends AbstractMongoBenchmark {
2527
private final String resourcePath;
2628
protected MongoDatabase database;
2729
protected GridFSBucket bucket;
2830
protected byte[] fileBytes;
2931

30-
public AbstractGridFSBenchmark(final String resourcePath) {
32+
public AbstractGridFSBenchmark(final List<String> tags,
33+
final String name,
34+
final String resourcePath) {
35+
super(tags, name);
3136
this.resourcePath = resourcePath;
3237
}
3338

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/AbstractInsertBenchmark.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,23 @@
2424
import org.bson.json.JsonReader;
2525

2626
import java.nio.charset.StandardCharsets;
27+
import java.util.List;
2728

2829
public abstract class AbstractInsertBenchmark<T> extends AbstractMongoBenchmark {
2930

3031
protected MongoCollection<T> collection;
3132

32-
private final String name;
3333
private final String resourcePath;
3434
private final Class<T> clazz;
3535
private byte[] bytes;
3636
protected int fileLength;
3737
protected T document;
3838

39-
protected AbstractInsertBenchmark(final String name, final String resourcePath, final Class<T> clazz) {
40-
this.name = name;
39+
protected AbstractInsertBenchmark(final List<String> tags,
40+
final String name,
41+
final String resourcePath,
42+
final Class<T> clazz) {
43+
super(tags, name);
4144
this.resourcePath = resourcePath;
4245
this.clazz = clazz;
4346
}
@@ -65,11 +68,6 @@ public void before() throws Exception {
6568
collection.drop();
6669
}
6770

68-
@Override
69-
public String getName() {
70-
return name;
71-
}
72-
7371
protected T createDocument() {
7472
Codec<T> codec = collection.getCodecRegistry().get(clazz);
7573

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/AbstractMongoBenchmark.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717

1818
package com.mongodb.benchmark.benchmarks;
1919

20+
import com.mongodb.MongoClientSettings;
2021
import com.mongodb.benchmark.framework.Benchmark;
2122
import com.mongodb.client.MongoClient;
2223
import com.mongodb.client.MongoClients;
2324

25+
import java.util.List;
26+
2427
public abstract class AbstractMongoBenchmark extends Benchmark {
2528

2629
protected static final int GRIDFS_READING_THREAD_POOL_SIZE = 8;
@@ -33,17 +36,30 @@ public abstract class AbstractMongoBenchmark extends Benchmark {
3336

3437
protected static final String DATABASE_NAME = "perftest";
3538
protected static final String COLLECTION_NAME = "corpus";
39+
protected MongoClientSettings mongoClientSettings;
3640

41+
public AbstractMongoBenchmark(final List<String> tags,
42+
final String name) {
43+
super(tags, name);
44+
}
3745

3846
protected MongoClient client;
3947

4048
public void setUp() throws Exception {
41-
client = MongoClients.create();
49+
if (mongoClientSettings != null) {
50+
client = MongoClients.create(mongoClientSettings);
51+
} else {
52+
client = MongoClients.create();
53+
}
4254
}
4355

4456
@Override
4557
public void tearDown() throws Exception {
4658
client.close();
4759
}
4860

61+
public AbstractMongoBenchmark applyMongoClientSettings(final MongoClientSettings mongoClientSettings) {
62+
this.mongoClientSettings = mongoClientSettings;
63+
return this;
64+
}
4965
}

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/BenchmarkSuite.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@
3535
@SuppressWarnings({"rawtypes", "unchecked"})
3636
public class BenchmarkSuite {
3737

38-
private static final int NUM_WARMUP_ITERATIONS = 1;
39-
private static final int NUM_ITERATIONS = 100;
40-
private static final int MIN_TIME_SECONDS = 60;
41-
private static final int MAX_TIME_SECONDS = 300;
38+
protected static final int NUM_WARMUP_ITERATIONS = 1;
39+
protected static final int NUM_ITERATIONS = 100;
40+
protected static final int MIN_TIME_SECONDS = 60;
41+
protected static final int MAX_TIME_SECONDS = 300;
4242

43-
private static final Class DOCUMENT_CLASS = Document.class;
44-
private static final IdRemover<Document> ID_REMOVER = document -> document.remove("_id");
45-
private static final Codec<Document> DOCUMENT_CODEC = getDefaultCodecRegistry().get(DOCUMENT_CLASS);
43+
protected static final Class DOCUMENT_CLASS = Document.class;
44+
protected static final IdRemover<Document> ID_REMOVER = document -> document.remove("_id");
45+
protected static final Codec<Document> DOCUMENT_CODEC = getDefaultCodecRegistry().get(DOCUMENT_CLASS);
4646

47-
private static final List<BenchmarkResultWriter> WRITERS = Arrays.asList(
47+
protected static final List<BenchmarkResultWriter> WRITERS = Arrays.asList(
4848
new EvergreenBenchmarkResultWriter());
4949

5050
public static void main(String[] args) throws Exception {
@@ -101,7 +101,7 @@ private static void runMongoCryptBenchMarks() throws InterruptedException {
101101
}
102102
}
103103

104-
private static void runBenchmark(final Benchmark benchmark) throws Exception {
104+
protected static void runBenchmark(final Benchmark benchmark) throws Exception {
105105
long startTime = System.currentTimeMillis();
106106
BenchmarkResult benchmarkResult = new BenchmarkRunner(benchmark, NUM_WARMUP_ITERATIONS, NUM_ITERATIONS, MIN_TIME_SECONDS,
107107
MAX_TIME_SECONDS).run();

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/FindManyBenchmark.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,19 @@
1919

2020
import com.mongodb.client.MongoCursor;
2121

22+
import java.util.Collections;
23+
import java.util.List;
24+
2225
public class FindManyBenchmark<T> extends AbstractFindBenchmark<T> {
26+
27+
private static final String TEST_NAME = "Find many and empty the cursor";
28+
2329
public FindManyBenchmark(final String resourcePath, final Class<T> clazz) {
24-
super("Find many and empty the cursor", resourcePath, clazz);
30+
this(Collections.emptyList(), resourcePath, clazz);
31+
}
32+
33+
public FindManyBenchmark(final List<String> tags, final String resourcePath, final Class<T> clazz) {
34+
super(tags, TEST_NAME, resourcePath, clazz);
2535
}
2636

2737
@Override

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/FindOneBenchmark.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,19 @@
2121
import org.bson.BsonDocument;
2222
import org.bson.BsonInt32;
2323

24+
import java.util.Collections;
25+
import java.util.List;
26+
2427
public class FindOneBenchmark<T> extends AbstractFindBenchmark<T> {
2528

29+
private static final String TEST_NAME = "Find one by ID";
30+
2631
public FindOneBenchmark(final String resourcePath, Class<T> clazz) {
27-
super("Find one by ID", resourcePath, clazz);
32+
this(Collections.emptyList(), resourcePath, clazz);
33+
}
34+
35+
public FindOneBenchmark(final List<String> tags, final String resourcePath, Class<T> clazz) {
36+
super(tags, TEST_NAME, resourcePath, clazz);
2837
}
2938

3039
@Override

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/GridFSDownloadBenchmark.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,20 @@
2121
import org.bson.types.ObjectId;
2222

2323
import java.io.ByteArrayInputStream;
24+
import java.util.Collections;
25+
import java.util.List;
2426

2527
public class GridFSDownloadBenchmark extends AbstractGridFSBenchmark {
28+
private static final String TEST_NAME = "GridFS download";
2629

2730
private ObjectId fileId;
2831

29-
public GridFSDownloadBenchmark(final String resourcePath) {
30-
super(resourcePath);
32+
public GridFSDownloadBenchmark(final List<String> tags, final String resourcePath) {
33+
super(tags, TEST_NAME, resourcePath);
3134
}
3235

33-
@Override
34-
public String getName() {
35-
return "GridFS download";
36+
public GridFSDownloadBenchmark(final String resourcePath) {
37+
super(Collections.emptyList(), TEST_NAME, resourcePath);
3638
}
3739

3840
@Override

driver-benchmarks/src/main/com/mongodb/benchmark/benchmarks/GridFSMultiFileDownloadBenchmark.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,30 @@
2929
import java.io.FileOutputStream;
3030
import java.io.IOException;
3131
import java.nio.file.Files;
32+
import java.util.Collections;
33+
import java.util.List;
3234
import java.util.concurrent.CountDownLatch;
3335
import java.util.concurrent.ExecutorService;
3436
import java.util.concurrent.Executors;
3537
import java.util.concurrent.TimeUnit;
3638

39+
3740
public class GridFSMultiFileDownloadBenchmark extends AbstractMongoBenchmark {
3841

42+
public static final String TEST_NAME = "GridFS multi-file download";
3943
private GridFSBucket bucket;
4044

4145
private ExecutorService gridFSService;
4246
private ExecutorService fileService;
4347

4448
private File tempDirectory;
4549

46-
@Override
47-
public String getName() {
48-
return "GridFS multi-file download";
50+
public GridFSMultiFileDownloadBenchmark(final List<String> tags) {
51+
super(tags, TEST_NAME);
52+
}
53+
54+
public GridFSMultiFileDownloadBenchmark() {
55+
super(Collections.emptyList(), TEST_NAME);
4956
}
5057

5158
@Override

0 commit comments

Comments
 (0)