Rendezvous Hashingの簡易速度計測

sile
3 min readJan 16, 2017

--

rendezvous_hash-v0.1.1の簡単なベンチマーク結果(秒間処理数)。

以下は実施手順:

# CPU: Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
# OS: Ubuntu-16.10
# Rust: 1.14.0
$ git clone https://github.com/sile/rendezvous_hash.git
$ cd rendezvous_hash/
# "/usr/share/dict/words"内の単語群をキーにして、
# RendezvousHashingを使って最初の候補ノードを選択する。
#
# ハッシュ関数にはRustのデフォルトのものを使用(SipHasher13)
#
$ cargo run --release --example bench -- /usr/share/dict/words --nodes Rust Alef C++ Camlp4 CommonLisp Erlang Haskell Hermes Limbo Napier Napier88 Newsqueak NIL Sather StandardML
WORD COUNT: 99156 # 対象の単語数
NODE COUNT: 15 # ノード数 (Rust, ..., StandardML)
SELECTED COUNT PER NODE: # 各候補ノードの選択数(ほぼ均等に分布)
- Napier88: 6711
- Haskell: 6607
- StandardML: 6622
- CommonLisp: 6621
- Newsqueak: 6693
- C++: 6605
- Sather: 6495
- Limbo: 6704
- Camlp4: 6536
- Erlang: 6594
- Napier: 6685
- Rust: 6568
- NIL: 6514
- Hermes: 6667
- Alef: 6534
ELAPSED: 84 ms
WORDS PER SECOND: 1177303 # 一秒あたり約117万単語を処理可能(一CPU)

上は候補ノードが15個のケースでの結果(各ノードのキャパシティは等しい)。

ノード数を変更して同様に測定してみたところ次のような結果となった。

候補ノード数を変動させた場合の秒間処理単語数

おおむね 秒間処理単語数 = 1,700万 / ノード数 となっている(実装的にはノード数分のハッシュ関数呼び出しを行っているだけなので当然といえば当然の結果)。

--

--