Skip to content

Near-full page store: publish/evict work after an hour of long-context traffic slows subsequent requests ~35 % (5K-prompt decode 21 vs 32 tok/s); disappears in restore-only #60

Description

@sethforprivacy

Summary

On a four-GB10 GLM-5.3 TP4/DCP4 ring (sparkring operator image 0d4029b3…, sparkcache 6605717, tail-cow-v2, two 3 GiB async capture slots, SPARKCACHE_MAX_BYTES=40 GiB / low watermark 32 GiB per rank, 300 s lease), an hour of long-context agent traffic leaves the lane measurably slower for requests that run right after it, and the effect disappears with the store off. The page store was near its cap the whole time and evicted ~660 entries during one such hour. Evidence below is from paired probes around three 60-minute soaks (4 concurrent conversations, 75k–300k tokens, ~2k-token tail prefill per turn, thinking on).

Observation

Idle probes (3 × one ~5.3K-token prompt, 300 output tokens, reasoning_effort=low) before and after each soak, per-stream decode tok/s and first-token latency:

lane before soak after soak
read-write, NCCL 30.7 / 33.6 / 34.9 30.4 / 21.2 / 25.4 (one first token 4.31 s vs 2.5 s normal)
read-write, SIRCL dual rail 32.0 / 32.0 / 34.2 20.8 / 21.2 / 28.6 (one first token 4.48 s)
restore-only (SPARKCACHE_ACCESS_MODE=restore-only, async capture off), NCCL 34.3 / 29.5 / 29.8 32.1 / 32.6 / 33.4, first tokens 2.26–2.34 s

An inter-token-latency probe (8 sequential 5.3K requests) on a settled lane shows a uniform 73–75 ms decode step in every mode; the slow samples above are ~110 ms/step for the whole request, i.e. something else is using the GPUs/CPU while they run. Store state during the read-write soaks:

before: sparkcache: capacity ranks=4 entries=1251 used=142.3/160.0GiB healthy=yes
after:  sparkcache: capacity ranks=4 entries=592  used=129.2/160.0GiB healthy=yes

so ~660 entries were evicted during the hour. During the soaks, page_delta commits that normally take 0.2–0.7 s intermittently took 5–6 s on every rank (two such commits also preceded our 2026-09-04 22:23Z DCP hang, sparkring #215, though causality there is unproven). Separately, the price of publishing on a settled lane is small and consistent: -10 % first-token latency for a new 5K prompt and -3..-5 % single-prompt prefill at 16K/64K with the store off; decode unchanged.

Asks

  1. Is eviction (and manifest/commit work behind it) bounded per scheduler step, or can a near-full store keep the saver busy continuously? The post-soak slowdown suggests the latter.
  2. A gauge for eviction/commit backlog (bytes or entries pending, oldest pending commit age) next to the vllm:sparkcache_capture_* ownership gauges from Retain asynchronous store completion across worker polls #57, so operators can see this instead of inferring it from probe latency.
  3. Guidance on sizing SPARKCACHE_MAX_BYTES vs the low watermark for a lane whose working set exceeds the store (should the watermark gap be much larger than one hour of publications?).

Happy to rerun with an instrumented build; the probe scripts and per-soak CSVs are in our site repo.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions