본문으로 건너뛰기
피드

챗GPT 충돌 원인, 알고 보니 18년 묵은 GNU libunwind 버그였다

backend 약 5분
vote
0
댓글
북마크

오픈AI가 챗GPT 데이터 인프라에서 반복되던 원인불명 충돌을 추적한 끝에 하드웨어 결함과 18년 된 GNU libunwind 버그가 겹친 문제였다고 밝혔다. 개별 크래시 로그만 파던 방식에서 벗어나 1년치 충돌 데이터를 모아 패턴을 본 게 결정적이었다.

  • 1

    챗GPT 데이터 플러그인과 대화 검색에 쓰이는 Rockset 서비스에서 원인불명 충돌이 발생했다

  • 2

    충돌 원인은 특정 물리 서버의 하드웨어 결함과 GNU libunwind의 오래된 경합 상태 버그였다

  • 3

    오픈AI는 라이브러리 교체와 함께 오픈소스 프로젝트에 재현 코드와 수정 사항을 공유했다

  • 챗GPT에서 몇 달 동안 이어진 원인불명 충돌의 정체가 드디어 잡힘

    • 오픈AI가 공식 블로그에서 밝힌 내용이고, 문제는 챗GPT 핵심 데이터 인프라 쪽에서 발생했음
    • 영향 구간은 데이터 플러그인과 대화 검색 등에 쓰이는 Rockset 서비스였음
    • Rockset은 오픈AI가 2024년에 인수한 실시간 데이터 분석 시스템임
  • 처음 증상은 전형적인데, 원인은 전형적이지 않았음

    • 프로그램이 비정상적인 메모리 주소에 접근하다가 갑자기 죽는 형태였음
    • 엔지니어들이 개별 충돌 기록을 하나씩 파봤지만, 흔한 오류 패턴이 아니라서 원인 추적이 잘 안 됐음
    • 이런 종류의 장애는 로그 몇 개만 보면 전부 다 다른 문제처럼 보이는 경우가 많아서 빡셈
  • 돌파구는 “개별 사건 분석”이 아니라 “전체 충돌 데이터 역학조사”였음

    • 오픈AI는 지난 1년간 발생한 충돌 데이터를 모아서 패턴을 다시 봤음
    • 그 결과 충돌이 크게 두 묶음으로 갈라졌음
    • 하나는 특정 지역의 특정 물리 서버에 몰려 있었고, 이건 하드웨어 결함으로 판명됨
    • 해당 서버를 교체하자 관련 충돌은 바로 사라짐

중요

> 핵심은 1년치 충돌 데이터를 모아 봤다는 점임. 단건 로그만 파서는 하드웨어 결함과 라이브러리 버그가 섞인 문제를 분리하기 어려웠음.

  • 진짜 흥미로운 쪽은 나머지 충돌이었음. 범인은 18년 된 GNU libunwind 버그였음

    • GNU libunwind 초기 버전부터 있던 경합 상태 버그가 특정 조건에서만 터지고 있었음
    • 버그 자체는 오래됐지만, 발현 조건이 너무 희귀해서 그동안 발견되지 않았던 것으로 보임
    • 오픈AI 시스템은 대규모 연산 때문에 특정 신호를 이례적으로 높은 비율로 사용하고 있었음
    • 최근 신호 처리 방식이 바뀌면서 그 오래된 버그가 실제로 터질 조건이 맞춰진 셈임
  • 해결은 두 갈래로 진행됨

    • 오픈AI는 문제가 된 라이브러리를 더 안정적인 다른 라이브러리로 교체했음
    • 동시에 GNU libunwind 쪽에는 버그 재현 코드와 수정 사항을 공유했음
    • 내부 장애를 고친 데서 끝내지 않고 업스트림 오픈소스에도 돌려준 건 꽤 좋은 마무리임
  • 이 사건이 개발자에게 주는 메시지는 단순함. 큰 시스템에서는 “말도 안 되는 버그”가 진짜로 존재함

    • 하드웨어 결함 하나와 18년 묵은 오픈소스 버그 하나가 같이 섞이면, 증상은 거의 미스터리처럼 보임
    • 특히 고빈도 신호 처리, 네이티브 라이브러리, 대규모 데이터 인프라가 겹치면 오래된 저수준 버그도 다시 살아남
    • 오픈AI가 말한 것처럼, 불가능해 보이는 문제를 진단 가능한 문제로 바꾸는 건 결국 충분한 데이터와 좋은 관측성임

