티스토리 뷰

728x90

 안드로이드 4.4 킷켓에 추가된 새로운 Runtime 인 ART에 대해서 알아보려고 합니다. 새로운 Runtime인 ART는 Dalvik을 대체하기 위해서 베타 버전이 공개되었습니다. 이 ART는 개발자 옵션에서 적용이 가능합니다. 개발자 옵션에 두었기에 아무나 사용하라는 말은 아니며, 충분히 테스트를 거치고 안정화가 되고, 성능 향상이 이루어지면 정식 버전의 안드로이드에 배포되기 시작할겁니다. 아직은 베타버전으로 충돌나는 앱이 많다는 문제가 있습니다.

 안드로이드 개발자 문서 - ART

  https://source.android.com/devices/tech/dalvik/art.html


ART 적용 전 주의 : 안드로이드 개발자 문서에는 ART를 사용함으로 인해 앱이 손상되어 동작하지 않을 수 있다는 말이 포함되어 있습니다. 이 경우는 다시 Dalvik으로 변경하시면 됩니다.


 이 번 글은 ART가 빠르다는 걸 보여주는 글이 아닙니다. 새로운 Runtime을 베타 버전으로, 데이터를 모으기 위해서 적용하는 버전이라는 점입니다. 그렇게 안정화되었고, 빠르다면 정식으로 포함될 수 있었지 않을까 생각됩니다. 아래 글은 데이터 양에 따라서 성능을 보여주고 있는 그래프를 추가하여 설명합니다. 그렇기에 데이터가 많지 않은 앱은 실제 성능이 빠르다고 느낄 수 있는 정도로 차이가 크지 않습니다. 그렇기에 아무나 적용하는건 권장하지 않습니다. 사용해보고 싶으신 분들은 ART가 정식으로 추가되는 시점의 안드로이드 폰을 사용하시길 권장합니다.

 괜히 개발자 옵션에다가 ART를 추가해둔것이 아니라는 것입니다.



 이 글은 ART를 알아 보기위하여 작성하며, 실제 벤치마크 프로그램을 이용해서 올려둔 자료를 활용합니다. 벤치마크 자료는 Android-benchmark의 자료와 GDG 안드로이드 운영자이신 Alan Jeon 님의 자료를 함께 이용합니다.


Dalvik VM?

 Dalvik 자료 참조 : Korea Android : http://www.kandroid.org/board/board.php?board=AndroidPlatform&command=body&no=35


 안드로이드가 나온지 벌써 5년이되었습니다. 5년동안 Dalvik VM 이라는 자체 Java VM을 사용하고 있습니다. Sun(Oracle)사의 Java는 자바 표준 컴파일러를 사용하여 .class 파일을 생성합니다. JVM의 Byte code는 .class를 사용하여 동작하지만 안드로이드는 Dalvik Byte code인 .dex로 변환된 후 앱을 실행할 수 있는 환경을 만들게 됩니다.

 이 .dex는 Dalvik VM을 이용하여 앱이 동작하게 되는데 byte code를 해석하기 위해서 JIT(Just In Time) 컴파일러를 사용하여 실시간으로 컴파일하여 앱이 동작하게 됩니다. 실시간으로 컴파일을 해야하므로 CPU 사용량이 증가되어 배터리 사용에도 영향을 미치게 됩니다. CPU 사용량은 증가되지만 Java VM과 같이 다양한 기기에서 제한없이 사용이 가능하다는 장점을 가집니다.

 앱을 죽이는 kill 앱들을 사용하게 되면 배터리 효율이 떨어질 수 있습니다. 결국 앱을 다시 실행 시키면 재 컴파일을 해야하고, 그 때마다 CPU 사용량이 증가가 되므로 배터리 사용량이 증가하게 됩니다.


ART?

 안드로이드 4.4 에서 추가된 ART는 실시간 컴파일을 해야하는 Dalvik 대신 사용할 수 있는 새로운 Runtime입니다. 위에서 잠시 언급했지만 ART는 아직 베타 버전이며, 개발자 옵션에서만 확인이 가능합니다.

 이 ART는 byte code에 기계 언어를 포함시켜 앱을 설치하게 됩니다. 기계언어가 포함된 byte code를 해석하기 위해서는 AOT(Ahead Of Time) 컴파일러에 의해서 동작하게 됩니다. 기계어가 포함되어 있기 때문에 빠른 앱 실행이 가능하게 됩니다. 이론상으론 10~20%의 성능향상이 있다고 합니다. 이는 데이터 양이 증가할 수록 차이가 나게 됩니다. 아래에서 Alan Jeon님이 작성하신 그래프를 보고 이야기하겠습니다.


Dalvik과 Native의 성능 차이

 아래 자료는 Android benchmark의 자료입니다. 32 bit Integer Arrays를 처리하는데 걸린 시간과 데이터 양을 그래프로 나타낸 자료입니다. 데이터 양에 따라서 성능차이가 큰것을 볼 수 있습니다.


Dalvik, Native 그리고 ART

 Alan Jeo님이 최근에 Native 자료도 포함하여서 올려두셨습니다. 아래와 같은 성능차이가 나게 됩니다.

 Emulator에서 테스트하신 결과로 아래와 같은 그래프를 보입니다. Emulator에서의 성능이라서 위에서 봤던 Dalvik와 JNI의 성능차이는 보이지 않지만 보시는것처럼 ART의 성능이 눈에 뜁니다. 실제 HW에서 테스트 하였다면 더 좋은 성능을 보였지 않을까 생각해봅니다. 대신 ART는 보시는것처럼 데이터양이 클때 성능차이가 두두러진다는 점을 확인하실 수 있습니다.

 아래 그래프 : https://docs.google.com/spreadsheet/ccc?key=0AnE-DX9Fbr9KdFZtRlhQaWxmVG5XdDR3TFR1Q3JONnc&usp=drive_web#gid=0

