Repository navigation
feat(xtest): benchmark payloads up to 1 GiB, with per-dispatch budget - #622
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 5 minutes. View limit details
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
At the default sizes (1 KiB, 1 MiB, 32 MiB) this harness cannot fail a build on throughput: on a 4-core runner a go encrypt costs ~450ms of fixed startup against ~72ms that scales with the payload, so the 1.15x gate is wider than the whole payload-dependent part. --bench-payloads lets a manual dispatch ask a throughput question the nightly cannot afford to ask every night. - perf/cells.py: Payload/parse_payload/parse_payloads replace the fixed 3-entry PAYLOADS tuple, so a spec like '1KiB,1GiB' builds an arbitrary cell matrix. CONTROL_PAYLOAD is a fixed 1 MiB literal rather than PAYLOADS[1] -- same value, but no longer coupled to whatever the selection happens to be, since the control's CI width is the run's noise floor and it must not move with --bench-payloads. - fixtures/bench.py: --bench-payloads wiring, chunked payload generation (a 1 GiB file is written in 8 MiB chunks rather than held in memory), and an up-front disk-space check -- a run holds roughly twice the payload total plus one live output per arm of the largest, and running out mid-benchmark otherwise surfaces as a non-zero exit that reads as 'this build is broken'. - conftest.py: the payload spec is validated in pytest_configure with the other benchmark options, before any session setup. - xtest.yml: bench-payloads and bench-budget-seconds dispatch inputs, validated in resolve-versions with the harness's own parser before any bench runner starts the platform. The bench job's timeout is derived from the budget instead of a fixed 45 minutes; scheduled runs keep the current sizes, 1500 s budget, and 45-minute timeout. Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>
65e13ab to
fffd648
Compare
- --bench-prune-scratch (set by the bench job) deletes each cell's outputs and ciphertext when it ends, and each plaintext after its last cell. A 1GiB run peaks at ~5 GiB of scratch instead of ~7. - The disk check moves to pytest_configure, where a shortfall is one usage error (exit 4) rather than an error on every cell. Its estimate now matches what is actually written, with and without pruning. - A cell that fails with the scratch disk nearly full is recorded as skipped and ends the session, instead of reading as a broken build. - Payload labels are canonical by unit (1024MiB -> 1GiB); the workflow falls back to DEFAULT_PAYLOAD_SPEC rather than a copy of it. - Comments, README and tests brought in line with the code. Smarter disk scheduling is DSPX-5253. Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>
Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>
X-Test Failure Report |
|
Stages are milestones, not pull requests. Records the stack each stage lands as, with branch names; runs stages 2 and 3 as parallel tracks from main, since they share no imports; and adds a size budget and refactor-first rule to the merge discipline. Also brings the plan up to date: the work that landed as separate fixes (#638, #640, #641, #647), #622's payload sizes, item 7's move into stage 3, the neutral-nightly gap (DSPX-5260), and scratch-disk scheduling (DSPX-5253). Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>



Split out of #583, based on
main.At the default sizes (1KiB, 1MiB, 32MiB), startup is ~86% of a go encrypt. The 1.15x gate therefore misses any throughput regression smaller than about 2x. This PR lets a manual dispatch measure sizes up to 1 GiB, where the gate can catch one. DSPX-5232 needs this.
--bench-payloads(bench-payloadsinput): comma-separated sizes, e.g.1KiB,1GiB. Validated inpytest_configure, and inresolve-versionsbefore any runner starts the platform. The A/A control stays at 1 MiB.bench-budget-secondsinput: the bench job's timeout is derived from it. Scheduled runs keep 1500 s and 45 min.--bench-prune-scratch, set in CI, deletes each file once no cell needs it, so a 1 GiB run peaks at ~5 GiB.Follow-ups:
main's HEAD; also covers what each cron run should compare.Validation
test_bench*.py: 228 passed. ruff and pyright are clean.1MiB: all 3 cells passed, and no scratch files were left behind.1GiBdispatch.Summary by CodeRabbit
New Features
Documentation