[UnifiedTree]: Support hicache metrics (#27554)

This commit is contained in:
Zhangheng
2026-06-08 20:18:02 +08:00
committed by GitHub
parent 6394a8b381
commit 1ff7c627cd
@@ -55,7 +55,11 @@ from sglang.srt.mem_cache.utils import (
get_eviction_strategy, get_eviction_strategy,
split_node_hash_value, split_node_hash_value,
) )
from sglang.srt.observability.metrics_collector import StorageMetricsCollector from sglang.srt.observability.metrics_collector import (
STAT_LOGGER_ROLE_STORAGE,
StorageMetricsCollector,
resolve_collector_class,
)
from sglang.srt.session.streaming_session import StreamingSession from sglang.srt.session.streaming_session import StreamingSession
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -1587,6 +1591,8 @@ class UnifiedRadixCache(KVCacheEventMixin, BasePrefixCache):
if self.cache_controller is None: if self.cache_controller is None:
return False return False
start_time = time.perf_counter()
# Build KV transfer # Build KV transfer
kv_xfer = self.components[BASE_COMPONENT_TYPE].build_hicache_transfers( kv_xfer = self.components[BASE_COMPONENT_TYPE].build_hicache_transfers(
best_match_node, CacheTransferPhase.LOAD_BACK best_match_node, CacheTransferPhase.LOAD_BACK
@@ -1665,6 +1671,13 @@ class UnifiedRadixCache(KVCacheEventMixin, BasePrefixCache):
best_match_node, best_match_node,
self.inc_lock_ref(best_match_node).to_dec_params(), self.inc_lock_ref(best_match_node).to_dec_params(),
) )
if self.metrics_collector is not None:
self.metrics_collector.observe_load_back_duration(
time.perf_counter() - start_time
)
self.metrics_collector.increment_load_back_num_tokens(len(device_indices))
return True return True
def _build_sidecar_transfers( def _build_sidecar_transfers(
@@ -2195,7 +2208,14 @@ class UnifiedRadixCache(KVCacheEventMixin, BasePrefixCache):
labels.update(extra_metric_labels) labels.update(extra_metric_labels)
existing_collector = self.storage_metrics_collector existing_collector = self.storage_metrics_collector
if existing_collector is None: if existing_collector is None:
self.storage_metrics_collector = StorageMetricsCollector(labels=labels) from sglang.srt.server_args import get_global_server_args
storage_cls = resolve_collector_class(
get_global_server_args(),
STAT_LOGGER_ROLE_STORAGE,
StorageMetricsCollector,
)
self.storage_metrics_collector = storage_cls(labels=labels)
elif set(existing_collector.labels.keys()) == set(labels.keys()): elif set(existing_collector.labels.keys()) == set(labels.keys()):
existing_collector.labels = labels existing_collector.labels = labels
else: else: