YCSB とは?
YCSB (Yahoo! Cloud System Benchmark) は,NoSQL / KVS に特化したベンチマークツールで,とにかく多くのデータストア(計40種類程度)をサポートしている.例えば以下など.最近 Memcached のベンチマーク目的で使うことがあったため,まとめておく.
- Aerospike
- Cassandra
- DynamoDB
- Elasticsearch
- Memcached
- MongoDB
- Redis
- Riak
YCSB 概要
コマンドタイプ
YCSB には2種類のコマンドタイプがある.load
はロード系のベンチマークで,run
は参照系のベンチマークになる.
$ ./bin/ycsb.sh load $ ./bin/ycsb.sh run
ワークロードテンプレート
YCSB にはデフォルトで6種類のワークロードテンプレートが用意されている.
$ ls -1 workloads/workload[a-z] workloads/workloada workloads/workloadb workloads/workloadc workloads/workloadd workloads/workloade workloads/workloadf
ワークロード名だけを見てもよくわからなかったけど,実際の定義を見ると以下のように分類できる.
ワークロード名 | 概要 |
---|---|
workloada | Read 50% / Update 50% |
workloadb | Read 95% / Update 5% |
workloadc | Read 100% |
workloadd | Read 95% / Insert 5% |
workloade | Scan 95% / Insert 5% |
workloadf | Read 50% / Read Modify Write 50% |
より詳細な違いはドキュメントを見るとわかる.
ただし,ワークロードテンプレートの初期値は以下のようになっていて,負荷が低く設定されている.
recordcount=1000
operationcount=1000
よって,ここはコマンドで上書きして実行することができる(以下はコマンド例).
$ ./bin/ycsb run memcached -P workloads/workloadc -p "memcached.hosts=memcached" -p 'operationcount=100000'
繰り返し実行する場合は,独自ワークロードファイルを作ることもできる.詳しくはドキュメントに載っている.
ランタイムパラメータ
ワークロードとは別にランタイムパラメータを指定することもできる.
-threads
- スレッド数
- デフォルトはスレッド 1 なので,ベンチマークのときはもっと増やす
-target
- 秒間の処理数
- デフォルトは可能な限り性能を出すようになっている
-s
- ステータス表示
- 10秒おきにベンチマークのステータスが表示される
詳しくはドキュメントに載っている.
ベンチマーク結果
Wiki から引用すると,以下のような結果が出力される.ベンチマークの目的にもよるけど,一般的には [OVERALL],Throughput(ops/sec)
と,各操作の AverageLatency(ms)
と MinLatency(ms)
と MaxLatency(ms)
あたりを見ておくと良さそう.
[OVERALL],RunTime(ms), 10077 [OVERALL],Throughput(ops/sec), 9923.58836955443 [UPDATE], Operations, 50396 [UPDATE], AverageLatency(ms), 0.04339630129375347 [UPDATE], MinLatency(ms), 0 [UPDATE], MaxLatency(ms), 338 [UPDATE], Return=0, 50396 [UPDATE], 0, 0.10264765784114054 [UPDATE], 2000, 0.026989343690867442 [UPDATE], 4000, 0.0352882703777336 [UPDATE], 6000, 0.004238958990536277 [UPDATE], 8000, 0.052813085033008175 [UPDATE], 10000, 0.0 [READ], Operations, 49604 [READ], AverageLatency(ms), 0.038242883638416256 [READ], MinLatency(ms), 0 [READ], MaxLatency(ms), 230 [READ], Return=0, 49604 [READ], 0, 0.08997245741099663 [READ], 2000, 0.02207505518763797 [READ], 4000, 0.03188493260913297 [READ], 6000, 0.004869141813755326 [READ], 8000, 0.04355329949238579 [READ], 10000, 0.005405405405405406
YCSB Memcached binding インストール
GitHub Releases は最近更新されていないため,自分でビルドする.今回は Amazon Linux で Memcached にベンチマークを実行するための環境構築を試した.ただし,AWS では侵入テストだけではなく,負荷テストも事前申請が必要になることがある.最悪の場合はネットワークを遮断されることもあるので,気軽に実行せず,注意すること.
インストール手順は GitHub の通りに進めることができた.Maven は現時点で最新の 3.5.2
にした.
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz $ sudo tar xzf apache-maven-*-bin.tar.gz -C /usr/local (中略) $ git clone https://github.com/brianfrankcooper/YCSB.git $ cd YCSB $ mvn -pl com.yahoo.ycsb:memcached-binding -am clean package
YCSB Memcached binding 実行
あとは想定するワークロードでベンチマークを実行する.以下にサンプルを載せておく.
- workloadc (Read 100%)
- threads 10
- 操作回数 : 100000
- 秒間 : 3000
- 秒間 : 10000
- 秒間 : 100000
- threads 1024
- 操作回数 : 100000
- 秒間 : 3000
- 秒間 : 10000
- 秒間 : 100000
- threads 10
$ ./bin/ycsb run memcached -threads 10 -target 3000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000 $ ./bin/ycsb run memcached -threads 10 -target 10000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000 $ ./bin/ycsb run memcached -threads 10 -target 100000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000 $ ./bin/ycsb run memcached -threads 1024 -target 3000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000 $ ./bin/ycsb run memcached -threads 1024 -target 10000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000 $ ./bin/ycsb run memcached -threads 1024 -target 100000 -P workloads/workloadc -p "memcached.hosts=memcached" -p operationcount=100000
まとめ
- NoSQL / KVS に特化したベンチマークツール YCSB を試した
- YCSB は Memcached / Redis / DynamoDB など,多くのデータストアをサポートしている
- ワークロードも柔軟に設定することができる
- 大規模なベンチマークをする場合は,負荷テストの事前申請をしておくこと