私はこれに私の歯を噛んでいます...gccコンパイル済みコードとARM Cortex A8ターゲットでコールグラフプロファイリングを行うにはどうすればよいですか?
私はARMボード上でプロファイリングを行う必要があり、コールグラフを表示する必要があります。私はOProfile、Kernel perf、Googleのパフォーマンスツールを試してみました。すべて正常に動作しますが、コールグラフの情報は出力されません。
これは私のコードを正しくコンパイルしていないという結論に至りました。私のC++コードをコンパイルするとき
は、私は以下のフラグを使用します。
をアーチ特定:
-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3
全般:(最適化)
-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra
デバッグ:
-O2 -g -fno-omit-frame-pointer
I di d多くのGoogle検索で、関連するトピックが見つかりました:
- libunwind?
- ドワーフ
- (asynchronous-)くつろぐ-テーブル、私は完全にこれらが全て接続されているかを理解していないが
-mapcs-frame
。コールグラフをどのように動かすかについてのヒント?
ノート(私はRianの答えによる):いくつかの方法がx86-64よりARM上で(他のものと比べて)時間がかかるのかどうかを調べることに興味があります。私のコードは両方でコンパイルされ、私はx86-64上でコールグラフを実行できますが、これは別のプラットフォームでこれを行うのに役立ちません。
は、あなたがハード= -mfloat-ABIでコンパイルしてもよろしいでしょうか?私が理解しているところから、mfloat-abi = softfpはまだNEONを使用していますが、既存のバイナリと互換性がありますが、mfloat-abi = hardのようにパフォーマンスはあまり良くありません。https://wiki.linaro.org/Linaro-arm-hardfloat –
hardパフォーマンスを向上させる必要があります。 –
oprofileはカーネルによって異なります。プロファイリングを容易にするためにカーネルを再構成しましたか? – accuya