多くの NoSQL に対応したベンチマークツール YCSB を試した

YCSB とは?

YCSB (Yahoo! Cloud System Benchmark) は,NoSQL / KVS に特化したベンチマークツールで,とにかく多くのデータストア(計40種類程度)をサポートしている.例えば以下など.最近 Memcached のベンチマーク目的で使うことがあったため,まとめておく.

  • Aerospike
  • Cassandra
  • DynamoDB
  • Elasticsearch
  • Memcached
  • MongoDB
  • Redis
  • Riak

github.com

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
$ ./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 など,多くのデータストアをサポートしている
  • ワークロードも柔軟に設定することができる
  • 大規模なベンチマークをする場合は,負荷テストの事前申請をしておくこと