Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

JohnScheuer/multi-tenant-serving-bench

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multi-tenant-serving-bench

Python License Status Simulation Models Last Commit Repo Size

Event-driven benchmark of per-tenant KV-cache isolation policies for multi-tenant LLM serving, measuring SLO compliance, fairness, and stability under noisy neighbor and burst scenarios.

Author: Joao Felipe De Souza Year: 2026


Overview

Production LLM serving infrastructure is typically shared between multiple tenants with different SLO requirements and priorities. Without explicit isolation, a noisy neighbor can degrade the experience of premium tenants even when global capacity is sufficient.

This benchmark asks:

  1. Which isolation policy best protects premium tenant SLOs?
  2. Is there a policy that simultaneously protects all tenants?
  3. What is the fairness cost of strong isolation?
  4. Are priority-based reclaim policies stable under simultaneous bursts?

Tenant Setup

Three tenants compete for shared KV-cache capacity:

Tenant Priority Quota SLO p99 TTFT Workload type
tenant_A 3 (premium) 40% 2000 ms Short prompts, latency-sensitive
tenant_B 2 (standard) 40% 8000 ms Medium prompts
tenant_C 1 (best-effort) 20% none Long prompts, potential noisy neighbor

Main Findings

1. No single policy satisfies all tenant SLOs simultaneously

The central result is that isolation policy choice is a deliberate trade-off. Every policy protects a different subset of tenants.

Policy Protects A Protects B Fairness
global_fcfs never never high
hard_quota 50% of configs 25% of configs lower
priority_reclaim 0% of configs 75% of configs medium
soft_quota 25% of configs 0% of configs high

2. Hard quota eliminates violations for the premium tenant

Under noisy_neighbor workload, hard quota reduces tenant_A SLO violations from 82 percent with global FCFS to less than 1 percent. The cost is that tenant_B is left unprotected.

3. Priority reclaim balances tenants but collapses under simultaneous bursts

Priority reclaim meets tenant_B SLO in 75 percent of configurations. However, under bursty_mixed_tenants, p99 TTFT reaches 470000ms, indicating a reclaim loop that degrades all tenants simultaneously. This finding shows that priority reclaim requires a minimum capacity floor per tenant to be safe in production.

4. Soft quota has high fairness but low real isolation

Soft quota borrowing maintains high Jain fairness but fails to protect tenant_B in most scenarios because borrowed capacity flows to tenant_C without sufficient control.

5. Global FCFS never meets any tenant SLO under load

Global FCFS achieves zero SLO compliance for tenant_A and tenant_B across all tested configurations. It is the worst policy for any workload where SLOs must be maintained.


Policies

global_fcfs_no_isolation No per-tenant limits. Pure FCFS using the global KV budget. Baseline that demonstrates the absence of isolation.

hard_quota Each tenant has a dedicated KV allocation equal to its quota fraction. Cannot exceed quota even when other tenants are idle. Maximizes isolation, reduces utilization and fairness.

soft_quota_borrow Tenants can borrow idle capacity from others with a headroom reserve. Improves utilization while maintaining partial isolation.

priority_reclaim High-priority tenants can reclaim borrowed capacity from lower-priority tenants. Best cross-tenant balance but unstable under simultaneous bursts.


Workloads

  • balanced_3tenants: all tenants at moderate load
  • noisy_neighbor: tenant_C bursts aggressively
  • premium_latency_sensitive: tenant_A at high load with tight SLO
  • long_context_background: tenant_C runs large background jobs
  • bursty_mixed_tenants: all tenants burst simultaneously

Metrics

Per-tenant: throughput_rps, p99_ttft_ms, slo_violation_rate, slo_met, borrow_events, reclaim_events, completed, rejected

Global: global_throughput_rps, jain_fairness_index, avg_kv_reserved_mb, total_borrowed_mb, total_reclaimed_mb


Running

From the project directory:

cd ~/dev/multi-tenant-serving-bench
source venv/bin/activate
python -u run.py

Output Files

results/summary.csv
results/tenant_detail.csv
plots/

Project Structure

multi-tenant-serving-bench/
|-- src/
|   |-- __init__.py
|   |-- config.py
|   |-- workload.py
|   |-- tenants.py
|   |-- scheduler.py
|   |-- simulator.py
|   |-- bench.py
|   |-- analysis.py
|-- results/
|-- plots/
|-- run.py
|-- SUMMARY.txt
|-- DESIGN.md
|-- LICENSE
|-- README.md
|-- requirements.txt
|-- .gitignore

Limitations

This is a KV-allocation simulation, not a full serving stack. Known simplifications include no real GPU execution, no actual token generation, no batching at step level, no network or scheduling overhead, simplified reclaim without partial eviction, and no token streaming. These simplifications isolate the economics of per-tenant KV admission.


Conclusion

Multi-tenant LLM serving requires explicit per-tenant KV isolation. No single policy simultaneously satisfies all tenant SLOs. Hard quotas maximize isolation for premium tenants at the cost of fairness. Priority reclaim achieves better cross-tenant balance but requires minimum capacity floors to prevent instability under simultaneous bursts. Global FCFS is unsuitable for any workload where tenant SLOs must be maintained.


License

MIT License. See LICENSE.

About

Event-driven benchmark of per-tenant KV-cache isolation policies for multi-tenant LLM serving, measuring SLO compliance, fairness, and stability under noisy neighbor and burst scenarios.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.