Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
08e2fee
Fixes for Benchmarking Kafka/RabbitMQ/Pulsar
aloknnikhil Aug 20, 2020
85542df
Pulsar: Remove tiered deployment from main branch
aloknnikhil Aug 20, 2020
a359449
Removing the deploy.yaml file to avoid confusion, as we only used the…
vinothchandar Aug 21, 2020
6d9e0f0
Restore missing benchmark script
aloknnikhil Aug 25, 2020
6d85455
Initial version of redpanda
rkruze Oct 9, 2020
bbffe97
Changes to the benchmarking code to be more redpanda specific
rkruze Oct 9, 2020
cd79937
Added the specific redpanda java files
rkruze Oct 9, 2020
ffea5a1
Working version of Redpanda Benchmark
rkruze Oct 13, 2020
6759574
Merge pull request #1 from rkruze/roko/redpanda-benchmark
rkruze Oct 13, 2020
06b1eed
Fixed formatting in the readme.
rkruze Oct 13, 2020
1aa2dcc
Fixed an issue with the ansible script.
rkruze Oct 14, 2020
066871d
Fixes for single disk instances.
rkruze Oct 14, 2020
d40294c
Updated Kafka to flush for every message
rkruze Oct 23, 2020
0b189c0
Added Grafana and reduced the number of clients
rkruze Oct 23, 2020
c64b858
Updated to work with Debian/Ubuntu along with Fedora/Redhat
rkruze Oct 23, 2020
8ececba
Updated to run on Redhat 8, with client set to 1.
rkruze Oct 23, 2020
4aeda29
benchmark-framework: using nanoseconds resolution rate limiter
mmaslankaprv Jan 14, 2021
72a6e09
Merge pull request #1 from mmaslankaprv/nano-rate-limiter
Jan 14, 2021
6d8b3d5
Python script to generate charts with an index.html
rkruze Jan 30, 2021
a6f7511
generate_charts.py: show max latency
emaxerrno Jan 30, 2021
a21d05d
generate_chars.py: extract value formatting to free func
emaxerrno Jan 30, 2021
3d046ec
bin: add python requirements for rendering graphs
emaxerrno Jan 30, 2021
3b4eb2e
generate_charts.py: fix division by zero
emaxerrno Jan 30, 2021
9d2a0b1
see full graphs
emaxerrno Jan 30, 2021
7726c22
use brighter colors and titles
emaxerrno Jan 31, 2021
a3982f9
fixed coloring of graphs
emaxerrno Jan 31, 2021
3306fda
remove white space for percentile formatting
emaxerrno Jan 31, 2021
3715dae
Merge pull request #2 from senior7515/main
Feb 2, 2021
69346a8
hack-print-to-stdout
emaxerrno Feb 12, 2021
b63066a
pygal.xy chart fixes
emaxerrno Feb 18, 2021
2b95390
Removing workload and results from previous blog post
rkruze Feb 18, 2021
315d6d6
Updates to workloads
rkruze Feb 18, 2021
3fe3a78
Changed the warm up time from 1 minute to 30 minutes
rkruze Feb 18, 2021
03cf5fd
Merge pull request #4 from rkruze/workloads
Feb 18, 2021
0a79599
Deployment changes
rkruze Feb 18, 2021
006009a
Ansible Changes
rkruze Feb 18, 2021
fd77cb7
Terraform updates
rkruze Feb 18, 2021
d71d3a3
Kafka Deployment Changes
rkruze Feb 18, 2021
ddf49d6
Changes to Kafka Deployment
rkruze Feb 19, 2021
bc985c6
Updates for newer version of terraform
rkruze Feb 19, 2021
c28da2c
Increased thread counts for larger machines
rkruze Feb 19, 2021
e6fb7d9
Merge pull request #5 from rkruze/infrastructure
Feb 19, 2021
55018e9
Merge pull request #3 from senior7515/main
Feb 23, 2021
6868e7d
Fixed repos. Also codealchemy node-exporter is now node_exporter.
patrickangeles Jul 20, 2021
aa4ac86
Merge pull request #6 from patrickangeles/main
emaxerrno Jul 25, 2021
c42ccb2
Update README.md
patrickangeles Jul 28, 2021
9e364ff
Configurable warm-up duration
Nov 14, 2021
7565cc2
Merge pull request #8 from patrickangeles/main
patrickangeles Mar 17, 2022
2a114bf
MSK!
patrickangeles Mar 18, 2022
9abef5f
Fixes for security group
patrickangeles Mar 22, 2022
d43fe55
fixed vpc cidr
patrickangeles Mar 23, 2022
005110c
Change default instance sizes and region
tmgstevens May 20, 2022
1d8e693
Merge pull request #7 from jrkinley/main
May 27, 2022
b485915
Changes to support coordinated omission (#10)
tmgstevens May 27, 2022
cde3137
Ducktape testing (#9)
ZeDRoman May 28, 2022
aa943b2
Improvements to generate_charts script
bharathv Jun 23, 2022
3f66493
Merge pull request #15 from bharathv/main
bharathv Jul 6, 2022
4d863bb
Add additional metadata to benchmark output.
bharathv Jul 15, 2022
cfc601c
Update generate_charts with additional metadata
bharathv Jul 15, 2022
43b737c
Merge pull request #18 from bharathv/add-metadata
bharathv Jul 18, 2022
dc37e84
Misc. fixes to generate_charts.py
tmgstevens Jul 15, 2022
38aa1b8
Fix to make index.html have sections per workload. Also embedded SVG …
tmgstevens Jul 20, 2022
c0ff0be
Add option to allow multiple workloads to be put onto the same set of…
tmgstevens Jul 20, 2022
38de33f
Update to use new Redpanda colours
tmgstevens Jul 20, 2022
58b77a6
Make duplicate files error a warning and log to stderr.
tmgstevens Jul 20, 2022
662e011
Merge pull request #20 from tmgstevens/generate_charts
tmgstevens Jul 28, 2022
ab18967
Bump log4j-core from 2.9.1 to 2.17.1 in /benchmark-framework
dependabot[bot] Jul 28, 2022
2a83989
Merge pull request #14 from redpanda-data/dependabot/maven/benchmark-…
tmgstevens Jul 28, 2022
7451441
Fix to ensure that chrony.conf is in the right location (#21)
tmgstevens Jul 28, 2022
21f1ff5
Add fix for backup config owner
jrkinley Aug 1, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ target
*.pyc
*.svg
core/*.json
*.json
*.retry
*.pem
**/.terraform
Expand All @@ -19,3 +18,6 @@ core/*.json
# IntelliJ artifacts
.idea/
*.iml

# VS Code artifacts
.vscode/
122 changes: 122 additions & 0 deletions benchmark-framework/.factorypath

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion benchmark-framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<artifactId>benchmark-framework</artifactId>

<properties>
<log4j.version>2.9.1</log4j.version>
<log4j.version>2.17.1</log4j.version>
</properties>

<dependencies>
Expand Down Expand Up @@ -104,6 +104,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>driver-redpanda</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>driver-rocketmq</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ static class Arguments {

@Parameter(description = "Workloads", required = true)
public List<String> workloads;

@Parameter(names = { "-o", "--output" }, description = "Output", required = false)
public String output;

@Parameter(names = { "-v", "--service-version" }, description = "Optional version of the service being benchmarked, embedded in the final result", required = false)
public String serviceVersion;
}

public static void main(String[] args) throws Exception {
Expand Down Expand Up @@ -124,8 +130,17 @@ public static void main(String[] args) throws Exception {
}

workloads.forEach((workloadName, workload) -> {

try {
workload.validate();
} catch (IllegalArgumentException e) {
e.printStackTrace();
System.exit(-1);
}

arguments.drivers.forEach(driverConfig -> {
try {
String beginTime = dateFormat.format(new Date());
File driverConfigFile = new File(driverConfig);
DriverConfiguration driverConfiguration = mapper.readValue(driverConfigFile,
DriverConfiguration.class);
Expand All @@ -140,9 +155,17 @@ public static void main(String[] args) throws Exception {
WorkloadGenerator generator = new WorkloadGenerator(driverConfiguration.name, workload, worker);

TestResult result = generator.run();

String fileName = String.format("%s-%s-%s.json", workloadName, driverConfiguration.name,
dateFormat.format(new Date()));
result.beginTime = beginTime;
result.endTime = dateFormat.format(new Date());
result.version = arguments.serviceVersion;

String fileName;
if (arguments.output != null && arguments.output.length() > 0) {
fileName = arguments.output;
} else {
fileName = String.format("%s-%s-%s.json", workloadName, driverConfiguration.name,
dateFormat.format(new Date()));
}

log.info("Writing test result into {}", fileName);
writer.writeValue(new File(fileName), result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@
public class TestResult {
public String workload;
public String driver;
public String version;
public String beginTime;
public String endTime;
public long messageSize;
public int topics;
public int partitions;
public int producersPerTopic;
public int consumersPerTopic;

public List<Double> publishRate = new ArrayList<>();
public List<Double> consumeRate = new ArrayList<>();
Expand All @@ -40,6 +48,15 @@ public class TestResult {
public List<Double> publishLatency9999pct = new ArrayList<>();
public List<Double> publishLatencyMax = new ArrayList<>();

public List<Double> publishDelayLatencyAvg = new ArrayList<>();
public List<Long> publishDelayLatency50pct = new ArrayList<>();
public List<Long> publishDelayLatency75pct = new ArrayList<>();
public List<Long> publishDelayLatency95pct = new ArrayList<>();
public List<Long> publishDelayLatency99pct = new ArrayList<>();
public List<Long> publishDelayLatency999pct = new ArrayList<>();
public List<Long> publishDelayLatency9999pct = new ArrayList<>();
public List<Long> publishDelayLatencyMax = new ArrayList<>();

public double aggregatedPublishLatencyAvg;
public double aggregatedPublishLatency50pct;
public double aggregatedPublishLatency75pct;
Expand All @@ -49,8 +66,19 @@ public class TestResult {
public double aggregatedPublishLatency9999pct;
public double aggregatedPublishLatencyMax;

public double aggregatedPublishDelayLatencyAvg;
public long aggregatedPublishDelayLatency50pct;
public long aggregatedPublishDelayLatency75pct;
public long aggregatedPublishDelayLatency95pct;
public long aggregatedPublishDelayLatency99pct;
public long aggregatedPublishDelayLatency999pct;
public long aggregatedPublishDelayLatency9999pct;
public long aggregatedPublishDelayLatencyMax;

public Map<Double, Double> aggregatedPublishLatencyQuantiles = new TreeMap<>();

public Map<Double, Long> aggregatedPublishDelayLatencyQuantiles = new TreeMap<>();

// End to end latencies (from producer to consumer)
// Latencies are expressed in milliseconds (without decimals)

Expand All @@ -73,4 +101,16 @@ public class TestResult {
public double aggregatedEndToEndLatency999pct;
public double aggregatedEndToEndLatency9999pct;
public double aggregatedEndToEndLatencyMax;

public int getTopics() {
return topics;
}

public int getPartitions() {
return partitions;
}

public long getMessageSize() {
return messageSize;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,36 @@ public class Workload {
public int producerRate;

/**
* If the consumer backlog is > 0, the generator will accumulate messages until the requested amount of storage is
* retained and then it will start the consumers to drain it.
* If the consumer backlog is > 0, the generator will accumulate messages until
* the requested amount of storage is retained and then it will start the
* consumers to drain it.
*
* The testDurationMinutes will be overruled to allow the test to complete when the consumer has drained all the
* backlog and it's on par with the producer
* The testDurationMinutes will be overruled to allow the test to complete when
* the consumer has drained all the backlog and it's on par with the producer
*/
public long consumerBacklogSizeGB = 0;

public int warmupDurationMinutes = 30;
public int testDurationMinutes;

/**
* Consumer only tests. The warm-up phase will be run w/ the specified producer
* configuration until the specified backlog is built. Following that, the
* producers are shut off and the consumers are run until the backlog is drained
*/
public boolean consumerOnly;

public void validate() throws IllegalArgumentException {
if (consumerOnly && (subscriptionsPerTopic == 0 || consumerPerSubscription == 0)) {
throw new IllegalArgumentException("Consumer only tests need subscriptions/consumers");
}

if (consumerOnly && consumerBacklogSizeGB <= 0) {
throw new IllegalArgumentException("Consumer only tests need a backlog specification");
}

if (producerRate < 0) {
throw new IllegalArgumentException("Producer rate should be > 0");
}
}
}
Loading