warp run

Execute benchmarks defined in YAML configuration files for repeatable and version-controlled testing.

Synopsis

Parameters

CONFIG_FILE

The path to a YAML configuration file that defines the benchmark parameters. The configuration file specifies the benchmark type, S3 connection details, and test parameters. YAML configuration supports all flags and options available in standard Warp benchmark commands.

This parameter is required.

Flags

Template variables

--var

Default: no variables set

Set template variables for dynamic parameter substitution in the YAML configuration. The default behavior uses the configuration file as written without substitution. Use this flag to parameterize configuration files for different test scenarios.

Specify variables in the format Name=Value. You can use this flag multiple times to set multiple variables. Variables are referenced in YAML files using Go template syntax like {{.VariableName}}.

Example:

warp run config.yaml --var Host=s3.example.com --var Duration=5m

Display control

--debug

Default: false

Enable detailed debug output for troubleshooting. The default behavior shows only benchmark execution output. Use this flag to see template processing and configuration parsing details.

Example:

warp run config.yaml --debug

YAML configuration structure

YAML configuration files define all benchmark parameters in a structured format. This structure makes benchmark configurations more maintainable and shareable than long command-line invocations.

Basic structure

All Warp configurations use a top-level warp element with an api version and benchmark type.

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  bucket: benchmark-bucket
  duration: 5m
  concurrent: 100
  objects: 10000

The api field specifies the configuration format version. Currently only v1 is supported.

The benchmark field specifies which benchmark operation to run. Valid values include get, put, delete, list, stat, mixed, and all other Warp benchmark types.

Connection parameters

Connection parameters define how Warp connects to the S3 endpoint.

warp:
  api: v1
  benchmark: mixed
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  bucket: benchmark-bucket
  tls: true
  region: us-east-1

The host field specifies the S3 endpoint address and port. The access-key and secret-key fields provide S3 credentials. The bucket field names the bucket for benchmark operations. The tls field enables or disables TLS encryption. The region field specifies the S3 region.

Benchmark parameters

Benchmark parameters control test execution.

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  duration: 10m
  concurrent: 200
  objects: 100000
  obj:
    size: 10MB

The duration field sets the benchmark run duration. The concurrent field controls the number of concurrent operations. The objects field specifies how many objects to use in the benchmark.

Object configuration uses a nested obj section. The obj.size field defines object size.

Distribution parameters

For mixed workload benchmarks, distribution parameters control operation ratios.

warp:
  api: v1
  benchmark: mixed
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  distribution:
    get: 45
    put: 15
    stat: 30
    delete: 10

Distribution values specify the percentage of each operation type. The values should sum to 100 for correct operation distribution.

Analysis parameters

Analysis parameters control result processing and output.

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  analyze:
    dur: 30s
    verbose: true
    skip-duration: 1m
  benchdata: results.csv.zst

The analyze.dur field sets time segment duration for analysis. The analyze.verbose field enables detailed output. The analyze.skip-duration field excludes warmup time from analysis. The benchdata field specifies the output filename for benchmark data.

Template variables

Use Go template syntax to parameterize configuration files.

warp:
  api: v1
  benchmark: {{.Benchmark}}
  host: {{.Host}}
  access-key: {{.AccessKey}}
  secret-key: {{.SecretKey}}
  duration: {{.Duration}}
  concurrent: {{.Concurrent}}
  obj:
    size: {{.ObjSize}}

Set template variables using the --var flag when running the benchmark.

warp run config.yaml \
  --var Benchmark=get \
  --var Host=s3.example.com:9000 \
  --var AccessKey=ACCESS_KEY \
  --var SecretKey=SECRET_KEY \
  --var Duration=5m \
  --var Concurrent=100 \
  --var ObjSize=10MB

This approach enables a single configuration file to support multiple test scenarios.

Advanced parameters

Advanced sections organize related parameters.

The io section groups input/output parameters. The remote section contains distributed benchmark settings. The params section holds test-specific parameters. The advanced section includes advanced tuning options.

These sections do not add prefixes to flag names. They organize the configuration file for readability.

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  io:
    part-size: 5MB
  remote:
    host: storage-server.example.com
  params:
    custom-setting: value

Configuration examples

The Warp repository includes sample YAML configurations in the yml-samples/ directory. These samples demonstrate various benchmark scenarios and configuration patterns.

Sample configurations cover mixed workload benchmarks, specific operation benchmarks, distributed benchmark configurations, and advanced feature testing.

Output

The run command executes the specified benchmark and displays results.

The output includes real-time progress during benchmark execution. Operation counts and throughput appear as the benchmark runs. After completion, the command displays comprehensive statistics.

If the configuration specifies a benchdata output file, the command saves detailed benchmark data. This data file is compatible with warp analyze and other analysis commands.

Examples

Run basic configuration

Execute a benchmark from a YAML file:

warp run get-benchmark.yaml

The configuration file defines all benchmark parameters.

Run with variables

Execute a benchmark with template variable substitution:

warp run config.yaml \
  --var Host=s3.example.com:9000 \
  --var Duration=10m \
  --var Concurrent=200

The variables replace template placeholders in the configuration file.

Run different object sizes

Test performance with different object sizes using a single configuration:

# Small objects
warp run config.yaml --var ObjSize=1KB --var Concurrent=500

# Medium objects
warp run config.yaml --var ObjSize=1MB --var Concurrent=100

# Large objects
warp run config.yaml --var ObjSize=100MB --var Concurrent=10

This approach enables systematic testing across object size ranges.

Run with debug output

Execute with debug logging to troubleshoot configuration issues:

warp run config.yaml --debug

The debug output shows template processing and parameter mapping.

Run mixed workload

Execute a mixed workload benchmark from configuration:

warp run mixed-workload.yaml

Example configuration:

warp:
  api: v1
  benchmark: mixed
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  bucket: benchmark-bucket
  duration: 10m
  concurrent: 100
  objects: 50000
  distribution:
    get: 45
    put: 15
    stat: 30
    delete: 10
  obj:
    size: 10MB

Run distributed benchmark

Execute a distributed benchmark using YAML configuration:

warp run distributed-config.yaml

Example configuration:

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  bucket: benchmark-bucket
  duration: 5m
  concurrent: 100
  warp-client:
    - client1.example.com:7761
    - client2.example.com:7761
    - client3.example.com:7761

The configuration specifies multiple client endpoints for distributed load generation.

Run with custom analysis

Execute with specific analysis parameters:

warp run config.yaml

Example configuration:

warp:
  api: v1
  benchmark: get
  host: s3.example.com:9000
  access-key: ACCESS_KEY
  secret-key: SECRET_KEY
  duration: 10m
  analyze:
    dur: 30s
    verbose: true
    skip-duration: 1m
  benchdata: detailed-results.csv.zst

This configuration segments analysis into 30-second intervals, skips the first minute, and saves detailed data.