perf工具输出,魔术值

时间:2017-05-20 16:25:52

标签: arm perf

我使用参数-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

1 个答案:

答案 0 :(得分:1)

stat命令的

-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_measurementprint_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 -dperf stat -dd; https://perf.wiki.kernel.org/index.php/Tutorial#multiplexing_and_scaling_events)(8个硬件)英特尔上的事件只有7个真正的硬件计数硬件单元)。 Perf(内核的perf_events子系统)将启用一些事件子集,并将每秒更改这些子集数次。然后,运行/ ena将与启用此事件时的时间份额成比例,并且运行可能会显示事件计数时的确切时间量。使用正常的人类可读性能统计数据时,如果事件行没有[100%]则会标记;并且报告的事件计数可以在程序的完整运行时间内缩放(估计)(不精确缩放)。