Ruby 3.4의 모듈형 가비지 컬렉터

[EN] Modular Garbage Collectors in Ruby / Peter Zhu @peterzhu2118

작성자
RubyKaigi
발행일
2025년 05월 27일

핵심 요약

  • 1 Ruby 3.4에 실험적으로 도입된 모듈형 가비지 컬렉터는 기존 GC의 한계를 극복하고 다양한 알고리즘 통합을 목표로 합니다.
  • 2 GC 구현과 Ruby VM 간의 통신을 위한 API를 정의하며, MMTK(Memory Management Toolkit)를 첫 번째 외부 구현체로 통합합니다.
  • 3 이 기능은 향후 Ruby 애플리케이션의 성능 및 메모리 효율성을 크게 향상시킬 잠재력을 가집니다.

도입

피터 주(Peter Zhu)는 루비 3.4에 실험적으로 도입된 모듈형 가비지 컬렉터(Modular Garbage Collectors)를 소개했습니다. 이 발표는 기존 루비 GC의 한계와 새로운 GC 알고리즘 도입의 필요성을 다루며, 모듈형 GC API와 MMTK(Memory Management Toolkit)를 통한 루비 GC의 확장 가능성을 제시합니다.

가비지 컬렉터(GC)는 객체 할당 및 메모리 회수를 담당하며, 루비는 현재 마크-스윕-컴팩트(Mark-Sweep-Compact) 알고리즘을 사용하여 메모리를 관리합니다. 그러나 기존 루비 GC는 참조 카운팅, 세미-스페이스 카피 등 고성능 알고리즘 통합의 어려움, 단일 스레드 GC로 인한 성능 병목, 그리고 제한적인 객체 크기 할당 방식 등 여러 한계를 가지고 있습니다.

이를 해결하기 위해 루비는 기존 GC를 대체하는 대신, 루비 3.4에 모듈형 가비지 컬렉터(Modular Garbage Collectors)를 실험적으로 도입했습니다. 이 시스템은 기존 GC 코드를 VM 인터페이스와 실제 GC 구현 부분으로 분리하여, GC 구현이 공유 라이브러리 형태로 로드되고 모듈형 GC API를 통해 루비 VM과 통신하도록 합니다. 이 API는 GC 구현체가 필수적으로 구현해야 할 함수들과 루비 내부 기능을 활용할 수 있는 함수들로 구성됩니다.

모듈형 GC API를 활용하는 첫 외부 GC 구현체는 러스트(Rust) 기반의 MMTK(Memory Management Toolkit)입니다. MMTK는 다양한 GC 알고리즘(Plans)을 제공하며, 워크 패킷(Work Packet) 개념을 통해 병렬 처리를 지원합니다. 현재 루비용 MMTK 구현은 초기 단계로 기존 GC보다 성능이 낮지만, 향후 객체 이동 지원, 세대별 GC 구현, 워크 패킷 세분화 및 스레드 안전성 확보를 통해 성능을 크게 개선할 계획입니다.

결론

모듈형 GC는 루비 GC의 작동 방식과 한계를 극복하기 위한 혁신적인 시도로, 다양한 맞춤형 GC 구현을 통해 루비 애플리케이션의 성능과 메모리 효율성을 크게 향상시킬 잠재력을 가집니다. 현재는 실험 단계이므로 프로덕션 사용은 권장되지 않습니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!