LLVM-DVK proposal

LLVM-DVK 프로젝트는 LLVM 프레임워크를 이용하여 Dalvik Bytecode 를 최적화하는 프로젝트이다.


GCC
  • 전통적인 Unix/Linux 에서 주로 사용되어온 오픈소스 정적 컴파일러
  • 중간언어인 (AST/Generic/Gimple/RTL) 을 이용하여 다양한 최적화 수행
LLVM
  • RISC-like three address code 기반의 LLVM IR 을 이용한 오픈소스 정적/동적 컴파일러
  • Link-Time Optimization (LTO) 와 Run-time Optimization 가능
Dalvik
  • 스택 머신 기반의 Java Bytecode 를 레지스터 머신 기반의 Dalvik Bytecode 로 변환
  • Dalvik runtime engine 에서 JIT (Just-In-Time) 컴파일을 통해 native code 로 변환 후 수행

Dalvik 최적화 과정 (현재 상태)
  • Java Bytecode 를 Dalvik Bytecode 로 변환할 때 간단한 최적화 수행
  • JIT 에서 Dalvik Bytecode 를 native code 로 변환할 때 간단한 최적화 및 linear register allocation 수행 (basic block 단위로 수행)

Dalvik 문제점
  • 정적 변환시 (Java Bytecode -> Dalvik Bytecode) 레지스터 머신에 적합한 최적화 불충분
  • 동적 변환시 (JIT) instruction selection/scheduling, register reallocation 기법 초기 개발 단계

본 프로젝트는 Dalvik 의 정적 및 동적 변환 과정의 최적화 미비 문제를 LLVM framework 를 이용하여 해결하는 것을 목표로 하고 있다. 해당 목표는 다음과 같은 과정을 통해 달성될 수 있다.
  • Dalvik 을 위한 LLVM frontend (Dalvik Bytecode -> LLVM IR) 개발 (진행 중)
  • Dalvik 을 위한 LLVM backend (LLVM IR -> Dalvik Bytecode) 개발 (오픈소스 활용)
초기 개발 목표는 Dalvik 을 위한 LLVM frontend/backend 를 개발하여 Dalvik 의 실행 파일 포맷인 dex 실행 파일을 LLVM 을 이용하여 최적화 후 재배포하는 것이다.

Dalvik using LLVM framework

최종 개발 목표는 (위의 그림과 같이) LLVM framework 을 이용하여 Dalvik 을 정적/동적으로 최적화하는 것이다.

일정
  • LLVM 및 Dalvik 관련 소스 분석 (~04/30)
  • LLVM frontend for Dalvik 설계 (~05/07)
  • LLVM frontend for Dalvik 구현 (~05/28)
  • LLVM frontend for Dalvik 검증 (~06/04)
Comments