Skip to content

O3.1.2 - Build Infra and Benchmark RPCv2 on Phase 1/2/3 #898

Open
12 of 16 issues completed
Open

Description

@sydneynotthecity

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 ⚠️ SAC misses at 456 ms ⚠️ SAC misses at 604 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.

Activity

  1. changed the title [-]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[/+] on Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions