gpt4 book ai didi

c - 英特尔性能监视器——任何监控每个进程的方法?

转载 作者:行者123 更新时间:2023-12-04 05:46:13 25 4
gpt4 key购买 nike

我将如何使用 Intel Performance Counter 监视特定进程的执行(即,它的分支,来自分支跟踪存储)监控,同时过滤掉其他进程的信息?

最佳答案

您应该知道 BTS(分支跟踪存储)和性能监控事件/计数器(在 CPU 内部,它的 PMU block )是非常不同的东西。

分支跟踪存储是 CPU 的功能,它确实在内存的特殊区域中记录每个采用的分支(eip 对 - 分支指令的第一个和分支目标的第二个;每对还添加一个标志字)。其结果非常类似于单步执行代码块(基本 block )的记录顺序。这就像在编译器的帮助下进行代码覆盖一样,每个分支都由编译器检测。

BTS 只是 MSR_DEBUGCTLA MSR 中的一点点(它是 intel x86 寄存器);我几乎可以肯定这个寄存器是线程特定的(就像在 Linux 中一样),所以你不需要 Hook 调度程序。有some examples在 Windows 中使用此 MSR;但使用了不同的位。另外,不要忘记正确设置 DS_AREA。所以,如果你真的想要 BTS,请复制 Intel Arch Manual (第 3b 卷,“调试和性能监控”部分,“19.7.8 分支跟踪存储(BTS)”部分)并手动对 BTS 进行编程。最难的部分是处理 DS 区域溢出(您需要自定义中断处理程序)。

如果您想知道的不是执行代码的痕迹,而是程序的统计信息(执行了多少指令;分支预测的好坏;这里有多少间接分支......),您应该使用性能监控事件,也就是“基于精确事件采样”(PEBS)。英特尔 Vtune 做到了这一点;应该还有其他一些工具,甚至是 Intel PBS your linked .唯一的问题(这对于免费工具来说有点困难)是找到你想要的事件的名称。基于指令执行的事件总是绑定(bind)到某个线程。

基于事件的采样是什么意思:您可以设置一些限制,例如1000 用于某些事件,例如。 BR_INST_EXEC.COND ("条件数
近分支指令执行”)或 BR_INST_EXEC.DIRECT(“所有无条件近分支指令,不包括调用和间接分支。”),一次最多 2-4 个事件。然后 CPU 将计算与该事件对应的每个情况。当有在第 1000 种情况下,将为指令 EIP 生成事件(中断)。通过采样,很容易获得代码行为的详细统计信息。如果您将限制设置为非常低的值并且您不会为 eip 汇总事件,您将得到跟踪;)

使用 PEBS,您可以知道 CPU 的代码有多糟糕,错误预测的分支位于何处,哪些指令等待来自缓存的数据等。有 100 多个事件(第 3b 卷的附录 A)。

PS有一些BTS/win的代码:http://blog.csdn.net/quincy_hu/article/details/4053163

PPS 有 PMU 编程的简短概述,包括 PEBS 和 BTS。 software.intel.com/file/30320 它适用于 Nehalem,但即使对于 Sandy 也可能是真实的。

关于c - 英特尔性能监视器——任何监控每个进程的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10644919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com