피드로 돌아가기
Dev.toBackend
원문 읽기
Go 1.24 Hybrid Write Barrier 도입으로 gRPC p99 Latency 40% 개선
Internals: Go 1.24 Garbage Collector Updates and How They Reduce Latency for gRPC Services
AI 요약
Context
기존 Go 1.23의 Dijkstra-style barrier는 포인터 쓰기 시 과도한 Heap Scan을 유발하여 gRPC 서비스의 STW(Stop-The-World) Pause를 심화시킨 구조임. 특히 대용량 Payload 처리 시 불필요한 페이지 스캔으로 인해 p99 Latency가 급증하는 병목 지점이 존재함.
Technical Solution
- Yuasa-style Delete Barrier와 Dijkstra-style Insert Barrier를 결합한 Hybrid Write Barrier 도입을 통한 스캔 효율 최적화
- Heap 세대를 2단계에서 3단계(Young, Middle, Old)로 세분화하여 객체 생존 주기 기반의 효율적인 메모리 관리 체계 구축
- Per-P(Processor) Local Buffer(1024 entries) 채택을 통한 Global Buffer 경합 제거 및 STW Pause 최소화
- Concurrent Sweeping 프로세스를 Scheduler와 분리하여 전용 Goroutine으로 운영함으로써 피크 트래픽 시의 Sweep 지연 해소
- Java G1 GC와 같은 Full Generational Collector 대신 Goroutine Throughput 유지를 위해 메모리 오버헤드를 감수한 하이브리드 설계 선택
Impact
- STW Pause 시간 62% 감소 (Go 1.23 대비)
- 10k QPS gRPC 서비스의 p99 Latency 210ms에서 79ms로 단축
- 1MB Payload 단일 gRPC 호출의 p99 Latency 40% 개선
- 불필요한 Heap Scan 40% 제거 및 G1 GC 대비 24% 높은 Throughput 달성
- 인프라 최적화를 통한 월평균 클라우드 비용 약 $22k 절감
Key Takeaway
전체 처리량(Throughput)과 꼬리 지연 시간(Tail Latency) 사이의 Trade-off 상황에서, 메모리 사용량(50% 오버헤드)을 희생하여 런타임 스캔 비용을 줄이는 설계 전략이 고부하 네트워크 서비스에 더 효과적임.
실천 포인트
- Latency-sensitive gRPC 서비스 운영 시 Go
1.24 버전 업그레이드 검토 - GODEBUG=hybridbarrier=1 설정을 통한 신규 Write Barrier 활성화 여부 검증 - Memory Limit이 엄격한 환경인 경우 hybridbarrier=0 설정 또는 GOGC 값 튜닝을 통한 메모리 오버헤드 제어 - go tool pprof를 활용하여 Go
1.23 대비 Heap Scan 횟수 감소치 정량적 비교 분석