CPU 剖析

自动关联目录:CPU 剖析

1. 定位

CPU 侧的成本分在两条线程上:游戏线程(Game)与渲染线程(Draw)。stat unit 把它们分开显示,所以排查的第一步永远是分清是哪一条。

一句话定位:Game 高 = 你的逻辑/动画/物理;Draw 高 = 剔除与命令生成。两者的优化手段完全不同。

详见 管线与渲染线程。

2. 快速分层

命令看什么
stat unitGame / Draw / GPU / RHIT 四项时间
stat unitgraph同上,图形化(看抖动比数字直观)
stat game游戏线程细分
stat sceneupdate场景更新(剔除、变换推送)
stat scenerendering场景渲染各阶段
stat anim动画(见 动画性能)
stat ai / EQS / 感知AI 相关(见 AI 调试与性能)
stat physics物理(见 碰撞与查询)
stat streaming流式加载(见 资源加载)
stat rhidraw call、三角形、RT 数量

3. Game 线程高的常见原因

原因定位
Tick 过多 / 过重stat game;检查 bCanEverTick(见 Actor 生命周期)
动画stat anim(见 动画性能)
AIstat ai;感知与行为树
物理stat physics
蓝图逻辑Insights 里的蓝图耗时
UISlate/UMG 重建(见 UI 分支)
GCstat gc(见 GC 与对象生命周期)
加载stat streaming

4. Draw 线程高的常见原因

原因定位
可见性剔除stat sceneupdate
大量动态物体每帧重建 Scene Proxy(MarkRenderStateDirty,见 管线与渲染线程)
draw call 过多stat rhi
代理创建被 PSO 阻塞见 PSO 预缓存

5. 工具

工具用途
Unreal Insights首选:CPU 时序、线程、任务,支持自定义打点
stat 系列快速分层
平台工具Windows: PIX / VTune;Android: Simpleperf、Android Studio;iOS: Xcode Instruments
项目实测手册UE性能优化工具 的 CPU 章节(Unreal Insight / Unreal Profiler / Simpleperf / Android Studio / Perfetto / CacheSim / Arm Streamline / XCode Timeprofiler + 案例)

Unreal Insights 是 UE 侧的第一工具:它能看到任务级、线程级的真实耗时,而 stat 只是聚合值。

Insights 用法要点

  • 加 channel 抓取(如 trace.enable counters,vsm 看 VSM 统计)
  • 自定义打点:TRACE_CPUPROFILER_EVENT_SCOPE
  • 看阻塞栈——"时间花在哪"和"为什么在等"是两个问题

6. 代价与权衡

手段收益代价注意
stat unit零成本、立刻分层只到线程粒度必须先做
Unreal Insights精确到任务抓取有开销、数据量大正式分析用
平台工具(VTune/Simpleperf)精确到函数与调用栈学习成本深入某一段时用
逐项关闭对比定位直接需要能开关最常用的土办法

7. 踩坑与排查

坑现象怎么验证
用 GPU 思路优化 Game 线程白费力气stat unit 先分清
只看 stat 聚合值找不到具体函数用 Insights
在编辑器测与打包差异大测打包版本
忘了 GC 尖峰周期性卡顿stat gc(见 GC 篇)
大量 TickGame 高关掉不需要的 Tick
代理频繁重建Draw 高检查 MarkRenderStateDirty 调用频率
PSO 未就绪阻塞Draw 高见 PSO 篇
开发机核心多掩盖问题-corelimit=8

8. 排查顺序

1. stat unit → Game / Draw / GPU
2. Game 高 → stat game → anim/ai/physics/蓝图/UI/GC 逐项关掉对比
3. Draw 高 → stat sceneupdate + stat rhi → 剔除 / draw call / 代理重建 / PSO
4. 仍不清楚 → Unreal Insights 看阻塞栈与任务耗时
5. 需要函数级 → 平台工具(Simpleperf / VTune / Xcode)

参考