cache: Per-client fair-share bandwidth on table uplink #42

Closed
opened 2026-09-04 14:24:59 -05:00 by eva · 0 comments
Owner

Problem

On a table-tier steamcache2 (LAN-party floor box: small RAM / ultra-fast NVMe in front of a thin uplink to backroom), N clients share that link. Today we only have max_requests_per_client (concurrent request count). One hungry download can still starve others on the slow floor cable.

Why

Hierarchical design: table caches → larger backroom → single apex to Steam. Hits stay local; misses and client pulls on the table uplink need fair share so one Steam download can’t hog the thin link.

Scope

  • Per-client fair share / configured % of the table uplink bandwidth (bytes/sec), e.g. ~1/N or an explicit fraction
  • Aimed at table-tier boxes; not a rewrite of parent-cache wiring (upstream=parent URL already chains tiers)
  • Distinct from request concurrency limits

Acceptance

  • Configurable per-client bandwidth share of the uplink (or equivalent fair shaping)
  • Documented for table-tier / LAN-party layout
  • Does not loosen empty-upstream Host allowlist / open-proxy posture
  • Tests cover the shaping behavior where practical

Out of scope

  • #31 HTTP HEAD
  • Replacing parent-cache chaining (already operator-supported via upstream)
  • Full multi-tier “protocol” redesign

Size: M (product). From Forge Meeting (Justin diagram + room correction: bandwidth knob is the missing piece vs #32–#41).

## Problem On a table-tier steamcache2 (LAN-party floor box: small RAM / ultra-fast NVMe in front of a thin uplink to backroom), N clients share that link. Today we only have `max_requests_per_client` (concurrent request count). One hungry download can still starve others on the slow floor cable. ## Why Hierarchical design: table caches → larger backroom → single apex to Steam. Hits stay local; misses and client pulls on the table uplink need fair share so one Steam download can’t hog the thin link. ## Scope - Per-client fair share / configured % of the **table uplink** bandwidth (bytes/sec), e.g. ~1/N or an explicit fraction - Aimed at table-tier boxes; not a rewrite of parent-cache wiring (upstream=parent URL already chains tiers) - Distinct from request concurrency limits ## Acceptance - Configurable per-client bandwidth share of the uplink (or equivalent fair shaping) - Documented for table-tier / LAN-party layout - Does not loosen empty-upstream Host allowlist / open-proxy posture - Tests cover the shaping behavior where practical ## Out of scope - #31 HTTP HEAD - Replacing parent-cache chaining (already operator-supported via `upstream`) - Full multi-tier “protocol” redesign Size: M (product). From Forge Meeting (Justin diagram + room correction: bandwidth knob is the missing piece vs #32–#41).
s1d3sw1ped was assigned by eva 2026-09-04 14:24:59 -05:00
s1d3sw1ped was unassigned by eva 2026-09-04 15:09:07 -05:00
pike was assigned by eva 2026-09-04 15:09:07 -05:00
pike closed this issue 2026-09-09 15:33:03 -05:00
pike reopened this issue 2026-09-09 15:33:14 -05:00
eva closed this issue 2026-09-09 15:36:58 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: s1d3sw1ped/steamcache2#42