初期ブロックダウンロードの高速化(5倍高速)

11 件のメッセージ BitcoinTalk サトシ・ナカモト, knightmb, NewLibertyStandard, lachesis, Bitcoiner 2010年7月23日 — 2010年7月24日

データベース設定をいくつか調整することで、初期ブロックダウンロードを約 5倍高速化することができた。約 30分でダウンロードが完了する。

データベースのデフォルト設定では、各ブロックを同期的にディスクに書き込んでいたが、これは必要ない。変更をメモリーにキャッシュし、バッチで書き出すように設定を変更した。ブロックはトランザクション的に書き込まれるため、完全な変更が行われるか、まったく行われないかのどちらかであり、いずれの場合もデータは有効な状態に保たれる。

この変更は初期ブロックダウンロード中のみ有効にした。最新のブロックから 2000 ブロック以内に近づくと、これらの変更はオフになり、従来の速度に戻る。

使い始めたい方のためにテストビルドを作成した:

http://www.bitcoin.org/download/bitcoin-0.3.2.5-win32.zip http://www.bitcoin.org/download/bitcoin-0.3.2.5-linux.tar.gz

これらのバイナリには、ギャビン・アンドレセンの JSON-RPC HTTP 認証機能と、0.3.2 からのその他の重要なセキュリティ改善も含まれている。

過去 24時間にわたって、初期ブロックダウンロードを試みている最中に 2〜60秒ごとにランダムに強制終了して再起動するテストを実行したが(かわいそうに)、問題なかった。

wallet.dat の処理方法に変更はない。この変更は blk*.dat と重要でない addr.dat のみが対象だ。blk*.dat がおかしくなった場合は、いつでも削除して再ダウンロードさせることができる。

knightmb 2010年7月23日 18:27 UTC 原文 ·

これは君がセットアップしたテストネットワーク用なのか、それとも現行のパブリックネットワーク用なのか?

NewLibertyStandard 2010年7月23日 18:42 UTC 原文 ·
knightmbの投稿(2010年7月23日 18:27 UTC)

これは君がセットアップしたテストネットワーク用なのか、それとも現行のパブリックネットワーク用なのか?

これは通常のネットワーク用だ。テストネットワークには効果的にテストできるだけのブロック数がない。私の見る限り、satoshi のビルドは特に指定がない限り常にライブネットワーク向けだ。

knightmb 2010年7月23日 18:50 UTC 原文 ·

最高だ。じゃあワイプしてテストするのに使える特に遅いマシンが何台かあるぞ。速いマシンでどうなるかも見てみたい。😊

knightmb 2010年7月23日 19:01 UTC 原文 ·

今のところ、Windows クライアントでは素晴らしい速度向上だ。プライベートノードを使って約 500 ブロック/秒を処理している。タイマーが完了したら、インターネット上のワイルドノードで試して速度が同じくらい出るか確認する。

knightmb 2010年7月23日 19:32 UTC 原文 ·
サトシ・ナカモトの投稿(2010年7月23日 09:24 UTC)

データベース設定をいくつか調整することで、初期ブロックダウンロードを約5倍高速化することができた。約30分でダウンロードが完了する。

データベースのデフォルト設定では、各ブロックを同期的にディスクに書き込んでいたが、これは必要ない。変更をメモリーにキャッシュし、バッチで書き出すように設定を変更した。ブロックはトランザクション的に書き込まれるため、完全な変更が行われるか、まったく行われないかのどちらかであり、いずれの場合もデータは有効な状態に保たれる。

この変更は初期ブロックダウンロード中のみ有効にした。最新のブロックから2000ブロック以内に近づくと、これらの変更はオフになり、従来の速度に戻る。

最初の 70k ブロックは約 20分でダウンロードされ、残り 2000 ブロックは約 7分で、0%から 100%までわずか 27分。非常に良い!最後の 2000 ブロックで止める安全上の理由があるのか、それとも残り 500 ブロックなどに調整できるのか?

念のため言うと、各ダウンロードバーストの平均速度は約 3 Mbps だった。

knightmb 2010年7月23日 20:04 UTC 原文 ·

ワイルド環境でもブロックダウンロードは同じくらい速い(約 3 Mbps)ので、大いに賛成だ。これは確かに新規ユーザーの立ち上げを大幅に早めるだろう。

knightmbの投稿(2010年7月23日 10:32 UTC)

最後の2000ブロック以内で停止する安全上の理由はあるのか、それとも残り500ブロックに調整できるのか?

特にない。次回は 1000 に変更する。

knightmb 2010年7月23日 20:29 UTC 原文 ·
サトシ・ナカモトの投稿(2010年7月23日 20:13 UTC)
knightmbの投稿(2010年7月23日 19:32 UTC)

最後の2000ブロック以内で止めるのは安全上の理由があるのか、それとも例えば残り500ブロックで止めるように調整できるのか?

特にない。次は1000に変える。

どちらにしても、旧バージョンに比べてすごい改善だ!素晴らしい仕事だ!

2 台並べて走らせてみた(現行リリースと君の新しい高速版)。新しい方がワイプ後に 2回ダウンロードを終える間に、元の方はまだ数千ブロックしか進んでいなかった。😁

lachesis 2010年7月24日 02:57 UTC 原文 ·

おめでとう!うっかり blk*.dat を消してしまった後の初回ダウンロードは libeatmydata を使って多少は助けになったが、こっちの方がもっと良さそうだ!

Bitcoiner 2010年7月24日 15:54 UTC 原文 ·

いいね。即座にフラッシュする必要があるのは「自分発」のトランザクションだけかもしれない。つまり自分でお金を送ったり受け取ったりした場合だけだ、ということじゃないか?