初期ブロックダウンロードの高速化(5倍高速)
データベース設定をいくつか調整することで、初期ブロックダウンロードを約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がおかしくなった場合は、いつでも削除して再ダウンロードさせることができる。
これは君がセットアップしたテストネットワーク向け? それとも現行のパブリックネットワーク向け?
これは通常のネットワーク用だ。テストネットワークには効果的にテストできるだけのブロック数がない。私の見る限り、satoshiのビルドは特に指定がない限り常にライブネットワーク向けだ。
今のところ、Windowsクライアントでは素晴らしい速度向上だ。プライベートノードを使って約500ブロック/秒を処理している。タイマーが完了したら、インターネット上の実際のノードで試して速度が同じくらい出るか確認する。
データベース設定をいくつか調整することで、初期ブロックダウンロードを約5倍高速化することができた。約30分でダウンロードが完了する。
データベースのデフォルト設定では、各ブロックを同期的にディスクに書き込んでいたが、これは必要ない。変更をメモリーにキャッシュし、バッチで書き出すように設定を変更した。ブロックはトランザクション的に書き込まれるため、完全な変更が行われるか、まったく行われないかのどちらかであり、いずれの場合もデータは有効な状態に保たれる。
この変更は初期ブロックダウンロード中のみ有効にした。最新のブロックから2000ブロック以内に近づくと、これらの変更はオフになり、従来の速度に戻る。
最初の70kブロックは約20分でダウンロードされ、残り2000ブロックは約7分で、0%から100%までわずか27分。すごくいいね! 最後の2000ブロックで止める安全上の理由があるのか、それとも残り500ブロックなどに調整できるのか?
念のため言うと、各ダウンロードバーストの平均速度は約3 Mbpsだった。
実際の環境でもブロックダウンロードは同じくらい速い(約3 Mbps)ので、大いに賛成だ。これは確かに新規ユーザーの立ち上げを大幅に早めるだろう。
最後の2000ブロック以内で止めるのは安全上の理由があるのだろうか、それとも例えば残り500ブロックで止めるように調整できるのだろうか?
特にない。次回は1000に変更する。
Kknightmbの投稿(2010年7月23日19:32 UTC)最後の2000ブロック以内で止めるのは安全上の理由があるのだろうか、それとも例えば残り500ブロックで止めるように調整できるのだろうか?
特にない。次回は1000に変更する。
どちらにしても、旧バージョンに比べてすごい改善だ! 素晴らしい仕事だ!
2台並べて走らせてみた(現行リリースと君の新しい高速版)。新しい方がワイプ後に2回ダウンロードを終える間に、元の方はまだ数千ブロックしか進んでいなかった。😁
おめでとう! うっかりblk*.datを消してしまった後の初回ダウンロードはlibeatmydataを使って多少は助けになったが、こっちの方がもっと良さそうだ!