Cloudflare가 잡아낸 QUIC CUBIC 버그, ‘idle’ 한 줄 오판이 다운로드를 죽였다
Cloudflare의 QUIC 구현체 quiche에서 CUBIC 혼잡 제어가 최소 윈도우에 갇혀 회복하지 못하는 버그가 발견됐다. Linux 커널의 idle 최적화를 QUIC에 옮기는 과정에서 TCP와 QUIC의 이벤트 타이밍 차이를 놓쳤고, 결국 ACK 시점을 기준으로 idle 시간을 재도록 고쳐 100% 테스트 통과를 회복했다.
- 1
초기 2초 동안 30% 패킷 손실을 넣은 HTTP/3 다운로드 테스트가 약 60% 확률로 10초 타임아웃에 걸림
- 2
손실이 끝난 뒤에도 CUBIC의 cwnd가 2패킷, 2700바이트 바닥에 고정됨
- 3
원인은 bytes_in_flight == 0을 진짜 idle로 오해하면서 recovery start time을 RTT만큼 계속 미래로 밀어버린 것
- 4
수정은 마지막 송신 시각이 아니라 마지막 ACK 시각까지 고려해 실제 idle 구간을 재는 방식으로 이뤄짐
이 글은 ‘최적화 코드 하나’가 프로토콜 구현체를 옮겨 탈 때 얼마나 다른 의미가 되는지 보여주는 좋은 사례임. TCP 커널 콜백 기준으로 맞던 가정이 user space QUIC에서는 death spiral이 됐다는 점이 포인트.
관련 기사
잘못된 추상화보다 중복이 낫다는 샌디 메츠의 고전 조언
샌디 메츠는 중복을 없애려다 잘못된 추상화를 만들면 코드가 조건문과 파라미터로 부풀어 더 위험해진다고 말한다. 이미 틀어진 추상화는 억지로 보존하지 말고, 다시 호출부에 인라인해서 중복을 되살린 뒤 현재 요구사항에 맞는 새 구조를 찾는 편이 빠르다는 주장이다.
리눅스 커널, 6년·360개 넘는 패치 끝에 strncpy 제거
리눅스 커널이 오랫동안 버그의 원인이던 strncpy API 사용을 Linux 7.2에서 제거했어. NUL 종료 동작이 직관적이지 않고 불필요한 zero-fill로 성능 문제도 있던 API를 6년 동안 약 362개 커밋으로 걷어낸 작업임.
덕디비는 왜 빠를까: 서버 없는 분석 엔진의 내부 구조 뜯어보기
DuckDB가 단일 바이너리, 인프로세스 실행, 컬럼형 저장, 최적화 패스, Parquet 푸시다운으로 빠른 분석 쿼리를 처리하는 방식을 깊게 설명한 글이다. 6GB Parquet 파일을 노트북에서 바로 SQL로 읽는 경험 뒤에 어떤 설계가 깔려 있는지 따라간다.
피지독, 포스트그레스를 수평 확장시키겠다고 550만 달러 투자 유치
피지독은 포스트그레스 앞단에 프록시를 두고 샤딩과 라우팅을 처리해 수평 확장을 가능하게 하겠다는 오픈소스 프로젝트다. 이미 프로덕션에서 초당 200만 건이 넘는 쿼리를 처리하고, 확인된 규모만 20테라바이트 이상을 샤딩했다고 밝히며 550만 달러 투자를 공개했다.
펜타시스템, EDB 포스트그레SQL로 국내 엔터프라이즈 DB 전환 시장 공략
펜타시스템테크놀러지가 EDB와 파트너 계약을 맺고 국내에 EDB 포스트그레SQL 기반 데이터 플랫폼을 공급한다. 기존 상용 DBMS 정책 변화로 비용 부담이 커진 기업들을 겨냥해, 오픈소스 기반 엔터프라이즈 데이터 플랫폼 전환 수요를 잡겠다는 전략이다. 금융, 공공, 제조, 유통, 클라우드, AI 데이터 분석 환경까지 적용 범위를 넓히려는 움직임이다.
댓글
댓글
댓글을 불러오는 중...