mirror of https://github.com/grpc/grpc-go.git
76 lines
2.6 KiB
Markdown
76 lines
2.6 KiB
Markdown
# Benchmark
|
|
|
|
gRPC-Go comes with a set of benchmarking utilities to measure performance.
|
|
These utilities can be found in the `benchmark` directory within the project's
|
|
root directory.
|
|
|
|
The main utility, aptly named `benchmain`, supports a host of configurable
|
|
parameters to simulate various environments and workloads. For example, if your
|
|
server's workload is primarily streaming RPCs with large messages with
|
|
compression turned on, invoking `benchmain` in the following way may closely
|
|
simulate your application:
|
|
|
|
```bash
|
|
$ go run google.golang.org/grpc/benchmark/benchmain/main.go \
|
|
-workloads=streaming \
|
|
-reqSizeBytes=1024 \
|
|
-respSizeBytes=1024 \
|
|
-compression=gzip
|
|
```
|
|
|
|
Pass the `-h` flag to the `benchmain` utility to see other flags and workloads
|
|
that are supported.
|
|
|
|
## Varying Payload Sizes (Weighted Random Distribution)
|
|
|
|
The `benchmain` utility supports two flags, `-reqPayloadCurveFiles` and
|
|
`-respPayloadCurveFiles`, that can be used to specify a histograms representing
|
|
a weighted random distribution of request and response payload sizes,
|
|
respectively. This is useful to simulate workloads with arbitrary payload
|
|
sizes.
|
|
|
|
The options takes a comma-separated list of file paths as value. Each file must
|
|
be a valid CSV file with three columns in each row. Each row represents a range
|
|
of payload sizes (first two columns) and the weight associated with that range
|
|
(third column). For example, consider the below file:
|
|
|
|
```csv
|
|
1,32,12.5
|
|
128,256,12.5
|
|
1024,2048,25.0
|
|
```
|
|
|
|
Assume that `benchmain` is invoked like so:
|
|
|
|
```bash
|
|
$ go run google.golang.org/grpc/benchmark/benchmain/main.go \
|
|
-workloads=unary \
|
|
-reqPayloadCurveFiles=/path/to/csv \
|
|
-respPayloadCurveFiles=/path/to/csv
|
|
```
|
|
|
|
This tells the `benchmain` utility to generate unary RPC requests with a 25%
|
|
probability of payload sizes in the ranges 1-32 bytes, 25% probability in the
|
|
128-256 bytes range, and 50% probability in the 1024-2048 bytes range. RPC
|
|
requests outside these ranges will not be generated.
|
|
|
|
You may specify multiple CSV files delimited by a comma. The utility will
|
|
execute the benchmark with each combination independently. That is, the
|
|
following command will execute four benchmarks:
|
|
|
|
```bash
|
|
$ go run google.golang.org/grpc/benchmark/benchmain/main.go \
|
|
-workloads=unary \
|
|
-reqPayloadCurveFiles=/path/to/csv1,/path/to/csv2 \
|
|
-respPayloadCurveFiles=/path/to/csv3,/path/to/csv4
|
|
```
|
|
|
|
You may also combine `PayloadCurveFiles` with `SizeBytes` options. For example:
|
|
|
|
```
|
|
$ go run google.golang.org/grpc/benchmark/benchmain/main.go \
|
|
-workloads=unary \
|
|
-reqPayloadCurveFiles=/path/to/csv \
|
|
-respSizeBytes=1
|
|
```
|