如何提高性能结果的精度

Posted

技术标签:

【中文标题】如何提高性能结果的精度【英文标题】:How to Increase precision of perf result 【发布时间】:2020-02-14 19:07:16 【问题描述】:

我正在使用 perf 来分析 C 库。但是,它不会产生 %100 结果,因为它会将数字滚到 0 到 0.00 倍以下。由于调用数以千计,因此会影响整体结果。

有人知道如何设置精度吗?(我检查了 PERF-TRACE(1) gnu Linux 网站上的每个参数,但它不存在)

整体儿童的结果示例:

8.01%     0.11%  baxter-wksp  [kernel.kallsyms]        [k] entry_SYSCALL_64_after_hwframe 

 7.80%     3.19%  baxter-wksp  [kernel.kallsyms]        [k] 

7.62%     0.00%  baxter-wksp  [unknown]                [k] 0000000000000000

【问题讨论】:

您运行了什么perf 命令来检索上述结果? 我用“sudo perf record -g”记录,然后用“sudo perf report --children”解压txt文件 【参考方案1】:

没有允许更改perf report 结果精度的可调参数。

以最新的内核源代码为参考,正在计算性能报告输出中“children”的overhead 值here。

如您所见,

    case CCVAL_PERCENT:
    default:
        if (total)
            percent = period * 100.0 / total;
        return percent_color_fprintf(fp, "%.2f%%", percent);
    

打印开销百分比的规范固定为小数点后 2 位小数精度。这需要修改内核源代码以允许在perf report 输出中显示任何适当的精度。

【讨论】:

linux/v5.5.5/source/tools/perf/util/callchain.c 是内核源代码树的一部分,但它被编译到用户空间 perf 可执行文件中。您可以修改它并构建您自己的perf 二进制文件,而无需重新编译您的内核。 是的,确实!只需构建我们自己的 perf 二进制文件就足够了。 并且构建 perf 不需要完整的内核源代码,make perf-targz-src-pkg 将为独立 perf 构建生成 tar gz;并且那个不错的网站生成了几个 targz:mirrors.edge.kernel.org/pub/linux/kernel/tools/perf

以上是关于如何提高性能结果的精度的主要内容,如果未能解决你的问题,请参考以下文章

如何在保证仿真精度的情况下提高仿真速度

运用优化器提高网络测试性能

性能测试中,如何把系统 TPS 从 100 提高到 10000?

如何提高 OpenMP 代码的性能?

性能测试工程师,如何把系统 TPS 从 100 提高到 10000?

Elasticsearch:如何提高查询性能