【发布时间】:2018-12-23 02:22:57
【问题描述】:
我正在尝试使用 RDPMC 指令来计算已停用的指令,并且正如英特尔软件开发人员手册第 3 卷附录 A(在性能监控部分)所述:
• 指令已停用 — 事件选择 C0H,Umask 00H 此事件计算引退时的指令数。对于包含多个微操作的指令, 此事件计算指令的最后一个微操作的退出。带有 REP 前缀的指令计数 作为一条指令(不是每次迭代)。多操作指令的最后一个微操作退出前的故障 不计算在内。
我使用来自here 的答案来启用 Linux Kernel-Mode 模块的性能计数器。
从here可以看出(RDPMC的描述):
将 ECX 寄存器中指定的 40 位性能监控计数器的内容加载到寄存器 EDX:EAX 中。 EDX 寄存器加载计数器的高 8 位,EAX 寄存器加载低 32 位。 Pentium® Pro 处理器有两个性能监控计数器(0 和 1),它们分别通过在 ECX 寄存器中放置 0000H 或 0001H 来指定。
之后,我将 0 放入 RAX 并执行 RDPMC(在用户模式下),但在 RDPMC 执行多次后,EDX:EAX 仍然为零。
所以我的问题是:
- 如何统计用户模式下特定进程的 Retired Instructions?
-
Event select C0H和Umask 00H有什么区别,我想知道C0H和00H怎么用?
【问题讨论】:
标签: assembly x86 intel intel-pmu