2017-05-24 12 views
2

this documentに従い、perf record--intr-regs=ax,bx,r15を使用して、PEBSレコードで追加のCPUレジスタ情報を記録しようとしました。perf-report CPUレジスタの値を表示

しかし、perf.dataからこれらの情報を表示するにはどうすればよいですか?元のコマンドはperf reportで、オーバーヘッド、コマンド、共有オブジェクト、シンボルなどのフィールドがいくつか表示されます。

CPUレジスタの値を表示する方法はありますか?

答えて

2

iregsフィールドのデータダンプコマンドperf scriptを試してください。perf script -F ip,sym,iregs。すべてのフィールド-Fはソースコードtools/perf/builtin-script.c - struct output_option .. all_output_optionsで文書化されており、iregsはまだここにあります(同じファイル内にOPT_CALLBACK('F', "fields" ...もあります)。 PERF-SCRIPT.TXTのドキュメントもあります - https://github.com/torvalds/linux/blob/master/tools/perf/Documentation/perf-script.txt#L115

-F:: 
--fields:: 
    Comma separated list of fields to print. Options are: 
    comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, 
    srcline, period, iregs, brstack, brstacksym, flags, bpf-output, brstackinsn, 
    callindent, insn, insnlen. Field list can be prepended with the type, trace, sw or hw, 
    to indicate to which event type the field list applies. 

フラグ--intr-regsに言及Linuxカーネルのgitにコミットがありました。オプションの実装から開始します。

https://github.com/torvalds/linux/search?utf8=%E2%9C%93&q=intr-regs&type=

tools/perf/builtin-record.c OPT_CALLBACK_OPTARG( 'I' は、& record.opts.sample_intr_regs、NULL、 "任意のレジスタ" "-regsはINTR"、

次に、コミットで 'sample_intr_regs'を検索します。https://github.com/torvalds/linux/search?q=sample_intr_regs&type=Commits

いくつかのコミットは、カーネルの部分とperf_attrのデバッグプリントに関するものでした。これはintr-regs印刷の例があります(2015年9月1日)アルナルド・カルバリョ・デ・メロから https://github.com/torvalds/linux/commit/532026612455a4a6fd27c1b2e7111263f63218a2

プルPERF /コア改善と修正: - 減らすために、 を記録するために登録するかを選択するために指定する機能を追加します。 perf.dataファイルのサイズ、およびまた、「PERFスクリプト」で レジスタを印刷することができ:(ステファンEranian)

# perf record --intr-regs=AX,SP usleep 1 
    [ perf record: Woken up 1 times to write data ] 
    [ perf record: Captured and wrote 0.016 MB perf.data (8 samples) ] 
    # perf script -F ip,sym,iregs | tail -5 
    ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 
    ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 
    ffffffff81761ac0 _raw_spin_lock AX:0xffff8801bfcf8020 SP:0xffff8802629c3ce8 
    ffffffff81202bf8 __vma_adjust_trans_huge AX:0x7ffc75200000 SP:0xffff8802629c3b30 
    ffffffff8122b089 dput AX:0x101 SP:0xffff8802629c3c78 
    # 
0

perf report -Dを使って達成する方法を見つけて、レコードでレコードに必要なレジスタの名前を見つけます(しかし、これは非常に非効率的です)。

他の誰かがより合理的なアプローチを提供できますか?

+0

プログラム後処理のためにperf.dataファイルを印刷するにはPERF script' 'もあります(とそれもsu pports "' -D' "フルダンプオプション。 perf memのドキュメントは、perf-record.txtではなくperf-mem.txtです:https://github.com/torvalds/linux/blob/master/tools/perf/Documentation/perf-mem.txt 'perf report'ではなく' perf mem report 'と一緒に使うべきです: "perf mem report"は結果を表示します。メモリアクセスプロファイルを表示するための適切なオプションセットでperfレポートを呼び出します。 – osgx

+0

はい、申し訳ありませんが、それはタイプミスです。私は実際に 'perfレコード'を使わず、 'perf memレコード'でなく、私の質問を修正しました:) –

関連する問題