可以在 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 - 数据融合 - 牧马人