Использование PEBS/PMU в QEMU для выборки точного адреса операции с памятьюLinux

Ответить Пред. темаСлед. тема
Anonymous
 Использование PEBS/PMU в QEMU для выборки точного адреса операции с памятью

Сообщение Anonymous »

Я пытаюсь использовать PEBS/PMU в QEMU для выборки точного адреса операции с памятью. Я столкнулся с аналогичной проблемой, которая упоминается 3 года назад в этой ссылке, и я цитирую текстовую часть ниже.
/>
Я пытался использовать perf_event_open() для отслеживания всех инструкций магазина, чтобы получить их адрес доступа. Я обнаружил, что только когда я установил attr.precision_ip > 0, я могу получить ненулевой адрес. Но когда я запустил тот же процесс на виртуальной машине вместо хоста, появилось сообщение об ошибке «Операция не поддерживается». Я могу исправить эту проблему, установив на виртуальной машине точный_ip = 0, но теперь я получаю только кучу адресов, равных нулю. Я не понимаю, почему Precision_ip связан с примером адреса, который не указан в документе, а также я не понимаю, почему я не могу установить Precision_ip = 1 на виртуальной машине, в то время как я могу сделать это на хосте. Кто-нибудь может мне помочь??

Я провел дополнительные проверки.
Когда я запускаю QEMU с -cpu хост, в журнале ядра гостевой ОС упоминается «События производительности: события Skylake, драйвер Intel PMU», что кажется нормальным для запуска.
Однако я заметил что в хостовой ОС вывод lscpu включает в себя как флаги Arch_perfmon, так и pebs, тогда как в гостевой ОС присутствует только Arch_perfmon и pebs > отсутствует. Я не знаю, как включить эту поддержку.
Основываясь на документации Intel, я попробовал запустить cpuid | grep -A 1 Функции мониторинга производительности архитектуры (0xa/eax) и обнаружил, что идентификатор версии в хостовой ОС равен 4, а в гостевой ОС — 2. Это указывает на разные уровни поддержки. , но я не знаю, как это изменить.
Я также нашел патч, в котором упоминалось следующее:

Ошибка №2 заключается в том, что, поскольку KVM всегда устанавливает для Precision_ip ненулевое значение
для событий PEBS, perf всегда будет генерировать адаптивную запись, даже если
гость запросил базовую запись. Обратите внимание, что KVM также включит адаптивную
PEBS в отдельном счетчике, даже если адаптивная PEBS не доступна
гостю, но это безопасно, поскольку MSR_PEBS_DATA_CFG гарантированно будет равен нулю. ,
т.е. гость будет видеть только базовые записи.


Re: Три вышеперечисленные проблемы указывают на исправление в одном направлении: передать значение
EVT_SELx.Adaptive_Record[34] или FCx_Adaptive_Record vcpu в
perf/ядро и позволить помощи PEBS вступить в силу, как ожидается vPEBS. Единственное место, где это можно решить, — это снова intel_guest_get_msrs():
обновить vPMC[x].pPMC.fcctl_or_evtsel.ADAPTIVE = vPMC[x].use_adaptive
, поскольку гостевая PEBS отключена, если хостовая PEBS включена. .

В нем говорится, что ICE_LAKE должен иметь поддержку Precision_IP по умолчанию. Однако в моем случае он, похоже, не поддерживается. Может ли это быть связано с несовместимой версией KVM/QEMU (как мне обновиться? Apt указывает, что у меня уже установлена ​​последняя версия), или это связано с тем, что модель моего процессора слишком старая или слишком старая (Intel Xeon Gold 5218)?
Надеюсь, что по этому вопросу был достигнут прогресс с тех пор, как предыдущий вопрос был поднят три года назад

Подробнее здесь: https://stackoverflow.com/questions/791 ... -operation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»