Repository navigation
O3.1.2 - Build Infra and Benchmark RPCv2 on Phase 1/2/3 #898
Description
Summary
This epic answers one question for RPC v2: can a node keep up with the network at Phase 1, 2, and 3 block
cadence, and can it still accept transactions and serve reads while it does?
End-to-end latency decomposes into four slices along the transaction path. Platform owns three of them, and
this epic measures all three:
| Slice | Path | Owner | State |
|---|---|---|---|
| Block time × N | consensus and execution | Core | fixed input |
| Tx submission | client → RPC v2 | Platform | estimated — benchmark not yet written |
| Ingest | meta available in core (ledger externalized) → ingested in RPC | Platform | measured |
| Read-to-client | ingested in RPC → client has the data, for example getTransaction |
Platform | estimated — benchmark not yet written |
- Tx submission is the time to call the HTTP endpoint and parse the result: client
POST /transactions
→ RPC proxies to core → response parsed and returned. - Ingest is the slice this project makes faster. It is the one the campaigns measure today.
- Read-to-client is the read path back out, and it must hold up while ingestion runs at full rate.
Published results: https://stellar-experimental.github.io/stellar-rpc-benchmarks/summary.html
Work breakdown
| Group | Purpose | Issues |
|---|---|---|
| Benchmark harness | Commands in the RPC binary that measure ingest and query on production code paths | #771 ✅, #856, #870 |
| Input data | Synthetic ledger datasets at each phase's transactions-per-ledger, frozen into replayable packs | #867 ✅ |
| Infrastructure and automation | Results bucket and IAM, scheduled EC2 runners, config-driven campaign runner, CI regression gate | #896 🔄, #866, #868, #775 |
| Results and reporting | Browsable site that renders campaign output against the phase targets | #871 ✅ |
| Measurement campaigns | The runs themselves, plus the follow-on measurements partners asked for | #872 ✅, #873 ✅, #874 ✅, #895, #869, #800 |
Benchmark Phases
Three workload profiles run at every phase: SAC transfers, OZ token transfers, Soroswap swaps. Each phase declares one E2E budget, and the four slices fit inside it.
| Phase | Block time | Transactions per ledger | Ingest p99 target | E2E budget |
|---|---|---|---|---|
| 1 | 2 s | SAC 6000 · OZ 4000 · Swap 1500 | 900 ms | 5 s |
| 2 | 1 s | SAC 5000 · OZ 4000 · Swap 1500 | 400 ms | 2.5 s |
| 3 | 600 ms | SAC 6000 · OZ 3600 · Swap 1800 | 100 ms | 2 s |
Two boxes run every campaign: m6id.2xlarge (8 vCPU — the minimum spec published to node operators) and
c6id.8xlarge (32 vCPU). Both use local NVMe.
Results — ingest p99
| Phase | Target | c6id.8xlarge |
m6id.2xlarge |
|---|---|---|---|
| 1 | ≤ 900 ms | ✅ all pass — worst 469 ms | ✅ all pass — worst 803 ms |
| 2 | ≤ 400 ms | ||
| 3 | ≤ 100 ms | not yet run | ❌ all miss — SAC 858 ms, Swap 192 ms, OZ 149 ms |
- Phase 1 clears on minimum hardware. Phase 2 misses on SAC only. Phase 3 misses on all three profiles.
Acceptance Criteria
Built
- Ingest benchmarks for every data type and tier, on production code paths.
- Six synthetic datasets covering all three phases, frozen into replayable packs.
- One config file and one command run a full campaign.
- Published results site renders any run against the phase targets.
- Phase 1, 2, and 3 ingest campaigns run and published.
- Results bucket live with scoped IAM roles.
- Tx submission measured against the 60 ms p99 target.
Remaining
- Query benchmarks: eight read patterns with concurrency sweeps.
- Read-to-client measured against the 60 ms p99 target.
- Read-endpoint SLAs measured under ingestion load.
- Campaigns dispatch with one trigger; weekly cron green.
- CI flags benchmark regressions before they land.
- Full-history backfill measured: wall time and disk footprint per data type.
- Apply-stage tail investigated and fixed.
Epic close
- Every phase carries a verdict per profile for all three Platform metrics.
- Findings become a recommendation: feasible operating points, marginal ones, infeasible ones.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTo Do
Activity
[-]O3.1.2 - Build Infra and Benchmark RPC on Phase 1/2/3[/-][+]O3.1.2 - Build Infra and Benchmark RPCv2 on Phase 1/2/3[/+]bench-campaignpipeline as reviewable units #1017