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)
|