안드로이드 Platform 
▶ HTC Dream Platform Images
너 폰의 달빅 JIT기술 지원여부 확인법[ver 1.0]
작성자 인베인
작성일 2012-02-14 (화) 00:05
ㆍ추천: 0  ㆍ조회: 6113      
IP: 211.xxx.252
판매중인 안드로이드폰이 JIT 지원하는지 확인하는 방법[ver 1.0]
=============================================================


 - 목차 -
1. 요약
2. 세부



1. 요약

이 글은 단지 최근의 안드로이드 버젼에서
JIT가 디폴트로 사용되는지? 안되는지? 에 대한 글입니다.
 
즉, JIT가 제거되었음을 논의하는 것이 아니며, JIT지원이 추가된 후
최근의 안드로이드 버젼에서 JIT가 기본으로 enable되는지, disable되는지를 논의코자 하는 글이니
얘기하고자 하는 초점에 오해 없기 바랍니다.


자신의 안드로이드 폰이  JIT Compiler가 동작되고 있는지? 동작안되고 있는지?
체크하는 방법에 대해서 간단히 기술합니다.

*  JIT를 disable 하는 방법 :
   /system/build.prop 파일에 아래의 내용이 추가되어 있다면
,
   JIT Compiler Disable되어 있는 겁니다.   
    1) dalvik.vm.execution-mode=int:fast 라인이 있거나, 
   



* JIT를 enable 하는 방법 :
   /system/build.prop 파일에 아래의 내용이 추가되어 있거나, 
   아무런 내용이 없다면,
   여러분의 폰에 JIT Compiler가 Enable 되어 있는 겁니다.    
 1) dalvik.vm.execution-mode=int:jit 
 2) dalvik.vm.execution-mode=***  내용행이 없는 경우 


  위에 처럼 직접 파일을 open해서 확인해도 되고,
  또는 간단히, android$> getprop dalvik.vm.execution-mode [enter]을 쳐도 됩니다.
   

안드로이드 폰에 JIT Compiler가  
enable (or disable) 되어 있는제품을 사용하시는 분이 혹시 있으신지 
댓글 소통 부탁합니다. 





2. 세부

최근에 안드로이드 버젼에서  JIT(Just-In-Time) Compiler가  성능관련 핫이슈로 거론되었었습니다.
아래는 Google I/O 행사에서 발표되었던 Dalvik & JIT에 대한 구글 직원의 발표 동영상입니다.
* YouTube: Google I/O 2010 - A JIT Compiler for Android's Dalvik VM
http://www.youtube.com/watch?v=Ls0tM-c4Vfo&feature=player_embedded

* YouTube: Google I/O 2008 - Virtual Machines for Android Apps
http://www.youtube.com/watch?v=ptjedOZEXPM

* Dalvik JIT 컴파일러 방식: Trace-granuality JIT방식
   (바이트 코드중 반복이 많은 코드블럭 영역만을 골라서 컴파일처리)
  관련 논문 - Incremental Dynamic Code Generation with Trace rees
                   http://www.ics.uci.edu/~franz/Site/pubs-pdf/ICS-TR-06-16.pdf


 
프로요 버젼에서 JIT Compiler가 성능 개선의 방법으로 제안이 되었다가,
성능관련하여 엇는 잇점대비 잃는 부분들이 더 많은것이 주 이유라 할수 있는데
이에 대한 구글의 공식적인 글입니다.


