perf: judge the save-soak max against the dev range, plus a sync-overlap check #1050

Closed
kayg wants to merge 0 commits from perf/soak-max-gate into dev
Owner

What

A measurement-method change, decided by the orchestrator after the #928 soak diagnosis (comment 89399 there). No product code changes.

  • docs/perf/comparing.md (new) says how a branch is compared with dev on the perf VMs:
    • one perf-turn, holding both locks;
    • interleaved ABAB with dev-vs-dev control pairs;
    • p50/p95/p99 and save_ack as the main gate, each judged against the control.
  • The save-soak max is now judged against the dev arms' range over at least three interleaved arms per side. When a branch arm is above that range, the sync-overlap check decides: it's a regression only if the branch adds a sync inside a save, or one of its own syncs overlaps a save.
  • perf/vm/strace-server.sh runs a server under a seccomp-filtered strace that stops only on fsync, fdatasync and openat, with file names. It forwards SIGTERM so probes can stop it.
  • perf/vm/sync-overlap.py joins a soak arm's per-save log with that trace. It prints per-file sync counts and times, every watched sync and the saves it overlaps, and the sync chain of the slowest saves. It exits 1 when a watched sync overlaps a save.
  • docs/perf/budgets.md and perf/README-perf-vms.md link to the new page.

Why

A soak max is one sample in 900. On the shared perf disk, one disk burst decides which arm gets it. In the four-arm diagnostic on #928, the dev arms had maxima of 89.4 and 86.8 ms and the branch arms 50.3 and 66.7 ms, with 0 branch syncs inside any save. The slowest saves were dev's own four-sync chain stretched by the disk.

Checks

  • python3 -m py_compile perf/vm/sync-overlap.py; bash -n perf/vm/strace-server.sh.
  • Run on the #928 diagnostic data on perf-01: --watch secrets lists 10 witness syncs, none overlapping a save, exit 0. --watch 'notes/meta.db$' reports the 9 in-save meta.db checkpoints, exit 1.
  • No Rust, web or perf-path code changed, so there is no perf run for this PR.

🤖 Generated with Claude Code

## What A measurement-method change, decided by the orchestrator after the #928 soak diagnosis (comment 89399 there). No product code changes. - `docs/perf/comparing.md` (new) says how a branch is compared with dev on the perf VMs: - one `perf-turn`, holding both locks; - interleaved ABAB with dev-vs-dev control pairs; - p50/p95/p99 and `save_ack` as the main gate, each judged against the control. - **The save-soak max** is now judged against the **dev arms' range over at least three interleaved arms per side**. When a branch arm is above that range, the **sync-overlap check** decides: it's a regression only if the branch adds a sync inside a save, or one of its own syncs overlaps a save. - `perf/vm/strace-server.sh` runs a server under a seccomp-filtered strace that stops only on `fsync`, `fdatasync` and `openat`, with file names. It forwards SIGTERM so probes can stop it. - `perf/vm/sync-overlap.py` joins a soak arm's per-save log with that trace. It prints per-file sync counts and times, every watched sync and the saves it overlaps, and the sync chain of the slowest saves. It exits 1 when a watched sync overlaps a save. - `docs/perf/budgets.md` and `perf/README-perf-vms.md` link to the new page. ## Why A soak max is one sample in 900. On the shared perf disk, one disk burst decides which arm gets it. In the four-arm diagnostic on #928, the dev arms had maxima of 89.4 and 86.8 ms and the branch arms 50.3 and 66.7 ms, with 0 branch syncs inside any save. The slowest saves were dev's own four-sync chain stretched by the disk. ## Checks - `python3 -m py_compile perf/vm/sync-overlap.py`; `bash -n perf/vm/strace-server.sh`. - Run on the #928 diagnostic data on perf-01: `--watch secrets` lists 10 witness syncs, none overlapping a save, exit 0. `--watch 'notes/meta.db$'` reports the 9 in-save `meta.db` checkpoints, exit 1. - No Rust, web or perf-path code changed, so there is no perf run for this PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
strace-server.sh runs a server under a seccomp-filtered strace that only
stops on fsync, fdatasync and openat and names every file; it forwards
SIGTERM so probes can stop it. sync-overlap.py joins a soak arm's per-save
log with that trace: per-file sync counts and times, every sync of the
branch's own files with the saves it overlaps, and the sync chain of the
slowest saves. It exits 1 when a watched sync overlaps a save.

Used on #928 to show its witness never syncs inside a save.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(perf): judge the save-soak max against the dev range
Some checks are pending
CI / server (pull_request) Waiting to run
CI / rust (pull_request) Waiting to run
CI / web (pull_request) Waiting to run
Markdown extraction contract / markdown-native-contract (pull_request) Waiting to run
Markdown extraction contract / markdown-editor-contract (pull_request) Waiting to run
0b5d1f11af
A soak max is one sample in 900; on the shared perf disk one burst decides
which arm has it (#928: dev arms 89.4/86.8 ms, branch arms 50.3/66.7 ms,
nothing branch-only inside any save). comparing.md writes down how a
branch is compared with dev: one perf-turn, both locks, interleaved ABAB
with dev-vs-dev control pairs, p50/p95/p99 and save_ack as the main gate.
The max now passes when every branch arm is inside the dev arms' range over
at least three arms per side; above it, the sync-overlap check decides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Merged into dev (dc420d71d); closing.

Merged into dev (dc420d71d); closing.
kayg closed this pull request 2026-11-10 09:45:22 +00:00
Some checks are pending
CI / server (pull_request) Waiting to run
CI / rust (pull_request) Waiting to run
CI / web (pull_request) Waiting to run
Markdown extraction contract / markdown-native-contract (pull_request) Waiting to run
Markdown extraction contract / markdown-editor-contract (pull_request) Waiting to run

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal!1050
No description provided.