如何让 Perf 在 Azure VM 中工作?

Posted

技术标签:

【中文标题】如何让 Perf 在 Azure VM 中工作?【英文标题】:How can I get the Perf working in an Azure VM? 【发布时间】:2021-09-29 10:57:00 【问题描述】:

我正在尝试使用 perf 分析 Azure VM (Ubuntu 18.04) 中的应用程序。但是性能统计数据并没有提供所有的统计数据。

Performance counter stats for 'ls':

          0.78 msec task-clock                #    0.760 CPUs utilized          
             1      context-switches          #    0.001 M/sec                  
             0      cpu-migrations            #    0.000 K/sec                  
           106      page-faults               #    0.135 M/sec                  
<not supported>      cycles                                                      
<not supported>      instructions                                                
<not supported>      branches                                                    
<not supported>      branch-misses                                               

   0.001031061 seconds time elapsed

   0.001016000 seconds user
   0.000000000 seconds sys

而且,perf list 也没有列出任何硬件事件。

List of pre-defined events (to be used in -e):

alignment-faults                                   [Software event]
bpf-output                                         [Software event]
context-switches OR cs                             [Software event]
cpu-clock                                          [Software event]
cpu-migrations OR migrations                       [Software event]
dummy                                              [Software event]
emulation-faults                                   [Software event]
major-faults                                       [Software event]
minor-faults                                       [Software event]
page-faults OR faults                              [Software event]
task-clock                                         [Software event]

duration_time                                      [Tool event]

msr/pperf/                                         [Kernel PMU event]
msr/smi/                                           [Kernel PMU event]
msr/tsc/                                           [Kernel PMU event]

rNNN                                               [Raw hardware event descriptor]
cpu/t1=v1[,t2=v2,t3 ...]/modifier                  [Raw hardware event descriptor]

我读到没有为 VM source 启用 CPU 性能计数器。

是否可以在 Azure VM 中启用硬件事件?或者有没有其他方法可以找到执行应用程序时使用的指令?

【问题讨论】:

大多数 VM 不进行虚拟化并通过 PMU 硬件性能计数器。我认为 Linux KVM 正在开发它,但 IDK 甚至还没有完成。 如果您不关心时间,只关心指令计数,您可以使用动态检测或仿真。例如英特尔的 SDE 有一个指令混合计数器,它甚至可以通过助记符来分解。例如,请参阅How do I monitor the amount of SIMD instruction usage。 @PeterCordes 感谢您的意见。我会尝试动态检测。 【参考方案1】:

对于 VM,我们无法在 Linux 上的虚拟机来宾中使用 perf 中的硬件 PMU 事件。

参考So 线程:Running perf within a VirtualBox guest

我们可以使用 Log Analytics 代理收集 Windows 和 Linux 性能数据源

参考:https://docs.microsoft.com/en-us/azure/azure-monitor/agents/data-sources-performance-counters

添加 Linux 性能计数器

按照此过程添加要收集的新 Linux 性能计数器。

    点击添加性能计数器。 在文本框中键入计数器的名称,格式为 object(instance)\counter。当您开始输入时,您会看到一个匹配的常用计数器列表。您可以从列表中选择一个计数器,也可以输入您自己的一个。 一个对象的所有计数器都使用相同的采样间隔。默认值为 10 秒。如果您想减少收集的性能数据的存储要求,您可以将其更改为最高 1800 秒(30 分钟)的更高值。 添加完计数器后,单击屏幕顶部的应用按钮以保存配置。

在配置文件中配置 Linux 性能计数器

您可以选择在 Linux 代理上编辑配置文件,而不是使用 Azure 门户配置 Linux 性能计数器。要收集的性能指标由 /etc/opt/microsoft/omsagent//conf/omsagent.conf 中的配置控制。

要收集的性能指标的每个对象或类别都应在配置文件中定义为单个元素。语法遵循以下模式。

【讨论】:

以上是关于如何让 Perf 在 Azure VM 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 Azure Blob 存储下载到 Azure Linux VM

樱桃采摘如何在 Azure devops 中工作 [重复]

如何使 MSBuild MakeDir 任务在 Azure Pipeline YAML 模板中工作?

Rotativa 在本地主机中工作,但在我的 Azure Web 应用程序中无法工作 - 2021

将 Trace 数据保存到存储在发布后无法在 Azure 中工作,但在开发环境中工作

是否可以使用 NAT 网络让 FTP 在 VirtualBox 中工作或让 php 的 ftp 功能工作