피드로 돌아가기
When "idle" isn't idle: how a Linux kernel optimization became a QUIC bug
Cloudflare BlogCloudflare Blog
Infrastructure

CUBIC cwnd 핀 고정 버그 해결을 통한 QUIC 테스트 통과율 61% → 100% 달성

When "idle" isn't idle: how a Linux kernel optimization became a QUIC bug

Antonio Vicente2026년 5월 12일14advanced

Context

Linux 커널의 CUBIC 최적화 로직을 QUIC 구현체인 quiche에 포팅하는 과정에서 발생한 엣지 케이스 분석. 심각한 Packet Loss 발생 후 Recovery 단계에서 cwnd가 최소치에 고정되어 대역폭을 회복하지 못하는 Congestion Collapse 현상 노출.

Technical Solution

  • RFC 9438의 app-limited exclusion 메커니즘을 구현하여 idle 상태의 cwnd 유지 로직 적용
  • RTT(10ms)와 유사한 주기(~14ms)로 Recovery와 Congestion Avoidance 상태가 반복 전환되는 oscillation 현상 식별
  • 최소 cwnd(2700 bytes) 상태에서 단순한 시간 기반 idle 체크가 실제 네트워크 지연을 idle로 오판하여 cwnd 성장을 억제하는 로직 결함 발견
  • last_ack_time 기반의 epoch-shift 계산식을 수정하여 최소 cwnd 상황에서의 오판 방지 및 정상적인 윈도우 확장 유도
  • 단 3줄의 로직 수정을 통해 CUBIC의 상태 전이 사이클을 정상화하고 cwnd growth curve 복구

- 최소 cwnd 및 최대 대역폭 등 경계 조건(Boundary Condition)에 대한 스트레스 테스트 케이스 확보 - 상태 전이 빈도가 RTT 주기와 일치하는지 모니터링하여 비정상적 oscillation 여부 검증 - 외부 표준(RFC) 구현 시, 실제 트래픽의 Pipeline Delay와 Idle 상태의 구분 기준 정밀 검토

원문 읽기