HashtreeでBenchmarking

verifyとか加えてみた。

以下本題


N=512の場合(パスサイズは9ハッシュ)

sample = for _ <- 1 .. 512, do: :crypto.strong_rand_bytes(10)

※strong_rand_bytesで10バイトのランダムなバイナリを生成しているが、Hashtreeでは各ノードはHash関数で32バイトのハッシュ値に変換されるので、この数値は何でもOK

マークルルートを測定

:timer.tc(Hashtree, :merkle_root, [sample])

結果は「9599マイクロ秒」

:t{9599, "9b3b98450e5cdd9d57cc7ef7ac150ee01b2ccb463945d6a5c9e500abf80ef279"}

マークルパスを測定

:timer.tc(Hashtree, :merkle_path, [sample])

結果は「9317マイクロ秒」

:timer.tc(Hashtree, :merkle_path, [sample])
{9317,
[[right: "4b212bc47ae965f4ef41b6374b5ac460ea71826285a1c200c055e5b907657fdc",
right: "3ac904742b7b5500eb9ce0514e496ecb56ce5189c500b0302230cb4ceeca60ef",
right: "1daf0975249d367fa4a568dca9e2a15034b05c6954611baa66e7b763fe670e62",
以下略

N=65536(パスサイズは16ハッシュ)の場合

:merkle_root => 686454マイクロ秒

:merkle_path => 688654マイクロ秒


N=1048576(パスサイズは20ハッシュ)の場合

:merkle_root => 11714360マイクロ秒

:merkle_path=> 12791992マイクロ秒

流石にキツイか…


テスト環境

Show your support

Clapping shows how much you appreciated rodem’s story.