
このプロジェクトは、パフォーマンスデータのスタンドアロンGUIを作成するためのKDAB R&Dの取り組みです。最初の目標として、Linux Perferの周りにKcachegrindのようなUIを提供したいと考えています。今後、この傘の下で他のさまざまなパフォーマンスデータ形式をサポートするつもりです。
アクション中のホットスポットの最も重要な機能を示すスクリーンショットを次に示します。
ホットスポットの主な機能は、 perf.dataファイルのグラフィカルな視覚化です。


注:インラインされた関数には、非インライネ式の関数よりも暗い境界があります。





タイムラインでは、時間、プロセス、またはスレッドごとに結果をフィルタリングできます。データビューはそれに応じて更新されます。



また、ホットスポットからperfを起動したり、新しく開始されたアプリケーションをプロファイルしたり、既に実行されているプロセス(ES)に接続することもできます。ただし、以下の注意事項を考慮に入れてください。


注:Hotspotは、すべてのLinux分布にまだパッケージ化されていません。そのような場合、または最新バージョンを使用する場合は、最近のLinuxディストリビューションで動作するAppimageを使用してください。
HotspotはAUR(https://aur.archlinux.org/packages/hotspot)で利用できます。
Hotspotは、Debian(https://packages.debian.org/hotspot)およびubuntu(https://packages.ubuntu.com/hotspot)で利用できます。
Hotspot Ebuildsは、オーバーレイ(https://github.com/kdab/kdab-overlay)から入手できます。
Hotspotは、Fedora(https://packages.fedoraproject.org/pkgs/hotspot/hotspot/)で入手できます。
最新のリリースまたは連続ビルドに向かうことができます。どちらの場合も、ダウンロードできる「アセット」の下にアピメージがあります。 Appimageファイル(最新リリースの場合)を使用して、実行可能にしてから実行します。
最新のビルドを使用して、最新のバージョンを取得してください。うまくいかない場合は、バグを報告し、最新の安定したバージョンをテストしてください。
注:システムライブラリまたは設定は変更されません。 HotSpotをもう一度削除する場合は、ダウンロードしたファイルを削除するだけです。 Appimageの詳細については、こちらをご覧ください。
Appimageのデバッグ方法を見つけるには、ハッキングを参照してください。
ソースからホットスポットを構築することで最新かつ最高のものが得られますが、そのすべての依存関係が利用可能であることを確認する必要があります。ほとんどのユーザーは、おそらくディストリビューションパッケージマネージャーまたはアピメージからホットスポットをインストールする必要があります。
Hotspotに貢献したい、またはAppimageのない最新バージョンを使用したいすべての人のために、ハッキングで詳細なメモが見つかります。
まず第一に、いくつかのデータをperfで記録します。バックトレースを取得するには、ドワーフコールグラフモードを有効にする必要があります。
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]これで、同じマシンでホットスポットを使用できる場合は、必要なのは起動だけです。現在のディレクトリにperf.dataファイルを自動的に開きます( perf reportと同様)。
または、コンソール上のデータファイルへのパスを指定することもできます。
hotspot /path/to/perf.dataニーズに応じて、追加のコマンドラインオプションをホットスポットに渡すことができます。これにより、「設定」の下でGUIにある1回限りのセット構成オプションが可能になり、Linux Perfデータファイルを小さくてポータブルなPerfdata形式に変換することもできます(詳細については、インポート /エクスポートを参照)。すべてのコマンドラインオプションは、 --helpで表示されます。
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
Hotspotは、待機時間分析、またはCPUオフプロファイリングを行う非常に強力な方法をサポートしています。この分析は、Linuxスケジューラのカーネルトレースポイントに基づいています。そのデータを記録することにより、スレッドがCPUで実行されていないが、代わりにCPUのオフである時間デルタを見つけることができます。それには複数の理由がありますが、これらはすべて、この手法を使用して見つけることができます。
read()またはwrite()を介してmmap() 'edファイルデータにアクセスした場合nanosleep()またはyield()への呼び出しfutex()などを介した競合をロックします。スケジューラでカーネルトレースポイントを活用することにより、オーバーヘッドは非常に管理しやすく、プロセスが実際に切り替えられている場合にのみ価格を支払います。最も注目すべきは、Mutex Lock操作をユーザー空間で直接処理できる場合、価格を支払うことはありません。
HotspotでOff-CPU分析を行うには、非常に具体的なコマンドでデータを記録する必要があります。
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >または、Hotspotの統合レコードページでCPU Off-CPUチェックボックスを使用できます。
分析中に、オンCPUデータの「サイクル」コストビューを、待機時間分析の「オフCPU時間」コストビューに切り替えることができます。多くの場合、たとえば、さらに並列化が必要になる可能性のあるコード内の場所を見つけるために、両方を変更することをお勧めします(Amdahlの法律も参照)。
「スケジュール:sched_switch」コストも表示されます。しかし、私の意見では、それはスケジューラスイッチの数だけを示しているため、あまり有用ではありません。その間の時間の長さは、多くの場合、私にとってはるかに興味深いものです - それが「オフCPU時間」メトリックであなたに示されているものです。
埋め込みシステムで録音している場合は、開発マシンのデータをホットスポットで分析する必要があります。これを行うには、sysrootに巻き戻しに必要なデバッグ情報が含まれていることを確認してください(以下を参照)。次に、埋め込まれたシステムにデータを記録します。
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real file埋め込まれたマシンがホストとは異なるプラットフォームを使用している場合は問題ありません。ホストでは、次の手順を実行して、データを分析します。
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataSysrootの外側のパスからアプリケーションを手動で展開した場合は、代わりにこれを行います。
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataアプリケーションがsysrootとapppathの外側のライブラリも使用している場合は、これを行います。
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataそして、最悪の場合、標準以外の場所で分割デバッグファイルも使用する場合は、これを行います。
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.dataperf.dataファイル形式は自己完結型ではありません。それを分析するには、デバッグシンボルとともに、プロファイルプロセスの実行可能ファイルとライブラリにアクセスする必要があります。これにより、パフォーマンスの問題を調査するために、またはバグ報告の目的で、同僚から助けを得るために、マシン間でそのようなファイルを共有することが扱いにくいです。
Hotspotを使用すると、分析されたデータをエクスポートできます。これは完全に自己完結型です。この機能は、「ファイル>保存として」メニューアクションからアクセスできます。データは、自己完結型の*.perfparserファイルに保存されます。データをもう一度HotSpotにインポートするには、元のperf.dataファイルの代わりにそのファイルを直接開くだけです。
代替案として、コマンドライン(GUIなしでは、自動化されたビルドでも使用できます)から--exportToオプションを使用することもできます。
注:ファイル形式はまだ安定していません。 1つのバージョンのHotspotでエクスポートされるデータは、同じバージョンでのみ読み戻すことができます。この問題は、時間が許す限り、将来解決されます。
現在、HotspotはタイムラインのTracePointsの名前のみを表示しています。


Hotspotには宗教装置が含まれており、命令あたりのコストを示すことができます。分解者は色を使用して、どのアセンブリラインがソースコードラインに対応するかを示します。ナビゲーションを簡単にするために、行をクリックするだけで、他のビューがジャンプします。ダブルクリックで関数呼び出しに従うことができます。 Sourcodeビューでは、Ctrl+fを押すか、検索アイコンを押して検索ウィンドウを開きます。
別のディレクトリにソースがある場合は、 --sourcePathsまたは設定を使用して、ソースコードをそこで検索するように宗教装置に通知するように使用できます。
上記で何かが壊れていて、出力がperf reportよりも使用できない場合は、GitHubで問題を報告してください。とはいえ、人々が旅行するかもしれないいくつかの既知の問題があります:
バックトレースを生成するためにスタックを巻き戻すことは暗い芸術であり、多くの点で間違っている可能性があります。 Hotspotはperfparser (以下を参照)に依存しており、これはElfutilsからlibdwに依存してスタックを解き放ちます。これはほとんどの場合非常にうまく機能しますが、それでも間違っている可能性があります。最も顕著なのは、次の場合に巻き戻しが失敗することです。
perf.dataファイルが参照するELFファイル(IE実行可能ファイルまたはライブラリ)がありません--debugPaths <paths> :標準以外の場所にデバッグファイルを分割したときにこれを使用します--extraLibPaths <paths> :録音以来、ライブラリを他の場所に移動したときにこれを使用します--appPath <paths> :これは、上記の2つのフィールドの組み合わせのようなものです。パスは、デバッグファイルとライブラリを探して、再帰的に通過します。--sysroot <path> :埋め込みプラットフォームに記録されたデータファイルを検査しようとするときにこれを使用します-O2 -gのようなもので呼び出されていることを確認してください。 perf recordステップを繰り返す必要がありますデフォルトでは、 perf recordスタックの一部をデータファイルにコピーするだけです。これは、非常に深いコールスタックの問題につながる可能性があり、ある時点で遮断されます。この問題は、トップダウンビューまたはFlameグラフで視覚化されているように、ホットスポットのトップダウンコールツリーを破壊します。これを修正するために、スタックダンプサイズ、つまり:
perf record --call-graph dwarf,32768
これにより、 perf.dataファイルのサイズが劇的に増加する可能性があることに注意してください - 慎重に使用してください。また、 man perf recordをご覧ください。
いくつかのシナリオでは、再帰関数呼び出しが単純に解き放たれません。 #93も参照してください
Hotspotは、DebugInfod経由でデバッグシンボルのダウンロードをサポートしています。これは、設定にダウンロードURLを追加するか、環境で定義されているDEBUGINFOD_URLSを使用してHotspotを起動することで有効にできます。
perf reportと比較して、Hotspotは多くの機能を逃しています。これらのいくつかは、将来解決される予定です。他の人は潜在的に実装されることはありません。ただし、現在のホットスポットでは、次の機能は利用できないことに注意してください。
--itrace 、 --mem-mode 、 --branch-stack 、および--branch-historyなど、より高度な機能の多くはサポートされていませんsudoでHotspotを起動したり、 rootユーザーとして起動することは良い考えではありません。その問題に関する記事のrootとしてファイルを編集するEGを参照してください。問題#83は、この連絡先にも関連しています。
ただし、スーパーユーザーの権利がなければ、Hotspotのレコード機能を使用する場合、次のようなエラーメッセージが表示されます。
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
この制限を回避するために、ホットスポットは特権を高めてパフォーマンスを実行できます。
現在のデータエクスポートは、同じバージョンのホットスポットでのみ読み戻すことができる形式に限定されています。これにより、他の視覚化ツールとの相互作用が不可能になります。これは知られており、将来改善されます。最も顕著なのは、PerfettoやMozilla ProfilerなどのWeb視聴者へのエクスポートのサポートが計画されていますが、まだ実装されていません。パッチを歓迎します!
このプロジェクトは、QT Creator IDEのためにQT Companyが作成した優れたperfparserユーティリティを活用しています。すでにQT作成者を使用している場合は、統合されたCPU使用量アナライザーを活用することを検討してください。
HotspotはGPL V2+の下でライセンスされています。詳細については、license.gpl.txtを参照するか、このライセンスの条件が明確でない場合は[email protected]にお問い合わせください。