このページでは

Chromeトレースフォーマットビジュアライザー

フルスタックトレースを使用して、トップレベルのQMLやJavaScriptからC++、そしてカーネル空間までをトレースすることができます。これにより、アプリケーションのパフォーマンスを測定し、CPUやI/Oに依存していないか、同じシステム上で動作している他のアプリケーションの影響を受けていないかをチェックすることができます。トレースによって、システムが何をしているのか、なぜアプリケーションが特定の方法で動作しているのかを知ることができます。ハードウェアがどのように利用され、カーネルとアプリケーションが何をしているかを示します。

トレース情報は、そのデータについてより多くのことを教えてくれます。 QML Profilerを収集します。例えば、些細なバインディング評価に時間がかかっている理由を調べることができます。これはC++の実行やディスクI/Oが遅いことが原因かもしれない。

いくつかのトレース ツール(chrome://about など)は、Chrome トレース イベントに関する情報を Chrome トレース フォーマット(CTF)で生成できます。CTF ファイルはQt Creator で開いて閲覧できます。特に、100 MB を超えるトレース ファイルを表示する場合に便利で、組み込みのトレース ビューアー (chrome://tracing) ではメモリ使用量が多いため表示できません。

ビジュアライザーは、LTTngトレースフレームワークが生成するデータで使用される全てのイベントタイプを、CTFに変換してサポートします。しかしながら、例えばAndroidシステムトレースで使用される、より高度なイベントタイプのいくつかはサポートされていません。ビジュアライザは、サポートされていないイベントタイプを黙って無視します。

ビジュアライザは以下のイベントタイプをサポートしています:

  • 開始、終了、継続、インスタントイベント
  • カウンタ・イベント(グラフ)
  • メタデータイベント(プロセスとスレッド名)

JSON ファイルを開く

JSON ファイルを開いて表示するには、Analyze >Chrome Trace Format Viewer >Load JSON File を選択します。

イベントの可視化

Timeline ビューには、トレース イベントのグラフィカルな表示と、記録されたすべてのイベントの凝縮されたビューが表示されます。

タイムラインビュー

タイムラインの各カテゴリは、アプリケーションのスレッドを説明します。行のイベント(5)にカーソルを移動すると、その期間とイベント・カテゴリーが表示されます。イベントが選択されているときだけ情報を表示するには、View Event Information on Mouseover ボタン(4)を無効にしてください。

アウトライン (10) は、データが収集された期間を要約する。ズーム範囲(8)をドラッグするか、アウトラインをクリックしてアウトライン上を移動する。イベント間を移動するには、Jump to Previous EventJump to Next Event ボタンを選択する(1)。

Show Zoom Slider ボタン(2)を選択すると、ズーム・レベルを設定するためのスライダーが開きます。ズームハンドル(9)をドラッグすることもできます。デフォルトのズームレベルをリセットするには、タイムラインを右クリックしてコンテキストメニューを開き、Reset Zoom を選択します。

スレッドへの制限 (Restrict to Threads) ボタン(6)を選択し、表示するスレッドを選択します。

イベント範囲の選択

イベント範囲(7)を選択すると、その範囲を表す時間を表示したり、トレースの特定の領域にズームすることができます。Select Range ボタン(3)を選択し、選択ツールを起動します。次に、タイムライン上でクリックして、イベント範囲の開始を指定します。選択ハンドルをドラッグして、範囲の終わりを指定します。

イベント範囲を使用して、後続の2つのイベント間の遅延を測定することもできます。最初のイベントの終わりと2番目のイベントの始まりの間に範囲を置きます。Duration フィールドには、イベント間の遅延がミリ秒単位で表示されます。

イベント範囲を拡大するには、その範囲をダブルクリックする。

イベント範囲を削除するには、Selection ダイアログを閉じます。

統計の表示

統計ビュー

Statistics ビューには、タイムラインの各ファンクションが含まれていたサンプル数が、合計とスタックの一番上にある時(self )に表示されます。これにより、どの関数を最適化する必要があるかを調べることができます。発生回数が多い場合、関数が不必要にトリガーされているか、実行に非常に時間がかかっている可能性があります。

LTTngデータの収集

LTTng は Linux 用のトレースツールキットで、組み込み Linux システムに適用して、アプリケーションの起動時間を最適化する方法を見つけることができます。

Qt には、カーネルトレースポイントのセットと、カスタムユーザトレースポイントのためのトレースサブシステムがあります。

カーネルの設定

LTTngを使用するためには、カーネルをビルドする前に、カーネルに対して以下のコンフィギュレーションオプションを設定する必要があります:

  • CONFIG_HIGH_RES_TIMERS
  • CONFIG_KALLSYMS
  • CONFIG_MODULES
  • CONFIG_TRACEPOINTS

以下の追加オプションを設定することを推奨する:

  • CONFIG_EVENT_TRACING
  • CONFIG_HAVE_SYSCALL_TRACEPOINTS
  • CONFIG_KALLSYMS_ALL

Yoctoでは、Menu >Config >Kernel Hacking >Tracers で上記のオプションを有効にできる。

LTTngのインストール

カーネルをビルドしてデバイスにデプロイした後、以下のLTTngパッケージをデバイスにインストールする必要があります:

  • lttng-tools トレースセッションを制御する
  • lttng-modules カーネルトレースポイント用
  • lttng-ust ユーザ空間のトレースポイント

Yocto では、EXTRA_IMAGE_FEATURES += "tools profile" を有効にするだけです。

トレースポイントを使って Qt をビルドする

トレースポイントは Qt のバージョンに継続的に追加されています。トレースポイントを使用するには、configure -trace lttng オプションを使用して Qt をビルドする必要があります。

イベントの記録

セッションを作成するには、lttng create コマンドを呼び出します。次に、lttng enable-channel kernel -k を呼び出してカーネルチャンネルを有効にします。カーネル・チャネル内で、kernel_events として適切なトレース・ポイントを指定し、lttng enable-event を呼び出してそれらを有効にします。最後に、lttng start を呼び出してトレースを開始する。

lttng stopsleep 、セッションの長さを設定することができる。停止後、lttng destroy を呼び出してセッションを破棄できます。

上記のコマンドを含むスクリプトを書いて実行することで、フルスタック・トレーシングを開始したり停止したりすることができます。スクリプトの実行にはsystemd を使用します。

トレースポイントの有効化

データは LTTng セッションで有効にしたトレースポイントに従って記録される。通常、スケジューラスイッチ、システムコール、Qtトレースポイントを有効にすると便利です。

スケジューラスイッチトレースポイント

スケジューラスイッチトレースポイントは、例えば、他のプロセスがCPUコアで実行する機会を得た時など、アプリケーションが先取りによりスイッチアウトされた時に到達する。スケジューラ・スイッチ・トレース・ポイントを有効にすると、現在実行中のスレッドと、そのスレッドが属するプロセス、およびそのプロセスが開始した時刻と停止した時刻が記録されます。

シスコールのトレースポイント

シスコール・トレース・ポイントは、スケジューラ・スイッチがなぜ起こったかを理解するのに役立ちます。以下はトレースするシス コールの例です:

  • openat およびclose ファイル記述子をファイル名にマップする。
  • mmap ページフォールトをファイルにマップする
  • readwrite は、I/O操作によってトリガーされます。
  • nanosleep futex と はスケジューラスイッチを説明します。poll
  • ioctl GPUとディスプレイを制御する

LTTngデータをCTFに変換する

ctf2ctfツールは、babeltrace 、バイナリのCommon Trace Format (CTF)を解析し、Chrome Trace Format (CTF)に変換する。このツールは以下のカスタムタスクを実行し、記録をより人間が読めるようにします:

  • ファイル記述子をファイル名にマップする
  • ページフォルトをファイル名にマッピング
  • 割り込みとブロックデバイスに名前を付ける
  • UTF-16QString データを UTF-8 文字列に変換する。
  • メモリページの割り当てをカウントする

Chrome Trace Format のトレース データを持つ JSON ファイルを生成するには、コマンド ラインで次のコマンドを入力します:

ctf2ctf -o trace.json path/to/lttng trace/

How To: AnalyzeAnalyzerAnalyzing Code」も参照してください

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.