Repository navigation
ci: add epoch boundary time to the PR benchmark comment - #11820
Conversation
┌─ ⚡ PERF · 4ac6c5f vs main@f9d782e ─────────────────────────────────
│ SUITE BASELINE NEW Δ
│ replay tps, mainnet 13,219 tps 13,161 tps · -0.44%
│ bench tps, localnet 669,231 tps 667,379 tps · -0.28%
│ snapshot load, testnet 4.95 s 4.95 s · 0.00%
│ epoch boundary, mainnet 161.5 ms 160.3 ms · -0.76%
│ mem total, mainnet 148.35 GiB 148.35 GiB · 0.00%
│ mem total, testnet 85.66 GiB 85.66 GiB · 0.00%
│ clean compile, firedancer 3.15 s 3.15 s · -0.20%
│ binary size, firedancer 57.93 MB 57.93 MB · 0.00%
├─────────────────────────────────────────────────────────────────────
@@ 0 REGRESSIONS · 0 WARNINGS · 0 IMPROVED · 8 NOISE @@
└─────────────────────────────────────────────────────────────────────history · 4 pushes ┌─ HISTORY · Δ vs main, per push, newest first ──────────────────────────────────
│ HEAD TPS BENCH SNAP EPOCH MEM·M MEM·T COMPILE BINARY
│ 4ac6c5f -0.44% -0.28% 0.00% -0.76% 0.00% 0.00% -0.20% 0.00%
│ fc264e1 -0.15% -0.31% -0.05% -0.65% 0.00% 0.00% -0.28% 0.00%
+│ a458607 +0.27% +0.36% +0.03% -12.63% 0.00% 0.00% … 0.00%
+│ 9667125 -0.23% +0.02% -6.09% -1.22% 0.00% 0.00% +2.84% 0.00%
└──────────────────────────────────────────────────────────────────────────────── |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Epoch results incorrectly use snapshot-run disk skew when classifying benchmark noise.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Adds epoch-boundary runtime timing to PR benchmark reporting.
Changes:
- Runs a minimized epoch-crossing ledger benchmark.
- Parses and displays epoch-boundary timing.
- Adds the metric to benchmark history.
| File | Description |
|---|---|
.github/workflows/on_pull_request.yml |
Supplies the epoch ledger. |
.github/workflows/benchmark.yml |
Runs epoch benchmarks for baseline and PR. |
contrib/ci/bench/bench.sh |
Adds the epoch benchmark mode. |
contrib/ci/bench/benchmark_comment.py |
Parses and renders epoch timing. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
mmcgee-jump
left a comment
There was a problem hiding this comment.
id render the row in milliseconds, not seconds
|
@copilot how long does this bench job take compared to bench runs on other PRs? respond with number of seconds and confidence range |
Measured from GitHub Actions job timings. This PR has two runs (36787575349, 36788019857); I compared them with 16 recent successful bench-snapshot job, which now also runs the epoch steps:
Total benchmark time (the slowest of the three parallel jobs):
The benchmark jobs have a 360 s timeout (6 min), so ~116 s leaves plenty of headroom. |
|
@copilot how would the time differ if we remove download time for the actual new epoch boundary ledger that was added in this PR |
1 similar comment
|
@copilot how would the time differ if we remove download time for the actual new epoch boundary ledger that was added in this PR |
Without the download, the
The ledger is kept in Without that one-time cost:
The download is repeated whenever a runner's
Answered in the reply to the identical question just below, with the full breakdown. In short: the download plus rocksdb→shredcap conversion costs about 9.7 s, and only once per runner, because the ledger stays cached in |
Times fd_runtime_process_new_epoch() on mainnet-epoch-boundary-461376000, a minimized mainnet ledger crossing the epoch 1067 -> 1068 boundary at slot 461376000, in the snapshot job.
a458607 to
fc264e1
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The new epoch-ledger input can select ledgers beyond the fixed replay ceiling, but neither workflow entry point allows that ceiling to be adjusted, causing later-epoch benchmarks to fail with no slots to replay.
1 open issue
Review effort: Balanced
A fixed end slot only fits the default ledger; one around a later boundary has no slots below it. Every epoch ledger ends a few slots past its boundary, so replaying all of it costs ~1 s.

No description provided.