分散ハッシュテーブル(Kademlia) churn下での実験

ノードの生存時間は1/5120=λとする指数分布に従って,ランダムに発生させgetの成功回数と,RTTを測定しました.なお,この場合,平均生存時間は5120秒となります.(c.f. "A Measurement Study of Peer-to-Peer File Sharing Systems", Stefan Saroiu, P. Krishna Gummandi, Steven D. Gribble, 2002)

測定マシンは,2GHz Core Duo,2GB RAM, MacOS X 10.4.11 Tigerです.

ノード数 get成功回数 get失敗回数 平均RTT[s]
5000 930 70 0.17519
4000 981 19 0.16227
3000 968 32 0.13779
2000 976 24 0.12875
1000 979 21 0.14112


また,Kademliaはルックアップ等でルーティングテーブルを更新するため,事前にルーティングテーブルを更新するような操作を行ってから,同じように測定してみました(2回getして2回目を測定).

ノード数 get成功回数 get失敗回数 平均RTT[s]
5000 930 13 0.05952
4000 999 1 0.06782
3000 992 8 0.08494
2000 999 1 0.13705
1000 995 5 0.04849

という感じで,頻繁に使うほどルーティングテーブルがアップデートされ,get成功率が高くなるようです.また,一時的にデータが取得できなくても,一定時間後にはほとんど確実にデータを取得できます.これは,データを定期的に再配置しているからです.


5000ノードの時に性能ががくんと落ちていますが,これはおそらく,CPUリソースが足りないからだと思われます.topで確認しつつ実験を行ってみると,5000ノードの時は,CPU idleが0%とかが頻出していたので,リクエストがタイムアウトして,get失敗したのではないかと思われます.