* Performance Myths
( http://developer.android.com/guide/practices/design/performance.html )

Previous versions of this document made various misleading claims.
We address some of them here.

On devices without a JIT, it is true that invoking methods
via a variable with an exact type rather than an interface is
slightly more efficient.

(So, for example, it was cheaper to invoke methods on a HashMap map
than a Map map, even though in both cases the map was a HashMap.)
It was not the case that this was 2x slower; the actual difference was
more like 6% slower. Furthermore, the JIT makes the two effectively
indistinguishable.

On devices without a JIT, caching field accesses is about 20% faster
than repeatedly accesssing the field. With a JIT, field access costs
about the same as local access, so this isn't a worthwhile
optimization unless you feel it makes your code easier to read.
(This is true of final, static, and static final fields too.)



Dalvik JIT : What Makes This Possible?
( http://android-developers.blogspot.com/2010/05/dalvik-jit.html )

To be clear, the differences aren’t always dramatic, nor do they apply uniformly to all applications. Code that is written to run the CPU all-out can now do more in the same amount of time (running faster), and code that is written to be rate-limited can get its work done using less time and less of the CPU (using less battery). On the performance front in particular, we have seen realistic improvements of 2x to 5x for CPU-bound code, compared to the previous version of the Dalvik VM. This is equivalent to about 4x to 10x faster than a more traditional interpreter implementation


  참고로, GIT컴파일러를 분기시키는 구현은 ./android-ics-4.0.3/dalvik/vm/Init.cpp 파일내의
  ProcessOptions()함수에서 처리하고 있습니다.
 
                   . . . . . 윗부분 생략 . . . . .
 915                 if (strcmp(argv[i] + 6, "portable") == 0) <- Desktop 정복을 위한 야망의 문장.ㅡ.ㅡ;
 916                     gDvm.executionMode = kExecutionModeInterpPortable;      
 917                 else if (strcmp(argv[i] + 6, "fast") == 0)
 918                     gDvm.executionMode = kExecutionModeInterpFast;
 919 #ifdef WITH_JIT          
 920                 else if (strcmp(argv[i] + 6, "jit") == 0)
 921                     gDvm.executionMode = kExecutionModeJit;
 922 #endif                   
 923                 else {   
 924                     dvmFprintf(stderr,
 925                         "Warning: Unrecognized interpreter mode %sn",argv[i]);
 926                     /* keep going */
 927                 }
                    . . . . . 중 간 생 략 . . . . .
1073                                        
1074     /*                                 
1075      * Default execution mode.         
1076      *                                 
1077      * This should probably interact with the mterp code somehow, e.g. if
1078      * we know we're using the "desktop" build we should probably be
1079      * using "portable" rather than "fast".
1080      */                                
1081 #if defined(WITH_JIT)                  
1082     gDvm.executionMode = kExecutionModeJit;
1083 #else                                  
1084     gDvm.executionMode = kExecutionModeInterpFast;
1085 #endif                                 
1086   


JIT 동작을 위해 필요한 바이너리들은
1) /system/bin/dalvikvm
2) /system/lib/libdvm.so
3) /system/lib/libnativehelper.so
로 구성이 되고 있습니다. 따라서, JIT를 위해 재작업이 되었다면 위의 바이너리를 직접 교체해도 된다는 의미입니다.



이상.
이름아이콘 들풀
2012-02-14 00:51
JIT가 Default로 제거되었다는 건 잘못된 정보인듯 합니다.
더불어 위의 "Performance Myths"은 기존의 성능관련 문서가 JIT 이전의 문서였기 때문에
그와 관련된 잘못된 내용들의 정정 차원의 글로 보아야 할 듯하구요.
ICS에서 JIT Compiler 디폴트로 enable 되어 있는 것 맞을 겁니다.
인베인 의견 감사합니다.ics 상용폰은 제가 확인못했고
ics 버젼 이미 쓰시는분은 공유댓글부탁합니다.
2/14 07:11
인베인 공개된최근 ics를 에뮬레이터에서 쓰기위해
전체빌드( by dedault)를 해보니,
들풀님 jit가 disable 되어있는데요??
달빅의 달인분이 요 부분에대해 댓글 주시면 감소ㅏ...ㅎㅎ
2/14 07:16
   
이름아이콘 인베인
2012-02-14 07:19
허니콤보 나오는 시점에 "Performance Myths" 내용을 봐서,
JIT이후의 문서였었던거 같은데, 날짜 기록이 안되어서.... 가물가물....
   
이름아이콘 자하랑
2012-02-14 21:53
상용퐁... 일명 마구로 퐁에는 아무런 옵션이 안 잡히게 되어있슴다...
인베인 하랑님... 댓글 소통 감사합니다. :)
ICS기준으로(다른 하위버젼의 제 머리에서 논외로 하겠음.) dalvik-execution-mode와 같은 옵션이 없는 안드로이드 상용폰은 디폴트로(by default)으로 GIT컴파일러가 enable되어 처리됨을 의미합니다.
2/15 14:15
   
