如何在Azure Ubuntu 18.04虚拟机中使Perf工具正常工作并获取完整性能统计信息?
好的,我来帮你解决这个Azure Ubuntu VM上perf工具无法获取硬件事件的问题:
能否在Azure虚拟机中启用硬件性能事件?
首先,Azure虚拟机对硬件PMU(性能监控单元)的支持取决于你使用的VM系列:
- 一代VM(如A、Av2系列):这类VM不支持暴露硬件PMU,因此无法使用perf的硬件事件(如cycles、instructions),这种情况下只能依赖软件事件。
- 二代VM(如Dv3、Ev3、Fs、Ms等系列):这类VM支持嵌套虚拟化,可以启用CPU性能计数器来让perf访问硬件事件。
启用CPU性能计数器的步骤:
- 停止虚拟机:必须完全停止VM(不能仅重启),因为这个配置变更需要VM处于停机状态。
- 启用性能计数器:
- 通过Azure门户:进入VM的"配置"页面,找到"CPU性能计数器"选项,设置为"启用"。
- 通过Azure CLI:执行以下命令(替换
<rg-name>和<vm-name>为你的资源组和VM名称):az vm update --resource-group <rg-name> --name <vm-name> --set enablePerformanceCounter=true
- 启动VM:重启后,重新测试perf工具,比如运行
perf stats ls,此时应该能正常显示cycles、instructions等硬件事件数据。
另外,确保你已经安装了对应内核版本的perf工具:
sudo apt update && sudo apt install linux-tools-common linux-tools-$(uname -r)
无法启用硬件事件时的替代方案
如果你的VM系列不支持硬件PMU,或者暂时无法停机修改配置,这些工具可以帮助你间接获取应用的执行情况:
- perf软件事件分析:虽然没有硬件事件,但可以用
perf record -e cpu-clock,page-faults <your-app>记录应用的执行数据,然后用perf report查看热点函数,通过函数的执行时间占比间接推断指令执行的密集程度。 - Intel oneAPI VTune Profiler:Azure上支持的VM系列可以使用VTune的采样分析功能,即使没有硬件PMU,也能估算指令数、函数执行时间等指标。安装后可以用以下命令启动分析:
vtune -collect hotspots -- <your-app> - bpftrace:基于eBPF的工具,可以追踪用户空间函数调用、系统调用等事件,帮助你分析应用的行为。例如,统计某个函数的调用次数:
sudo bpftrace -e 'uprobe:/path/to/your/application:target_function { @count[comm] = count(); }' - strace:用于追踪系统调用,统计系统调用的次数和耗时,帮助你定位应用在系统交互上的性能瓶颈:
strace -c <your-app>
内容的提问来源于stack exchange,提问作者Naren




