# Consul Benchmark Results As part of a benchmark, we started a 4 node DigitalOcean cluster to benchmark. There are 3 servers, meaning writes must commit to at least 2 servers. The cluster uses the 16GB DigitalOcean droplet which has the following specs: * 8 CPU Cores, 2Ghz * 16GB RAM * 160GB SSD disk * 1Gbps NIC # Output Below is the output for a test run on a benchmark cluster. We ran the benchmark several times to warm up the nodes, and this is just a single representative sample. Note, that a single worker was running the benchmark. This means the "stale" test is not representative of total throughput, as the client was only routing to a single server. We also did an initial run where we got lots of noise in the results, so we increased the number of requests to try to get a better sample. ``` ===== PUT test ===== GOMAXPROCS=4 boom -m PUT -d "74a31e96-1d0f-4fa7-aa14-7212a326986e" -n 262144 -c 64 http://127.0.0.1:8500/v1/kv/bench 262144 / 262144 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 % Summary: Total: 69.3512 secs. Slowest: 0.0966 secs. Fastest: 0.0026 secs. Average: 0.0169 secs. Requests/sec: 3779.9491 Total Data Received: 1048576 bytes. Response Size per Request: 4 bytes. Status code distribution: [200] 262144 responses Response time histogram: 0.003 [1] | 0.012 [66586] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.021 [146064] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.031 [34189] |∎∎∎∎∎∎∎∎∎ 0.040 [9178] |∎∎ 0.050 [3682] |∎ 0.059 [1773] | 0.068 [464] | 0.078 [124] | 0.087 [63] | 0.097 [20] | Latency distribution: 10% in 0.0095 secs. 25% in 0.0119 secs. 50% in 0.0151 secs. 75% in 0.0195 secs. 90% in 0.0260 secs. 95% in 0.0323 secs. 99% in 0.0489 secs. ===== GET default test ===== GOMAXPROCS=4 boom -n 262144 -c 64 http://127.0.0.1:8500/v1/kv/bench 262144 / 262144 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 % Summary: Total: 34.8371 secs. Slowest: 0.9568 secs. Fastest: 0.0014 secs. Average: 0.0085 secs. Requests/sec: 7524.8570 Total Data Received: 36175872 bytes. Response Size per Request: 138 bytes. Status code distribution: [200] 262144 responses Response time histogram: 0.001 [1] | 0.097 [261977] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.192 [38] | 0.288 [64] | 0.384 [0] | 0.479 [0] | 0.575 [0] | 0.670 [0] | 0.766 [0] | 0.861 [38] | 0.957 [26] | Latency distribution: 10% in 0.0044 secs. 25% in 0.0055 secs. 50% in 0.0072 secs. 75% in 0.0098 secs. 90% in 0.0130 secs. 95% in 0.0157 secs. 99% in 0.0228 secs. ===== GET stale test ===== GOMAXPROCS=4 boom -n 262144 -c 64 http://127.0.0.1:8500/v1/kv/bench?stale 262144 / 262144 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 % Summary: Total: 26.8200 secs. Slowest: 0.0838 secs. Fastest: 0.0005 secs. Average: 0.0065 secs. Requests/sec: 9774.1922 Total Data Received: 36175872 bytes. Response Size per Request: 138 bytes. Status code distribution: [200] 262144 responses Response time histogram: 0.001 [1] | 0.009 [214210] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.017 [42999] |∎∎∎∎∎∎∎∎ 0.026 [3709] | 0.034 [589] | 0.042 [313] | 0.050 [166] | 0.059 [102] | 0.067 [42] | 0.075 [11] | 0.084 [2] | Latency distribution: 10% in 0.0031 secs. 25% in 0.0041 secs. 50% in 0.0056 secs. 75% in 0.0079 secs. 90% in 0.0109 secs. 95% in 0.0134 secs. 99% in 0.0203 secs. ===== GET consistent test ===== GOMAXPROCS=4 boom -n 262144 -c 64 http://127.0.0.1:8500/v1/kv/bench?consistent 262144 / 262144 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 % Summary: Total: 35.6962 secs. Slowest: 0.0826 secs. Fastest: 0.0016 secs. Average: 0.0087 secs. Requests/sec: 7343.7475 Total Data Received: 36175872 bytes. Response Size per Request: 138 bytes. Status code distribution: [200] 262144 responses Response time histogram: 0.002 [1] | 0.010 [183123] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.018 [70460] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.026 [6955] |∎ 0.034 [657] | 0.042 [391] | 0.050 [229] | 0.058 [120] | 0.066 [121] | 0.074 [68] | 0.083 [19] | Latency distribution: 10% in 0.0047 secs. 25% in 0.0059 secs. 50% in 0.0077 secs. 75% in 0.0104 secs. 90% in 0.0137 secs. 95% in 0.0162 secs. 99% in 0.0227 secs. ``` # Profile In order to probe performance a bit, we ran the get-stale benchmark on the leader itself and collected pprof data. Here's the output of the benchmark: ``` ===== GET stale test ===== GOMAXPROCS=4 boom -n 262144 -c 64 http://127.0.0.1:8500/v1/kv/bench?stale 262144 / 262144 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 % Summary: Total: 16.3139 secs. Slowest: 0.0815 secs. Fastest: 0.0001 secs. Average: 0.0040 secs. Requests/sec: 16068.7946 Total Data Received: 36175872 bytes. Response Size per Request: 138 bytes. Status code distribution: [200] 262144 responses Response time histogram: 0.000 [1] | 0.008 [240221] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.016 [18761] |∎∎∎ 0.025 [1937] | 0.033 [496] | 0.041 [293] | 0.049 [131] | 0.057 [162] | 0.065 [127] | 0.073 [10] | 0.081 [5] | Latency distribution: 10% in 0.0013 secs. 25% in 0.0019 secs. 50% in 0.0030 secs. 75% in 0.0046 secs. 90% in 0.0074 secs. 95% in 0.0109 secs. 99% in 0.0174 secs. ``` And here's the [resulting flame graph](results-0.7.1.svg).