このページでは

Chromeトレース形式ビジュアライザー

フルスタックトレースを使用すると、最上位の QML や JavaScript から C++ を経て、カーネル空間に至るまでトレースを行うことができます。これにより、アプリケーションのパフォーマンスを測定し、それが CPU または I/O に制約されているか、あるいは同じシステム上で実行されている他のアプリケーションの影響を受けているかを確認できます。 トレースにより、システムが何を行っているか、またアプリケーションが特定の動作をする理由について洞察を得ることができます。ハードウェアがどのように利用されているか、カーネルやアプリケーションが何を行っているかがわかります。

トレース情報からは、収集されたデータに関する詳細な情報を得ることができます QML Profiler 収集されたデータについて、より詳細な情報を得ることができます。例えば、単純なバインディング評価に時間がかかっている理由を確認できます。これは、C++が実行されていることや、ディスクI/Oが遅いことが原因である可能性があります。

いくつかのトレースツール(chrome://about など)は、Chromeトレースイベントに関する情報をChrome Trace Format(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 Event 」および「Jump 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 stop を呼び出します。sleep を使用してセッションの長さを設定できます。停止後、lttng destroy を呼び出してセッションを破棄できます。

上記のコマンドを含むスクリプトを作成して実行することで、フルスタックトレースの開始および停止を行うことができます。スクリプトの実行には、systemd を使用できます。

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

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

スケジューラ切り替えトレースポイント

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

システムコールトレースポイント

システムコールトレースポイントは、スケジューラ切り替えが発生した理由を理解するのに役立ちます。トレース対象となるシステムコールの例は以下の通りです。

  • openat close :ファイル記述子をファイル名にマッピングする
  • mmap ページフォールトをファイルにマッピングする
  • read write はI/O操作によってトリガーされる
  • nanosleepfutex 、およびpoll は、スケジューラの切り替えを説明します
  • ioctl GPUとディスプレイを制御します

LTTngデータをCTFに変換する

ctf2ctfツールは、babeltrace を使用してバイナリ形式の Common Trace Format (CTF) を解析し、Chrome Trace Format (CTF) に変換します。このツールは、記録内容をより人間が読みやすいものにするために、以下のカスタム処理を実行します:

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

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

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

「手順: 分析」、「アナライザー」、および「コードの分析も参照してください

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.