鸿蒙中CPU活动分析:CPU分析
1 CPU分析的核心概念与重要性
CPU活动分析(CPU Profiling)是性能优化的核心手段,它通过测量代码执行时间,帮助开发者定位性能瓶颈。应用的响应速度直接影响用户体验,过长的加载时间或卡顿会导致用户流失
1.1 为什么CPU分析至关重要
在不同性能维度的敏感度中,CPU性能直接影响:
-
应用启动速度和响应时间
-
界面渲染效率和帧率稳定性
-
设备能耗表现和电池寿命
-
分布式操作的协同效率
2 前端领域的CPU分析实践
在Web前端环境中,CPU分析主要关注JavaScript执行效率、渲染性能以及资源加载策略。
2.1 浏览器渲染流程与CPU消耗
浏览器渲染过程可以简化为以下流程
每个阶段都会消耗CPU资源,其中布局和绘制是最耗时的操作
2.2 前端CPU分析工具
前端开发者主要使用以下工具进行CPU分析:
工具平台 | 工具名称 | 主要特点 |
---|---|---|
Web | Chrome DevTools | 提供Network、Performance、Main等泳道分析,擅长分析资源加载、JS执行、渲染性能 |
Android | Android Profiler | 集成于Android Studio,可监控CPU、内存、网络实时状态,支持方法级CPU跟踪 |
HarmonyOS | DevEco Profiler | 鸿蒙自带,提供Time、Allocation、Network等分析模板 |
3.2 DevEco Profiler的CPU分析能力
DevEco Profiler是鸿蒙开发的性能分析神器,其Time分析模板可以1:
-
录制应用运行时的CPU占用和函数调用栈
-
可视化展示:以火焰图(Flame Chart)或列表形式展示函数耗时,直观看到"最重"的调用栈
-
精准定位:支持跳转到高耗时对应的源码位置,极大简化了排查流程
DevEco Profiler支持多种分析泳道1:
-
User Trace:用户自定义打点泳道,基于时间轴展示当前时段内用户使用hiTraceMeter接口自定义的打点任务的具体运行情况
-
ArkTS Callstack:方舟运行时函数调用泳道,基于时间轴展示CPU使用率和虚拟机的执行状态,以及当前调用栈名称和调用类型
-
Callstack:ArkTS和Native混合函数调用泳道。基于时间轴展示各线程的CPU使用率,以及在一段时间内的混合调用栈
-
Energy:展示应用能耗的构成,结合应用生命周期,识别潜在能耗问题
3 鸿蒙应用CPU性能分析实践
3.3.1 创建Time分析任务
在DevEco Profiler中创建Time任务并录制相关数据,操作方法如下1:
-
安装应用时在模块级build-profile.json5文件中,增加strip字段并赋值为false(保留符号表信息)
-
创建Time任务并录制相关数据
-
在会话区选择Open File,可以导入历史数据进行分析
3.3.2 分析CPU性能数据
在"ArkTS Callstack"泳道和"ArkTS Callstack"子泳道上长按鼠标左键并拖拽,框选要分析的时间段后1:
-
Details区域会显示所选时间段内的函数栈耗时分布情况
-
Heaviest Stack区域会展示出"Details"区域选择节点所处的耗时最长的完整调用栈
-
函数栈耗时分布有三种展现方式:Call Tree方式、火焰图形式、冰锥图形式
开发者可使用DevEco Profiler的CPU场景调优分析,在应用或元服务运行时,实时显示CPU使用率和线程的运行状态,了解指定时间段内的CPU资源消耗情况,查看系统的关键打点(例如图形系统打点、应用服务框架打点等),进行更具针对性的优化。
查看各CPU使用情况
- 创建CPU分析任务并录制相关数据,操作方法可参考性能问题定位:深度录制,或在会话区选择Open File,导入历史数据。
CPU分析任务支持在录制前单击
指定要录制的泳道。
- “CPU Core”泳道显示当前选择调优应用或元服务的CPU的使用率。
可在“CPU Core”右侧的下拉列表中选择显示内容:
- Slice and Frequency:每个子泳道包含时间片和频率两部分,时间片显示占用该CPU核心的进程、线程。
- Usage and Frequency:每个子泳道包含CPU核心使用率和频率两部分。
框选主泳道,可对所选时间段内的CPU使用情况进行汇总统计,可查询多时间片的进程维度统计信息、线程维度状态统计信息、线程状态统计信息,以及所有时间片的数据统计信息。
- 将其展开,子泳道显示各CPU核心调度信息、各CPU核心频率信息以及各CPU核心使用率信息。
说明
将鼠标悬浮在某时间片上时,能够置灰非同进程时间片,通过此方法可以确定时间片的关联性。
- 指定时间片,查看统计信息。
- 单击某个运行状态的时间片,可查询这个时间片的基本运行信息及调度时延信息。
- 框选多个时间片,则可查询多时间片的进程维度统计信息以及所有时间片的数据统计信息。
- 开启"View Integrated Scheduling Chain"后,点击CPU时间片泳道的节点可以查看某一个CPU运行线程的完整唤醒调度链。
- 单击某个运行状态的时间片,可查询这个时间片的基本运行信息及调度时延信息。
说明
- 在任务分析窗口,可以通过“Ctrl+鼠标滚轮”缩放时间轴,通过“Shift+鼠标滚轮”左右移动时间轴。或使用快捷键W/S放大或缩小时间轴,使用A键/D键可以左右移动时间轴。
- 将鼠标悬停在泳道任意位置,可以通过M键添加单点时间标签。
- 鼠标框选要关注的时间段,可以通过“Shift+M”添加时间段时间标签。
- 在任务分析窗口,可以通过“Ctrl+, ”向前选中单点时间标签,通过“Ctrl+. ”向后选中单点时间标签。
- 在任务分析窗口,可以通过“Ctrl+[ ”向前选中时间段时间标签,通过“Ctrl+]”向后选中时间段时间标签。
- CPU分析支持能耗分析,请参见能耗分析。
查询进程详情
进程泳道显示进程对各CPU核心的占用情况。展开进程泳道,显示进程下的线程列表以及线程的运行状态。
- 单击运行状态的时间片,显示线程在该片段的运行详情,包括起始时间、持续时长、运行状态、频率、线程优先级、所属进程、所属线程、上一运行状态、下一运行状态、唤醒线程,支持跳转到上个或者下个线程运行状态,支持跳转到唤醒线程状态等。
- 框选Thread泳道中多个运行状态的时间片,可查看此时间段内的不同运行状态的线程的统计信息,包括总耗时时长、最大耗时、最小耗时、平均耗时、处于当前状态的线程数量以及线程中的中载重载数据统计。
说明
中载重载数据每100ms做一次统计,24ms < Running时长 ≤ 48ms 记为中载,Running时长大于48ms记为重载。
- 框选应用进程Process主泳道,可查看此时间段内该进程下的线程并行度统计信息。并行度数据每100ms做一次统计,可以查看100ms内运行的总线程数量、各线程数并行的总时间和并行度。点选某一行,可以查看对应线程编号和运行时间段。
说明
并行度(Parallelism)取值范围是[1, cpu核数],数值越小代表并行度越低。
查看Trace详情
当存在Trace任务时,可在对应的线程泳道查看到当前线程已触发的Trace任务层叠图。选择待查询的Trace。
- 点选泳道中的Trace片段,可查看单个Trace详情,包括名称、所属进程、所属线程、起始时间、持续时长、深度等。
说明
- 如果用户对线程进行了自定义打点,在此处亦可查看到对应的User Trace打点信息。
- 从所在线程名称可分辨当前Trace的类型,系统Trace对应的线程名称为“线程名+线程号”,User Trace对应的线程名称为“打点任务名”。
- 框选多个Trace片段,可查看到Trace统计信息列表,包括Trace名称、此类Trace的总耗时、单个Trace的平均耗时、以及该时间段内该类Trace的触发次数等
结论
CPU活动分析是保障应用性能的关键实践。从前端浏览器到鸿蒙操作系统,开发者需要掌握不同平台的工具链和分析方法。鸿蒙系统提供了更为深入的CPU分析能力,特别是分布式场景下的性能调优工具。
有效的CPU性能优化需要遵循以下原则:
-
测量优先:基于数据而非直觉进行优化
-
全链路分析:从前端到原生层的完整调用栈分析
-
分布式考量:考虑多设备协同时的性能特性
-
持续监控:建立性能基线和持续监控机制
通过充分利用DevEco Profiler、SmartPerf-Host等工具,开发者可以精准定位CPU性能瓶颈,打造高性能的鸿蒙应用体验
华为开发者学堂