피드로 돌아가기
Internals: Go 1.24 Garbage Collector Updates and How They Reduce Latency for gRPC Services
Dev.toDev.to
Backend

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

ANKUSH CHOUDHARY JOHAL2026년 5월 4일24advanced

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 횟수 감소치 정량적 비교 분석

원문 읽기