Tabs: trace server RSS growth across switching storms #1378

Open
opened 2026-10-07 15:03:24 +00:00 by kayg · 0 comments
Owner

Found in the production Tab-switching storm for #1338. Related: #1338 and #1233.

Server RSS rose after each 120-second storm. At one second after each storm it measured 309,678,080 → 372,563,968 → 386,150,400 bytes with 4× CPU throttling, and 540,459,008 → 584,097,792 → 604,860,416 bytes without throttling. This fails the #1338 budget that server RSS must not climb across storms. The measurements are in docs/perf/runs/2026-10-07-1338-tabstorm-post-gc.csv and the summary JSON.

The browser trace does not reveal a Rust allocation retaining path. It does show repeated Task collection reads: 2,973 Task endpoint requests in the CPU4 condition and 3,297 in the no-throttle condition. The server handler is calternal_plugins_notes::tasks_api::list in crates/plugins/notes/src/tasks_api.rs (around line 1393), but the current evidence does not prove those reads own the retained RSS. Profile server allocations or per-route memory while repeating the storm, then identify whether this is retained application data or allocator high-water memory and fix the actual owner.

Perf VM conditions ran under perf-run locks. Lock load at start was 0.03 1.18 2.60 for CPU4 and 6.04 5.28 4.08 for native; sampled one-minute load p50/p95/max was 5.75/6.50/6.79 and 5.10/5.71/5.82 respectively.

Found in the production Tab-switching storm for #1338. Related: #1338 and #1233. Server RSS rose after each 120-second storm. At one second after each storm it measured 309,678,080 → 372,563,968 → 386,150,400 bytes with 4× CPU throttling, and 540,459,008 → 584,097,792 → 604,860,416 bytes without throttling. This fails the #1338 budget that server RSS must not climb across storms. The measurements are in `docs/perf/runs/2026-10-07-1338-tabstorm-post-gc.csv` and the summary JSON. The browser trace does not reveal a Rust allocation retaining path. It does show repeated Task collection reads: 2,973 Task endpoint requests in the CPU4 condition and 3,297 in the no-throttle condition. The server handler is `calternal_plugins_notes::tasks_api::list` in `crates/plugins/notes/src/tasks_api.rs` (around line 1393), but the current evidence does not prove those reads own the retained RSS. Profile server allocations or per-route memory while repeating the storm, then identify whether this is retained application data or allocator high-water memory and fix the actual owner. Perf VM conditions ran under `perf-run` locks. Lock load at start was `0.03 1.18 2.60` for CPU4 and `6.04 5.28 4.08` for native; sampled one-minute load p50/p95/max was 5.75/6.50/6.79 and 5.10/5.71/5.82 respectively.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
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-v0#1378
No description provided.