Как узнать точное количество аппаратных счетчиков производительности встроенного процессора?
После того, как я несколько раз прочитал "Счетчик производительности оборудования", я могу утверждать, что все процессоры Intel поддерживают Счетчик производительности оборудования. Итак, чтобы получить доступ к этим дополнительным аппаратным регистрам, то есть счетчикам производительности оборудования, я использовал инфраструктуру PAPI, часто используемую для доступа и настройки этих счетчиков.
Когда я использовал служебную программу papi_avail для сообщения информации о количестве аппаратных счетчиков, было просмотрено непредвиденное значение, то есть относительно рисунка, количество аппаратных счетчиков: 0. Может ли это быть?
Что касается моей модели процессоров (Intel Core i7), я думаю, что это неверное значение.
Я действительно ценю любую помощь, которую вы можете оказать.
1 ответ
Если вам нужно знать, сколько счетчиков производительности поддерживает ваш процессор Intel, вы можете использовать команду cpuid (см. Man 1 cpuid).
Это довольно многословно, так как запускает инструкцию x86 cpuid, которая возвращает много информации о процессоре. Среди них есть подробности о Группе мониторинга эффективности (PMU). По умолчанию команда запускает инструкцию cpuid на всех ядрах ЦП. Но если ядра идентичны, вы можете ограничить отображение одним ядром. Например, вот как мы перечисляем информацию о первом процессоре:
$ 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, первые строки, отображаемые предыдущей командой, содержат идентификацию процессора / архитектуры. Например:
[...]
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.
Все , что вам нужно, это попробовать:
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
все последние ядра Linux оснащены утилитой perf для доступа к аппаратным счетчикам производительности. Однако из соображений безопасности по умолчанию у нас нет доступа к этим счетчикам. Значение по умолчанию, хранящееся в файле "perf_event_paranoid" - 3, означает, что мы не можем получить доступ к счетчикам. Изменив значение на 1 (разрешить доступ), мы можем получить информацию о доступных счетчиках производительности и получить к ним доступ с помощью perf или любых доступных инструментов, таких как PAPI.
Взгляните на главы 18 "Мониторинг производительности" и 19 "События мониторинга производительности" в томе 3B Руководств для разработчиков программного обеспечения для архитектуры Intel® 64 и IA-32 ( последняя версия здесь).