perf
を使用しています linux-2.6.36-gentoo-r4から。 /proc/sys/kernel/perf_event_paranoid
は0に設定されているので、そこから問題はないはずです。
私がプロファイリングしている実行時間の長いアプリケーションは、不確定な理由でクラッシュすることがあるため(動作を停止する理由に関する情報が見つからなかったため)、perfイベントを使用したシステム全体のプロファイリングに切り替えました。
問題のアプリケーションは、通信にMPI(Message Passing Interface)を使用して、並列化された数値計算を実行します。アプリケーションを実行する前に(mpirun
を使用) ) oneでシステム全体のプロファイルデータの記録を開始しました 実行されるノードの数:
$ perf record -o perf.all.cycles,graph.data -g -e cycles -a &
アプリケーションがクラッシュしたことに気付いた後、perf
を強制終了しました タスク。
去っていた
$ du -sh perf.all.cycles,graph.data
14G perf.all.cycles,graph.data
14GBのデータ。残念ながら、perf report
-a
をサポートしていません スイッチ。
perf
からシステム全体のプロファイリングデータを分析するにはどうすればよいですか ツール ?
perf report
を実行するだけです 有用な出力は生成されません:
$ perf report -i perf.all.cycles,graph.data
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
これが14GBのプロファイルデータからの出力全体です…
承認された回答:
MPIを使用して計算を分散している場合、MPI対応ツールを使用すると、より賢明な結果が得られます。分散アプリケーションでは、1つのMPIプロセスがアイドル状態で、他のプロセスからのデータが来るのを待っているという、負荷の不均衡の問題が発生する可能性があります。 。そのMPIプロセスを正確にプロファイリングしている場合、パフォーマンスプロファイルはすべて間違っています。
したがって、最初のステップは通常、プログラムの通信と負荷分散のパターンを調べ、必要なワークロードを提供するサンプル入力を特定することです(たとえば、ランク0でCPUを集中的に使用します)。たとえば、mpiPはMPIです。通信パターン、各MPI呼び出しにかかった時間などに関する非常に完全なレポートを作成できるプロファイリングツール。
次に、選択した1つ以上のMPIランクでコードプロファイリングツールを実行できます。とにかく、perf
を使用します 単一のMPIランクでは、その測定値にMPIライブラリコードのパフォーマンスも含まれるため、適切ではない可能性があります。これは、おそらくあなたが探しているものではありません。