我使用参数-x运行perf以机器可读格式打印。输出如下:
1285831153,,instructions,1323535732,100.00
7332248,,branch-misses,1323535732,100.00
1316.587352,,cpu-clock,1316776510,100.00
1568113343,,cycles,1323535732,100.00
第一个数字是明确的,但后面描述的值对我来说并不清楚。运行时描述背后的第一个是吗?那它为什么不同呢? 100.00在每行末尾的含义是什么?它没有记录;我在这里查了一下:https://perf.wiki.kernel.org/index.php/Tutorial#Machine_readable_output
答案 0 :(得分:1)
-x
选项在tools/perf/builtin-stat.c
file中实现为csv_output
标志,打印为static void printout
function"(line 1061)。字符串中的最后一个值可能来自:
print_noise(counter, noise);
print_running(run, ena);
单次运行目标计划(无-r 5
或-r 2
选项 - https://perf.wiki.kernel.org/index.php/Tutorial#Repeated_measurement)print_noise
不会打印任何内容。 print_running
正在打印" run
"参数两次,作为ena
static void print_running(u64 run, u64 ena)
{
if (csv_output) {
fprintf(stat_config.output, "%s%" PRIu64 "%s%.2f",
csv_sep,
run,
csv_sep,
ena ? 100.0 * run / ena : 100.0);
} else if (run != ena) {
fprintf(stat_config.output, " (%.2f%%)", 100.0 * run / ena);
}
}
您有run
/ ena
= 1(100.00%),因此这些字段对您没有任何有用的信息。
当用户请求perf测量可以同时启用的更多事件时,它们用于事件多路复用(尝试perf stat -d
或perf stat -dd
; https://perf.wiki.kernel.org/index.php/Tutorial#multiplexing_and_scaling_events)(8个硬件)英特尔上的事件只有7个真正的硬件计数硬件单元)。 Perf(内核的perf_events子系统)将启用一些事件子集,并将每秒更改这些子集数次。然后,运行/ ena将与启用此事件时的时间份额成比例,并且运行可能会显示事件计数时的确切时间量。使用正常的人类可读性能统计数据时,如果事件行没有[100%]
则会标记;并且报告的事件计数可以在程序的完整运行时间内缩放(估计)(不精确缩放)。