PERF: verification batch on the perf VM for finished branches (#498 #423 #494 #527 #530) #563

Open
opened 2026-10-01 01:34:15 +00:00 by kayg · 9 comments
Owner

Perf VM verification batch (orchestrator, 2026-10-01)

Several jobs finished their code but could not get /root/perf.lock (long HDD-emulation and stress runs held it), so their perf-VM numbers are missing:

  • #498 Calendar pinch-zoom/fling (job/fix-498 a? head): baseline 10.1 / 10.3 fps, target 60 fps;
  • #423 route benchmark (cold / hard refresh / warm, every Tab), now via the shared harness from #549;
  • #494 incremental Notes reindex;
  • #527 keyboard selection latency (local p95 72 ms under load 39);
  • #530 floating sheet frame strips (if not already measured).
    Job: one serial run on the perf VM. Hold the lock once, run each profile against its branch's release build (build each once into /mnt/hdd/targets/release-shared/<branch>; never build on the perf VM), and interleave before/after runs (dev vs branch), 11 runs each. Use the decision rule from docs/perf/README.md. Post a table per issue (fps / p50 / p95 / CPU / RSS, before vs after, with host load) and update docs/perf/baseline.json on a branch job/perf-batch. Fix nothing; report regressions as new PERF issues.
    Order: start after #549 (tab switch, HDD emulation) releases the lock. If #549 left the HDD emulation set up, run the load-path profiles (#423 routes) on both the normal disk and /srv/hdd-emu.
## Perf VM verification batch (orchestrator, 2026-10-01) Several jobs finished their code but could not get `/root/perf.lock` (long HDD-emulation and stress runs held it), so their perf-VM numbers are missing: - #498 Calendar pinch-zoom/fling (job/fix-498 a? head): baseline 10.1 / 10.3 fps, target 60 fps; - #423 route benchmark (cold / hard refresh / warm, every Tab), now via the shared harness from #549; - #494 incremental Notes reindex; - #527 keyboard selection latency (local p95 72 ms under load 39); - #530 floating sheet frame strips (if not already measured). **Job:** one serial run on the perf VM. Hold the lock once, run each profile against its branch's release build (build each once into `/mnt/hdd/targets/release-shared/<branch>`; never build on the perf VM), and interleave before/after runs (`dev` vs branch), 11 runs each. Use the decision rule from `docs/perf/README.md`. Post a table per issue (fps / p50 / p95 / CPU / RSS, before vs after, with host load) and update `docs/perf/baseline.json` on a branch `job/perf-batch`. Fix nothing; report regressions as new PERF issues. **Order:** start after #549 (tab switch, HDD emulation) releases the lock. If #549 left the HDD emulation set up, run the load-path profiles (#423 routes) on both the normal disk and `/srv/hdd-emu`.
Author
Owner

Add to the batch: #496 (job/perf-496): Search indexing 1M files, peak RSS 1.85 GiB → 290 MiB locally; indexing time 6,630 s under load is uncontrolled. Measure the time and RSS for 1M and the 100k mixed rebuild on the VM, before vs after.

Add to the batch: #496 (job/perf-496): Search indexing 1M files, peak RSS 1.85 GiB → 290 MiB locally; indexing time 6,630 s under load is uncontrolled. Measure the time and RSS for 1M and the 100k mixed rebuild on the VM, before vs after.
Author
Owner

Add to the batch: #503 (job/fix-503 94d5d0865): measure peak server RSS for the 1M-file Home (baseline 6.65 GB on a 7.7 GiB host), before vs after, together with #496 and #495.

Add to the batch: #503 (job/fix-503 94d5d0865): measure peak server RSS for the 1M-file Home (baseline 6.65 GB on a 7.7 GiB host), before vs after, together with #496 and #495.
Author
Owner

Add to the batch: #537 Escape (job/esc-537): clearing one selected row took p50 266 / p95 641 ms locally under load; a 5,000-row clear p95 899 ms. Escape must be instant (< 16 ms of script). Measure on the VM; if it is still > 50 ms, file a PERF issue.

Add to the batch: #537 Escape (job/esc-537): clearing one selected row took p50 266 / p95 641 ms locally under load; a 5,000-row clear p95 899 ms. Escape must be instant (< 16 ms of script). Measure on the VM; if it is still > 50 ms, file a PERF issue.
Author
Owner

Started #563 on branch job/perf-batch-563 from base SHA cc25c441b7. I am checking the shared perf harness, target branch SHAs, and perf VM readiness before the locked interleaved runs.

Started #563 on branch job/perf-batch-563 from base SHA cc25c441b7a974185622a1dee853cf38686d2b67. I am checking the shared perf harness, target branch SHAs, and perf VM readiness before the locked interleaved runs.
Author
Owner

The README does not define a paired A/B decision rule. It points to bench/compare.py; that comparer uses +10% for route p95, +15% for peak RSS, +10% for idle RSS, +5% for gzip bundle size and +20% for INP. I will report paired medians and p95 values, apply these published regression thresholds where metrics match, and keep thresholds/targets from each issue for other metrics.

The README does not define a paired A/B decision rule. It points to bench/compare.py; that comparer uses +10% for route p95, +15% for peak RSS, +10% for idle RSS, +5% for gzip bundle size and +20% for INP. I will report paired medians and p95 values, apply these published regression thresholds where metrics match, and keep thresholds/targets from each issue for other metrics.
Author
Owner

#427 adds bench/files-listing-427.py after removing a pre-existing duplicate Files Inbox GET. Local debug run on a busy shared host (load 21.77/22.01/20.38), 120 real uploaded photos: serial 50 reads p50 29.74 ms / p95 52.87 ms, CPU 1.0 s (59.38%), mean RSS 444593574 / peak 447209472 bytes. Burst 32 reads / eight workers: p50 71.46 ms / p95 111.63 ms, CPU 0.46 s (134.72%), mean RSS 447233536 / peak 447250432 bytes. Baseline files.entries: p50 1.8 ms / p95 3.1 ms on the release perf-test build at 369ab6a2f9.

These values exceed the baseline but the environments are not comparable; this is not evidence of a product regression. Follow-up: run the new profile under the perf VM lock using a release build and the largest realistic folder (50k rows). The local fixture had only 120 entries and does not fulfill that worst-case measurement. Performance does not block the round.

#427 adds bench/files-listing-427.py after removing a pre-existing duplicate Files Inbox GET. Local debug run on a busy shared host (load 21.77/22.01/20.38), 120 real uploaded photos: serial 50 reads p50 29.74 ms / p95 52.87 ms, CPU 1.0 s (59.38%), mean RSS 444593574 / peak 447209472 bytes. Burst 32 reads / eight workers: p50 71.46 ms / p95 111.63 ms, CPU 0.46 s (134.72%), mean RSS 447233536 / peak 447250432 bytes. Baseline files.entries: p50 1.8 ms / p95 3.1 ms on the release perf-test build at 369ab6a2f9fc673e3564b94857fbecfeb04df404. These values exceed the baseline but the environments are not comparable; this is not evidence of a product regression. Follow-up: run the new profile under the perf VM lock using a release build and the largest realistic folder (50k rows). The local fixture had only 120 entries and does not fulfill that worst-case measurement. Performance does not block the round.
Author
Owner

Pinned #423 uses its expanded apps/web/e2e/route-perf.mjs: it measures cold, hard-refresh, and warm navigation. The pinned origin/job/tabswitch-549 copy is the older route/data-ready profile and has no cold/hard-refresh/warm cases. I will run the expanded #423 profile with its shared production harness for both server builds and on both normal and HDD-emulated storage, so the requested navigation cases stay covered.

Pinned #423 uses its expanded `apps/web/e2e/route-perf.mjs`: it measures cold, hard-refresh, and warm navigation. The pinned `origin/job/tabswitch-549` copy is the older route/data-ready profile and has no cold/hard-refresh/warm cases. I will run the expanded #423 profile with its shared production harness for both server builds and on both normal and HDD-emulated storage, so the requested navigation cases stay covered.
Author
Owner

Work branch name update: this worktree is now job/perf-batch, matching the job prompt. The existing commits and measured source SHAs are unchanged.

Work branch name update: this worktree is now `job/perf-batch`, matching the job prompt. The existing commits and measured source SHAs are unchanged.
Author
Owner

Perf batch #563 is blocked before measurements. The release servers for dev, #423, #494, #498, #527, #530 and #537 were built on the build host and staged on the Perf VM; their commits and SHA-256 hashes are in docs/perf/2026-10-01-perf-batch-563.md.

At 2026-10-01 09:47 UTC, the single command flock -n /root/perf.lock bash /root/perf-563/run-batch.sh returned exit status 1. A read-only check showed an existing writer on /root/perf.lock; there was no batch log or profile process. I did not retry. No measurements or in-lock load samples were collected, and no PERF issue was filed.

I appended verification_batches.perf-batch-563 to docs/perf/baseline.json with status not_measured; the historical metrics are unchanged. #495, #496 and #503 were pinned but not built. The requested 11 runs per side were not collected.

Branch: job/perf-batch
Head: c484160b4135f7ab5d59cc3e3bee2d84b8edb606

Checks:

  • git diff --check: exit 0, no output.
  • python3 -m json.tool docs/perf/baseline.json > /dev/null: exit 0, no output.
  • node --check bench/escape-537.mjs: exit 0, no output.
  • cargo clean: Removed 7756 files, 3.1GiB total
Perf batch #563 is blocked before measurements. The release servers for `dev`, #423, #494, #498, #527, #530 and #537 were built on the build host and staged on the Perf VM; their commits and SHA-256 hashes are in `docs/perf/2026-10-01-perf-batch-563.md`. At 2026-10-01 09:47 UTC, the single command `flock -n /root/perf.lock bash /root/perf-563/run-batch.sh` returned exit status 1. A read-only check showed an existing writer on `/root/perf.lock`; there was no batch log or profile process. I did not retry. No measurements or in-lock load samples were collected, and no PERF issue was filed. I appended `verification_batches.perf-batch-563` to `docs/perf/baseline.json` with status `not_measured`; the historical metrics are unchanged. #495, #496 and #503 were pinned but not built. The requested 11 runs per side were not collected. Branch: `job/perf-batch` Head: `c484160b4135f7ab5d59cc3e3bee2d84b8edb606` Checks: - `git diff --check`: exit 0, no output. - `python3 -m json.tool docs/perf/baseline.json > /dev/null`: exit 0, no output. - `node --check bench/escape-537.mjs`: exit 0, no output. - `cargo clean`: `Removed 7756 files, 3.1GiB total`
Sign in to join this conversation.
No labels
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#563
No description provided.