Froyo DalvikVM JIT
Upcoming SlideShare
Loading in...5
×
 

Froyo DalvikVM JIT

on

  • 6,409 views

Japanese translation of Google I/O Dalvik JIT session

Japanese translation of Google I/O Dalvik JIT session

Statistics

Views

Total Views
6,409
Views on SlideShare
5,845
Embed Views
564

Actions

Likes
5
Downloads
79
Comments
0

6 Embeds 564

http://blog.kmckk.com 345
http://www.slideshare.net 210
http://translate.googleusercontent.com 4
http://webcache.googleusercontent.com 2
http://s.deeeki.com 2
http://facebook.slideshare.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Froyo DalvikVM JIT Froyo DalvikVM JIT Presentation Transcript

  • Froyo の DalvikVM の JIT Google I/O のセッションの解説 Tetsuyuki Kobayashi
  • Who am I?  20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now Gcc, Linux, QEMU, Android, …  Blogs  http://d.hatena.ne.jp/embedded/ (Personal)  http://blog.kmckk.com/ (Corporate)  Twitter  @tetsu_koba 2
  • Today's topic  Google I/O での DalvikVM の JIT のセッション を読み解こう  ”A JIT Compiler for Android's Dalvik VM”  Ben Cheng, Bill Buzbee  このセッション資料をわかるところだけ訳出し てみました。 http://code.google.com/intl/ja/events/io/2010/sessions/jit-compiler-androids-dalvik-vm.html 3
  • Dalvik インタプリタ  普通は 1/3 の時間しかインタプリタで消費されてい ない。  OS や性能に効くところはネイティブコードで書かれ ているから。  通常のアプリケーションには充分。  それでも CPU 喰いのアプリには  NDK でネイティブ化  JIT コンパイラ 4
  • どんな JIT?  いつコンパイルするか  インストール時、起動時、メソッド呼び出し時、命 令フェッチ時  何をコンパイルするか  プログラム全体、共有ライブラリ、ページ、メソッ ド、トレース、命令 5
  • どんな JIT?  それぞれの組み合わせに利点と欠点がある  Android で重視する点  最小限の追加メモリ  DalvikVM のコンテナベースのセキュリティモデ ル  起動してすぐに加速する  インタプリタとコンパイル済みコードの間のス ムーズな遷移 6
  • メソッド単位の JIT  ほとんどのサーバ用 Java の JIT はこのタイプ  ホットなメソッドをみつけてメソッド単位でコンパイル とオプティマイズを行う  利点  より大きな最適化のウィンドウ  メソッド呼び出しのところで仮想マシンの状態を同期  欠点  ホットメソッドの中のコールドコードもコンパイルされる  コンパイル中にずっと大きなメモリが必要  メソッドがホットになってからコンパイルして実行される までのディレイが大きい 7
  • トレース単位の JIT  ホットな実行経路をさがしながらインタープリタが実 行される。  コンパイルしたコードの断片はトランスレーション キャッシュの中につながれる  利点  ホットコードしかコンパイルされないのでメモリ消費が最 小限。  ホットなコードのコンパイル、実行までが素早い。  欠点  最適化の範囲が狭いので、ピーク性能が制限される。  インタープリタとの状態の同期の回数がずっと多い。  プロセスをまたがってトランスレーションキャッシュを共 8 有することが難しい。
  • 9
  • 決断:トレース JIT から始めることにした  使用メモリを最小限にすることがモバイルデバイス では最重要。  素早く性能向上があることが重要。  JIT のために長時間かかるとその間にユーザはあきら めてしまうかも。  メソッド単位の JIT と補完する可能性を残す  両者は共存可能。  モバイルデバイスも電源につながっている時はサーバ のように見える。  いいとこ取り  バッテリ駆動時はトレース JIT  充電中はバックグランドでメソッド JIT 10
  • Dalvik Trace JIT Flow 11
  • Dalvik JIT v1.0 Overview  インタプリタとの密接な統合  JIT をインタプリタの拡張と考えると便利  インタプリタはプロファイルを行ってホットなコードを みつけたらモードを切り替える  トレース要求はインタープリット中に処理される  実際の実行中の値にアクセスできる  トレースには少なくとも一回以上は実行できたところだ けが含まれることが保証されている。 ( ある種の最適化 で便利)  トレース要求はコンパイラスレッドに渡され、そこで ネイティブコードにコンパイルされる。  コンパイルしたコードはトランスレーションキャッ 12 シュにつながれる。
  • Dalvik JIT v1.0 Features  プロセスごとのトランスレーションキャッシュ。(セ キュリティサンドボックスの中でのみ共有。)  シンプルなトレース。一般的にひとつかふたつの ベーシックブロックの分だけ。  Local optimizations  Register promotion  Load/store elimination  Redundant null-check elimination  Heuristic scheduling  Loop optimizations  Simple loop detection  Invariant code motion 13  Induction variable optimization
  • ベンチマーク結果 14
  • 次の方向性  メソッドのインライン化  Trace extension  Persistent profile information  Off-line trace coalescing  Off-line method translation  チューニング、チューニング、もっとチューニング! 15
  • ケーススタディ  Robo Defence というアクション系のゲーム  75% の時間は skia 描画ライブラリ  DalvikVM ではわずか 4%  JIT で向上する部分は DalvikVM での部分だけなの で、このゲームでは JIT の効果はわずか  Checker というパズルゲーム  大半の時間を DalvikVM の実行が占める。  このケースは JIT の効果が高い。 5.4 倍の向上。  これに JIT を適用した結果 94% の時間は JIT の コードキャッシュの中。 16
  • Code Cache の中を覗いてみると  起動から 20 分間で  9898 回コンパイル 合 計 796264 バイト (1 回あたり 80 バイト)  生成したネイティブコードサイズは元の Dex コードの約 7.7 倍。  コンパイルの合計時間は 6 秒 (1 回の平均は 0.6msec) 17
  • まとめ  リソースを喰わない Dalvik JIT compiler  追加のメモリ要求量はわずか 100KB  バイトコード実行速度で 2 ~ 5 倍の向上  さらなるチューニングの予定 18
  • 感想  普通の JIT の弱点  コンパイルによるもたつき、起動時間増加  メモリ消費増大 → GC 頻発 → もたつき  Dalvik の JIT はこれらの弱点を上手におさえこんで いるところが素晴らしい!   ソースが公開が楽しみ  何かわかったらまたどこかで話します。 19
  • Thank you Thank you for listening! Special thanks to @yoshi_rr and @kojira, who USTREAMed this session to us. 20