在我对硬件性能计数器做了几篇阅读之后,我可以声称所有的英特尔处理器都支持硬件性能计数器。因此,为了访问这些额外的硬件寄存器,即硬件性能计数器,我使用了经常用于访问和配置这些计数器的 PAPI 基础设施。
当我使用 papi_avail 实用程序报告有关数字硬件计数器的信息时,看到了意外的值,即相对于图,数字硬件计数器:0。可能吗?
关于我的处理器型号(英特尔酷睿 i7),我认为这是不正确的值。
我非常感谢您能提供的任何帮助。
如果您需要知道您的 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
[...]
有了这些信息,您可以参考英特尔文档。
您需要做的就是尝试:
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
所有最近的 Linux 内核都配备了 perf 实用程序来访问硬件性能计数器。但是,出于安全问题,默认情况下,我们无权访问这些计数器。存储在文件“perf_event_paranoid”中的默认值是 3 意味着我们无法访问计数器。通过将值修改为 1(允许访问),我们可以获得有关可用性能计数器的信息,并可以使用 perf 或任何可用工具(如 PAPI)访问它们。
查看英特尔® 64 位和 IA-32 架构软件开发人员手册第 3B 卷(此处为最新版本)的第 18 章“性能监控”和第 19章“性能监控事件”部分。