mimalloc, 멀티스레드 환경에서 메모리 할당 성능을 혁신하다!
mimalloc은 고성능, 확장성(Scalability)을 목표로 설계된 오픈소스 메모리 할당기로, 기존 malloc/free를 대체 가능함
스레드 로컬 힙(Thread-Local Heap)과 원자적 연산(Atomic Operations)을 활용하여 동시성(Concurrency) 문제를 해결하고 성능을 향상시킴
마이크로소프트(Microsoft)의 Bing, Unreal Engine 등 대규모 서비스에서 실제 성능 개선 사례(Performance Improvement)가 확인됨
mimalloc은 NoGIL CPython 3.13+의 할당기로 사용되며, Rust wrapper는 일일 10만 건 이상의 다운로드를 기록함
mimalloc의 핵심 아키텍처: 스레드 로컬 힙(Thread-Local Heap)
mimalloc은 각 스레드에 독립적인 힙(Heap)을 할당하는 방식으로 동시성 문제를 해결한다. 각 스레드는 자신만의 스레드 로컬 힙(Thread-Local Heap)을 가지며, 이 힙은 64KiB 크기의 페이지(Page)로 구성된다. 이러한 구조는 스레드 간의 경쟁(Contention)을 최소화하여 메모리 할당 및 해제 속도를 향상시킨다. 특히, 작은 크기의 메모리 할당 시에는 원자적 연산 없이 빠르게 처리할 수 있다.
원자적 연산(Atomic Operations)을 활용한 동기화
mimalloc은 스레드 간 메모리 해제 시 원자적 비교-교환(Compare-and-Swap) 연산을 사용하여 동기화를 수행한다. 이는 각 페이지에 있는 스레드-프리 리스트(Thread-Free List)에 블록을 안전하게 추가하기 위한 방법이다. 최신 하드웨어에서는 이러한 연산이 캐시 일관성 프로토콜(Cache Coherence Protocol)과 통합되어 효율적으로 처리된다. mimalloc은 이러한 기술을 통해 확장성(Scalability)을 확보하면서도, 데이터 격리 아키텍처(Data Isolation Architecture)를 유지한다.
mimalloc의 성능 최적화 기법
mimalloc은 작은 메모리 할당(Small Allocation)을 위한 빠른 경로(Fast Path)를 제공하여 성능을 극대화한다. 이 경로는 스레드 로컬 힙의 프리 리스트(Free List)에서 블록을 가져오는 방식으로, 원자적 연산 없이 빠르게 메모리를 할당한다. 또한, 페이지 내에서 사용된 블록 수를 추적하여 페이지가 완전히 비워졌는지 효율적으로 감지한다. 이러한 최적화는 mimalloc의 전반적인 성능을 향상시키는 데 기여한다.
실제 서비스에서의 mimalloc 활용 사례
mimalloc은 마이크로소프트의 Bing, Unreal Engine, Death Stranding 등 다양한 서비스와 애플리케이션에서 사용되고 있다. 특히, Bing 서비스에서 응답 시간(Response Time)을 크게 개선하는 데 기여했다. NoGIL CPython 3.13+의 할당기로 채택되었으며, Rust wrapper는 10만 건 이상의 일일 다운로드를 기록하며 널리 사용되고 있다. 이러한 사례들은 mimalloc의 실용성(Practicality)과 광범위한 적용 가능성(Wide Applicability)을 보여준다.