首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们如何知道内置CPU的硬件性能计数器的确切数量?

我们如何知道内置CPU的硬件性能计数器的确切数量?
EN

Stack Overflow用户
提问于 2017-03-29 02:56:52
回答 3查看 736关注 0票数 3

在我对硬件性能计数器进行了多次阅读之后,我可以断言所有的英特尔处理器都支持硬件性能计数器。因此,为了访问这些额外的硬件寄存器,即硬件性能计数器,我使用了经常用于访问和配置这些计数器的PAPI基础设施。

当我使用papi_avail实用程序报告有关number hardware counters的信息时,意外的值被查看,即相对于图,number hardware counters : 0。会是这样吗?

关于我的处理器型号(英特尔酷睿i7),我认为这是不正确的值。

我真的很感谢你能提供的任何帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-10-22 04:18:01

如果需要了解英特尔处理器支持多少个性能计数器,可以使用cpuid命令(参见man 1 cpuid)。

它非常冗长,因为它触发了x86 cpuid指令,该指令返回有关处理器的许多信息。其中,有关于性能监测单位(项目管理单元)的详细信息。默认情况下,该命令在所有核心上启动cpuid指令。但是,如果两个核心相同,则可以将显示限制为一个核心。例如,下面是我们如何列出第一个CPU上的信息:

代码语言:javascript
运行
复制
$ cpuid -1
[...]
   Architecture Performance Monitoring Features (0xa/eax):
      version ID                               = 0x3 (3)
      number of counters per logical processor = 0x4 (4)
      bit width of counter                     = 0x30 (48)
      length of EBX bit vector                 = 0x7 (7)
   Architecture Performance Monitoring Features (0xa/ebx):
      core cycle event not available           = false
      instruction retired event not available  = false
      reference cycles event not available     = false
      last-level cache ref event not available = false
      last-level cache miss event not avail    = false
      branch inst retired event not available  = false
      branch mispred retired event not avail   = false
   Architecture Performance Monitoring Features (0xa/edx):
      number of fixed counters    = 0x3 (3)
      bit width of fixed counters = 0x30 (48)
      anythread deprecation       = false
[...]

在上面的显示中,我们可以看到PMU版本为3:

代码语言:javascript
运行
复制
 version ID = 0x3 (3)

每个内核有4个可编程计数器:

代码语言:javascript
运行
复制
number of counters per logical processor = 0x4 (4)

每个内核有3个固定计数器:

代码语言:javascript
运行
复制
number of fixed counters = 0x3 (3)

计数器都是48位长:

代码语言:javascript
运行
复制
bit width of counter        = 0x30 (48)
bit width of fixed counters = 0x30 (48)

PMU的功能是特定于架构的。如果您需要有关英特尔PC/主板的更多详细信息,前面的命令显示的前几行提供CPU/体系结构标识。例如:

代码语言:javascript
运行
复制
   [...]
   vendor_id = "GenuineIntel"
   version information (1/eax):
      processor type  = primary processor (0)
      family          = 0x6 (6)
      model           = 0xa (10)
      stepping id     = 0x9 (9)
      extended family = 0x0 (0)
      extended model  = 0x3 (3)
      (family synth)  = 0x6 (6)
      (model synth)   = 0x3a (58)
      (simple synth)  = Intel Core (unknown type) (Ivy Bridge E1/N0/L1/P0) {Sandy Bridge}, 22nm
      [...]

有了这些信息,您可以参考Intel documentation

票数 2
EN

Stack Overflow用户

发布于 2017-03-30 02:50:46

请看一下卷3B的第18章“性能监视”和19章“性能监视事件”部分(latest version here)。

票数 0
EN

Stack Overflow用户

发布于 2020-10-03 03:45:17

你需要做的就是尝试:

代码语言:javascript
运行
复制
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

所有最新的Linux内核都配备了perf实用程序来访问硬件性能计数器。但是,对于安全问题,在默认情况下,我们无法访问这些计数器。存储在文件"perf_event_paranoid“中的默认值是3,这意味着我们不能访问计数器。通过将值修改为1(允许访问),我们可以获得有关可用性能计数器的信息,并可以使用perf或任何可用的工具访问它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43077715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档