Skip to content

Floor memory instrument: a beat at every phase seam, with the leaf's swap, PSI, local events and charged processes - #12078

Merged
gunbai-bot[bot] merged 6 commits into
mainfrom
session/crisp-raven-893
Sep 23, 2026
Merged

gunbai-bot[bot] merged 6 commits into
mainfrom
session/crisp-raven-893

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

First deliverable of the floor memory attribution lane (work item adhoc-80d33957-f14): the instrument, before any reduction.

Why. gunbc.floor_demand gunbc_floor_memory_stat_receipt_2026_09_19 is the sizing receipt the microVM shape is judged against, and it is (a) minute-grained — the watchdog says which phase a minute was in, never where a phase started or ended — and (b) censored on swap, because the swap figure beside the leaf's counters was the host's swap-in, a different subject. The latest main floor run (35637789956) shows anon rising roughly linearly through the whole strict-preparation phase, and the process entering the floor already holding several GiB of anon from parse/declarations; neither observation can be attributed to a cause at minute grain with no process list.

What.

  • floor_seam emits one [floor-cgroup] when=seam-<name> beat at every phase boundary. New seams: changed-witness-planning, prepare-closure-resolve, prepared-subject-warm (inside strict-preparation), publication, and in claim_executor parse, declarations, floor-entry.
  • Every stat beat also prints seam=, unix_ms=, the leaf's own memory.swap.current, memory.events.local (oom / oom_kill), memory.pressure (PSI), and procs=[pid:comm:VmRSS,…] for the leaf's cgroup.procs — raw, nothing summed (the derivation keeps its one home, beat_held_set). The process list is what separates overlap (another process charged to the slot) from retained application state.
  • gunbc.floor_cgroup_stat_beat_seed_growth records the extension against the v1 freeze (hand-item delta 0).

Not in this PR. No reduction and no receipt: the cause is to be declared from the attributed run this instrument produces (this PR's own floor run is the first one, at the current 26 GiB row), not from peak snapshots. The typed carrier (FloorMemoryStatBeat gaining seam/swap/PSI) lands with the dated successor receipt, where there are beats to populate it.

Instrument invocation. The required floor job's [floor-cgroup] when=seam-* and when=beat-* lines (claim_executor --required-ci --source-root dag --source-root src/v2 --required-lane witnesses); GUNBC_FLOOR_HEARTBEAT_SECS tightens the watchdog cadence.

🤖 Generated with Claude Code

Brian Searls and others added 5 commits September 22, 2026 21:01
…swap, PSI, local events and charged processes

The 2026-09-19 sizing receipt bounds the held set only to the minute and is
censored on swap, because the watchdog names the minute a phase was in and the
swap figure beside it was the host's. floor_seam now emits one [floor-cgroup]
beat at every phase boundary (seams added inside strict-preparation, at
publication, and in claim_executor at parse/declarations/floor-entry), and each
beat also prints the leaf's memory.swap.current, memory.events.local,
memory.pressure and cgroup.procs as pid:comm:VmRSS, all raw.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ap/PSI/events/procs line and seam beats on top

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…irement covers everything the reader prints (review 70239)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… seams inside the planning window

The first attributed run (floor job 106950715986) put most of the floor
process's growth in the planning window before resolve, with no overlapping
process of size. floor_heap_beat reads mallinfo2 at each seam so retained
state and allocator-held freed memory separate without the trim that would
change the heap; nominal-subject-seeds, arm-set-planning and lane-roster seams
split the window.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…seam, and seams inside the diff projections

Floor job 106963145694 put the peak's early growth in live heap, from the
lane-roster evaluation (which resolves through the process-lifetime shared
index/store) and the diff projections. The census says whether those stores
grow and whether any later seam reads them; the seams say which projection.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… seams placed before it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 23, 2026
Merged via the queue into main with commit f225508 Sep 23, 2026
5 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/crisp-raven-893 branch September 23, 2026 10:52
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.

0 participants