diff --git a/python/sglang/srt/mem_cache/hicache_storage.py b/python/sglang/srt/mem_cache/hicache_storage.py index 27f963c54297..b6ac9959ac42 100644 --- a/python/sglang/srt/mem_cache/hicache_storage.py +++ b/python/sglang/srt/mem_cache/hicache_storage.py @@ -7,6 +7,7 @@ import torch +from python.sglang.srt.metrics.collector import StorageMetrics from sglang.srt.mem_cache.memory_pool_host import HostKVCache logger = logging.getLogger(__name__) @@ -162,7 +163,7 @@ def batch_exists( def clear(self) -> None: pass - def get_stats(self): + def get_stats(self) -> Optional[StorageMetrics]: return None diff --git a/python/sglang/srt/mem_cache/storage/hf3fs/storage_hf3fs.py b/python/sglang/srt/mem_cache/storage/hf3fs/storage_hf3fs.py index a789c2af8214..59fba790051b 100644 --- a/python/sglang/srt/mem_cache/storage/hf3fs/storage_hf3fs.py +++ b/python/sglang/srt/mem_cache/storage/hf3fs/storage_hf3fs.py @@ -486,18 +486,24 @@ def close(self) -> None: logger.error(f"close HiCacheHF3FS: {e}") logger.info("close HiCacheHF3FS") - @synchronized() - def get_stats(self): - storage_metrics = StorageMetrics() - storage_metrics.prefetch_pgs.extend(self.prefetch_pgs) - storage_metrics.backup_pgs.extend(self.backup_pgs) - storage_metrics.prefetch_bandwidth.extend(self.prefetch_bandwidth) - storage_metrics.backup_bandwidth.extend(self.backup_bandwidth) - self.prefetch_pgs.clear() - self.backup_pgs.clear() - self.prefetch_bandwidth.clear() - self.backup_bandwidth.clear() - return storage_metrics + def get_stats(self) -> Optional[StorageMetrics]: + # Acquire lock without blocking + if not self.lock.acquire(blocking=False): + return None + + try: + storage_metrics = StorageMetrics() + storage_metrics.prefetch_pgs.extend(self.prefetch_pgs) + storage_metrics.backup_pgs.extend(self.backup_pgs) + storage_metrics.prefetch_bandwidth.extend(self.prefetch_bandwidth) + storage_metrics.backup_bandwidth.extend(self.backup_bandwidth) + self.prefetch_pgs.clear() + self.backup_pgs.clear() + self.prefetch_bandwidth.clear() + self.backup_bandwidth.clear() + return storage_metrics + finally: + self.lock.release() def register_mem_pool_host(self, mem_pool_host: HostKVCache): super().register_mem_pool_host(mem_pool_host)