스왑으로 밀려난 Go GC 메타데이터가 40ms stop-the-world 정지를 만든 사례

스왑으로 밀려난 Go GC 메타데이터가 40ms stop-the-world 정지를 만든 사례

  • Go 런타임은 힙 밖에 있고 해제되지 않는 GC 메타데이터를 stop-the-world 구간에서 읽는데, 이 페이지가 스왑으로 밀려나면 정지 시간이 중앙값 51us에서 최악 40ms까지 늘어남 (Hetzner, 커널 6.8, MGLRU, NVMe 스왑)
  • bpf로 STW 중 page fault를 세보니 39902us 정지 가운데 39013us가 228번의 page fault에서 발생했고, fault 지점은 runtime.(*spanSet).reset, finishsweep_m, nextMarkBitArenaEpoch 같은 GC 부기 코드였음. 30분 동안 STW 정지가 312번 있었고 40ms는 중앙값의 800배임
  • 511 KiB 메시지 하나 만드는 시간이 평소 3-5ms에서 NVMe 스왑 105ms, Hetzner 네트워크 볼륨 903ms로 늘었음. 다만 할당하는 고루틴만 지불하는 비용이라 전역 정지와는 다름
  • 커널이 접근 시각 기준으로 페이지를 스왑으로 보내고 GC가 다시 읽을 때 do_swap_page가 새 프레임 할당, cgroup 과금, bio 제출, 디스크 대기까지 거치면서 지연이 생김. 작성자는 swap 자체가 악은 아니라는 Chris Down 글에는 동의하지만 GC와는 잘 맞지 않았다고 정리함
  • 작성자가 Go 1.26 Green Tea GC를 측정해봤지만 메타데이터 읽기 방식에 미친 영향은 무시할 수준이었음

Hacker News opinions

런타임이 없는 언어가 얼마나 큰 이점인지 또 증명된 셈임. 이런 문제 자체가 안 생기니까

넌 이미 libc랑 커널이라는 런타임 위에서 코딩하고 있는 거임. 넓게 보면 런타임 없는 코드는 없음

Go가 아예 STW 없는 on-the-fly GC를 안 쓰는 이유가 있나?

on-the-fly-gc 프로젝트를 찾아보면 문서상으로도 정지가 있음. GC 노브는 지연 시간과 처리량을 서로 맞바꾸는 구조라 한쪽만 최적화하면 다른 쪽이 나빠짐. Go GC도 이미 concurrent mark-sweep이고 정지 시간이 수십 마이크로초 수준이라 on-the-fly는 다른 맛일 뿐임

GC 지연 SLO에는 OS 메모리 압박을 넣어야 함. 안 그러면 page fault 문제를 컬렉터 문제로 착각하고 엉뚱한 걸 고치게 됨

page fault는 이론상 무한정 길어질 수 있는데, 그걸로 어떻게 의미 있는 SLO를 세우냐?

'이렇게 하면 아프다' '그럼 하지 마라'임. 지연 시간이 중요하면 스왑을 끄면 됨. 시스템 전체든 cgroup 단위든

그건 좀 틀림. 지연이 중요하면 major fault 아무 데서나 멈추는 건 마찬가지임. 스왑을 끄면 데이터 페이지는 보호되지만 코드 페이지는 여전히 밀려날 수 있음. mlock()을 쓰는 게 맞고 스왑을 끄는 게 아님. 스왑이 있어야 커널이 데이터와 코드 페이지를 공평하게 내보낼 수 있음

무서운 건 스왑이 할당만 느리게 만드는 게 아니라, GC 메타데이터가 밀려나면 메모리 압박이 곧바로 stop-the-world 지연 스파이크로 바뀐다는 점임

사람들이 왜 참조 카운팅을 안 쓰는지 모르겠음. 런타임 성능이 훨씬 예측 가능한데

할당마다 오버헤드가 붙고 순환 참조 문제도 있음

예측 가능하다는 것도 사실이 아님. 객체 하나 해제가 임의 길이의 연쇄 해제를 촉발할 수 있음

멀티스레드 원자적 참조 카운팅은 포인터를 덮어쓸 때마다 카운트 두 개를 원자적으로 갱신해야 해서 비쌈. Swift ARC가 런타임 오버헤드 40%까지 나온다는 얘기도 있음. 그래도 고유성 추론이나 빌림 같은 정적 분석으로 RC를 없앨 수 있다는 점은 유망하고, 추적 GC에서는 그런 최적화 사례를 못 봤음

나는 Node, Ruby, Python 쓸 자리에 Go를 쓰고 지연 시간이 중요하면 Rust를 씀

