相关疑难解决方法(0)

系统范围的分析器(例如perf)如何将计数器与指令相关联?

我试图了解系统范围的分析器是如何工作的.我们以linux perf为例.对于某个分析时间,它可以提供:

  • 各种聚合的软件性能计数器
  • 每个用户空间进程和内核空间函数花费的时间和硬件计数器(例如#instructions)
  • 有关上下文切换的信息
  • 等等

我几乎可以肯定的是,报告只是对实际情况的估计.所以我认为有一些内核模块以一定的采样率启动软件中断.采样率越低,分析器开销越低.中断可以读取存储性能计数器的模型特定寄存器.

下一部分是将计数器与机器上运行的软件相关联.这是我不理解的部分.

  1. 那么探查器从何处获取数据?

  2. 您是否可以查询任务计划程序以查明中断他时正在运行的内容?这不会影响调度程序的执行(例如,不是继续中断的函数,而是只调度另一个,使得分析器结果不准确).task_struct对象列表是否可用?

  3. 即使在指令级,分析器如何甚至关联硬件指标?

optimization performance profiling operating-system linux-kernel

5
推荐指数
2
解决办法
1931
查看次数

Perf 中奇怪的回溯

L3-misses我使用以下命令在简单的基准测试中提取导致用户级别的回溯evince

sudo perf record -d --call-graph dwarf -c 10000 -e mem_load_uops_retired.l3_miss:uppp /opt/evince-3.28.4/bin/evince
Run Code Online (Sandbox Code Playgroud)

很明显,采样周期相当大(连续采样之间有 10000 个事件)。对于这个实验, 的输出perf script有一些与此类似的样本:

EvJobScheduler 27529 26441.375932:      10000 mem_load_uops_retired.l3_miss:uppp:     7fffcd5d8ec0         5080022 N/A|SNP N/A|TLB N/A|LCK N/A
    7ffff17bec7f bits_image_fetch_separable_convolution_affine+0x2df (inlined)
    7ffff17bec7f bits_image_fetch_separable_convolution_affine_pad_x8r8g8b8+0x2df (/usr/lib/x86_64-linux-gnu/libpixman-1.so.0.34.0)
    7ffff17d1fd1 general_composite_rect+0x301 (/usr/lib/x86_64-linux-gnu/libpixman-1.so.0.34.0)
  ffffffffffffffff [unknown] ([unknown])
Run Code Online (Sandbox Code Playgroud)

在回溯的底部,有一个名为 的符号[unknown],看起来没问题。但随后就呼叫了线路general_composite_rect()。这个回溯OK吗?

AFAIK,回溯中的第一个调用者应该是类似_start()或 的东西__GI___clone()。但回溯不是这种形式。怎么了?

有什么办法可以解决这个问题吗?截断的(部分)回溯可靠吗?

linux trace performancecounter call-graph perf

2
推荐指数
1
解决办法
2921
查看次数