如何从 perf stat 的输出中解析指令数和经过时间

How to parse number of instructions and elapsed time from output of perf stat

TL;DR

有什么方法可以在提供 -x 时使 perf stat 输出时间过去?

背景

我执行了perf stat -e instructions:u make run,输出结果贴在下面

 Performance counter stats for 'make run':

    53,781,961,288      instructions:u

       2.802749955 seconds time elapsed

      21.453244000 seconds user
       0.249223000 seconds sys

我想解析指令数和经过的时间,所以我添加了-x选项使输出以逗号分隔,相应的输出粘贴在下面。

53781782267,,instructions:u,20694056846,100.00,,

我注意到没有显示所有时间测量值,所以我检查了 perf help stat 的输出。在CSV FORMAT部分,我发现run time of counteroptional metric valueoptional unit of metric可能与我的需求有关,但我想不通。

如果 (config->ru_display) 为真,

"time elapsed" 从 tools/perf/util/stat-display.c fileprint_footer 函数打印出来。

但是当存在设置 csv_output.

的“-x ,”选项时,print_footer 不会从 perf_evlist__print_counters 调用
if (!interval && !config->csv_output)
    print_footer(config);

"user" / "sys" 次在 config->ru_data.ru_utimeru_data.ru_stime 中 "seconds time elapsed" 是 config->walltime_nsecs_stats.

的平均值

stat-display.c中没有其他代码显示ru_data.ru_utimeru_data.ru_stimewalltime_nsecs_stats,所以在Linux内核版本4.20是不可能的以 CSV 模式从 perf stat 输出时间。

您可以修补 stat-display.c 文件以输出您需要的任何内容并编译 perf (cd tools/perf; make)。来自其他内核版本的 perf 工具将适用于任何 linux 内核。