as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持
跳转到主要内容
Simpleperf是一款命令行原生CPU性能分析工具,可帮助您分析应用程序在Vega设备上的性能。使用Simpleperf可以识别CPU瓶颈、过多上下文切换、低效线程调度,以及仅通过代码审查可能无法发现的其他性能问题。该工具能够深入洞察内核之间的CPU使用模式、函数调用频率和执行时间、硬件性能计数器、进程调度行为和上下文切换模式等方面。 Simpleperf有两种工作模式:
  • 设备端模式—通过监控正在运行的应用程序和系统活动来收集实时性能数据。
  • 主机端模式—处理并展示先前在设备上收集的数据。
当您的应用程序出现意外掉帧、电池消耗太快、响应迟缓时,或怀疑CPU使用率高于预期时,可使用Simpleperf。

何时使用Simpleperf

先决条件

在开始之前,请确保:
  • 已安装Vega SDK
  • 已通过VDA连接Fire TV Stick设备
  • 您的应用程序已在此设备上构建并运行

设置Simpleperf

默认情况下,设备镜像中不包含Simpleperf。你需要将二进制文件从Vega SDK侧载到设备上。

步骤1:验证您的构建变体

确认您的设备使用user-external或user构建变体。两种版本都适用于Simpleperf,但user-external更为常见:
预期输出:
或者

步骤2:启用开发者模式

在设备上启用开发者模式:
有关开发者模式的更多详细信息,请参阅启用开发者模式。

步骤3:连接到您的设备并启动您的应用程序

打开与您的设备的shell连接:
使用vmsgr启动您的应用程序。例如:

步骤4:将Simpleperf二进制文件推送到设备

Simpleperf二进制文件位于SDK的以下路径:
将该文件推送到应用程序的临时文件夹:
输出示例:
该二进制文件现在可以在组件shell的tmp/scratchscratch文件夹中找到。

步骤5:访问组件shell

在您的主机上打开一个新终端。您需要另一个单独终端窗口,因为此时您的第一个终端正在运行步骤3中的vda shell会话。 连接到组件shell:
导航到您将二进制文件推送到的scratch目录:
现在,您可从这个目录运行Simpleperf命令。

查找您的应用程序的进程ID

在进行性能分析之前,请找到应用程序的进程ID (PID):
输出示例:
您可以通过PID、应用程序ID或pidof来指定您的应用程序:

列出可用事件

使用simpleperf list命令查看您的设备支持哪些事件:
其他筛选选项包括:
  • cache—硬件缓存事件
  • raw—原始CPU PMU事件
  • tracepoint—追踪点事件
  • cs-etm—CoreSight ETM指令跟踪事件
  • pmu—特定于系统的PMU事件
要查看设备支持的功能:
硬件事件输出示例:
软件事件输出示例:
在运行simpleperf stat和simpleperf record命令时,所有列出的事件均可配合-e选项使用。

使用stat功能收集性能统计数据

simpleperf stat收集CPU事件的聚合性能统计信息。此模式可提供硬件和软件事件的简要摘要,且不会产生详细采样数据带来的额外开销,适用于快速性能评估以及优化效果的A/B测试。
输出示例:

解读stat结果

请参考以下说明来解读输出: 要查看所有可用选项,请运行simpleperf help stat。

记录详细性能数据

使用simpleperf record,通过按预定义的时间间隔对CPU事件进行采样,收集深度的CPU性能指标。所有记录的数据均存储在perf.data文件中,以供后续分析。 事件的作用域仅限于监控用户空间(:u)或仅限于内核监控内核空间(:k)。对于大多数Vega应用程序的性能分析,请使用用户空间监控。
要查看所有可用选项,请运行simpleperf help record。

将性能数据传输到您的主机

性能数据文件存储在组件shell的/scratch目录中。要检索这些文件,请在主机上(组件shell之外)打开一个终端,并运行:

使用报告分析性能数据

在你的主机上使用simpleperf report命令来分析收集到的perf.data文件。请使用SDK中提供的主机版Simpleperf,其路径为:
请将替换为你已安装的SDK版本号(例如0.23.6323)。
输出示例:
要查看所有可用选项,请运行simpleperf help report。

其他命令

Simpleperf包含另外一些用于特殊性能分析需求的命令: 要查看所有子命令及其选项:

已知限制

Simpleperf依赖perf_event_paranoid内核参数来确定其操作权限。在Vega OS上,此值默认设为2,出于安全原因会限制部分分析功能。 对于启用了user-external构建变体版本和开发者模式的设备,此值会自动调整为1,从而可以进行更全面的分析。但是,非特权用户仍然受到以下限制:
  • 无法分析内核空间事件
  • 无法访问硬件PMU事件
  • 无法分析其他用户的进程
  • 无法收集原始跟踪点事件
  • 无法访问内核调用图
  • 无法收集内核模态堆栈跟踪

最佳实践

数据收集

  • 务必指定持续时间,或使用受控终止。
  • 使用适当的采样频率。
  • 在性能分析期间注意观察系统负载。

事件选择

  • 从基本事件(cpu-cycles、instructions)开始。
  • 避免同时监控过多的硬件事件。
  • 考虑目标设备的硬件限制。

报告分析

  • 比较多次运行结果,确保结果的一致性。
  • 使用适当的筛选条件来缩小结果范围。
  • 务必检查是否有丢失的采样。

资源管理

  • 清理旧的perf.data文件,释放设备存储空间。
  • 通过限制采样频率,来控制CPU开销。

示例:诊断滚动时的掉帧情况

本演练介绍如何使用Simpleperf来调查应用程序在滚动浏览内容列表时丢帧的问题。 1.使用stat确认问题:
如果你发现context-switches次数过高(>500次/秒),或者cache-misses次数相对于cpu-cycles数偏高,则很可能存在值得调查的性能问题。 2.在有问题的交互期间记录调用图:
在10秒的记录窗口内,滚动浏览内容列表。 3.提取数据并在主机上进行分析:
4.确定瓶颈所在: 查找Overhead占比较高的函数。例如:
这说明35%的CPU时间消耗在Hermes JavaScript执行上,22%消耗在React的影子树提交上,可见您的滚动处理程序每帧执行了过多的JavaScript工作。 5.修复并验证: 优化后(例如,在滚动处理程序中存储昂贵的计算结果),重新运行相同的stat命令,确认各指标有所改善。

相关主题


最后修改于 2026年10月26日