Discord가 2020년에 이걸 겪고 블로그 글을 썼음

구현이 어떻든 GC가 살아있는 객체를 전부 훑어야 한다는 사실만으로 스왑과는 안 맞음. 40ms STW가 없어도 GC마다 LRU 캐시가 날아감. 애플이 GC를 버리고 ARC로 간 것도 같은 이유라고 봄

참조 카운팅도 GC 알고리즘임. '구현과 무관하게'는 아님. gchandbook.org 같은 책도 있고 구현은 여러 갈래임

GC가 OS와 협력하는 연구가 있었음. bc-pldi-2005 논문이고 UMass에서 리눅스에 구현까지 했는데 결과적으로 안 퍼진 게 아쉬움

이 문제는 GC만의 문제가 아님. Go GC에 메타데이터를 읽는 임계 구역이 있고, 자주 안 읽지만 중요한 메모리 청크를 가진 프로그램은 다 취약함

스왑을 인지하는 GC가 가능하지 않을까. 필요한 페이지를 먼저 스왑인시키고 나서 world를 멈추는 식으로. 그런 API가 딱히 보이진 않지만

해커뉴스
GitHub Actions 러너 배정 지연 장애, Actions와 Pages 포함 3시간 40분 만에 복구화성 카오스 지형 위키백과 문서가 해커뉴스에 올라와 '토끼굴' 반응노르웨이, 공원·학교·헬스장 등 공공장소에서 스마트 안경 임시 금지 추진2026 노벨 생리의학상, 빛으로 뉴런을 조절하는 광유전학 연 칼 디서로스·페터 헤게만·게오르크 나겔 3인 공동 수상Haskell로 GTK 4·libadwaita 할 일 앱 만들기, haskell-gi와 Elm 아키텍처 1부Claude Opus 5.5 에이전트가 계산으로 찾아낸 상온 반강자성 반도체 후보 2종퀄컴, 화웨이 LogicFolding 칩 제조 특허 라이선스 계약 체결Reflection이 501B 오픈웨이트 MoE 모델 Beam 공개, 가중치는 이번 달 말플로리다 여성, Claude를 일기장처럼 쓰다가 보안관 사무소 난사 언급이 경찰에 신고돼 2급 중죄 기소Haskell 블로그, foldl과 foldr 차이 설명 재게재: 지연 평가에서 foldl이 thunk 사슬로 공간을 선형으로 늘림치사 유전자 모기로 뎅기열 95% 줄였는데, 미국 승인은 15년째 공전 중C에서 union으로 타입 안전 제네릭 자료구조 만드는 4단계 기법2026 노벨 생리의학상, 광유전학 연 칼 디서로스·페터 헤게만·게오르크 나겔 3인 수상화웨이·퀄컴, 5G와 AI 포함 다년 특허 크로스라이선스와 미국 특허 매입 계약 발표벤 톰슨의 맥 미니, macOS 화면 공유 결함으로 루트 탈취…클로드 에이전트가 채굴기 발견Cloudflare, AI 에이전트용 Web Search API 베타 공개. Ceramic.ai, Exa, Linkup 3개 제공자 지원GrapheneOS, 픽셀 11에서 MTE 빠진 걸 확인하고 시리즈 건너뛰기 검토... 모토로라로 초점 이동독일 RobCo, $1B 밸류에이션으로 유럽 로봇 유니콘 등극덴마크 CPR 레지스터에서 880만 명 이름·주소·주민번호 무단 유출레드햇 벤치마크: Jev 같은 결정 모델, LLM-as-a-judge와 전통 분류기를 이기지 못함석유 제품을 식물 소재로 바꾸는 리뷰가 해커뉴스 프론트페이지에 올라 바이오연료 회의론으로 번짐Claude에게 스캐너를 맡겼다가 기어를 부순 뒤, 네거티브 변환만 자동화한 35mm 필름 스캔 파이프라인Xray-core, 인증서 검증 우회 취약점 반년간 은폐 의혹...'코드 단순화'라며 조용히 패치Stripe Katie Dill의 AI 시대 'zombie UI' 경계 강연, 해커뉴스는 "예술은 확장 대상이 아니다" 반발스왑으로 밀려난 Go GC 메타데이터가 40ms stop-the-world 정지를 만든 사례CedarDB, 1993년 원본 Doom의 게임 로직과 렌더러를 SQL로 이식해 35 FPS로 구동팁펫 스튜디오 폐업 후 90GB 스톱모션 자료, 인터넷 아카이브에 공개1997년 백업 우화 'The Tao of Backup'이 해커뉴스에 다시 올라, 테이프 비용과 NixOS 재현성 이야기로 번짐F1 바레인 GP 포메이션 랩 소프트웨어 결함으로 전 차량 출력 상실, 드라이버들 "용납할 수 없다"스탠퍼드 Ousterhout의 "TCP는 AI 클러스터의 병목" Homa 강연, HN에서 설계 비판까지SSH 원격 포워딩과 nginx secure_link로 만드는 셀프호스팅 HTTP 터널Jane Street, 11x11 스타배틀 검사 ASIC 퍼즐 해답 공개, 30개국에서 400여 건 풀이 제출인포콤 '인피델'에서 40년 묵은 와일드 포인터 컴파일러 버그 발견브라우저에서 VB6 IDE를 그대로 재현, 폼 디자이너와 샘플 주문 앱까지 실행천장 선풍기가 팬들리에로: 웨이페어 $169 크리스털 팬과 교체 불가 LED잘못된 마스킹으로 드러난 구글 데이터센터 물·전기 사용량: 링컨 52.65MW, 파피리언 연 547.88MgalmacOS 27에서 Apple Intelligence 끄고 모델 파일까지 지우는 CLI RemoveMacAI, HN에서 curl | bash 신뢰 논쟁 촉발울프럼, AI가 수학을 대신한다는 주장에 1988년 Mathematica 사례 들어 반박해커뉴스 프런트에 다시 오른 피터 왓츠의 '블라인드사이트', 의식은 진화의 사치라는 논쟁하일브론 문제 최선 배치 모은 사이트, 아마추어 수학자들이 신기록 잇달아 갱신Apple Magic 키보드·트랙패드를 Apple ID 없이 두 Mac에서 공유하는 오픈소스 Magic Switch전 세계 등화 75,919개를 지구본에 올린 mapped.earth, 모바일 핀치 줌 깨짐과 데이터 과다 표시 지적macOS 사진·동영상 모든 프레임을 AI로 검색하는 오픈소스 SCM, HN에서 프레임 샘플링 비용 논쟁Rust 메타데이터 조기 방출로 빌드와 검사가 최대 2배 빨라진 프로토타입 공개글라슈테에서 주운 쓰레기로 만든 30분짜리 진자시계, NOMOS 레지던시에서 제작돼 GTC 기준 시계로노스이스턴대, 차량 21대와 동반 앱 30개 추적해 커넥티드카 데이터 흐름 공개Strata, RTX 4090에서 Qwen3.8 Flash Next 125B를 초당 124 토큰으로 돌려Playdate C 최적화 비법: 게임보이 에뮬레이터 코어를 20KB에서 2KB로GPU 트레이스 시각화 도구 gpuvis, 커밋 1,778개에 스타 921개VGHF 디지털 아카이브, 잡지 5000종 돌파하고 일본어 잡지 지원 시작C2PA 제외 범위로 파일 전체를 서명에서 빼내 타임스탬프까지 위조한 PoC 공개3Blue1Brown 그랜트 샌더슨의 2023년 '수학의 교육적 저주' 강연이 해커뉴스에서 다시 화제메타 Muse가 앱스토어 1위, 기술은 새로울 게 없고 설계가 이겼다는 분석Jagex, 언리얼 엔진으로 만드는 신작 RuneScape MMO RS4 공개. 출시까지 몇 년러시아가 발전소를 때려도 미콜라이우 수돗물이 나온 이유는 덴마크 지원 오프그리드 태양광쓰레기통 6개에 UWB 태그 붙여 "내놨는지" 확인하는 BinRangeLiDAR로 찾은 뉴욕시 최고 높이 나무 후보 4그루, 20년 넘은 기록 갱신 제안Nolan Lawson이 본 '플랫폼을 쓰라'는 말이 안 먹히는 이유: jQuery 시대의 습관, 문서화 격차, 직접 만드는 재미에이전트에 필요한 건 메모리가 아니라 문서라는 주장, 메모리 플러그인은 전부 RAG라는 지적EMT 자격을 딴 소프트웨어 엔지니어가 꼽은, EMT가 되지 않은 21가지 이유 순위로댕 미술관 3D 스캔 소송, 콩세유 데타가 포인트 클라우드를 비문서로 재분류현직 전기공의 반박: 대학 순등록금은 연 $2,500 미만, 임금 프리미엄은 여전히 대졸 쪽HN: 'Triumph of the Nerds' 제작자 밥 크링글리 별세, 애플 초기 직원 출신사이먼 윌리슨 "사용량 기반 서비스엔 기본 하드 예산 상한 필요"... AWS·구글 클라우드 지출 한도 도입OpenAI 안전 리더 데이비드 로빈슨 사임, "문화가 망가졌다" 경고얀 르쿤 "AI가 인류 멸망시킬 우려 전혀 없다", 아모데이는 '현혹된 상태'라고 비판OPM 국장이 '모범 연방 직원'으로 지목한 20세 DOGE 출신, 최소 6개 주에서 형사 책임 위험밸브 Timur Kristóf, GCN 1.0/1.1 구형 AMD GPU를 AMDGPU 커널 드라이버로 끌어올린 작업 XDC 2026에서 발표Cloudflare, Workers와 Artifacts로 차세대 Git 플랫폼 공모전 개최... 상금 $25k는 크레딧 지급 논란Opus 5.5 프롬프트 가이드: 'think carefully' 지우고 CLAUDE.md에 정지 규칙 넣으라고 권고연방판사, Flock 번호판 검색을 '무차별 대량 감시'라며 수정헌법 4조 위반 판결중력장으로 우주선을 슬링하는 브라우저 게임 Hole Punch 공개MPEG-2 TS를 MOQ로 패키징하는 IETF 드래프트, 해커뉴스 프런트페이지 논의는 가치를 잘못 짚었다는 반박스탠퍼드 철학백과 'Holes' 항목 2025년 개정: 구멍은 실재하는가, 아니면 없는 것인가Goffin 앵무새 15마리, 몸을 장애물로 인식하는 BAO 과제서 97.8% 성공지렁이 이동을 지도로 그리는 탐지기 구상, 현장 데이터는 1988년 연구뿐Show HN: Offrun, 맥에서 Claude Code와 Codex를 한 워크스페이스로 관리FTL, 리눅스 바이너리 호환 사용자 공간 OS로 클라우드 컨테이너 격리 겨냥Cities: Skylines 2의 도시가 너무 사각형이고 너무 깨끗하다는 미학 비판, AI 목업 이미지 두고 HN에서 공방C++ Insights: 컴파일러 눈으로 본 C++ 소스, GitHub 스타 4.5kAleph Alpha, 78B 총 파라미터에 활성 3B, 1M 컨텍스트의 오픈웨이트 MoE Kolibri를 Apache 2.0으로 공개GitHub 새 대시보드가 기본 화면으로 전환, 이슈와 PR 중심 개편에 피드는 별도 탭으로 분리cp의 -r과 -R, GNU coreutils에서는 2002년에 병합됐지만 BSD와 POSIX는 여전히 -R만 권장16억 삼각형 Zorah 씬, meshoptimizer 압축으로 glTF 63.3GB를 32.6GB로 줄여닌텐도 64용 파트너-N64 개발 키트, 개조 콘솔로 브레이크포인트와 리셋을 구현GS1, 50년 만에 바코드 퇴출 선언하고 2027년부터 QR코드로 전환Mat Duggan이 그린 'tmux가 OS인' 데스크톱, 하루 6번 화면 전환과 창 관리 3유형 문제 짚음Kagi, Orion 리눅스와 윈도우 개발 중단하고 오픈소스로 전환Cloudflare, OHTTP 게이트웨이 클로즈드 베타 공개. Privacy Gateway는 OHTTP Relay로 개명이디오크라시 풍자 사이트 'Extra Big Ass Intelligence', Brawndo와 'OW! My BALLS!'로 LLM 슬롭 흉내Emacs에서 Org-mode로 쓰고 Gleam과 Pandoc으로 굽는 블로그 파이프라인Show HN: LDraw 어셈블리 언어로 레고 CAD 모델 생성하는 오픈소스 툴셋 ldraw-nova 공개베네치아의 콘스탄티노플 전쟁 실패가 최초 채권시장을 낳았다해커뉴스 화제: Newgrounds 25년째 그대로, Ruffle이 플래시 게임 살려냄GLM 5.3 Flash 한 달 챌린지, 2B 토큰 중 절반만 지켜지고 에너지 사용은 계획의 3.5배하버드 원전 인근 암 연구 방법론, 코스트코에 적용하니 연 12만 명 사망애플, macOS Full Disk Access에 추가 통제 예고, AI 에이전트 위험을 근거로 제시M4 Mac mini에 리눅스 부팅 성공, 잠긴 레지스터와 SPTM 벽 넘은 기록Meta, Muse AI 하드웨어 연동 오픈소스 SDK 공개... ESP32와 라즈베리파이 지원Redis 만든 antirez, C로 쓴 로컬 추론 엔진 ds4 공개. 128GB 맥에서 DeepSeek V4 Flash 2비트 양자화로 초당 39토큰 생성
3 alerts
New alert

My alerts

Sign in to create alerts.

All alerts

Duneby 제욱AIby 제욱해커뉴스by 성현