Partitioned capacity: four arguments, one structure
Four arguments have arrived independently at the same conclusion:
- Unbounded key space (The derivation ladder). Negative entries (cached "does not exist" answers) can be generated without limit and must not compete with positive entries.
- Different miss costs (Cost-aware eviction). One hit-rate objective across cost classes optimizes the wrong thing.
- Marginal return (What makes data cacheable). The best allocation equalizes dMRC/dC, the slope of each tenant's miss-ratio curve with respect to its cache share. A tenant dominated by one-shot requests has almost no marginal return anywhere, so it deserves a cap, not a fair share.
- Isolation. A scanning tenant in a shared cache is more than a noisy neighbour. A co-tenant's origin is sized for (1 − h)λ, so a hit-rate collapse gives it a multiple of its capacity. In a shared cache, one tenant's access pattern is another tenant's availability dependency. That is why this belongs to workload management (who gets how much of a shared resource), not to tuning.
The mechanisms, with their costs:
| Mechanism | Benefit | Cost |
|---|---|---|
| Static partitions | simple, predictable | waste capacity on idle tenants |
| Dynamic partitioning by marginal miss-ratio curve | optimal | needs a miss-ratio curve per tenant, so the What makes data cacheable instrumentation becomes a prerequisite for the third time |
| Per-class admission filtering | nearly free; the doorkeeper already does it | only approximate protection |
| Pinning | the only hard guarantee | converts cache capacity into dedicated storage, so it stops being a cache |
The last row shows that the guarantee was bought with the elasticity that was the point of a cache. (Every gain costs something elsewhere.)
Compression: Four independent derivations demand partitioned capacity. Only pinning guarantees anything, and it does so by no longer being a cache.