Skip to content

feat(mip8): storage perf-regression suite + consume timing report - #54

Merged
pdobacz merged 23 commits into
forks/monad_ninefrom
perf-regression-eestnet-monad-ten-fixes
Sep 9, 2026
Merged

feat(mip8): storage perf-regression suite + consume timing report #54
pdobacz merged 23 commits into
forks/monad_ninefrom
perf-regression-eestnet-monad-ten-fixes

Conversation

@pdobacz

@pdobacz pdobacz commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

I wanted to get the performance regression stack into main, but it resulted huge. I trimmed it down considerably over the course of these commits, but still huge.

I am hesitant whether we need it, but not rejecting the idea, since most of this change is purely additive and would be easy to get rid of.

There's a bunch of tests and also the benchmark tests are going to be filled on CI to ensure they do not rot [that badly].

Happy to hear that it's better not to merge this and re-create when new need arises.

Greptile Summary

The PR adds a MIP-8 storage performance-regression suite and a reporting pipeline that collects Monad runloop block timings and compares MONAD_NINE with MONAD_TEN.

  • Adds pageified-storage benchmark fixtures, CI fill configuration, benchmark documentation, and an orchestration script.
  • Adds direct-consume timing collection and Monad runloop timing parsing.
  • Adds statistical reporting with paired Wilcoxon tests and Benjamini–Hochberg adjustment.
  • Updates merged-fixture consumption so unnamed multi-fixture files are streamed and every fixture is verified.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains; the current unnamed-fixture path iterates and verifies every entry in a merged fixture file, resolving the prior selection and verification-abort reports.

Important Files Changed

Filename Overview
packages/testing/src/execution_testing/client_clis/clis/monad.py Streams every fixture from unnamed merged files, verifies each independently, and exposes parsed per-block runloop timings.
packages/testing/src/execution_testing/cli/pytest_commands/plugins/consume/direct/timing_report.py Adds serial direct-consume timing collection and session-level CSV reporting.
packages/testing/src/execution_testing/cli/perf_regression.py Builds paired NINE-versus-TEN statistical comparisons and renders the results as Markdown.
tests/benchmark/stateful/mip8_pageified_storage/test_perf_regression.py Defines the MIP-8 pageified-storage benchmark workloads and fixture sizing behavior.
scripts/perf_cycle.sh Orchestrates fixture generation, repeated timing runs, and regression-report creation.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[MIP-8 benchmark tests] --> B[Fill NINE and TEN fixtures]
    B --> C[Monad runloop consume passes]
    C --> D[Parse per-block timing logs]
    D --> E[timing_consume.csv per run]
    E --> F[Pair NINE and TEN samples]
    F --> G[Wilcoxon tests and BH adjustment]
    G --> H[Markdown regression report]
Loading

Reviews (4): Last reviewed commit: "perf: follow the harness into the repo u..." | Re-trigger Greptile

@pdobacz
pdobacz requested review from QEDK and mijovic as code owners August 28, 2026 16:27
Comment thread packages/testing/src/execution_testing/client_clis/clis/monad.py Outdated
Comment thread packages/testing/src/execution_testing/client_clis/clis/monad.py Outdated
@pdobacz
pdobacz force-pushed the perf-regression-eestnet-monad-ten-fixes branch from 44d60dd to e790ffe Compare August 28, 2026 17:03
Runloop-timed SLOAD/SSTORE workloads (NINE vs NEXT):
- two-sided MWU p and a sig@0.10 flag
- ijson-streamed consume
- block diagrams doc

Co-Authored-By: Claude <claude-opus-4-8>
Rework random_sload/bad_block_chained for random file access; refresh disjoint-table descriptions and per-family diagrams.
Co-Authored-By: Claude <claude-opus-4-8>
Co-Authored-By: Claude <claude-opus-4-8>
…_page

sweep_page reads all 128 offsets at occupancy k in {0,1,64}: k hits + (128-k) misses.

Co-Authored-By: Claude <claude-fable-5>
Co-Authored-By: Claude <claude-fable-5>
Co-Authored-By: Claude <claude-opus-5[1m]>
Derives fork/format from the test case, namespaces part files, refuses xdist.

Co-Authored-By: Claude <claude-opus-5>
Gains an entry point, mypy coverage, typed signatures and unit tests.

Co-Authored-By: Claude <claude-opus-5>
Signed-rank on per-run differences, BH-adjusted q, uncompared cases named.

Co-Authored-By: Claude <claude-opus-5>
A shared sender's nonce chain serialises a block regardless of storage access.

Co-Authored-By: Claude <claude-opus-5>
Takes its budget from --gas-benchmark-values, so it leaves consensus releases.

Co-Authored-By: Claude <claude-opus-5>
rt separates a block that was slower from one that redid work under contention.

Co-Authored-By: Claude <claude-opus-5>
The runloop re-stamps the primary when it opens the db, so the value is inert.

Co-Authored-By: Claude <claude-opus-5>
Its gas reserve differed per fork (28100 vs 27900), so the code did too.

Co-Authored-By: Claude <claude-opus-5>
Benjamini-Hochberg already bounds the false discovery rate across the whole table, and 13 paired runs are what let an isolated effect reach 5%.

Co-Authored-By: Claude <claude-opus-5>
compute_loop fills the 7-tx block; block_shape is filled at both sender modes.

Co-Authored-By: Claude <claude-opus-5>
Reports retries as 0 and warns once, rather than dropping every timing row.

Co-Authored-By: Claude <claude-opus-5>
Every page and gas count followed from the gas budget and drifted twice.

Co-Authored-By: Claude <claude-opus-5>
The markdown table is the artifact; the standalone page duplicated it.

Co-Authored-By: Claude <claude-opus-5>
--timing-report refuses xdist, so the per-test part files were unreachable.

Co-Authored-By: Claude <claude-opus-5>
Filled at the smallest block gas every case supports, outside monad/monad_runloop.

Co-Authored-By: Claude <claude-opus-5>
Matches the verification path and `evm blocktest`, which run a whole file.

Co-Authored-By: Claude <claude-opus-5>
Its sha is now execution-specs', so the provenance table loses a column.

Co-Authored-By: Claude <claude-opus-5>
@pdobacz
pdobacz force-pushed the perf-regression-eestnet-monad-ten-fixes branch from e790ffe to 9cf3573 Compare September 7, 2026 12:29
@pdobacz
pdobacz merged commit 1256e34 into forks/monad_nine Sep 9, 2026
12 checks passed
@pdobacz
pdobacz deleted the perf-regression-eestnet-monad-ten-fixes branch September 9, 2026 08:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants