[Ray Serve] Controller 마이크로벤치마크 공식 추가
PR 링크: ray-project/ray#61368 상태: Merged | 변경: +568 / -2
들어가며
Ray Serve의 Controller는 모든 deployment의 오토스케일링, replica 관리, 상태 업데이트를 담당하는 핵심 컴포넌트입니다. deployment 수가 늘어나면 Controller의 루프 속도가 저하되어 스케일링 지연이 발생할 수 있습니다. 이 PR은 Controller의 성능을 체계적으로 측정하는 마이크로벤치마크를 공식 릴리스 테스트에 추가합니다.
핵심 코드 분석
벤치마크 아키텍처
CONTROLLER_BENCH_CONFIG = {
"checkpoints": [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048],
"marination_period_s": 180,
"sample_interval_s": 5,
}
체크포인트별로 replica 수를 증가시키며 각 단계에서 Controller의 성능 메트릭을 수집합니다.
측정 메트릭
def _controller_extract_metrics_row(health_metrics, ...):
return {
"loops_per_second": health_metrics.get("loops_per_second", 0),
"event_loop_delay_s": health_metrics.get("event_loop_delay_s", 0),
"deployment_state_update_mean_s": get_stat(...),
"application_state_update_mean_s": get_stat(...),
"process_memory_mb": health_metrics.get("process_memory_mb", 0),
# ...
}
주요 측정 항목:
- loops_per_second: Controller 메인 루프 초당 실행 횟수
- event_loop_delay_s: asyncio 이벤트 루프 지연
- deployment_state_update_mean_s: deployment 상태 업데이트 소요 시간
- process_memory_mb: Controller 프로세스 메모리 사용량
부하 생성 Deployment
@serve.deployment(
autoscaling_config=_CONTROLLER_AUTOSCALING_CONFIG,
max_ongoing_requests=2,
graceful_shutdown_timeout_s=1,
)
class ControllerBenchMetricsGenerator:
"""Autoscaling deployment that generates handle metrics."""
def __init__(self, hello_world: DeploymentHandle):
self.hello_world = hello_world
async def __call__(self):
return await self.hello_world.remote()
오토스케일링이 활성화된 deployment가 요청을 생성하여 Controller에 부하를 줍니다.
왜 이게 좋은가
- 성능 회귀 감지: 릴리스 테스트에 포함되어 CI에서 자동으로 Controller 성능을 추적합니다. 성능 저하가 발생하면 즉시 감지됩니다.
- 스케일링 병목 식별: replica 수를 1에서 2048까지 증가시키며 어느 지점에서 Controller가 병목이 되는지 정량적으로 파악할 수 있습니다.
- 최적화 효과 검증:
stop_replicas()최적화(#60832),AutoscalingPolicy캐싱(#60844) 같은 개선의 효과를 벤치마크로 검증할 수 있습니다.
실제 측정 결과(1 replica 기준):
- Controller 루프: 9.65 loops/sec
- 루프 지속 시간: 3.2ms
- 이벤트 루프 지연: 0.59ms
- 메모리: 185MB
벤치마크 없이는 최적화의 방향을 잡기 어렵습니다. 이 PR은 Ray Serve Controller의 성능을 체계적으로 추적하기 위한 중요한 기반을 마련합니다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [Open WebUI] Chat.svelte 비동기 onMount 메모리 누수 수정
- 현재글 : [Ray Serve] Controller 마이크로벤치마크 공식 추가
- 다음글 [Ray Autoscaler] ALLOCATION_TIMEOUT에서 TERMINATED로의 상태 전이 허용
댓글