今週のMegaETHテストネットへのアップグレードでは、シーケンサーの再起動間でミニブロック時間が継続的に増加する原因となっていたとらえどころのないパフォーマンスバグが修正されました。ここからがストーリーです。これは、私たちの哲学である「測定して構築する」についての物語です。 最近MegaETHのパフォーマンスダッシュボードにアクセスした場合、6月3日までの週にミニブロック時間が増加していることがわかります。実際、このような傾向は、公開テストネットの立ち上げ以来、シーケンサーが再起動するたびにすぐに始まるでしょう。以前は、シーケンサーを頻繁にアップグレードするため、上昇トレンドがリセットされるまで、ミニブロック時間が知覚可能な量だけ増加することはありませんでした。しかし、最近のアップグレードではシーケンサーの再起動は必要なく、この傾向は数週間続きました。6月3日、ミニブロック時間はほぼ100msに達しました。ホットバックアップのおかげで、シーケンサーの再起動の可能性が将来さらに低くなるため、バグを完全に排除する時が来ました。 テストネットのために定期的に大量のテレメトリデータを収集しているため、チームはすぐに調査を開始しました。最初の発見は、ミニブロック時間の増加が時間とともに加速し、ミニブロック時間が増加しただけでなく、ますます速く増加したことでした。通常、このような症状は、各ミニブロックの構築に関連する作業が、より多くのミニブロックが構築されるにつれて超直線的に増加したことを意味します。しかし、いくつかの測定と計算の後、仮説を撃退しました。ミニブロック パイプラインは、EVM に対してほぼ完全に非同期になるように構築し、任意の短いミニブロック時間を実現しました。つまり、ミニブロックの構築にどれだけの時間がかかっても、EVMはその間ずっとトランザクションを実行します。したがって、ミニブロックの構築時間が長くなると、ミニブロックあたりのトランザクション数が多くなりますが、それは観察されませんでした。したがって、ミニブロックの構築に問題はありません。コードを注意深く調べると、この結論が確認されます – ミニブロック構築プロセスのどの部分も超線形の複雑さはありません。 チームは捜索を拡大し、真犯人がすぐに明らかになりました。EVMブロックのコミットにかかる時間は増加していました。さらに、コミット時間は、前回の再起動以降に生成されたEVMブロックの数に完全に直線的でした。EVM ブロックをコミットすると、ブロックの高さなどの EVM 環境が更新されるため、EVM は一時停止する必要があり、トランザクションを実行できないため、ミニブロックも実行できません。EVMブロック間の間隔は1秒固定されています。1 秒のバジェット内では、コミット時間が直線的に増加すると、トランザクションの実行時間が直線的に減少し、その結果、生成されるミニブロックの数が直線的に減少します。その逆数を取ると、平均ミニブロック時間が得られ、これは時間に反比例します。これは、パフォーマンスダッシュボードで見た機能とまったく同じです。計算は解けました。 その時点で、私たちは何を探すべきかを正確に知っていました。つまり、EVM ブロックのコミットを処理するコードの特定の部分で、時間の経過と共にワークロードが直線的に増加するプロシージャです。残りの作業は簡単でした。チームは今週アップグレードを推し進めましたが、ミニブロックの時間は増えていません。 それで、教訓は何でしたか?エンジニアリングが慎重な測定と第一原理によって導かれるときの力を改めて示したと思います。チームは、同じ哲学で他のアップグレードに取り組んでいます。乞うご期待!
14.46K