ビットコイン・インスティテュート

シンプルなトラフィック負荷テストの実行

lfm 2010年7月25日13:02 UTC

IRCチャンネルで、スケーラビリティや、スパムのトランザクションによるサービス拒否攻撃について憶測が飛び交っていたので、テストをしてみるのがいいと思った。

私のLinuxマシン2台に、しょうもない小さなbitcoindスクリプトを設定し、3台目のマシンに向けて、できるだけ速く1000件の少額トランザクションを送った。

IRCで、やるべきでない明確な理由があるか尋ねたところ、いいアイデアだという賛成が1つと、まずここで聞くべきだという慎重な意見が1つあった。私は軽率にも、やってしまうことにした。

スクリプトはループの残りステップ数のカウントダウンと、bitcoindのsendtoaddressコマンドの出力(通常は単に「sent」)を表示するだけのものだった。

どちらも最初は速く動いていたが、約600件のトランザクションを送ったころから、両方の送信側が目に見えて遅くなり始めた。一方がもう一方より3〜4倍速かったが、これはCPUが速いせいだと思う。最初は、ネットワークの過負荷を防ぐためにクライアントが速度を絞っているのかと思ったが、それはただの推測だった。あとで、古いディスク上のデータベースが少し遅くなっているのではないかという結論に至った。

そのあと、一方のマシンが突然速くなったように見えた。だが実際はそうではなかった。エラーが出て、bitcoindデーモンが止まっていたのだ。調べてみると、.bitcoinのドライブが満杯になっていたので、そこで投げ出したプログラムを責めるわけにはいかない! (にやり)

もう一方のマシンはそのころにはかなり遅くなっていて、目で見て1トランザクションあたり約5秒ほどだった。最終的に、約50分後にエラーなく終わった。

クラッシュしたマシンはディスク容量を足したあとすぐに再起動したが、424件のトランザクションしか送っていなかったと分かった。つまり、最初のベンチマークとしては50分間で1424件のトランザクションということになる。もっと多くの処理も、たやすくできるだろう。

遅くなった主な原因は.bitcoin/databaseディレクトリだったと思う。ディスク容量が足りなくなったマシンでは約184MB、1000件のトランザクションを終えたマシンでは1341MBのデータが書き込まれていた。

もっと多くの人がネットワーク上に分散して参加する別のテストをやって、潜在的な問題を洗い出す価値があるかもしれない。

ネットワークは何事もなかったかのように処理したので、これはいい結果だ。クライアントはおおむね指示どおり、期待どおりに動いたが、データベースには性能の問題があるかもしれない。

今思いつくのは以上だ。

lfm 2010年7月25日13:09 UTC

テスト中ずっとIRCを動かして進捗を議論できていたので、ネットワークリソースを飽和させるところまで行っていなかったと思う。

テストの後半でトランザクションの速度がかなり低下した。これがネットワークの問題だとすれば、将来のサービス拒否攻撃について非常に心配だ。後でもっと大規模なテストを組織できると良い。

興味がある人向けに、このイベントのパケットキャプチャ(接続が1つだけの「エッジ」コンピューターから)を置いておく。http://www.freefilehostingnow.com/filedownload.aspx?code=6bb2dbeea18e6a419daaadda5798bb05ec6b

それはテストネットワークでやったのかな? http://bitcointalk.org/index.php?topic=363.0

サトシ・ナカモトの投稿(2010年7月25日14:46 UTC)

それはテストネットワークでやったのかな? http://bitcointalk.org/index.php?topic=363.0

いや。

これらのテストはテストネットワークでやってほしい。そのためのものだ。ありがとう。

サトシ・ナカモトの投稿(2010年7月25日15:29 UTC)

これらのテストはテストネットワークでやってほしい。そのためのものだ。ありがとう。

そんなに小さなネットワークからは現実のデータは得られない。それに、信頼できるネットワークなら、どんな種類のテストにも耐えられなければならない。

なら、せめて何より先にテストネットワークでやってくれ!

もしテストネットワークを壊せたなら、本番ネットワークも壊せる見込みは十分ある。もしテストネットワークが壊れなかったら、そのときは本番ネットワークに対して走らせて「スケールアップ」の問題を探してくれていい。

FreeMoney 2010年7月25日20:01 UTC
ギャビン・アンドレセンの投稿(2010年7月25日16:14 UTC)

なら、せめて何より先にテストネットワークでやってくれ!

もしテストネットワークを壊せたなら、本番ネットワークも壊せる見込みは十分ある。もしテストネットワークが壊れなかったら、そのときは本番ネットワークに対して走らせて「スケールアップ」の問題を探してくれていい。

本当に? 本物のほうがずっと頑健だと思う、というか、そうであってほしいんだが。違う?

lfm 2010年7月25日20:25 UTC
サトシ・ナカモトの投稿(2010年7月25日15:29 UTC)

これらのテストはテストネットワークでやってほしい。そのためのものだ。ありがとう。

すまない、テストネットワークの存在自体を知らなかった。悪かった。

テストネットワーク向けに、もっとずっと大がかりなテストを企画できないかな? 同時にもっと大勢で。

aceat64 2010年7月25日21:31 UTC
lfmの投稿(2010年7月25日20:25 UTC)
サトシ・ナカモトの投稿(2010年7月25日15:29 UTC)

これらのテストはテストネットワークでやってほしい。そのためのものだ。ありがとう。

すまない、テストネットワークの存在自体を知らなかった。悪かった。

テストネットワーク向けに、もっとずっと大がかりなテストを企画できないかな? 同時にもっと大勢で。

テストの長さを比較的短く保つなら、テストネットワークにEC2インスタンスを数台投入して協力するのは構わない。