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

标签 performance optimization linux-kernel operating-system profiling

我试图了解系统范围的分析器是如何工作的。让我们拿 linux 性能 例如。对于一定的分析时间,它可以提供:

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

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

    下一部分是将计数器与机器上运行的软件相关联。这是我不明白的部分。
  • 那么分析器从哪里获取数据呢?
  • 例如,您能否询问任务调度程序以找出您打断他时正在运行的内容? 会不会影响
    调度程序的执行(例如,而不是继续
    中断的功能,它只会安排另一个,使
    探查器结果不准确)。是的列表吗?任务结构 可用的对象?
  • 分析器如何关联硬件
    甚至在指令级别的指标?
  • 最佳答案

    这几乎可以回答您的所有三个问题。

    分析包括两种类型:计数和采样。计数测量
    总体
    数字
    整个执行过程中的事件,而不提供任何见解
    关于

    指令或功能
    生成
    他们
    .在
    另一方面,
    抽样给出了相关性
    代码中的事件
    通过捕获的指令指针样本
    .
    采样时,
    内核指示处理器在何时发出中断
    一个被选中的
    事件计数器超过
    临界点。吨
    他的中断被内核和采样数据捕获
    包括指令
    指针
    值被存储到一个环形缓冲区中。缓冲区由用户空间定期轮询
    perf 工具及其内容
    写入磁盘。
    在后处理中,指令指针匹配到
    二进制文件中的地址,可以翻译成函数名等

    引用 http://openlab.web.cern.ch/sites/openlab.web.cern.ch/files/technical_documents/TheOverheadOfProfilingUsingPMUhardwareCounters.pdf

    关于performance - 系统范围的分析器(例如 perf)如何将计数器与指令相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661430/

    相关文章:

    mysql - 在 mysql 的多个表中批量插入和更新行的最佳方法

    Linux 内核 : update config from command line for specific modules

    javascript - setInterval 改变 Action 下的速度

    c++ - 在 C++ 中为 Matlab 准备矩阵

    c++ - 在 LLVM 中修改 CFG

    c - 为什么更多的 x86 指令比更少的更快?

    linux - 2.6 内核中的 EXPORT_SYMTAB

    linux - register_kprobe() 在包含结构时返回 EINVAL,无需额外内存

    java - 原子整数 lazySet 性能提升

    性能测试与单元测试