如何在过程中配置和采样英特尔性能计数器

埃德·巴雷特(Edd Barrett)

简而言之,我试图在用户级基准测试流程(伪代码,假设x86_64和UNIX系统)中实现以下目标:

results[] = ...
for (iteration = 0; iteration < num_iterations; iteration++) {
    pctr_start = sample_pctr();
    the_benchmark();
    pctr_stop = sample_pctr();
    results[iteration] = pctr_stop - pctr_start;
}

FWIW,我正在考虑使用的性能计数器是CPU_CLK_UNHALTED.THREAD_ALL,用于读取独立于时钟频率变化的核心周期数(在先前的问题中,我曾计划为此使用TSC寄存器,但是可惜的是,这不是该寄存器的功能措施)。

我最初的意图是使用内联汇编程序首先使用来配置计数器WRMSR,然后使用RDPMCinside来读取计数器sample_pctr()

我偶然发现了第一个障碍,因为编写MSR需要内核特权。看来实际上您可以从用户空间读取计数器(如果配置正确),但是配置计数器(使用MSR)的操作需要由内核执行。

有谁知道一种轻巧的方法来请求内核从用户空间配置性能计数器,以便随后可以RDPMC在基准测试工具中使用?

我研究/考虑过的东西:

  • 适用于Linux的Perf工具。似乎已准备好在过程的整个生命周期内进行采样,而不是在过程内作为特定点(每次迭代之前和之后)进行采样。
  • 直接使用perf syscall perf_event_open看起来计数器值仅会定期更新(使用采样率)或在计数器超过阈值后更新。我问的那一刻,我确实需要对价。这就是为什么RDPMC看起来如此吸引人的原因。我认为频繁采样本身会使性能计数器的读数产生偏差。
  • PAPI基于perf构建,因此可能会继承上述问题。
  • 编写内核模块-太多的努力,也容易出错。

理想情况下,我想要一个适用于OpenBSD和Linux的解决方案,但是我认为这是一个很高的要求。也许目前仅适用于Linux。

任何帮助深表感谢。谢谢。

编辑:我刚刚发现Linux msr设备节点,这可能就足够了。如果出现更好的答案,我将保留该问题。

埃德·巴雷特(Edd Barrett)

似乎最好的方法-至少对于Linux-是使用msr设备节点

您只需打开设备节点,查找所需的MSR地址,然后读取或写入8个字节。

OpenBSD更加困难,因为(在撰写本文时)没有MSR的用户空间代理。因此,您需要手工编写内核模块或实现sysctl。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在过程中配置和采样英特尔性能计数器

来自分类Dev

如何读取x86英特尔处理器的PMC(性能监视计数器)

来自分类Dev

英特尔C ++编译器:如何在宏定义/定义中编译和链接openmp编译指示?

来自分类Dev

“英特尔图形”如何在微处理器和芯片组之间划分?

来自分类Dev

如何在Service Fabric无状态服务中配置性能计数器?

来自分类Dev

如何在C#中检查性能计数器?

来自分类Dev

英特尔 Iris Xe,在 20.04 LTS 和 21.04 中的性能滞后

来自分类Dev

投机性负载和存储如何在现代英特尔处理器中发生?

来自分类Dev

搜索过程中的动态结果计数器

来自分类Dev

英特尔7260在安装过程中可正常工作,但在重启后无法正常工作

来自分类Dev

英特尔7260在安装过程中可正常工作,但在重启后无法正常工作

来自分类Dev

bash +如何在过程中执行ssh测试

来自分类Dev

PL/SQL:如何在过程中接受输入

来自分类Dev

如何在过程中连接更新查询

来自分类Dev

如何在过程中调用函数?

来自分类Dev

英特尔XDK的不同性能

来自分类Dev

英特尔CPU的升级过程

来自分类Dev

英特尔appframework ui:如何在简单的列表详细应用程序中传递数据

来自分类Dev

如何在Ubuntu 12.04 LTS中安装“英特尔图形驱动程序安装程序”?

来自分类Dev

如何在Ubuntu 12.04 LTS中安装“英特尔图形驱动程序安装程序”?

来自分类Dev

如何在 Ubuntu 上安装英特尔 AVX 2

来自分类Dev

英特尔迅驰双核处理器和英特尔迅驰2之间有区别吗?

来自分类Dev

如何使用英特尔CVAT中的数据导出TFRecord?

来自分类Dev

Simulink中的采样时间计数器

来自分类Dev

在过程中添加条件会导致性能下降

来自分类Dev

在开发过程中如何在中央服务器上托管单spa根配置和模块

来自分类Dev

如何在texbox.text Windows窗体中显示性能计数器结果C#

来自分类Dev

英特尔处理器家族

来自分类Dev

英特尔检查器检查dll

Related 相关文章

  1. 1

    如何在过程中配置和采样英特尔性能计数器

  2. 2

    如何读取x86英特尔处理器的PMC(性能监视计数器)

  3. 3

    英特尔C ++编译器:如何在宏定义/定义中编译和链接openmp编译指示?

  4. 4

    “英特尔图形”如何在微处理器和芯片组之间划分?

  5. 5

    如何在Service Fabric无状态服务中配置性能计数器?

  6. 6

    如何在C#中检查性能计数器?

  7. 7

    英特尔 Iris Xe,在 20.04 LTS 和 21.04 中的性能滞后

  8. 8

    投机性负载和存储如何在现代英特尔处理器中发生?

  9. 9

    搜索过程中的动态结果计数器

  10. 10

    英特尔7260在安装过程中可正常工作,但在重启后无法正常工作

  11. 11

    英特尔7260在安装过程中可正常工作,但在重启后无法正常工作

  12. 12

    bash +如何在过程中执行ssh测试

  13. 13

    PL/SQL:如何在过程中接受输入

  14. 14

    如何在过程中连接更新查询

  15. 15

    如何在过程中调用函数?

  16. 16

    英特尔XDK的不同性能

  17. 17

    英特尔CPU的升级过程

  18. 18

    英特尔appframework ui:如何在简单的列表详细应用程序中传递数据

  19. 19

    如何在Ubuntu 12.04 LTS中安装“英特尔图形驱动程序安装程序”?

  20. 20

    如何在Ubuntu 12.04 LTS中安装“英特尔图形驱动程序安装程序”?

  21. 21

    如何在 Ubuntu 上安装英特尔 AVX 2

  22. 22

    英特尔迅驰双核处理器和英特尔迅驰2之间有区别吗?

  23. 23

    如何使用英特尔CVAT中的数据导出TFRecord?

  24. 24

    Simulink中的采样时间计数器

  25. 25

    在过程中添加条件会导致性能下降

  26. 26

    在开发过程中如何在中央服务器上托管单spa根配置和模块

  27. 27

    如何在texbox.text Windows窗体中显示性能计数器结果C#

  28. 28

    英特尔处理器家族

  29. 29

    英特尔检查器检查dll

热门标签

归档