[논문 리뷰] NG2C: Pretenuring N-Generational GC for HotSpot Big Data Applications
NG2C는 HotSpot JVM를 위한 새로운 가비지 컬렉션 알고리즘으로, 빅데이터 워크로드에서 일관성 없고 긴 가비지 컬렉션 정지 시간을 줄이기 위해 수명 프로파일 기반으로 객체를 N-세대 힙에 사전 할당함으로써 객체 복사와 분할을 최소화합니다. G1 및 CMS와 비교해 성능 저하나 메모리 오버헤드 없이 Cassandra, Lucene, GraphChi에서 최대 96.45%의 최악의 정지 시간 감소를 달성합니다.
Big Data applications suffer from unpredictable and unacceptably high pause times due to Garbage Collection (GC). This is the case in latency-sensitive applications such as on-line credit-card fraud detection, graph-based computing for analysis on social networks, etc. Such pauses compromise latency requirements of the whole application stack and result from applications' aggressive buffering/caching of data, exposing an ill-suited GC design, which assumes that most objects will die young and does not consider that applications hold large amounts of middle-lived data in memory. To avoid such pauses, we propose NG2C, a new GC algorithm that combines pretenuring with an N-Generational heap. By being able to allocate objects into different generations, NG2C is able to group objects with similar lifetime profiles in the same generation. By allocating objects with similar lifetime profiles close to each other, i.e. in the same generation, we avoid object promotion (copying between generations) and heap fragmentation (which leads to heap compactions) both responsible for most of the duration of HotSpot GC pause times. NG2C is implemented for the OpenJDK 8 HotSpot Java Virtual Machine, as an extension of the Garbage First GC. We evaluate NG2C using Cassandra, Lucene, and GraphChi with three different GCs: Garbage First (G1), Concurrent Mark Sweep (CMS), and NG2C. Results show that NG2C decreases the worst observable GC pause time by up to 94.8% for Cassandra, 85.0% for Lucene and 96.45% for GraphChi, when compared to current collectors (G1 and CMS). In addition, NG2C has no negative impact on application throughput or memory usage.
연구 동기 및 목표
- HotSpot JVM에서 실행되는 저지연성 빅데이터 애플리케이션에서 예측 불가능하고 긴 가비지 컬렉션 정지 시간을 해결하기 위해.
- 대부분의 객체가 초기에 사라진다는 약한 세대가설의 한계를 극복하기 위해, 빅데이터 워크로드의 실제 객체 수명 프로파일에 맞게 가비지 컬렉션을 적응시키기 위해.
- 유사한 수명을 가진 객체들을 전용 세대로 묶음으로써 객체 복사와 힙 분할을 줄여 긴 가비지 컬렉션 정지 시간의 근본 원인을 해결하기 위해.
- 심각한 최악의 정지 시간을 크게 줄이면서도 응용 프로그램의 높은 처리량과 메모리 효율성을 유지하는 가비지 컬렉션 솔루션을 설계하기 위해.
- 개발자가 수동으로 가비지 컬렉션을 튜닝할 필요 없이 프로파일러 도구를 통해 수명 인식 사전 할당을 자동화하기 위해.
제안 방법
- NG2C는 객체 수명 프로파일 기반으로 객체를 분리하는 N-세대 힙 구조를 도입함으로써 가비지 프irst(G1) 가비지 컬렉션을 확장합니다.
- 객체는 Object Lifetime Recorder(OLR) 도구에서 수집한 프로파일링 데이터를 바탕으로 할당 시점에 적절한 세대로 사전 할당됩니다.
- 유사한 수명을 가진 객체들이 같은 세대에 함께 할당되도록 하여 세대 간 복사와 힙 압축을 피함으로써 알고리즘이 작동합니다.
- 응용 프로그램 동작을 분석하고 할당 지점에 대한 애너테이션을 자동으로 생성하여 사전 할당 결정을 안내하기 위해 프로파일러(OLR)를 사용합니다.
- NG2C는 OpenJDK 8 HotSpot과 통합되며, 객체 할당 및 세대 관리 방식을 수정하여 복사와 분할을 줄입니다.
- 기존의 기억 세트(remembered sets)와 동시 마킹 메커니즘을 유지하면서 할당 및 세대 배치에만 집중합니다.
실험 결과
연구 질문
- RQ1수명 프로파일 기반으로 다수의 세대로 객체를 사전 할당하는 것이 빅데이터 워크로드에서 가비지 컬렉션 정지 시간을 줄일 수 있는가?
- RQ2유사한 수명을 가진 객체들을 전용 세대로 묶음으로써 객체 복사와 힙 압축을 줄일 수 있는가?
- RQ3NG2C는 최악의 가비지 컬렉션 정지 시간을 줄이면서도 높은 응용 프로그램 처리량과 메모리 효율성을 유지할 수 있는가?
- RQ4NG2C는 G1 및 CMS와 같은 기존 컬렉터보다 저지연성 빅데이터 애플리케이션에서 얼마나 뛰어난 성능을 보일 수 있는가?
- RQ5자동화된 수명 프로파일링을 통해 수동 튜닝이나 애플리케이션 전용 설정 없이도 효과적인 사전 할당을 가능하게 할 수 있는가?
주요 결과
- Cassandra에서 NG2C는 G1 및 CMS 대비 최악의 관측 정지 시간을 최대 94.8% 감소시켰습니다.
- Lucene에서는 NG2C가 기준 컬렉터 대비 최악의 정지 시간을 85.0% 감소시켰습니다.
- GraphChi에서는 NG2C가 최악의 정지 시간을 96.45% 감소시켜 그래프 처리 워크로드에서 뛰어난 성능을 보였습니다.
- 할당 복잡도가 증가했음에도 불구하고 NG2C는 G1 및 CMS와 동일한 응용 프로그램 처리량을 유지했으며, 측정 가능한 메모리 오버헤드가 없었습니다.
- NG2C는 G1 및 CMS 대비 객체 복사량을 최대 89.2% 감소시켜 장시간 정지의 근본 원인을 직접 해결했습니다.
- NG2C는 최대 처리량 설정일지라도 CMS 대비 66% 짧은 정지 시간, G1 대비 39% 짧은 정지 시간을 기록했습니다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.