이름아이콘 인베인
2012-02-15 14:18
여기서 우리가  살펴볼수 있는 불편한 사실이 있다면...
1) 현재 알고리즘,성능관련엔진을 NDK으로 C/C++으로 구현하는 시점에서 JIT의 사용이 성능이 큰 before/after를 보이는지와?
2) 최근에 대부분 성능 이슈로  인한 앱들은
그 엔진 및 알고리즘을 Native C/C++으로 구현하여 사용함으로써,
최초 Dalvik VM이 설계적으로 가질수 있었던 APP Developer의 무분별한 시스템 접근 통제가
이젠 사실상 힘들게 되었다라는 ....??

역시 Architecture는 넘 어렵고 난해해요..ㅡ.ㅡ;;
   
이름아이콘 퓨어리즘
2012-02-20 17:15
먼저 갤럭시 넥서스 확인해보니 dalvik-execution-mode 옵션이 없습니다. 에뮬레이터 소스를 빌드했을 때에도 마찬가지였구요,
혹시나해서 소스를 약간 확인해봤습니다. JIT 관련 사항들은 WITH_JIT 매크로를 통해 활성화되고 있으며, 'dalvik/vm/Dvm.mk' 파일을 보면 'WITH_JIT'가 true인 경우 Jit.cpp 파일을 컴파일 하도록 되어 있습니다.
전체 빌드 후 결과물을 보면, 'out/target/product/generic/obj/SHARED_LIBRARIES/libdvm_intermediates/interp' 디렉터리에 Jit.o 파일이 만들어져 있네요.
이상으로 보아서는 Jit가 기본적으로 활성화되어 있는 것으로 판단됩니다만....
좀 더 자세한 사항들은 발표 준비하면서 다시 정리해야할 것 같습니다.
인베인 공유 감솨. 글고 말슴하신 내용에 대한 것은 본문에 설명되어 있으니 본문내용을 참고해주세요. 2/20 23:15
   
이름아이콘 gamja9e
2012-09-08 11:20
기본적으로  JIT compiler는 enable 되어 있습니다. dalvik interpreter의 성능을 최적화 하기 위해서 평소이용 되는 fast & jit 모드에서는 debug관련 정보를 만들지 않다가, 디버깅관련 정보가 필요할 시에 portable모드로 동작하고 있습니다.
   
 
덧글 쓰기 0
3500
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
안드로이드 소스 저장소 복제 및 활용 가이드 [5]+1 브라이언 2009-05-13 12719
111 usb accessory에서 video, audio도 지원되나요? 건슨신 2013-06-21 1283
110 [질문] 안드로이드 플랫폼 빌드 및 테스트 [2]+1 black0027 2012-08-23 2311
109 안드로이드 4.0.4 플랫폼 공부를 시작할 수 있는 실습형 자료.. [1] 다이나믹링크 2012-04-10 6330
108    중급 과정도 공개합니다. 다이나믹링크 2012-04-16 3472
107 Exynos-4210용 Android 4.0.3 BSP 공개 [1]+1 다이나믹링크 2012-03-15 3901
106 너 폰의 달빅 JIT기술 지원여부 확인법[ver 1.0] [6]+4 인베인 2012-02-14 6113
105 ZergRush를 안드로이드에서 공개적으로 막기 시작했네요... leboum 2011-12-22 4021
104 ics 빌드 후 얻은 이미지 용량? [2] seanpark 2011-12-21 2571
103 Android 4.0.3 ICS 포팅을 해보았습니다. [3]+3 다이나믹링크 2011-12-19 5494
102 Application Framework 과 Libraries 와의 관계 [3] yjc93 2011-11-09 2832
101 레퍼런스폰 KGDB를 이용한 커널 디버깅 [6]+3 주현 2011-10-06 4335
100 [질문] 안드로이드 어플과 네이티브 서비스 간 통신은 어떻게 .. [2] 오렌지레드 2011-08-18 3744
99 Nexus S 무인코딩동영상 재생+배속재생 가능한 커스텀롬.. [1]+2 Real_G 2011-04-27 4210
98 [질문]stdio.h를 찾을 수 없습니다. 아수라작 2011-03-29 3282
97 dbus 이용해 Android상용폰 파괴시키기 [1]+1 인베인 2011-03-29 5449
1234567