Zhuangzhuang Zhou, Vaibhav Gogte, ..., Parthasarathy Ranganathan ASPLOS 2025
개요
Memory allocator가 구글정도 되는 스케일의 서버 단에서는 어떤 오버헤드가 발생하며, 어떻게 최적화를 수행할 수 있을까?
Motivation
메모리 할당을 최적화하여 Warehouse-scale computers (WSC)의 생산성을 향상시키는 것이 중요하다. 이를 통해서 Datacenter tax를 최적화 하여 데이터 센터에서 사용하는 에너지를 절약하여, 비용 향상을 꾀하는 것이 목적이다.
Importance
이전 연구들은 주로 특정 Application혹은 라이브러리의 CPU 오버헤드에 초점을 맞추었다. 그러나, 이 연구에서는 General한 Memory allocator를 최적화 하는 것이 더 유익하다고 주장한다. 이 연구는 메모리 할당 최적화를 통해서 WSC레벨의 응용프로그램들에 대한 성능을 향상시킬 수 있다고 주장한다. 특히 이 연구는 Application의 CPU stall과 같은 문제가 20-64$정도 Cache miss와 같은 Application이 아닌 Memory allocator에서 발생한다고 이야기 하기 떄문에, 메모리 할당을 개선한다면 상당한 성능 향상을 가져올 수 있다고 주장한다.
또한 저자들은 Warehouse-scale에서의 성능 분석이 어떤 특징을 가지고, 일반 Application과는 어떤 차이점을 가지는지 철저히 분석하여 그에 따른 Optimization을 제공하는 연구가 없음을 지적하며, 이러한 연구의 중요성을 설파하고 있다.
Main Idea
주요 아이디어는 TCMalloc 메모리 할당자를 재설계하여 Cache locality을 개선하고 Cache miss를 줄여 WSC 환경에서 애플리케이션 생산성을 향상시키는 것이다. 이 연구는 TCMalloc의 세부 특성을 분석하고, 이러한 분석에서 도출된 인사이트를 바탕으로 여러 설계 개선안을 제안하였다.
Memory Allocator의 성능 분석
이 문단은 TCMAlloc에 대한 이해를 요구함으로, 논문 혹은 TCMalloc에 대한 문서를 읽어야 잘 이해 가능하다.
- Allocation latency
- Latency측면에서, Memory allocator의 Per-cpu cache에서 처리할 수록 Allocation latency가 작았다. 이는 Contiguous allocation의 경우에 Per-cpu cache hit이 잘 일어나기 때문에 당연한 현상이다.
- Malloc CPU cycles
- Malloc CPU cycles은 대략 3.6%-10.1% 정도 차지한다. TCMalloc과 같은 경우에는 Per-CPU cache에서 53%정도의 시간을 사용하였다.
- Memory fragmentation
- Fragmentation ratio란 (Fragmented memory / Live in-use memory)를 의미한다. 전체적으로는 22.2%의 Memory fragmentation이 발생하였으며, External 18.8% (Memory allocator가 Cache하고 있는 사용하지 않아 발생하는 오버헤드), Internal 3.4% (할당한 메모리와 할당을 요청한 메모리의 크기 차이에서 발생하는 오버헤드)정도 발생하였다. TCMalloc에서는 Central heap과 Pageheap에서 대부분의 External Fragmentation이 발생하였는데, 이는 Central free list는 소속된 모든 오브젝트가 Free되야만 OS로 메모리를 free하고, pageheap는 free spans들을 hugepage를 통해서 관리하기 때문에 그런것으로 분석되었다.
- Distribution of allocated objects
- 1KB보다 작은 Obnjects들이 전체 메모리 에서는 28%만 차지하였지만 98%의 Allocated objects들의 사이즈였다. 8KB이상의 메모리 오브젝트들은 50%의 메모리를 차지하였다. Object들의 Lifetime은 매우 Variation이 다양하였다. 일반적으로 오브젝트 크기가 작을수록 적은 Lifetime을 가지는 경우가 대부분이었다. 46%의 오브젝트 할당이 1 milisecond보다 작은 lifetime을 가지고 있었다. 1GB보다큰 object 할당은 65%가 하루보다 큰 lifetime을 가지고 있었다.
디자인
연구에서는 TCMalloc 캐시 계층 구조의 각 단계를 재설계하였다.
1. **Heterogeneous Per-CPU Cache**: Application의 비균일한 Per-cpu cache사용량에 대한 보정을 위해서 사용하였다. 2. **NUCA-aware Transfer Cache**: 비균일 캐시 아키텍처를 가진 플랫폼에서 캐시 지역성을 유지하기 위해 3. **Central Freelist with Span Prioritization**: 할당 위치를 개선하기 위해. 4. **Lifetime-aware Hugepage Filler**: 대용량 페이지 커버리지를 개선하고 변환 조회 버퍼(TLB) 미스를 줄이기 위해
- Heterogeneous Per-CPU Cache (Per-CPU Cache는 TCMalloc이 내부적으로 사용하는 Per-core cache list를 말함)
- TCMalloc에서 사용하는 Per-CPU Cache와 같은 경우에는, WSC환경에서 자주 일어나는 CPU core relocation과 같은 일들에 대비하기 위해서 vCPU ID를 사용하고 있다. 그러나, Load spikes와 Diurnal usage때문에 vCPU를 사용하더라도 서로다른 Thread사이의 Per-CPU Cache miss rate가 차이나는 문제가 발생하였다. 이 문제를 해결하기 위해서, Dynamically하게 Per-CPU cache사이즈를 조절하도록 설계하였다. 별도의 background thread가 주기적으로 Cache를 사용량을 모니터링 하고, 재조절 하도록 하였다. 이를 통해서, Internal Fragmentation을 어느정도 해결하였다.
- NUCA-aware Transfer Cache
- Socket마다 Last-level cache에 접근하는 Cache접근 속도는 Non-uniform하다. 이러한 NUCA구조는 WSC환경은 거대한 CPU cores들을 유지하기 때문에 심해지는 경향이 있다.
Result
재설계된 TCMalloc은 플릿 처리량이 1.4% 증가하고 메모리 사용량이 3.5% 감소하였다. 상위 다섯 개 애플리케이션의 경우 처리량이 0.7%에서 8.1%까지, 메모리 사용량이 1.0%에서 6.3%까지 향상되었다.
Contribution
1. WSC 환경에서 TCMalloc의 포괄적인 특성 분석을 제공. 2. 단순히 CPU 오버헤드를 줄이는 것보다 애플리케이션 생산성을 최적화하는 것의 이점을 입증. 3. 다른 최신 메모리 할당자에도 적용할 수 있는 TCMalloc의 구체적인 설계 변경안을 제안
Criticisms
이 연구는 유망한 개선점을 제시하지만, WSC 워크로드의 끊임없는 변화로 인해 엄격한 종단 간 평가를 수행하는 데 어려움이 있을 수 있다. 또한, 제안된 최적화의 영향은 특정 애플리케이션과 워크로드에 따라 다를 수 있으며, 엄밀한 Overhead가 나와 있지 않다.
Conclusion
이 연구는 메모리 할당 최적화의 중요성을 성공적으로 강조하고 있다. 애플리케이션 생산성에 중점을 두고 TCMalloc의 타겟 설계 개선을 구현함으로써 대규모 컴퓨팅 환경에서 상당한 효율성 향상을 달성하는 견고한 접근 방식을 제시한다.