私たちはイーサリアム 2.0 テストネット上で約 3,000 のバリデーターを実行しています
編集者注: この記事は以下から引用しましたHashQuark コミュニティ (ID: HashQuarkPool)、許可を得てOdailyによって転載されました。
Prysm は ETH2.0 の優れた実装であり、現在 Medalla テストネットで最も実行されている実装です。 PrysmはBeacon Chain Node + Validator Nodeのアーキテクチャを採用しており、前者はブロックデータの同期を担当し、後者はブロックの署名と監視を担当します。バリデーター ノードは複数のバリデーターを同時にロードできるため、ロードできるバリデーターの数と関連するバリデーターのデプロイメント手順を定性的および定量的に理解するために、このテストを特別に用意しました。
副題
私たちは Medalla テスト ネットワークを複製し、HashQuark 独自の ETH2.0 ビーコン チェーンを構築し、2 ラウンドのテスト (合計 14 のテスト ケース) を実施し、数十万のバリデータを実行しました。 Prsym の実装は優れており、少量の ETH (数十から数百のバリデーター) でイーサリアム ステーキングに参加したい一般ユーザーの場合、4 コア 8G クラウド サーバーでビーコン チェーン ノードとバリデーターをスムーズに実行できます。実行プロセス中に発生する技術的な問題は、技術者ではない一般ユーザーが解決することはできません。
数万のバリデーターを実行するプロフェッショナルな PoS マイニング プールの場合、超高ブロック レートを確保するにはより高度な構成が必要です。バリデーターの数が増えると、ブロック率は低下します。
次に、メインのネットワーク環境に近づけるため、公開テストネットワーク Medalla で次のテストを実施する予定で、現在、Medalla 上ではネットワーク全体の 5% に相当する 3,000 台近くのバリデーターが正常に稼働しています。
副題
テスト環境
以下のテストで使用するクラウド ホストの展開には、汎用の N モデルを選択し、CPU プラットフォームは Intel/Broadwell です。システムはUbuntu 18.04.2 LTSを使用しています。 geth バージョンは 1.9.19 安定版、Prysm バージョンは v1.0.0-alpha.24 です。
予備的な試みの第 1 段階
副題
テストプログラム
最も基本的な 2 つの ETH1.0 ノード + 2 つの ETH2.0 ビーコン チェーン ノード + 2 つの検証ノード アーキテクチャを使用して、開始計画としてプライベート ネットワークを構築します。ネットワークが安定して動作する 1 日を観測期間とします。
副題
以下の表は、テストの概要を示しています。
表1
副題
テスト中に、各インスタンス サーバーの CPU、メモリ、ディスク IO、ネットワーク帯域幅 IO、およびその他の指標を収集しました。
副題
テスト1では、2コアの4G Beacon Chain Nodeのメモリが段階的に増加し、約6時間実行した後にメモリ使用量が100%に達し、メモリ不足エラーによりプロセスが停止し、CPU使用率も徐々に上昇しました。増えた。以下に示すように:
図1
画像の説明
図2
その後、ビーコンチェーンノードの構成を4コア8Gにアップグレードしました。
その後、異なるリージョンに ETH2.0 ノードをデプロイして、異なるリージョンのネットワーク相互接続が各指標に大きな影響を与えるかどうかを観察しましたが、実験結果は正常でした。
副題
プライベート ネットワークのテスト状況に応じて、Beacon Chain Node は 4 コア 8G 構成を推奨し、Validator ノードの 2 コア 4G 構成で十分ですが、キー ファイルのインポート時に 1 コアの CPU を占有し、CPU 使用率が低下します。 (下図に示すように) は 100% です)、安全を期すために、4C6G を構成することをお勧めします。
画像の説明
さらに、テストのこの段階では、プライベート ネットワークの理由により、ディスク I/O パフォーマンスと外部ネットワーク帯域幅の要件が非常に低く、対応する具体的なパフォーマンス要件は公式 ETH2.0 でテストする必要があります。テストネットワーク。
フェーズ2比較試験
副題
第 1 段階では主に、さまざまな数の検証者によるサーバー リソースへの負荷をテストしましたが、さらに、検証者のブロック生成と監視も検証者にとって重要な指標です。この目的のために、比較テストを実施しました。同じネットワーク内で、比較テストのために異なるリージョンに異なる数のバリデータがデプロイされます。
副題
テスト中に、CPU、メモリ、ディスク IO、ネットワーク帯域幅 IO、生成されるべきブロックの数、生成される実際のブロック数、監視されるべきブロックの数、監視される実際のブロック数などの指標を収集します。各インスタンスサーバー。
副題
以下はテストケースです。
画像の説明
表2
ETH1.0 ネットワークは、香港に 2 台、サンパウロに 1 台の計 3 台の 2 コア 4G クラウド サーバーで構成されています。ブロック時間は 15 秒に設定されます。
当社は、香港、シンガポール、ロサンゼルス、フランクフルト、サンパウロ、ロンドンにビーコン チェーン ノードとバリデーター ノードを導入しました。各リージョンのビーコン チェーン ノードとバリデーター ノードはイントラネットを介して接続されます。構成とバリデーターの対応する数を上の図に示します。
インスタンス 1 とインスタンス 2 には両方とも 1,000 個のバリデーターがあります。違いはバリデーターノードの構成にあります。バリデーターノードの構成は、インジケーターに対するさまざまな構成を持つバリデーターの数の影響を比較するために使用されます。
各リージョンのビーコン チェーン ノードは他のノードに接続されます。
副題
テストネットパラメータの選択
まず、ETH1.0 ネットワーク上にデポジット コントラクトをデプロイし、必要な数のバリデータ キーを生成した後、デポジット トランザクションをバッチで送信しました。 Prysm は次のパラメータが変更された状態で起動します。
MinGenesisActiveValidatorCount は 8192 に設定されています。テストには 40,000 個のバリデーターが含まれているため、これは満足です。
Eth1FollowDistance は 20 に設定されます。つまり、ETH1.0 ネットワーク上の入金契約は 5 分後に ETH2.0 ネットワークによって監視されます。
SecondsPerETH1Block は 15 に設定されており、これは ETH1.0 ネットワーク内の各ブロックの時間設定と一致しています。
実際、最も早い開始時間に設定されたバリデーターの最小数を満たすためにすべての入金トランザクションを事前に送信したため、ETH2.0 ネットワーク全体は 1599811207(2020-09-11T16:00:07+08:00) に開始されました。 。
副題
統計とテスト結果
さらに、データをクエリするために ETH2.0 プライベート ネットワークに接続するためのビーコン チェーン ノードをデプロイしました。パラメータ --slots-per-archive-point=1 を追加して各ブロックのデータを永続的に保存し、クエリを高速化します。パラメータ --rpc-max-page-size=1000 を追加すると、毎回より多くのデータをクエリできるため、リクエストの数が減り、全体的な速度が向上します。
ネットワークが比較的安定していた期間を選択し、75 エポック (約 2020-09-12 00:00:00 +0800) から 1200 エポック (2020-09-17 00:00:00 +0800) までのサンプリングを行いました。このセグメントを取得する 一定期間内のさまざまなインスタンスのブロック生成データと検証者の証人データが分析され、次の結果が得られます。
異なる地域のバリデーター証人は若干異なります。
画像の説明
表3
ここでは、証人率を、一定期間に含まれる証人の数で割ったものを、それに割り当てられた証人の数で割ったものと定義します。一般に、バリデーターの数が増加すると、証人率が低下することを理解するのは難しくありません。しかし、例 3 では、検証者の数はわずか 2,000 人ですが、証人率は 6,000 人、さらには 10,000 人よりも低くなります。
各検証者の割合を範囲に応じて分割し、次のデータを取得します。
画像の説明
各インスタンスの検証者の数が異なるため、変換率はより直感的になります。
画像の説明
表5
このため、インスタンス 3 のログを確認したところ、ビーコン チェーン ノードおよび他のノードと ETH1.0 との接続が安定していないことがわかり、これが異常な目撃率の原因となっていると推測されますが、後で確認する必要があります。
副題
このラウンドのテストでは、次の表のパフォーマンス インデックス データを観察しました。
画像の説明
Beacon Chain Node
表6
Validator Node
インスタンス 1 ~ 5 では、ビーコン チェーン ノードの CPU 使用率は 5% ~ 10% の間であり、インスタンス 6 のビーコン チェーン ノードの CPU 使用率は約 12% です。メモリは 12% から 17% の間で着実に増加しており、ディスク IO と帯域幅には大きな違いはありません。
さらに、検証キー ファイルの生成には、推奨される Python コマンド ラインを使用します。道具このツールのキー生成効率は比較的低く、マルチコア マシンでは 1 コアしか占有せず、2000 個のキー ペアを生成するには約 2.5 時間かかります。一方、Validator Nodeのキーペアのインポートもシングルコア実行で、2000個のキーペアのインポートにかかる時間は約40分です。
副題
このラウンドのテストを通じて、プライベート ネットワークでバリデーターの数の増加がノード上のすべてのバリデーターのブロック生成速度に影響を与えることを観察しました。単一のバリデーターの場合、最良の場合と最悪の場合、平均的なウィットネス1日あたり約10ブロック減ります。ブロック生成に関しては、テストでは違いが見つかりませんでした。 CPU と帯域幅と比較すると、バリデータの数が増えると、メモリとディスク IO の使用量がより明らかに増加します。
副題
その後のテスト計画と最適化される手順
このラウンドのテストでは、次の側面に準備時間がかかります。
認証キーペアの生成
預金契約を展開する
バリデーターノードのインポートキーペア
フォローアップ計画では、上記の手順を最適化し、テスト効率を向上させることが計画されています。
さらに、フォローアップテスト計画では、異なる地域のネットワーク間の安定性とバリデーター指標への影響を考慮して、次の改善が検討されます。
同じリージョンに複数のテスト インスタンスを追加して、違いがリージョンに起因するかどうかを比較します。
複数の ETH1.0 ノードをデプロイして、ビーコン チェーン ノードが ETH1.0 ネットワークにスムーズに接続できるようにし、影響を軽減します。
同じ領域に別の比較テストを追加し、検証者の数を増やして変数を制御し、検証者の数の影響を単純に比較します。統計データに関しては、含まれる証人の距離を考慮するなど、さらに多くの次元を追加することを検討してください。これについては、この記事を参照してください。記事。
最初のレベルのタイトル
試験問題の概要
ベリファイアの数が 4K 近くに増加すると、検証ノードは grpc によって取得されたメッセージ サイズ 5350532 (5M) が最大値 4194304 (4M) を超えていることを報告します。
画像の説明
図4
解決策: --grpc-max-msg-size パラメーターを使用して、検証ノードの起動時に grpc によって許可されるメッセージ サイズを増やします。
最初のテスト ラウンドでは、ネットワーク内にビーコン チェーン ノードが 2 つしかない場合、2 つのノード間でブロックを同期できず、どちらのノードも相手を適切なピアとして認識しないという問題が発生しやすくなります。以下に示すように:
画像の説明
図5
解決策: 現在、ノードのデータ再同期をクリアすることでこの問題を解決しています。テスト中に、ビーコン チェーン ノードの数が増えると、この問題は発生しなくなることがわかりました。
入金額が不十分であると誤って報告されたissueこのレポートの最新バージョンでは修正されています。
画像の説明


