피드로 돌아가기
Dev.toBackend
원문 읽기
Rust FFI 도입으로 p99 지연시간 280ms에서 42ms로 단축
Hytale Servers and the Lies We Told Ourselves About Treasure Hunts
AI 요약
Context
최대 1,200개 동시 월드를 처리하는 treasure-hunt 엔진의 400ms 내 원자적 처리 요구사항 발생. Go 언어 기반의 글로벌 allocator 구조에서 sync.Map 뮤텍스 경합 및 GC Jitter로 인한 메모리 OOM 및 결정론적 시딩 붕괴 문제 직면.
Technical Solution
- Go GC 제약을 완전히 제거하기 위해 Rust crate 기반의 C-extension(cdylib)으로 엔진 이관
- Lua FFI를 통한 프로세스 내 직접 로드 방식으로 컨텍스트 스위칭 비용 최소화
- bumpalo arena 및 no_std + libc_alloc 조합을 통한 zero-copy loot table 구현 및 메모리 할당 최적화
- Go 사이드 GC를 비활성화하고 tick-local 할당을 위한 arena pool 기반의 메모리 관리 체계 구축
- 전역 뮤텍스 기반 PRNG를 64-bit XOR-shift 및 world-id mixing 구조로 변경하여 lock-free 핫패스 달성
- dlopen을 활용한 shared object 핫패칭 방식으로 Rust의 긴 빌드 시간을 배포 프로세스에서 격리
실천 포인트
1. GC Jitter가 p99 지연시간에 영향을 주는지 go tool trace 등으로 정밀 분석
2. 고빈도 할당이 발생하는 핫패스에 Arena Allocator 도입 검토
3. 공유 자원에 대한 Mutex 경합 발생 시 ID 기반의 Lock-free 구조로 전환 가능한지 확인
4. 런타임 성능과 빌드 속도의 트레이드오프 발생 시 Shared Object 핫패칭 전략 고려