Solana Geyser gRPC - gRPC Latency Test
このガイドでは、Solana Geyser gRPCサーバーのレイテンシーテストする方法について説明します。
前提条件
SLV CLI をインストールしてください:
bash
curl -fsSL https://storage.slv.dev/slv/install | shcurl -fsSL https://storage.slv.dev/slv/install | shgRPCレイテンシーテスト
次のコマンドで、Solana Geyser gRPCサーバーのレイテンシーを簡単にテストできます:
bash
slv check grpc --help
Usage: slv check grpc
Version: 0.9.0
Description:
Check gRPC endpoint
Options:
-h, --help - Show this help.
--endpoint <endpoint> - gRPC endpoint URL
--token <token> - Token for authenticationslv check grpc --help
Usage: slv check grpc
Version: 0.9.0
Description:
Check gRPC endpoint
Options:
-h, --help - Show this help.
--endpoint <endpoint> - gRPC endpoint URL
--token <token> - Token for authenticationGeyser gRPCアクセスがない場合は、Geyser gRPCクイックスタートガイドを参照してください。
レイテンシーテストの実行
現在の共有 gRPC エンドポイントでは
x-token は不要です。--token none を付けて、そのまま測定してください:bash
➜ ~ slv check grpc --endpoint http://grpc-ams1.erpc.global --token none
Checking gRPC endpoint: http://grpc-ams1.erpc.global
Current latency: 540 ms, slots: 0
Avg latency: 540 ms
Current latency: 962 ms, slots: 1
Avg latency: 751 ms
Current latency: 394 ms, slots: -1
Avg latency: 632 ms
Current latency: 776 ms, slots: 0
Avg latency: 668 ms
Current latency: 1157 ms, slots: 1
Avg latency: 765.8 ms
Current latency: 529 ms, slots: 0
Avg latency: 726.3333333333334 ms
Current latency: 891 ms, slots: 1
Avg latency: 749.8571428571429 ms
Current latency: 249 ms, slots: -1
Avg latency: 687.25 ms➜ ~ slv check grpc --endpoint http://grpc-ams1.erpc.global --token none
Checking gRPC endpoint: http://grpc-ams1.erpc.global
Current latency: 540 ms, slots: 0
Avg latency: 540 ms
Current latency: 962 ms, slots: 1
Avg latency: 751 ms
Current latency: 394 ms, slots: -1
Avg latency: 632 ms
Current latency: 776 ms, slots: 0
Avg latency: 668 ms
Current latency: 1157 ms, slots: 1
Avg latency: 765.8 ms
Current latency: 529 ms, slots: 0
Avg latency: 726.3333333333334 ms
Current latency: 891 ms, slots: 1
Avg latency: 749.8571428571429 ms
Current latency: 249 ms, slots: -1
Avg latency: 687.25 ms設定完了後、Geyser gRPCサーバーのレイテンシー測定が開始されます。
テストを停止するには Ctrl + C を押します。
参考文献: gRPC レイテンシーの仕組み
gRPC のレイテンシーを計測するときに、しばしば 1 秒以上の値が観測されることがあります。これは直感的には「遅い」と感じられるかもしれませんが、Solana ブロックチェーンのブロックタイムが秒単位でしか記録されない(ミリ秒以下を切り捨てている)という特性を踏まえる必要があります。
同一リージョンでの接続
まず、gRPC のエンドポイントと同じリージョンにサーバーを配置することが基本的な前提です。たとえば、
grpc-tokyo.erpc.global のように東京のエンドポイントに接続する場合には、同じ東京リージョンのサーバーを使用することでネットワーク上の遅延を大幅に抑えられます。「1 秒以上遅延」の背景
たとえば、トランザクションが実際には 07:46:46.900 に発生していても、Solana 上では 07:46:46.000 として記録されます。このトランザクションを 07:46:47.200 に受信した場合、単純計算では
text
(受信時刻) - (ブロックタイム)
= 07:46:47.200 - 07:46:46.000
= 1.2 秒(受信時刻) - (ブロックタイム)
= 07:46:47.200 - 07:46:46.000
= 1.2 秒となり、一見すると 1.2 秒の遅延に見えます。しかし実際には 07:46:46.900 に発生しているため、実際の遅延は約 300 ミリ秒(07:46:47.200 - 07:46:46.900 = 0.3 秒)です。
500ms を差し引く計算アプローチ
Solana が秒単位でブロックを扱うため、ブロックタイムがその秒のうち「いつ」実行されたかを正確に知ることはできません。そこで「秒の真ん中(500ms)」を基準として計算を行うと、より現実に近い遅延値を推測できます。つまり、
text
(受信時刻) - (ブロックタイム + 0.5 秒)(受信時刻) - (ブロックタイム + 0.5 秒)とすることで、おおまかにミリ秒単位の誤差を補正できるわけです。厳密ではないものの、Solana ブロックの秒単位管理が生む「ずれ」をある程度解消して、実際のレイテンシーに近い値が得られます。
これらの点を考慮しながら計測することで、Solana Geyser gRPC の遅延を正しく把握しやすくなります。時間管理が秒単位であることによる影響を考慮すると、ネットワークやサーバーの物理的配置と合わせて検証することが、より実際のパフォーマンスを正確に捉えるための鍵となります。