피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Slow Path 제거로 Tail Latency를 6.95ms에서 40µs로 단축한 PMAD 설계
A single malloc took 7 milliseconds. So I deleted the slow path.
AI 요약
Context
일반적인 Allocator가 평균 성능(Median)은 우수하나, OS Fallback 및 Coalescing 등의 Slow Path로 인해 간헐적인 Tail Latency 스파이크가 발생하는 구조적 한계 노출. 특히 실시간 렌더링이나 금융 쿼트 시스템처럼 엄격한 Time Budget이 필요한 환경에서 7ms에 달하는 단일 malloc 호출이 전체 시스템 병목으로 작용함.
Technical Solution
- Startup 단계에서 단 한 번의 mmap을 통해 메모리 풀을 사전 확보하는 정적 할당 전략 채택
- Block Size와 비율을 사전에 정의하여 Lookup-table 기반의 인덱싱과 Free-list Pop/Push 구조로 구현
- Coalescing, Growth, Lock 메커니즘을 완전히 제거하여 모든 할당 및 해제 연산을 O(1) 시간 복잡도로 고정
- Shared-nothing per-core 아키텍처를 적용하여 Lock-free 상태의 단일 스레드 전용 풀을 코어별로 배치
- 결정론적(Deterministic) 메모리 관리를 통해 할당자 수준의 예측 가능성을 확보하고 이를 기반으로 Dispatcher가 부하를 제어하는 Co-design 설계
실천 포인트
- Tail Latency 스파이크가 발생하는 지점에서 범용 라이브러리의 'Slow Path' 존재 여부 확인 - 엄격한 Latency Budget이 필요한 경우, 런타임 동적 할당 대신 Startup 시점의 정적 풀 할당 검토 - Multi-core 환경에서 Lock 경합 제거를 위해 Shared-nothing per-core 메모리 구조 적용 가능성 분석 - 시스템의 결정론적 동작을 위해 기능적 유연성(Dynamic Growth 등)과 성능 예측 가능성 사이의 Trade-off 평가