Add kvcache-centric profiling and admission controls

This commit is contained in:
2026-04-25 16:00:52 +00:00
parent 08b13d22bc
commit 13bb31a446
9 changed files with 1044 additions and 34 deletions

View File

@@ -33,6 +33,8 @@ class RequestMetrics:
kv_transfer_blocks: int
actual_kv_transfer_blocks: int
cached_tokens: int
prefill_request_priority: int | None
decode_request_priority: int | None
re_prefill_required: bool
effective_input_length: int | None
session_reused: bool
@@ -58,6 +60,8 @@ class RequestMetrics:
latency_s: float | None,
ttft_s: float | None,
tpot_s: float | None,
prefill_request_priority: int | None = None,
decode_request_priority: int | None = None,
error: str | None = None,
) -> "RequestMetrics":
return cls(
@@ -81,6 +85,8 @@ class RequestMetrics:
kv_transfer_blocks=decision.kv_transfer_blocks,
actual_kv_transfer_blocks=actual_kv_transfer_blocks,
cached_tokens=cached_tokens,
prefill_request_priority=prefill_request_priority,
decode_request_priority=decode_request_priority,
re_prefill_required=decision.re_prefill_required,
effective_input_length=effective_input_length,
session_reused=session_reused,
@@ -111,6 +117,16 @@ def write_summary_json(
tpots = [row.tpot_s for row in rows if row.tpot_s is not None]
per_decode_load = Counter(row.assigned_decode_node for row in rows)
per_prefill_load = Counter(row.assigned_prefill_node for row in rows)
prefill_priorities = Counter(
row.prefill_request_priority
for row in rows
if row.prefill_request_priority is not None
)
decode_priorities = Counter(
row.decode_request_priority
for row in rows
if row.decode_request_priority is not None
)
summary: dict[str, Any] = {
"trace_path": str(trace_path),
@@ -135,6 +151,12 @@ def write_summary_json(
),
"per_decode_load": dict(sorted(per_decode_load.items())),
"per_prefill_load": dict(sorted(per_prefill_load.items())),
"prefill_request_priorities": {
str(key): value for key, value in sorted(prefill_priorities.items())
},
"decode_request_priorities": {
str(key): value for key, value in sorted(decode_priorities.items())
},
"error_count": sum(1 for row in rows if row.error is not None),
}
path.parent.mkdir(parents=True, exist_ok=True)