2017-02-10 6 views
0

ARMボード上の古いバージョンのカーネルでperfレコードを実行しています。カーネルのバージョンは3.18.21-rt19です古いperfバージョンのレコードで新しいperfツールのフロントエンドを使用する方法

ボードのperfバージョンも同様にperfバージョン3.18.21です。

このperfでレポート機能を記録して使用することはできますが、このバージョンのレポートのTUIはかなりひどい/存在しません。拡張可能なセクション(グラフモード)の代わりに、それは非常に扱いにくい機能の巨大なスクロール可能なリストとして表示されます。また何らかの理由で私のC++の関数名は解読されないので、それを読むのは本当に難しいです。

それはいくつかの方法のいずれかすることが可能である:

  1. エクスポート新しいカーネルを実行しているx86マシンにこの古いARMカーネルとPERFの新しいバージョンで作成しperf.dataとのPERFレポートを使用前記機械は、私がそれをやろうとすると(私はカーネル4.4.0-31-一般的なperfバージョン4.4.13を実行しています)、ARMマシンでperfレポートを実行するとシンボルがうまく表示されますが(C++の名前はまだ残っています)。これらのカーネルバージョン間でperf.dataフォーマットが変更されたか、またはx86バージョンがARMマシンによって生成されたデータを読み取ることができないだけであるかどうかはわかりません。

  2. デ・マングリングを行い、新しいより良いTUIを公開する私の古いカーネルのために、より新しいperfバージョン(少なくともフロントエンド)を構築してください。

ARMボードのカーネルバージョンを変更することは、私にとってはオプションではありません。

+0

新しいユーザー空間ツールを構築することは可能です。あなたのperfはおそらくTUIなしで構築されました。 perf.dataを別のマシンにエクスポートするには、['perf archive'コマンド](http://man7.org/linux/man-pages/man1/perf-archive.1.html)を使用して、すべてのシンボル情報をコピーしてください。 'perf.data'(または、' perf record'が完全なobejct/functionsマップではなく、命令アドレスしか持っていないときに、ルートfsまたはフルパスのフルイメージからファイルをコピーしようとします。 – osgx

答えて

1

輸出perf.dataのエクスポートがperf archiveコマンドでサポートされなければならないperf.data

、PERF-アーカイブの男をチェック - http://man7.org/linux/man-pages/man1/perf-archive.1.html

perf-archive - ビルド - とオブジェクトファイルとアーカイブを作成します。 perf.dataファイルにあるID番号

perf archive [file] 

このコマンドは、perf-buildid-list --with-hitsを実行し、見つかったbuildidを持つ ファイルを収集し、別のマシン上でperfdata内容の分析 を実行できるようにします。

ありパフォーマンス・チュートリアルにperfのアーカイブを使用してのない例ではありません..これもPERF-アーカイブ(リモートマシンからperf.dataを分析するために私達を許可するんhttps://perf.wiki.kernel.org/index.php/Tutorialはなく、http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2015-DynamicProbes.pdf#page=22で述べた「Buildidキャッシュとは何ですか? )

別のアーキテクチャ(x86)でperfファイルを使用してARMファイルを再利用するのは難しいかもしれませんので、いくつかのARMシステムエミュレータ(qemu/qemu-system-armなど)をいくつか最近のubuntu/armまたはlinaro/arm isoまたはrootイメージ(フル機能のperfが必要です)。

また、より良いバージョンのperfユーティリティ(あなたが作成した、またはubuntuやlinaroからコピーしたもの)をあなたのボードにアップロードしようとするかもしれません - perfユーザスペースツールは、広範囲のカーネルバージョンにわたるperf_eventsカーネルインターフェイスと互換性があります。 perfツールの異なるバージョンで記録されたperf.dataを読み取ることができます。

+0

これは正しく動作するように思えます。私のperfバージョンは利用可能なコマンドの1つとしてアーカイブを表示しますが、perfアーカイブを実行すると、次のように表示されます。 'perf: 'アーカイブ'はperfコマンドではありません。 'perf --help'を参照してください。 これは意味ですか? \t archive' – Rajiv

+0

Rajiv、これは変ですが、perfの 'main()'と内部の[コマンドリスト](http://lxr.free-electrons.com/source/tools/perf)には 'archive'コマンドがありません/perf.c?v=3.18#L36)もありますが、 'perf-archive.sh'のbashスクリプトがあります - 試してみてください - http://lxr.free-electrons.com/source/tools/perf/perf-archive .sh?v = 3.18(https://github.com/torvalds/linux/blob/master/tools/perf/perf-archive.shからダウンロード)。これはおそらくperfのドキュメントのエラーです(ドキュメントだけがある場合)。 – osgx

+0

perf-archive.shを実行できました。 〜/ .debugフォルダには[kernel.kallsyms]のファイルしかないことに気付きました。したがって、別のホストでアーカイブファイルを使用し、その〜/ .debugフォルダにアーカイブファイルの内容を移入すると、perf-reportはカーネルシンボルを解決できます。私は他のシンボルを取得する方法がわかりません。 perf-buildid-list --with-hitsは、ホストAMRボードの[kernel.kallsyms]以外のすべてのエントリに対して、 '000000000000000000000000000000000000000000/lib/libc-2.21.so'のようなエントリを表示します。 ARMボードのperfレポートでこれらのシンボルがどこにあるかわからない。 – Rajiv

関連する問題