当发生 PMC 溢出时,会记录哪条指令?

Which instruction is recorded when an overflow of PMC occurs?

提问人:Frontier_Setter 提问时间:6/5/2023 最后编辑:Peter CordesFrontier_Setter 更新时间:6/5/2023 访问量:49

问:

当使用“pref record -p $pid & perf report”命令分析带有“cpu-cycle”事件的程序时,我认为底层硬件 PMC 会执行以下操作:

  1. 当周期到来时增加计数器
  2. 记录计数器溢出时的“当前指令”

我想知道在步骤 2 中哪个指令被记录为“当前指令”,因为在不同的管道阶段或执行单元中应该有多个动态指令。

x86 CPU 架构 英特尔 PMU 性能监视器

评论

1赞 Peter Cordes 6/5/2023
对于非 PEBS,它会生成一个中断,因此当外部中断进入时,决定停用哪些指令以及丢弃哪些指令时,适用相同的机制。我认为它完成了 ROB 中最古老的指令,除非可能是高延迟缓存未命中。(当发生中断时,管道中的指令会发生什么?安迪·格鲁(Andy Glew)给出了答案,安迪·格鲁(Andy Glew)是参与英特尔P6的架构师之一。另请参阅 性能记录(或其他探查器)如何选择将哪个指令计为成本时间?
1赞 Peter Cordes 6/5/2023
另请参阅 CPU 如何处理异步中断?其中提到了我们过去看到的关于在中断之前至少让一条指令停用的情况。Xcode Instrument 的拆卸时间分析的可靠性包含一些关于“滑移”的信息,其中计数的累积时间略晚于实际速度较慢的指令。或者出于其他原因,对于等待从已经发送到执行单元的缓慢内容中读取输入的指令。
0赞 Peter Cordes 6/5/2023
Windows [performance-monitor] 是否真的允许您像 Linux [perf] 那样从 [intel-pmu] 收集硬件 PMU 事件?如果没有,也许用 [performance] 或其他东西替换该标签。

答: 暂无答案