Drift Diary XV

セッションメモ - A JIT Compiler for Android's Dalvik VM -

Posted by drikin on 2010年5月20日 13:01

DSC_0455.JPG

Android 2.2で5倍高速化された、理由として語られてるJITの仕組みを解説すると思われるセッション

Dalvikのインタープリタも十分最適化されてて早いけど

DalvikのJITは、驚くぐらいバラエティに富んだJIT

  • いろいろなタイミングで、コンパイルされるし
  • いろいろなものが、JIT対象になってる

上の組み合わせによって、長所短所があるけど、バッテリー駆動のAndroidのでは、コンパクトさや、効率を優先

メソッドベースとトレースベースのJITの違い

JITの仕組みについて、不勉強のため、あまり技術的な詳細が理解できないT_T

メソッドとトレースの長所短所を説明(良く聞いてなかった)した上で、Froyo(2.2)はトレースJITを選択した。

トレースJITのフローチャート、なんかキャッシュとか活用して、省メモリで、効率よくなるように、最適化してるよ的な話。

Dalvik VMへのJIT採用って、2.2が最初になるって事? (要確認) ↑2.2が最初のリリースだと言ってました。

JITの将来の方向性について

自分のアプリをJITに最適化するには

Robo Defenceの例

libskia.soが全体の74%のボトルネック Dalvik自体は、全体の4%位しか、CPUを使ってない SkiaはNativeコードなので、こういうパターンだと、JITの効果は少ない

Checker(オセロ風)アプリの場合

OProfileによると、最適化後dalvik-jit-code-cacheとlibdvm.soで全体の96.45%のCPUを消費 すなわち、JITの効果絶大=5倍の高速化

JITのプロファイリング

Set "dalvik.vm.jit.profile = true" in /data/local.prop

JITのデバッグ

JIT有効化状態で、RuntimeExceptionとかで、原因を追及するのは難しいので、とりあえずJITをオフにしてデバッグすべし。JIT有効時にだけ、問題が起きれば、たぶんJIT自体のバグ(と言い切るのが素敵ww)

Verification botで、インタープリタにダイナミックにコードをレビューさせる事が出来る。

このエントリーをはてなブックマークに追加
comments powered by Disqus