在我对硬件性能计数器进行了多次阅读之后,我可以声称所有英特尔处理器都支持硬件性能计数器。因此,为了访问这些额外的硬件寄存器,即。硬件性能计数器,我使用了经常用于访问和配置这些计数器的PAPI基础设施。
当我使用papi_avail实用程序报告有关数字硬件计数器的信息时,查看了意外值,即相对于图,数字硬件计数器:0可能是吗?
关于我的处理器型号(英特尔酷睿i7),我认为这是不正确的价值。
我非常感谢您提供的任何帮助。
答案 0 :(得分:2)
如果您需要知道英特尔支持多少个性能计数器 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的功能特定于体系结构。如果您需要英特尔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
[...]
使用这些信息,您可以参考Intel documentation。
答案 1 :(得分:0)
查看第18章 "性能监控" 和19 "性能监控事件&#34 ; 部分Intel® 64 and IA-32 Architectures Software Developer Manuals卷3B(latest version here)。
答案 2 :(得分:0)
所有您需要的就是尝试:
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
所有最新的Linux内核均配备有perf实用程序,用于访问硬件性能计数器。但是,出于安全问题,默认情况下,我们无权访问这些计数器。存储在文件“ perf_event_paranoid”中的默认值为3,这意味着我们无法访问计数器。通过将该值修改为1(允许访问),我们可以获得有关可用性能计数器的信息,并可以使用perf或任何可用工具(如PAPI)对其进行访问。