fix(metrics): clear forward occupancy on idle (#33562)

Co-authored-by: Jialin Ouyang <Jialin.Ouyang@gmail.com>
This commit is contained in:
Lianmin Zheng
2026-08-04 12:49:17 -07:00
committed by GitHub
co-authored by Jialin Ouyang
parent dea2be5ae3
commit 5081c063c0
3 changed files with 80 additions and 6 deletions
@@ -3,6 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="base-a-test-cpu")
import math
import types
import unittest
from unittest.mock import patch
@@ -331,5 +332,72 @@ class TestForwardPassMetrics(unittest.TestCase):
self.assertFalse(scheduler.enable_fpm)
class TestIdleMetrics(unittest.TestCase):
def setUp(self):
self.scheduler = types.SimpleNamespace(
running_batch=types.SimpleNamespace(reqs=[]),
waiting_queue=[],
grammar_manager=[],
enable_priority_scheduling=False,
disaggregation_mode=DisaggregationMode.NULL,
pool_stats_observer=types.SimpleNamespace(
get_pool_stats=lambda: types.SimpleNamespace(
update_scheduler_stats=lambda _: None
),
streaming_session_count=lambda: 0,
session_held_tokens=lambda: 0,
),
)
self.reporter = _make_reporter(self, self.scheduler)
self.published_occupancies = []
self.reporter.metrics_collector = types.SimpleNamespace(
last_log_time=100.0,
log_stats=lambda stats: self.published_occupancies.append(
stats.fwd_occupancy
),
)
def test_idle_clears_cached_forward_occupancy_immediately(self):
self.reporter.current_scheduler_metrics_enabled = True
self.reporter.fwd_occupancy = 72.0
self.reporter.stats.fwd_occupancy = 72.0
self.reporter._device_timer_window_batch_count = 7
with (
patch(
"sglang.srt.managers.scheduler_components.metrics_reporter.ENABLE_METRICS_DEVICE_TIMER",
True,
),
patch(
"sglang.srt.managers.scheduler_components.metrics_reporter.time.perf_counter",
return_value=101.0,
),
):
self.reporter._maybe_log_idle_metrics()
self.reporter._maybe_log_idle_metrics()
self.assertEqual(len(self.published_occupancies), 1)
self.assertTrue(math.isnan(self.published_occupancies[0]))
self.assertTrue(math.isnan(self.reporter.fwd_occupancy))
self.assertTrue(math.isnan(self.reporter.stats.fwd_occupancy))
self.assertEqual(self.reporter._device_timer_window_batch_count, 0)
def test_idle_resets_forward_timing_when_metrics_are_disabled(self):
self.reporter.fwd_occupancy = 72.0
self.reporter.stats.fwd_occupancy = 72.0
self.reporter._device_timer_window_batch_count = 7
with patch(
"sglang.srt.managers.scheduler_components.metrics_reporter.ENABLE_METRICS_DEVICE_TIMER",
True,
):
self.reporter._maybe_log_idle_metrics()
self.assertTrue(math.isnan(self.reporter.fwd_occupancy))
self.assertTrue(math.isnan(self.reporter.stats.fwd_occupancy))
self.assertEqual(self.reporter._device_timer_window_batch_count, 0)
self.assertEqual(self.published_occupancies, [])
if __name__ == "__main__":
unittest.main()