3

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

当我使用 papi_avail 实用程序报告有关数字硬件计数器的信息时,看到了意外的值,即相对于图,数字硬件计数器:0。可能吗?

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

我非常感谢您能提供的任何帮助。

4

3 回答 3

2

如果您需要知道您的 Intel CPU 支持多少性能计数器,可以使用cpuid命令(参见man 1 cpuid)。

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

$ 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:

 version ID = 0x3 (3)

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

number of counters per logical processor = 0x4 (4)

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

number of fixed counters = 0x3 (3)

计数器都是 48 位长:

bit width of counter        = 0x30 (48)
bit width of fixed counters = 0x30 (48)

PMU 的功能是特定于架构的。如果您需要有关您的 Intel PC/主板的更多详细信息,前一个命令显示的第一行提供 CPU/架构标识。例如:

   [...]
   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
      [...]

有了这些信息,您可以参考英特尔文档

于 2020-10-21T20:18:01.280 回答
0

您需要做的就是尝试:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

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

于 2020-10-02T19:45:17.110 回答
0

查看英特尔® 64 位和 IA-32 架构软件开发人员手册第 3B 卷(此处为最新版本)的第 18 章“性能监控”和第 19章“性能监控事件”部分。

于 2017-03-29T18:50:46.007 回答