- 设备端模式—通过监控正在运行的应用程序和系统活动来收集实时性能数据。
- 主机端模式—处理并展示先前在设备上收集的数据。
何时使用Simpleperf
先决条件
在开始之前,请确保:- 已安装Vega SDK
- 已通过VDA连接Fire TV Stick设备
- 您的应用程序已在此设备上构建并运行
设置Simpleperf
默认情况下,设备镜像中不包含Simpleperf。你需要将二进制文件从Vega SDK侧载到设备上。步骤1:验证您的构建变体
确认您的设备使用user-external或user构建变体。两种版本都适用于Simpleperf,但user-external更为常见:
步骤2:启用开发者模式
在设备上启用开发者模式:步骤3:连接到您的设备并启动您的应用程序
打开与您的设备的shell连接:vmsgr启动您的应用程序。例如:
步骤4:将Simpleperf二进制文件推送到设备
在SDK中找到Simpleperf二进制文件,位置为:tmp/scratchscratch文件夹中找到。
步骤5:访问组件shell
在您的主机上打开一个新终端。您需要另一个单独终端窗口,因为此时您的第一个终端正在运行步骤3中的vda shell会话。
连接到组件shell:
查找您的应用程序的进程ID
在进行性能分析之前,请找到应用程序的进程ID (PID):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性能指标。Simpleperf将所有记录的数据存储在perf.data文件中,以供后续分析。
事件的作用域仅限于监控用户空间(:u)或仅限于内核监控内核空间(:k)。对于大多数Vega应用程序的性能分析,请使用用户空间监控。
simpleperf help record。
将性能数据传输到您的主机
组件shell会将性能数据文件存储在/scratch目录中。要检索这些文件,请在主机上(组件shell之外)打开一个终端,并运行:
使用报告分析性能数据
在你的主机上使用simpleperf report命令来分析收集到的perf.data文件。请使用SDK中提供的主机版Simpleperf,其路径为:
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.在有问题的交互期间记录调用图:
Overhead占比较高的函数。例如:

