2011년 11월 2일 수요일

Dalvik JIT

2010년 5월 25일 2:57PM - Tim Bray 작성
원문은 Dalvik JIT입니다.
[이 게시물은 가상 머신의 카우보이, Dan Bornstein이 작성하였습니다. — Tim Bray]

안드로이드 프로젝트의 달빅 팀의 기술 리더로서, 저는 가상머신(VM)과 안드로이드 어플리케이션 프레임워크 밑에 자리하는 코어 클래스 라이브러리에 해당하는 작업을 처리하는 데 시간을 보냈습니다. 이 계층은 최종 사용자에게는 거의 드러나지 않습니다. 하지만 이것이 견고해지면 안드로이드 디바이스가 부드럽게 동작하고 개발자의 생산성을 향상시키는 데 일조할 것입니다.
릴리즈 2.2 버전은 특히 제게 만족스러운 버전입니다. 1.0 이전 버전 이래로 완전히 새로운 VM 기술을 제공할 수 있었기 때문이죠. 우리 팀과 제가 지금까지 해왔던 일과는 다르게 최종 사용자도 직접적으로 경험할 수 있는 그런 것이었습니다.
“Dalvik”은 분명 잘 알려진 단어가 아닙니다(적어도 저희 나라에서는요). 그리고, 대부분은 눈 앞에 있는 것이 가상머신인지도 모를 것입니다. 하지만, 여러분이 현재 디바이스를 더 좋게 — 더 빠르게 동작하고, 배터리는 덜 사용하게 — 되었다고 말한다면 사실상 눈길을 끈 것이죠!

어떻게 실현해 내었을까요?

우리는 Just In Time (JIT) 컴파일러를 달빅 가상머신에 추가했습니다. JIT는 소프트웨어 요소로서 어플리케이션이 여전히 실행하고 있는 동안에 어플리케이션 코드를 받아서, 분석하고, 더 빠르게 동작하는 형태로 번역합니다. 달빅 JIT의 디자인에 대해 더 자세히 알고 싶다면 Google I/O 2010에 제 동료인 Bill Buzbee와 Ben Chenge이 멋진 발표를 보시기 바랍니다. 이들은 곧 YouTube에 올라갈 것입니다.
정확히 말하자면, 차이점이 항상 극적인 것은 아닙니다. 또한 모든 어플리케이션에 균일하게 적용되는 것도 아닙니다. CPU를 최대한 사용하도록 작성된 코드는 이제 동일한 시간 동안에 더 많은 일을 할 수 있고(즉, 더 빨리 수행되고), 제한된 기준동안 작업을 수행하도록 작성된 코드는 이제 더 적은 시간과 더 적은 CPU를 사용해 일을 끝낼 수 있게됩니다(즉, 더 적은 배터리를 사용해서). 특히, 우리는 CPU 활용도가 최상일 때 성능 부분에서 실제로 이전 달빅 VM 버전에 비해 2배에서 5배의 향상을 보았습니다. 이는 더욱 전통적인 인터프리터 구현보다 4배에서 10배 정도 빠른 것과 동일합니다.
우리 팀은 새로운 JIT을 전반적으로 자랑스럽게 생각합니다. 하지만 특히 두 가지 측면을 강조하고 싶습니다:
이전의 많은 JIT 구현은 느리게 반응했습니다. 늦은 준비 운동 이후에만 성능 향상을 제공했죠. 극적인 경우에는, 코드가 완전히 빨라질 때 까지 몇 분이 될 수도, 몇 시간이 될 수도 있습니다. 반면 달빅 JIT는 곧바로 반응합니다. 여러분이 즐겨하는 게임의 "시작" 버튼을 누르고 겨우 얼마 지나지 않아서 이미 JIT로부터 혜택을 받게 됩니다.
우리는 JIT이 아주 적게 사용하는 메모리량에 대해서도 기쁘게 말씀드리고 싶습니다. JIT 코드 자체는 100k도 되지 않습니다. 그리고 JIT 위에서 수행되는 각 프로세스는 각자 램이나 그 외 공간의 또 다른 100k를 더 사용할 뿐입니다. 현재 세대의 안드로이드 폰에서 사용자는 추가적인 메모리 사용률은 느끼지도 못 할 정도입니다. 제 폰의 경우 여전히 말 그대로 열 두개의 어플리케이션이 메모리 위에 올라가 바로 실행될 준비가 되어 있습니다.
달빅 팀은 이런 성과에 만족하고 쉬지 않습니다. 우리는 달빅 JIT가 앞으로 몇 달 동안 많은 디바이스에 사용되길 바랍니다. 우리 팀은 VM과 라이브러리 코드를 더 좋게 만들 아이디어 목록들이 끝없이 있으며, 이들에 대해 부지런이 작업하고 있습니다.

댓글 없음:

댓글 쓰기