# #linux #intel-pmu
Вопрос:
Я использую Linux 5.8.18 для настройки производительности, затем я попал в замешательство.
PMU в X86-это ограниченный ресурс, и perf-это инструмент для использования PMU для завершения профилирования/выборки.
IIRC, в документе perf говорится, что ресурс PMU совместно используется различными процессами, поэтому ядро Linux будет сохранять/делать снимки PMC во время планирования процесса.
Чтобы убедиться, что настройка PMU зависит от конкретного процесса, я провел следующие тесты.
Процесс, работающий в фоновом режиме, чтобы вызвать API perf для включения и использования X86 fixed_counter 0 (инструкция удалена) (MSR 0x309) на CPU0.
Затем в bash, я rdmsr-p0 0x309, я обнаружил, что счетчик увеличивается, когда процесс выполняется в фоновом режиме.
Я думал, что у каждого процесса (A и Bash) должен быть свой собственный снимок PMC (в данном случае fixed_counter 0), но тест показывает, что PMC является глобальной видимой…
Я действительно запутался.
Комментарии:
1. Можете ли вы поделиться фрагментом кода, который вы используете для вызова API perf, использующего fixed_counter 0?
2. После дополнительных тестов я обнаружил, что MSR 0x38D (FIXED0_CONTROL) зависит от процесса, что означает, что процесс A называется perf API для использования счетчика FIXED0, поэтому 0x38D настраивается соответствующим образом при запуске процесса A. Другие процессы, которые не используют FIXED0, имеют MSR 0x38D = 0. Теперь вопрос в том, как Linux может сделать процесс 0x38D специфичным (где он находится в контексте процесса)? Спасибо,