インテル® VTune™ プロファイラーは、ホストシステムから (リモートモードで) コマンドライン・インターフェイス (vtune) を実行してリモート Android* アプリケーションのデータを収集し、解析結果をコマンドラインまたは GUI からローカルで表示できます。
Android* システム上で次の解析タイプを実行します。
ホットスポット (ユーザーモード・サンプリング・モード)
ホスト上で動作する vtune コマンドを使用するリモートデータ収集は、target-system オプションがコマンドラインに追加される点を除き、ターゲット上でのネイティブ収集と同じです。
必要条件: ターゲット Android* システムとアプリケーションの解析準備を行います。
Android* デバイス上で解析を実行するには:
ターゲットデバイスでアプリケーションを起動します。
リモート Android* システムで実行されるアプリケーションの <プロセス id> または <名前> を探します。例えば、adb シェルで ps コマンドを使用できます。
adb shell ps ... root 2956 2 0 0 c1263c67 00000000 S kworker/u:3 u0_a34 8485 174 770232 54260 ffffffff 00000000 R com.intel.tbb.example.tachyon shell 8502 235 2148 1028 00000000 b76bcf46 R ps ...
オプション: 複数の Android* デバイスがある場合は、ANDROID_SERIAL 環境変数を設定して解析対象のデバイスを指定します。次に例を示します。
export ANDROID_SERIAL= emulator-5554 または export ANDROID_SERIAL=10.23.235.47:5555
開発ホスト上で vtune を実行してデータを収集します。
デフォルトでは、vtune ユーティリティーは以下の場所に配置されます。
Windows*: <install-dir>\bin{32,64}
Linux*: <install-dir>/bin{32,64}
解析を実行するには次のコマンドを実行します。
host>./vtune -target-system=android:deviceName -<action> <analysis_type> [-duration <duration_value>][-r <result_path>] [-search-dir=<search_dir>] [-source-search-dir=<source_search_dir>] - <target_application>
説明:
<action> は解析を行うアクション (collect や collect-with) です。
<analysis_type> は、hotspots、uarch-exploration などの事前定義された解析タイプです。
<duration_value> は秒単位の持続時間です。
<result_path> は結果を保存するディレクトリーのパス/名前です。
<search_dir> は Android* アプリケーションで使用するバイナリーファイルの検索パスです。
<source_search_dir> は Android* アプリケーションで使用するソースファイルの検索パスです。
このターゲットタイプは、Android* アプリケーションのホットスポット解析ではサポートされません。
システム全体のプロファイルは、root 化されたデバイスでのみ実行できます。
オプション: 別のコンソール・ウィンドウから収集を行っている間に、pause と resume コマンドを送信することもできます。次に例を示します。
host>./vtune -C pause -r tachyon_r001
host>./vtune -C resume -r tachyon_r001
解析の持続時間を省略した場合、ホスト開発システムの別のコンソールで、Ctrl + C を押すか stop コマンドを送信して解析を停止できます。
vtune -r tachyon_r001 -C stop
GUI で選択されている解析設定のコマンドラインを自動生成するには、インテル® VTune™ プロファイラーのグラフィカル・インターフェイスで [コマンドライン] オプションを使用します。
このモードでは以下を行えます。
root 権限なしで解析を実行 (Java* 解析には root アクセスが必要です)
ホットスポット解析を実行して (ターゲットプロセスや PID が指定された場合)、実行時間が最も長い関数 (ホットスポット) を特定します。
コールスタックを調査
C/C++ で生成された関数/ソースを表示
(インストールされている場合) JIT された関数の Java* 関数名を自動的に取得し、JIT アセンブリー、Java* ソース、または DEX バイト・コードを調査
Java* 解析は、第 4 世代インテル® Core™ プロセッサー (インテル® マイクロアーキテクチャー開発コード名 Haswell ベース) ではサポートされません。
この例は、ターゲットの Android* システムでホットスポット解析を実行します。
host>./vtune -collect hotspots -target-system=android -r tachyon_r@@@ -- com.intel.tbb.example.tachyon
このモードでは以下を行えます。
インテルによって事前定義されたイベントグループのハードウェア・イベントベース・サンプリング解析タイプを使用
C/C++ で生成された関数/ソースを表示
コールスタックを調査 (ターゲットプロセスまたは PID が指定された場合)
システム全体のパフォーマンスを解析 (コールスタック解析が無効化されている場合)
(インストールされている場合) JIT された関数の Java* 関数名を自動的に取得し、JIT アセンブリー、Java* ソース、または DEX バイト・コードを調査
Java* 解析は、第 4 世代インテル® Core™ プロセッサー (インテル® マイクロアーキテクチャー開発コード名 Haswell ベース) や ART を使用するシステムではサポートされません。
Android* システムでは次のイベントベース・サンプリング解析がサポートされます。
システム全体のイベントベース・サンプリングで JIT された Java* 関数をサンプルに関連付けるには、次の 2 つの方法があります。
イベントベースのコールスタック収集と同様に、注目するプロセスに -target-process Proccess.Name を指定します。
注目するプロセスでは、そのプロセスの PID の JIT ファイルを data.0 ディレクトリーにコピーして、インテル® VTune™ プロファイラーの GUI で結果を再解決します。
結果を収集します。
host>./vtune -collect <analysis_type> -duration=60 -target-system=android -r system_wide_r@@@
注目するプロセスの PID を検索します。
adb shell ps | [grep MyApp] u0_a79 1762 141 575912 75468 ffffffff 4006f2ef Scom.android.MyApp
注目するプロセスのすべての jit ファイルを data.0 ディレクトリーにコピーします。
adb pull /data/vtune/results/localhost.1762*.jit system_wide_r000/data.0
例 1: マイクロアーキテクチャー全般解析
この例では、指定する Android* パッケージを起動して、第 4 世代インテル® Core™ プロセッサーで実行される典型的なクライアント・アプリケーションの解析に必要な完全なイベントリストを収集します。
host>./vtune -collect uarch-exploration -target-system=android -r tachyon_r@@@ -target-process com.intel.tbb.example.tachyon
例 2: コールスタック解析
デフォルトでインテル® VTune™ プロファイラーは、ハードウェア・イベントベース・サンプリングのスタック情報を収集しません。コールスタック解析を有効にするには、enable-stack-collection=trueknob を使用します。次に例を示します。
host>./vtune -collect hotspots -knob sampling-mode=hw -knob enable-stack-collection=true -target-system=android -r tachyon_r@@@ -target-process com.intel.tbb.example.tachyon
例 3: システム全体のデータを収集
ターゲット・アプリケーションと Android* システムで実行されるすべてのプロセスのパフォーマンスを解析するには、--durationオプションを使用して解析ターゲットを指定してはなりません。
host>./vtune -collect hotspots -knob sampling-mode=hw -target-system=android -duration=60 -r system_wide_r@@@
例 4: 非接続モード収集
この例は、USB ケーブルやネットワークからデバイスを切断した後に起動される、Android* システム上のアプリケーションのホットスポット解析を設定します。
host>./vtune --collect hotspots --target-system=android -unplugged-mode -r quadrant_r@@@ --target-process com.intel.fluid
カスタム・ユーザーモード・サンプリングとトレース (runss)、またはイベントベースのサンプリング (runsa) 解析を実行するようにインテル® VTune™ プロファイラーを設定し、デフォルトの解析オプション以外を使用するには、-collect-with オプションを使用します。例えば、カスタム・イベントベース・サンプリング解析を行うには、-collect-with オプションを使用して、-knob event-config オプションで必要なイベントカウンターを指定します。
host>./vtune -collect-with runsa -target-process com.intel.tbb.example.tachyon -r system_wide_r001 -knob collection-detail=stack-sampling [-event-mux] -knob event-config=CPU_CLK_UNHALTED.REF_TSC:sa=1800000,CPU_CLK_UNHALTED
ターゲットの PMU で使用可能なイベントリストを表示するには、次のコマンドを実行します。
vtune -collect-with <collector> -target-system=android:deviceName -knob event-config=?
プロセッサーがサポートする任意のパフォーマンス・モニタリング・ユニット (PMU) のカウンターを使用できます。さらに、一度に複数のカウンターを有効にできます。各プロセッサーは、同時に取得できるカウンターの数が決められています。しかし、-event-mux オプションを使用すると、プロセッサーがサポートするよりも多くのイベントを取得できます。これは、プロセッサーの利用可能なカウンターで指定したイベントをラウンドロビンします。
通常、事前定義されたカウンターセットと解析タイプを使用することを推奨します。特定のカウンターを直接使用するのは上級者向けです。一部のカウンター名は、カウンターで提供される解析範囲と正確に一致しないことがあります。
これらのカウンターを収集した後、インテル® VTune™ プロファイラーに結果をインポートして、マイクロアーキテクチャー全般データを調査します。