Skip to content

fix(ingest): bound bulk-publication anonymous RSS independently of edge count #900

Description

@DecisionNerd

Problem

The exact merged Graph500 ladder (6d93bc7a194d9a591b8d3a065a52b697095a4b26) was executed on Fly.io in dfw with 2 performance vCPUs, 4 GiB RAM, a 25 GB NVMe volume, and GF_G500_LADDER_MAX_SCALE=22. The host OOM-killed the process during S20 ingest, before S20 completed.

Authoritative host evidence:

  • Fly Machine event: exit_code=137, oom_killed=true, requested_stop=false
  • kernel OOM record: anon-rss:3823708kB, file-rss:60kB for scale_g500_ladd
  • last atomic journal: S20 ingest, generator completed, generator process high-water 80,023,552 bytes
  • volume at recovery: 15,433,204 KiB used of 25,610,468 KiB (64%)
  • no S20 pass and no S22/S24/S25/S26 attempt

This disproves the earlier interpretation that the multi-GiB signal was merely cgroup page cache. The failure is anonymous process memory during ingest. The current ladder source already notes that ingest includes the upstream bulk-publication identity set; that set or an adjacent ingest structure is not bounded independently of total edge count. This violates the disk-bound scale objective.

Required outcome

Ingest, including node identity publication and edge merge/publish, must stream or shard all scale-dependent state so process RSS plateaus with measured headroom as scale rises. Buying a larger machine is not the repair.

Acceptance criteria

  • Identify the exact anonymous-memory owner during S20 ingest with phase/subphase measurements.
  • Replace the scale-linear in-memory identity/publication structure with a disk-backed, streamed, or bounded-shard design owned by Rust.
  • Add deterministic regression coverage proving resident state is bounded independently of total node/edge count.
  • Journal process RSS within long ingest subphases often enough that a host OOM still leaves a useful recent sample.
  • Re-run S20 on the same 4 GiB Fly machine class and demonstrate completion with bounded/plateauing anonymous RSS.
  • Only then attempt S22, still with the explicit max-scale cap and independent storage headroom.
  • Do not weaken envelope checks, raise RAM as the fix, or claim a completed rung from the interrupted run.

Blocks #745.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions