可以在 Google Cloud Platform 上运行的“perf”替代性能管理工具

Posted

技术标签:

【中文标题】可以在 Google Cloud Platform 上运行的“perf”替代性能管理工具【英文标题】:"perf" alternate performance management tools that can run on Google Cloud Platform 【发布时间】:2020-04-02 09:26:37 【问题描述】:

我尝试在 GCP 上托管的 Ubuntu 虚拟机中使用“perf”命令。但是当我运行时:

sudo perf stat -e task-clock,cycles,instructions,cache-references,cache-misses  ./AppName

输出:

    Performance counter stats for './AppName':
        490.299513      task-clock (msec)         #    0.081 CPUs utilized          
   <not supported>      cycles                                                      
   <not supported>      instructions                                                
   <not supported>      cache-references                                            
   <not supported>      cache-misses                                                
       6.036963754 seconds time elapsed

除了任务时钟,所有其他都显示为“不支持”。 我想要缓存引用和缓存未命中数据。那么“perf”有什么替代品吗?

【问题讨论】:

【参考方案1】:

我通过使用不同类型的机器(N1、N2)并在我的项目中为 ubuntu、redhat 重现了相同的场景并具有与您提供的相同的输出:

root@perf-test-ubuntu:~# perf stat -e task-clock,cycles,instructions,cache-references,cache-misses ^C “系统范围”的性能计数器统计信息:

  44450.342564      task-clock (msec)         #    1.000 CPUs utilized          
<not supported>      cycles                                                      
<not supported>      instructions                                                
<not supported>      cache-references                                            
<not supported>      cache-misses                                                

  44.470234233 seconds time elapsed

我发现了一些有用的链接 [1][2],似乎 Linux perf 工具默认尝试使用硬件性能监控计数器。当您的操作系统被虚拟化时,您无法直接访问所有计数器;如果配置,一些虚拟化解决方案可能允许访问一些基本计数器。 [1]

您想要的数据位于基于硬件的性能监控计数器中。这些通常不会被虚拟机环境模拟,因为它们是开销并且通常没有意义,因为底层缓存统计信息是基于每个内核/包维护的,并且工作负载可以安排在各种内核上运行,每个内核都有自己的硬件级别统计数据。 [2]

希望这些信息对您有所帮助。

[1]-Linux perf events profiling in Google Compute Engine not working

[2]-https://www.researchgate.net/post/Why_doesnt_perf_report_cache-refernces_cache-misses

【讨论】:

以上是关于可以在 Google Cloud Platform 上运行的“perf”替代性能管理工具的主要内容,如果未能解决你的问题,请参考以下文章

可以更改 Google Cloud Platform 项目 ID?

Google Cloud Platform抢占实例:磁盘发生了什么?

如何在 Google Cloud Platform 中编辑 Kubernetes 集群的描述字段?

Google Cloud Platform - 数据融合 - 牧马人

Google Cloud Platform 在没有提示的情况下删除或停止实例

将 Google Cloud Platform 的错误报告与 ExpressJS 一起使用