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 ...
Today's topic

   
       Google I/O での DalvikVM の JIT のセッション
       を読み解こう
      ”A JIT Compiler for Android's Dalvik V...
Dalvik インタプリタ

   普通は 1/3 の時間しかインタプリタで消費されてい
    ない。
   OS や性能に効くところはネイティブコードで書かれ
    ているから。
   通常のアプリケーションには充分。
   それ...
どんな JIT?


    いつコンパイルするか
     インストール時、起動時、メソッド呼び出し時、命

      令フェッチ時
   何をコンパイルするか
     プログラム全体、共有ライブラリ、ページ、メソッ

     ...
どんな JIT?

   それぞれの組み合わせに利点と欠点がある
   Android で重視する点
      最小限の追加メモリ


      DalvikVM のコンテナベースのセキュリティモデ

       ル
     ...
メソッド単位の JIT

   ほとんどのサーバ用 Java の JIT はこのタイプ
   ホットなメソッドをみつけてメソッド単位でコンパイル
    とオプティマイズを行う
   利点
       より大きな最適化のウィンドウ
 ...
トレース単位の JIT
   ホットな実行経路をさがしながらインタープリタが実
    行される。
   コンパイルしたコードの断片はトランスレーション
    キャッシュの中につながれる
   利点
       ホットコードしかコン...
9
決断:トレース JIT から始めることにした
   使用メモリを最小限にすることがモバイルデバイス
    では最重要。
   素早く性能向上があることが重要。
       JIT のために長時間かかるとその間にユーザはあきら
    ...
Dalvik Trace JIT Flow




                        11
Dalvik JIT v1.0 Overview
   インタプリタとの密接な統合
    
        JIT をインタプリタの拡張と考えると便利
   インタプリタはプロファイルを行ってホットなコードを
    みつけたらモードを...
Dalvik JIT v1.0 Features
   プロセスごとのトランスレーションキャッシュ。(セ
    キュリティサンドボックスの中でのみ共有。)
   シンプルなトレース。一般的にひとつかふたつの
    ベーシックブロックの分...
ベンチマーク結果




           14
次の方向性

   メソッドのインライン化
   Trace extension
   Persistent profile information
   Off-line trace coalescing

    Off-line...
ケーススタディ

   Robo Defence というアクション系のゲーム
       75% の時間は skia 描画ライブラリ
       DalvikVM ではわずか 4%
       JIT で向上する部分は Dalvi...
Code Cache の中を覗いてみると

   起動から 20 分間で  9898 回コンパイル 合
    計 796264 バイト (1 回あたり 80 バイト)
   生成したネイティブコードサイズは元の Dex
    コードの約...
まとめ

    リソースを喰わない Dalvik JIT compiler
    
      追加のメモリ要求量はわずか 100KB

    バイトコード実行速度で 2 ~ 5 倍の向上

    さらなるチューニングの予定

...
感想

    普通の JIT の弱点
       コンパイルによるもたつき、起動時間増加
    
        メモリ消費増大 → GC 頻発 → もたつき
   Dalvik の JIT はこれらの弱点を上手におさえこんで
 ...
Thank you



Thank you for listening!



Special thanks to @yoshi_rr and @kojira,
who USTREAMed this session to us.


    ...
Upcoming SlideShare
Loading in...5
×

Froyo DalvikVM JIT

5,331

Published on

Japanese translation of Google I/O Dalvik JIT session

Published in: Technology, Business
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,331
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
81
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Froyo DalvikVM JIT

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

    Clipping is a handy way to collect important slides you want to go back to later.

×