기술 맥락

  • 이번 선택의 핵심은 크래시 하나하나를 더 오래 파는 게 아니라, 1년치 충돌 데이터를 모아서 분포를 본 거예요. 왜냐하면 하드웨어 결함처럼 위치가 중요한 문제와 라이브러리 경합 상태처럼 타이밍이 중요한 문제가 섞이면, 단건 로그만으로는 원인이 계속 흐려지거든요.

  • GNU libunwind 같은 저수준 라이브러리는 평소에는 거의 눈에 안 띄지만, 예외 처리나 스택 추적처럼 런타임 깊은 곳에서 움직여요. 그래서 오픈AI처럼 신호를 높은 비율로 쓰는 대규모 시스템에서는 아주 오래된 버그도 갑자기 운영 장애로 튀어나올 수 있어요.

  • 오픈AI가 라이브러리를 교체하면서 재현 코드와 수정 사항을 업스트림에 공유한 것도 중요해요. 내부 우회만 하면 자기 서비스는 멈추겠지만, 같은 라이브러리를 쓰는 다른 시스템에는 버그가 계속 남기 때문이에요.

대규모 서비스 장애 디버깅은 결국 로그 한 줄의 천재적 해석보다 좋은 전체 데이터가 이긴다는 얘기다. 18년 동안 숨어 있던 버그도 트래픽과 신호 처리 패턴이 바뀌면 갑자기 프로덕션 한복판에서 튀어나온다.

댓글

댓글

댓글을 불러오는 중...

backend

잘못된 추상화보다 중복이 낫다는 샌디 메츠의 고전 조언

샌디 메츠는 중복을 없애려다 잘못된 추상화를 만들면 코드가 조건문과 파라미터로 부풀어 더 위험해진다고 말한다. 이미 틀어진 추상화는 억지로 보존하지 말고, 다시 호출부에 인라인해서 중복을 되살린 뒤 현재 요구사항에 맞는 새 구조를 찾는 편이 빠르다는 주장이다.

backend

리눅스 커널, 6년·360개 넘는 패치 끝에 strncpy 제거

리눅스 커널이 오랫동안 버그의 원인이던 strncpy API 사용을 Linux 7.2에서 제거했어. NUL 종료 동작이 직관적이지 않고 불필요한 zero-fill로 성능 문제도 있던 API를 6년 동안 약 362개 커밋으로 걷어낸 작업임.

backend

덕디비는 왜 빠를까: 서버 없는 분석 엔진의 내부 구조 뜯어보기

DuckDB가 단일 바이너리, 인프로세스 실행, 컬럼형 저장, 최적화 패스, Parquet 푸시다운으로 빠른 분석 쿼리를 처리하는 방식을 깊게 설명한 글이다. 6GB Parquet 파일을 노트북에서 바로 SQL로 읽는 경험 뒤에 어떤 설계가 깔려 있는지 따라간다.

backend

피지독, 포스트그레스를 수평 확장시키겠다고 550만 달러 투자 유치

피지독은 포스트그레스 앞단에 프록시를 두고 샤딩과 라우팅을 처리해 수평 확장을 가능하게 하겠다는 오픈소스 프로젝트다. 이미 프로덕션에서 초당 200만 건이 넘는 쿼리를 처리하고, 확인된 규모만 20테라바이트 이상을 샤딩했다고 밝히며 550만 달러 투자를 공개했다.

backend

펜타시스템, EDB 포스트그레SQL로 국내 엔터프라이즈 DB 전환 시장 공략

펜타시스템테크놀러지가 EDB와 파트너 계약을 맺고 국내에 EDB 포스트그레SQL 기반 데이터 플랫폼을 공급한다. 기존 상용 DBMS 정책 변화로 비용 부담이 커진 기업들을 겨냥해, 오픈소스 기반 엔터프라이즈 데이터 플랫폼 전환 수요를 잡겠다는 전략이다. 금융, 공공, 제조, 유통, 클라우드, AI 데이터 분석 환경까지 적용 범위를 넓히려는 움직임이다.