Clippy/Fmt Tests Coverage Status

Overview

Benchmarking tool for network services. Currently, limited to HTTP only (H1 or H2, over TCP or TLS). However, it's easily extendable to other protocols.

Usage

Install with cargo ``` $ cargo install perf-gauage $ perf-gauge help

A benchmarking tool for network services

USAGE: perf-gauge [FLAGS] [OPTIONS] [SUBCOMMAND]

FLAGS: -v, --verbose Print debug information. Not recommended for -n > 500 -h, --help Prints help information -V, --version Prints version information

OPTIONS: -c, --concurrency Concurrent threads. Default 1. -d, --duration Duration of the test. -n, --num_req Number of requests. -r, --rate Request rate per second. E.g. 100 or 0.1. By default no limit.

SUBCOMMANDS: help Prints this message or the help of the given subcommand(s) http Run in HTTP(S) mode

```

Help for the http command:

``` $ perf-gauge help http

Run in HTTP(S) mode

USAGE: perf-gauge http [FLAGS] [OPTIONS]

ARGS: Target, e.g. https://my-service.com:8443/8kb

FLAGS: --connreuse If connections should be re-used --http2only Enforce HTTP/2 only --ignorecert Allow self signed certificates. Applies to the target (not proxy). --storecookies If cookies should be stored -h, --help Prints help information -V, --version Prints version information

OPTIONS: --tunnel HTTP Tunnel used for connection, e.g. http://my-proxy.org

```

For example, test an endpoint using a single run, 5 seconds (max possible request rate):

``` $ perf-gauge -c 4 -d 5s \ http https://my-local-nginx.org/10kb --ignorecert --connreuse Duration 5.005778798s Requests: 99565 Request rate: 19890.012 per second Total bytes: 995.6 MB Bitrate: 1591.201 Mbps

Summary: 200 OK: 99565

Latency: Min : 137µs p50 : 191µs p90 : 243µs p99 : 353µs p99.9 : 546µs p99.99 : 1769µs Max : 15655µs Avg : 201µs StdDev : 110µs ```

Reporting performance metrics to Prometheus

Another use case, is to increase request rate and see how the latency degrades.

E.g. increase RPS each minute by 1,000:

``` perf-gauge -c 2 --rate 1000 --ratestep 1000 --ratemax 20000 \ -d 60s \ --prometheus localhost:9091 --prometheuslabels type=plainnginx \ http https://my-local-nginx.org/10kb \ --connreuse --ignorecert \ --tunnel http://localhost:8080

```