hack/benchmark: add script for benchmark

This is for etcd benchmark.
release-2.2
Yicheng Qin 2015-08-19 16:51:39 -07:00
parent 28b61acd9e
commit 46a2ae77a1
2 changed files with 79 additions and 0 deletions

14
hack/benchmark/README.md Normal file
View File

@ -0,0 +1,14 @@
## Usage
Benchmark 3-member etcd cluster to get its read and write performance.
## Instructions
1. Start 3-member etcd cluster on 3 machines
2. Update `$leader` and `$servers` in the script
3. Run the script in a separate machine
## Caveat
1. Set environment variable `GOMAXPROCS` as the number of available cores to maximize CPU resources for both etcd member and bench process.
2. Set the number of open files per process as 10000 for amounts of client connections for both etcd member and benchmark process.

65
hack/benchmark/bench.sh Normal file
View File

@ -0,0 +1,65 @@
#!/bin/bash -e
leader=http://10.240.201.15:4001
# assume three servers
servers=( http://10.240.201.15:4001 http://10.240.212.209:4001 http://10.240.95.3:4001 )
keyarray=( 64 256 )
for keysize in ${keyarray[@]}; do
echo write, 1 client, $keysize key size, to leader
./boom -m PUT -n 10 -d value=`head -c $keysize < /dev/zero | tr '\0' '\141'` -c 1 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo write, 64 client, $keysize key size, to leader
./boom -m PUT -n 640 -d value=`head -c $keysize < /dev/zero | tr '\0' '\141'` -c 64 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo write, 256 client, $keysize key size, to leader
./boom -m PUT -n 2560 -d value=`head -c $keysize < /dev/zero | tr '\0' '\141'` -c 256 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo write, 64 client, $keysize key size, to all servers
for i in ${servers[@]}; do
./boom -m PUT -n 210 -d value=`head -c $keysize < /dev/zero | tr '\0' '\141'` -c 21 $i/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo &
done
# wait for all booms to start running
sleep 3
# wait for all booms to finish
for pid in $(pgrep 'boom'); do
while kill -0 "$pid" 2> /dev/null; do
sleep 3
done
done
echo write, 256 client, $keysize key size, to all servers
for i in ${servers[@]}; do
./boom -m PUT -n 850 -d value=`head -c $keysize < /dev/zero | tr '\0' '\141'` -c 85 $i/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo &
done
sleep 3
for pid in $(pgrep 'boom'); do
while kill -0 "$pid" 2> /dev/null; do
sleep 3
done
done
echo read, 1 client, $keysize key size, to leader
./boom -n 100 -c 1 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo read, 64 client, $keysize key size, to leader
./boom -n 6400 -c 64 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo read, 256 client, $keysize key size, to leader
./boom -n 25600 -c 256 $leader/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
echo read, 64 client, $keysize key size, to all servers
# bench servers one by one, so it doesn't overload this benchmark machine
# It doesn't impact correctness because read request doesn't involve peer interaction.
for i in ${servers[@]}; do
./boom -n 21000 -c 21 $i/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
done
echo read, 256 client, $keysize key size, to all servers
for i in ${servers[@]}; do
./boom -n 85000 -c 85 $i/v2/keys/foo | grep -e "Requests/sec" -e "Latency" -e "90%" | tr "\n" "\t" | xargs echo
done
done