- [On-device] - 実行中のアプリとシステムアクティビティを監視して、リアルタイムのパフォーマンスデータを収集します。
- [On-host] - デバイス上でこれまでに収集されたデータを処理して表示します。
Simpleperfを使用するケース
前提条件
開始する前に、以下の準備が整っていることを確認してください。- Vega SDKのインストールが完了していること
- Fire TV StickデバイスがVDA経由で接続されていること
- アプリをデバイス上でビルドして実行していること
Simpleperfのセットアップ
Simpleperfはデフォルトではデバイスイメージに含まれていません。Vega SDKに含まれるバイナリをデバイスにサイドロードする必要があります。手順1:ビルドバリアントを確認する
デバイスでuser-externalまたはuserビルドバリアントが使用されていることを確認します。どちらのビルドもSimpleperfで機能しますが、user-externalの方が一般的です。
手順2:開発者モードを有効にする
デバイスで開発者モードを有効にします。手順3:デバイスに接続してアプリを起動する
デバイスへのシェル接続を開きます。vmsgrを使用してアプリを起動します。以下に例を示します。
手順4:Simpleperfバイナリをデバイスにプッシュする
以下にアクセスしてSDKのSimpleperfバイナリを見つけます。tmp/scratchフォルダで使用可能になります。
手順5:コンポーネントシェルにアクセスする
ホストマシンで新しいターミナルを開きます。最初のターミナルは手順3のvda shellセッションを実行しているため、別のターミナルが必要です。
コンポーネントシェルに接続します。
アプリのプロセスIDを確認する
プロファイリングを行う前に、アプリのプロセスID(PID)を確認します。pidofでアプリを参照できます。
利用可能なイベントの一覧を表示する
simpleperf listを使用して、デバイスがサポートしているイベントを確認します。
cache- ハードウェアキャッシュイベントraw- 未処理のCPU PMUイベントtracepoint- トレースポイントイベントcs-etm- CoreSight ETMの命令トレースイベントpmu- システム固有のPMUイベント
simpleperf statコマンドやsimpleperf recordコマンドの実行時に、リストされているイベントに-eオプションを指定して使用します。
statによるパフォーマンス統計の収集
simpleperf statを使用して、CPUイベントの集計パフォーマンス統計を収集します。このモードでは、詳細なサンプリングデータによるオーバーヘッドなしに、ハードウェアとソフトウェアのイベントの簡潔な概要を提供します。これは、迅速なパフォーマンス評価や最適化のA/Bテストに役立ちます。
stat結果の解釈
出力を解釈するには、次のガイドラインを使用してください。
使用可能なオプションの一覧は、
simpleperf help statを実行すると確認できます。
詳細なパフォーマンスデータの記録
simpleperf recordを使用して、事前定義された間隔でCPUイベントをサンプリングすることにより、詳細なCPUパフォーマンス指標を収集します。simpleperfは、記録されたすべてのデータをperf.dataファイルに保存し、後で分析できるようにします。
ユーザースペースのみ(:u)またはカーネルスペースのみ(:k)を監視するよう、イベントの範囲を指定できます。ほとんどの場合、Vegaアプリのプロファイリングでは、ユーザースペースの監視を使用してください。
simpleperf help recordを実行すると確認できます。
パフォーマンスデータをホストマシンに転送する方法
コンポーネントシェルは、パフォーマンスデータファイルを/scratchディレクトリに保存します。これらのファイルは、ホストマシン(コンポーネントシェルの外部)でターミナルを開き、次のコマンドを実行すると取得できます。
レポートによるパフォーマンスデータの分析
ホストマシンでsimpleperf reportを使用して、収集したperf.dataファイルを分析します。次の場所にあるSDKに含まれるホスト版のSimpleperfを使用します。
0.23.6323)に置き換えます。
simpleperf help reportを実行します。
その他のコマンド
simpleperfには、プロファイリング用途に特化した追加のコマンドが含まれています。
サブコマンドとそのオプションを一覧表示するには、次のようにします。
既知の制限事項
Simpleperfはperf_event_paranoidカーネルパラメーターに基づいて操作権限を決定します。デフォルトでは、Vega OSはこの値を2に設定し、セキュリティ上の理由から特定のプロファイリング機能を制限します。
user-externalビルドバリアントで開発者モードが有効になっているデバイスの場合、システムは自動的に値を1に調整します。これにより、より包括的なプロファイリングが可能になります。ただし、権限のないユーザーには引き続き次の操作が制限されます。
- カーネルスペースイベントのプロファイリング
- ハードウェアPMUイベントへのアクセス
- 他のユーザーのプロセスのプロファイリング
- 未処理のトレースポイントイベントの収集
- カーネルコールグラフへのアクセス
- カーネルモードのスタックトレースの収集
ベストプラクティス
データの収集
- 必ず期間を指定するか、制御された方法で終了させます。
- 適切なサンプリング頻度を使用します。
- プロファイリング中にシステム負荷を監視します。
イベントの選択
- 基本的なイベント(
cpu-cycles、instructions)から始めます。 - 同時に発生するハードウェアイベントの数が多くなりすぎないようにします。
- ターゲットデバイスのハードウェア制限を考慮します。
レポート分析
- 複数の実行を比較すると、一貫した結果が得られます。
- 適切なフィルターを使用して結果を絞り込みます。
- 必ずサンプルの欠落がないか確認します。
リソースの管理
- 古い
perf.dataファイルをクリーンアップしてデバイスストレージを解放します。 - サンプリングの頻度を制限してCPUオーバーヘッドを制御します。
例:スクロール中のフレーム落ちの診断方法
このチュートリアルでは、Simpleperfを使用して、コンテンツ一覧のスクロール中にフレーム落ちするアプリを調査する方法を説明します。 1. statで問題を確認するcpu-cyclesと比較してcontext-switches(500/秒を超える)またはcache-missesの値が高い場合は、調査に値するパフォーマンス上の問題が生じている可能性があります。
2. 問題のあるインタラクション中にコールグラフを記録する
Overheadの割合が高い関数を探します。以下に例を示します。

