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

Like this? Share it with your network

Share

Froyo DalvikVM JIT

on

  • 6,462 views

Japanese translation of Google I/O Dalvik JIT session

Japanese translation of Google I/O Dalvik JIT session

Statistics

Views

Total Views
6,462
Views on SlideShare
5,897
Embed Views
565

Actions

Likes
5
Downloads
79
Comments
0

6 Embeds 565

http://blog.kmckk.com 346
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

Categories

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 Presentation Transcript

  • 1. Froyo の DalvikVM の JIT Google I/O のセッションの解説 Tetsuyuki Kobayashi
  • 2. 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
  • 3. 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
  • 4. Dalvik インタプリタ  普通は 1/3 の時間しかインタプリタで消費されてい ない。  OS や性能に効くところはネイティブコードで書かれ ているから。  通常のアプリケーションには充分。  それでも CPU 喰いのアプリには  NDK でネイティブ化  JIT コンパイラ 4
  • 5. どんな JIT?  いつコンパイルするか  インストール時、起動時、メソッド呼び出し時、命 令フェッチ時  何をコンパイルするか  プログラム全体、共有ライブラリ、ページ、メソッ ド、トレース、命令 5
  • 6. どんな JIT?  それぞれの組み合わせに利点と欠点がある  Android で重視する点  最小限の追加メモリ  DalvikVM のコンテナベースのセキュリティモデ ル  起動してすぐに加速する  インタプリタとコンパイル済みコードの間のス ムーズな遷移 6
  • 7. メソッド単位の JIT  ほとんどのサーバ用 Java の JIT はこのタイプ  ホットなメソッドをみつけてメソッド単位でコンパイル とオプティマイズを行う  利点  より大きな最適化のウィンドウ  メソッド呼び出しのところで仮想マシンの状態を同期  欠点  ホットメソッドの中のコールドコードもコンパイルされる  コンパイル中にずっと大きなメモリが必要  メソッドがホットになってからコンパイルして実行される までのディレイが大きい 7
  • 8. トレース単位の JIT  ホットな実行経路をさがしながらインタープリタが実 行される。  コンパイルしたコードの断片はトランスレーション キャッシュの中につながれる  利点  ホットコードしかコンパイルされないのでメモリ消費が最 小限。  ホットなコードのコンパイル、実行までが素早い。  欠点  最適化の範囲が狭いので、ピーク性能が制限される。  インタープリタとの状態の同期の回数がずっと多い。  プロセスをまたがってトランスレーションキャッシュを共 8 有することが難しい。
  • 9. 9
  • 10. 決断:トレース JIT から始めることにした  使用メモリを最小限にすることがモバイルデバイス では最重要。  素早く性能向上があることが重要。  JIT のために長時間かかるとその間にユーザはあきら めてしまうかも。  メソッド単位の JIT と補完する可能性を残す  両者は共存可能。  モバイルデバイスも電源につながっている時はサーバ のように見える。  いいとこ取り  バッテリ駆動時はトレース JIT  充電中はバックグランドでメソッド JIT 10
  • 11. Dalvik Trace JIT Flow 11
  • 12. Dalvik JIT v1.0 Overview  インタプリタとの密接な統合  JIT をインタプリタの拡張と考えると便利  インタプリタはプロファイルを行ってホットなコードを みつけたらモードを切り替える  トレース要求はインタープリット中に処理される  実際の実行中の値にアクセスできる  トレースには少なくとも一回以上は実行できたところだ けが含まれることが保証されている。 ( ある種の最適化 で便利)  トレース要求はコンパイラスレッドに渡され、そこで ネイティブコードにコンパイルされる。  コンパイルしたコードはトランスレーションキャッ 12 シュにつながれる。
  • 13. 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. ベンチマーク結果 14
  • 15. 次の方向性  メソッドのインライン化  Trace extension  Persistent profile information  Off-line trace coalescing  Off-line method translation  チューニング、チューニング、もっとチューニング! 15
  • 16. ケーススタディ  Robo Defence というアクション系のゲーム  75% の時間は skia 描画ライブラリ  DalvikVM ではわずか 4%  JIT で向上する部分は DalvikVM での部分だけなの で、このゲームでは JIT の効果はわずか  Checker というパズルゲーム  大半の時間を DalvikVM の実行が占める。  このケースは JIT の効果が高い。 5.4 倍の向上。  これに JIT を適用した結果 94% の時間は JIT の コードキャッシュの中。 16
  • 17. Code Cache の中を覗いてみると  起動から 20 分間で  9898 回コンパイル 合 計 796264 バイト (1 回あたり 80 バイト)  生成したネイティブコードサイズは元の Dex コードの約 7.7 倍。  コンパイルの合計時間は 6 秒 (1 回の平均は 0.6msec) 17
  • 18. まとめ  リソースを喰わない Dalvik JIT compiler  追加のメモリ要求量はわずか 100KB  バイトコード実行速度で 2 ~ 5 倍の向上  さらなるチューニングの予定 18
  • 19. 感想  普通の JIT の弱点  コンパイルによるもたつき、起動時間増加  メモリ消費増大 → GC 頻発 → もたつき  Dalvik の JIT はこれらの弱点を上手におさえこんで いるところが素晴らしい!   ソースが公開が楽しみ  何かわかったらまたどこかで話します。 19
  • 20. Thank you Thank you for listening! Special thanks to @yoshi_rr and @kojira, who USTREAMed this session to us. 20