1. 마이크로벤치마크 성능 분석 및 VM 설계 개선
피보나치 수열과 같은 마이크로벤치마크 분석 결과, VM 실행 시간과 메서드 호출 시간이 상당 부분을 차지하는 것으로 나타났습니다. 특히, Pentto 벤치마크에서는 블록 및 메서드 호출이 많은 시간을 소모합니다. 이는 현재 제어 흐름 구조(메서드 프레임, 블록 프레임)가 지나치게 복잡하고 많은 값이 스택에 푸시되기 때문입니다.
이러한 문제를 해결하기 위해 다음을 제안합니다:
-
프레임 구조 단순화: 성능 향상을 위해 프레임 구조를 간소화할 필요가 있습니다.
-
재설계: 변수 구조, 메서드 데이터 구조, 명령어 시퀀스 구조를 전면적으로 재설계할 예정입니다.
2. 매크로벤치마크 성능 분석 및 병렬 처리 도입
ARDOC 및 RA 벤치마크와 같은 매크로벤치마크 분석에서는 VM 실행 시간 자체는 적은 반면, 가비지 컬렉션 시간(ARDOC)과 가상 머신 외의 실행 시간(비-VM 실행 시간)이 매우 큰 비중을 차지하는 것으로 나타났습니다. 이러한 시간을 줄이기 위해 동시성(concurrency)이 아닌 병렬성(parallelism) 도입이 필요합니다.
CRuby에 병렬성을 도입하기 위한 원칙과 해결책은 다음과 같습니다:
-
CRuby 내 병렬 스레드 지양: 병렬 스레드는 복잡하고 어려운 문제를 야기할 수 있으므로 CRuby 내에서는 병렬 스레드를 사용하지 않습니다.
- 세분화된 병렬 처리 (Fine-grain parallelism):
- Ruby 개발자는 병렬성을 직접 고려할 필요 없이, 가상 머신이 자동으로 병렬 처리를 수행해야 합니다.
- C 레벨에서 병렬 코드를 작성하는 방식으로 구현하며, C 확장 개발자가 겪을 어려움을 덜기 위한 프레임워크를 제공할 예정입니다.
- 거친 병렬 처리 (Coarse-grain parallelism):
- 다중 가상 머신(Multi-VM, 일명 Via)을 사용하여 병렬 프로그래밍을 가능하게 합니다.
- 현재 이 프로젝트를 진행 중이며, 여러 머신이 병렬로 실행될 수 있도록 합니다.
- 병렬 가비지 컬렉션: 병렬 마킹(marking) 및 병렬 스위핑(sweeping)과 같은 병렬 가비지 컬렉션 기법도 고려하고 있습니다.