ART 적용

 ART 적용은 개발자 옵션에서 선택하시면 됩니다.

 안드로이드 4.4에는 runtime .so가 2개가 들어있습니다. 하나는 Dalvik, 또 다른 하나는 ART 입니다. 실제 Runetime을 변경하게 되면 재부팅을 하게 되는데 이 때 새로운 Runtime에 맞는 so가 사용되게 됩니다.

 dvm이 기본값으로 Dalvik이고, art로 변경하면 libart가 사용되게 됩니다. 재부팅이 되면 폰에 설치되어 있는 모든 앱이 재 컴파일 되게 됩니다. dalvik을 art로 변경하는데 걸리는 시간은 앱에 따라서 다르므로 10분 이상의 시간이 소요될 수 있습니다. 반대로 art에서 dalvik을 변경하는데 걸리는시간은 5분 이상이 소요될 수 있습니다.

PRODUCT_RUNTIMES := runtime_libdvm_default 

PRODUCT_RUNTIMES += runtime_libart


 안드로이드 마켓에서 설치한 앱의 경우 기존에는 ART 적용을 하기위해서는 재부팅을 했어야 했지만 지금은 재부팅하지 않고도 바로 ART로 설치가 됩니다. 그래서 설치가 안되는 앱도 존재하고 있습니다. 현재 4.4 킷켓은 통신사 마켓(T store, olleh market)이 동작하지 않지만 동작하게 되고, ART를 사용할 경우에는 앱 설치 후 재부팅을 해주셔야 ART 적용이 되게 됩니다.

 그리고 외부에서 설치한 앱 역시 재부팅을 하셔야 적용이 됩니다.


 현재는 넥서스 시리즈에서 ART를 사용해 볼 수 있으며, 넥서스 7 2013년형과 넥서스 4, 넥서스 5에서 볼 수 있습니다. 이 기기들의 공통점은 퀄컴사의 AP를 사용한다는 점입니다. 퀄컴사의 AP에만 ART가 적용되어있습니다. 정식이 아닌 베타버전이므로 추후 다양한 AP에서 확인 가능해지길 바래봅니다.!^^;(내용 수정 : 2013. 11. 18)


ART와 Dalvik의 Runtime 비교

 아래 영상은 실제 Runtime을 ART와 Dalvik을 사용하는 기기 2대를 테스트 한 영상입니다. 실제 사용하는 경우에는 눈에 뛰게 빠르다는건 볼 수 없습니다. 모바일 ISP라는 프로그램이 현재 4.4를 지원하지 않기 때문에 죽는 것을 볼 수 있으며, 그외 좀비vs식물 2 게임을 실행한 모습입니다. 엄청난 차이는 볼 수 없었습니다.


ART와 Dalvik의 용량 비교

 ART로 재 컴파일 된 앱과 Dalvik을 사용하는 앱의 용량을 비교해보았습니다. ART의 용량이 1.5~2배 크다는것을 볼 수 있습니다. 안드로이드에 기본으로 설치되어 있는 앱도 아래와 같이 2배 정도가 커진걸 볼 수 있습니다.


다운로드 앱의 경우 상황에 따라 다르겠지만 약 1.5배 차이가 납니다.


업데이트가 진행된 앱 역시 동일합니다.


마무리

 이번에 추가된 Runtime ART는 아직 베타 버전입니다. 정식버전으로 배포해도 될 정도의 안전성을 가졌다면 정식 버전에 포함되었겠지만 개발자 옵션에 포함되어 있습니다. 이 ART로 변경하게 되면 앱 사용에 대한 정보가 구글에 전송될 수 있다는 내용을 포함하고 있습니다. 어떤앱에서 문제가 되는지 등의 정보가 있어야 정식 버전에 포함될 자료가 생기게 되는것이니깐요.

 쨌든 새로운 Runtime은 기대 이상의 성능을 보여주고 있는건 사실입니다.(벤치마크 상의 성능 테스트) 실제 앱을 사용하는데 있어서는 엄청난 차이를 보여주지는 못하는것 같지만. 기대해볼만한 새로운 Runtime음 틀립없습니다.


 마지막으로 ART는 성능이 빠르기에 적용하라고 권장하지 마셨으면 합니다. 전 이글을 성능이 빠르다는걸 보여주는게 아니라 아직은 베타버전이고, 개발자 옵션에 포함되어있다는 점! 충돌이 날 수 있다는 점을 이야기 하고 싶어서 작성하는 글입니다. 이론상과 벤치마크 상의 성능은 빠를 수 있지만 제가 1주일 사용해본 결과는 Dalvik과 큰 차이가 없다는 점입니다. 배터리 사용에도 아직은 큰 영향은 없는 듯합니다.

 성능이 빠르다는건 처리해야할 데이터가 커야 알 수 있기에 "이거 적용하면 빨라지고 배터리 효율도 좋아져" 라는 말을 하지 마시기 바랍니다. 절대로! 정식버전을 기다리세요. 그냥.



댓글