blob: 95cb9f9d907e938c93d825c41b32f6cc6eb9d837 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
const EXAMPLES: &str = r#"EXAMPLES:
1) Pinned Mode Benchmarking:
Run benchmarks with pinned producers and consumers. This mode pins specific producers
and consumers to specific streams and partitions (one to one):
$ cargo r -r --bin iggy-bench -- pinned-producer --streams 10 --producers 10 tcp
$ cargo r -r --bin iggy-bench -- pinned-consumer --streams 10 --consumers 10 tcp
$ cargo r -r --bin iggy-bench -- pinned-producer-and-consumer --streams 10 --producers 10 --consumers 10 tcp
$ cargo r -r --bin iggy-bench -- -T 10GB pp --producers 5 tcp
2) Balanced Mode Benchmarking:
Run benchmarks with balanced distribution of producers and consumers. This mode
automatically balances the load across streams and consumer groups:
$ cargo r -r --bin iggy-bench -- balanced-producer --partitions 24 --producers 6 tcp
$ cargo r -r --bin iggy-bench -- balanced-consumer-group --consumers 6 tcp
$ cargo r -r --bin iggy-bench -- balanced-producer-and-consumer-group --partitions 24 --producers 6 --consumers 6 tcp
$ cargo r -r --bin iggy-bench -- -T 10GB bpc tcp
3) End-to-End Benchmarking:
Run end-to-end benchmarks that measure performance for a producer that is also a consumer:
$ cargo r -r --bin iggy-bench -- end-to-end-producing-consumer --producers 12 --streams 12 tcp
$ cargo r -r --bin iggy-bench -- end-to-end-producing-consumer-group --partitions 24 --producers 6 tcp
4) Advanced Configuration:
You can customize various parameters for any benchmark mode:
Global options (before the benchmark command):
--messages-per-batch (-p): Number of messages per batch [default: 1000]
For random batch sizes, use range format: "100..1000"
--message-batches (-b): Total number of batches [default: 1000]
--total-messages-size (-T): Total size of messages to send (e.g., "1GB", "500MB")
Mutually exclusive with --message-batches
--message-size (-m): Message size in bytes [default: 1000]
For random sizes, use range format: "100..1000"
--rate-limit (-r): Optional throughput limit per producer (e.g., "50KB", "10MB")
--warmup-time (-w): Warmup duration [default: 0s]
--sampling-time (-t): Metrics sampling interval [default: 10ms]
--moving-average-window (-W): Window size for moving average [default: 20]
Benchmark-specific options (after the benchmark command):
--streams (-s): Number of streams
--partitions (-a): Number of partitions
--producers (-c): Number of producers
--consumers (-c): Number of consumers
--max-topic-size (-T): Max topic size (e.g., "1GiB")
--message-expiry (-e): Topic message expiry time (e.g., "1s", "5min", "1h")
Examples with detailed configuration:
# Fixed message and batch sizes:
$ cargo r -r --bin iggy-bench -- \
--message-size 1000 \
--messages-per-batch 100 \
--message-batches 1000 \
--rate-limit "100MB" \
balanced-producer \
--streams 5 \
--producers 5 \
tcp
# Random message sizes (100-1000 bytes):
$ cargo r -r --bin iggy-bench -- \
--message-size "100..1000" \
--messages-per-batch 100 \
--total-messages-size "1GB" \
balanced-producer \
--streams 5 \
--producers 5 \
tcp
# Random batch sizes (10-100 messages per batch):
$ cargo r -r --bin iggy-bench -- \
--message-size 1000 \
--messages-per-batch "10..100" \
--total-messages-size "500MB" \
balanced-producer \
--streams 5 \
--producers 5 \
tcp
# Random message and batch sizes with rate limiting:
$ cargo r -r --bin iggy-bench -- \
--message-size "500..2000" \
--messages-per-batch "50..200" \
--total-messages-size "2GB" \
--rate-limit "50MB" \
balanced-producer \
--streams 5 \
--producers 5 \
tcp
5) Remote Server Benchmarking:
To benchmark a remote server, specify the server address in the transport subcommand:
$ cargo r -r --bin iggy-bench -- pinned-producer \
--streams 5 --producers 5 \
tcp --server-address 192.168.1.100:8090
6) Output Data and Results:
The benchmark tool can store detailed results for analysis and comparison:
# Basic result storage (results will be stored in ./performance_results):
$ cargo r -r --bin iggy-bench -- pinned-producer --streams 10 --producers 10 tcp output
# Organized benchmarking with metadata:
$ cargo r -r --bin iggy-bench -- balanced-producer --partitions 24 --producers 6 tcp \
output \
--identifier "prod-test-$(date +%Y%m%d)" \
--remark "production-config" \
--gitref "$(git rev-parse --short HEAD)" \
--gitref-date "$(git show -s --format=%cI HEAD)"
# Quick result visualization:
$ cargo r -r --bin iggy-bench -- end-to-end-producing-consumer --producers 12 --streams 12 tcp \
output --open-charts
Output configuration options:
--open-charts (-c) : Open charts after the benchmark
--output-dir (-o) : Directory for storing results [default: performance_results]
--identifier : Benchmark run ID (if not provided defaults to hostname)
--remark : Additional context (e.g., "production-config")
--extra-info : Custom metadata for future analysis, currently unused
7) Help and Documentation:
For more details on available options:
# General help
$ cargo r -r --bin iggy-bench -- --help
# Specific benchmark help
$ cargo r -r --bin iggy-bench -- pinned-producer --help
# Protocol help
$ cargo r -r --bin iggy-bench -- pinned-producer tcp --help
# Output help
$ cargo r -r --bin iggy-bench -- pinned-producer tcp output --help
"#;
pub fn print_examples() {
println!("{EXAMPLES}");
}