#profiling #kvm #perf #code-profiling
#профилирование #kvm #perf #профилирование кода
Вопрос:
Я новичок в использовании Google Compute Engine. Я хотел бы использовать Linux perf tool для выполнения некоторых различных измерений событий производительности моего приложения и, в конечном счете, для профилирования образцов. Я установил Linux perf tool на свою виртуальную машину Ubuntu 16.04 LTS. Однако даже базовые события, такие как cycles, отображаются как «не поддерживается». Я предполагаю, что в базовом гипервизоре KVM не включена поддержка виртуального PMU, хотя я полагаю, что KVM поддерживает это с настройкой флага не по умолчанию. Есть ли какой-нибудь способ заставить это работать?
# perf stat -e cycles -a sleep 10
Performance counter stats for 'system wide':
<not supported> cycles
10.000598339 seconds time elapsed
Ответ №1:
Инструмент Linux perf по умолчанию пытается использовать счетчики мониторинга производительности оборудования. Когда ваша ОС виртуализирована, у вас нет прямого доступа ко всем счетчикам; некоторые решения виртуализации могут разрешать доступ к некоторым базовым счетчикам, если они настроены.
В вашем случае кажется, что виртуализация GCE не предоставляет такого доступа. (Обратитесь в службу поддержки вашего GCE? Если оно было отключено за пределами вашей виртуальной машины, вы не можете это изменить.)
Вы можете использовать perf с некоторыми программными событиями, например, -e task-clock
для получения базового профилирования. Проверьте perf stat
выходные данные на наличие поддерживаемых событий и perf list
событий программного обеспечения.
perf stat -e task-clock ...
perf record -e task-clock ...
Комментарии:
1.некоторые документы о KVM и PMU:linux-kvm.org/page/Guest_PMU access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux / … «по умолчанию отключено». — для получения PMU должна быть поддержка «
cat /proc/cpuinfo|grep arch_perfmon
,virsh dumpxml guest_name |grep "cpu mode"
«