UE4 性能
概述[*]Unreal Insights 抓取到的性能数据,依赖一套名为 Trace 的框架,对其中的 Trace Channel 进行配置,能帮助我们专注于分析某些类型的性能开销,屏蔽不必要的信息干扰。这是本文将讨论的第一个问题
[*]我们可能常常希望能够在不构建版本的情况下,快速对 Editor 进行性能分析,然而 Unreal Insights 对 Editor 信息的捕获机制在 4.25 以后出现了变化,本文的第二个话题,将简单描述此类场景下应如何实践
[*]第三个话题,将围绕 Unreal Insights 的界面布局,对各子区域进行说明和操作演示
[*]最后,结合上一篇对 Unreal Frontend Profiler 的介绍,简单对比一下两类工具的特点
Trace
概述
[*]Trace 是一套日志框架(logging framework),其主要目的是为了便于描述进程中出现的高频事件,并生成一系列的事件流(stream of events)作为性能分析的凭据。Unreal Insights 是对 Trace 框架的一大应用
Trace is a structured logging framework for tracing instrumentation events from a running process. The framework is designed to produce a stream of high-frequency traced events that is self-describing, easily consumed, and easily shared.Unreal Insights is Trace's primary customer.
[*]Trace Channels 是 Trace 框架中为了便于用户专注于某一类型的事件流而设计的机制,用户可以只打开自己感兴趣的 channel,从而屏蔽掉不相关的事件流信息
Channels
[*]在启动命令行中添加 -trace 参数,指定要开启的 channel,使相应信息能在 Unreal Insights 中被显示
[*]e.g. -trace=log,frame,cpu,gpu,memory,loadtime,...
[*]在添加了 -trace=cpu 的情况下,推荐添加 -statnamedevents,可以更详细地显示 CPU 侧(Game Thread + Render Thread)的开销情况
[*]如果不加 -trace 参数,以下 channel 会默认被开启:cpu,frames,log, bookmarks
[*]默认开启的 channel 可以在 Engine/Config/BaseEngine.ini 中进行配置
[*]
Default=cpu,frame,log,bookmark
[*]自 4.25 版本起,-cpuprofiletrace, -loadtimetrace, -filetrace 参数已失效
[*]使用 trace.stop 暂停对所有 channel 信息的追踪,trace.start 恢复追踪
检测 Editor 性能
[*]自 4.25 版本起,Unreal Insights 不会自动连接 Editor 会话(Session)
The editor connects by default with its internal Trace Store, which means it does NOT connect with standalone Unreal Insights tool. The reason is to support the workflow for the new Animation Insights plugin, which is a version of Unreal Insights embedded into the editor and customized as an animation debugging tool
[*]如何使用 Unreal Insights 检测 Editor 下的性能变化
[*]首先开启 Unreal Insights
[*]对工程的启动命令行添加参数: -tracehost=<host> -trace
[*]例如,希望 本地 的 Unreal Insights 能够检测到 Editor 会话,则在工程的启动命令中添加参数:-tracehost=127.0.0.1 -trace
[*]命令示例:&#34;xxx\Engine\Binaries\Win64\UE4Editor.exe&#34; &#34;xxx.uproject&#34; -game -WINDOWED -ResX=1280 -ResY=720 -nosound -trace=cpu,gpu,frame,bookmark,memory
[*]前 2 个参数分别为引擎路径与项目工程路径,记得加上双引号
[*]-ResX -RexY 表示启动游戏时使用的分辨率大小
[*]NOTE: 用此方式连接上 Unreal Insights 后,Editor 一启动,就会在 <host> 机器上生成 .utrace 文件,并不停朝这个文件写入信息,直至 Editor 关闭,或手动执行 trace.stop 指令
界面
概述
[*]在 Unreal Insights 中加载完某个 Session 后,最多 可能出现 4 个页签,分别是 Session, Timing Insights, Asset Loading Insights 和 Memory Insights
[*]其中 Session 面板显示的是当前会话的基本信息;Timing Insights 显示与性能分析相关的核心信息;其他二者只有在加入了特殊参数时才会显示
Timing Insights
[*]Overview
[*]Time Insights 可以详细地展现某一帧在 CPU 和 GPU 侧的开销情况,是显示信息最全面、也最需要关注的窗口
[*]如图所示,Timing Insights 整个界面布局可拆分为以下 5 个部分:Frames Panel(1), Timing Panel(2), Log Panel(3), Timers and Counters tabs(4), Callers and Callees Panels(5)
[*]Frames Panel
[*]将游戏内每一帧的时延信息可视化为柱状图序列,对应的 bar 越高,表明此帧耗时越长
[*]单击某一帧后,Timing panel 上将自动选取当前帧对应的时长区间
[*]Timing Panel
[*]以微秒(μs)级的精度显示单个 trace event 的耗时情况
[*]Time panel 顶部带刻度的区域称作 Time Ruler,可通过拖拽标定时间范围
[*]常用操作
[*]单击选中某个 trace event 后按回车(或者按住 Ctrl + 双击该条目),该事件所对应的时长区间将被自动框定
[*]选中某个 trace event 后按 F,可快速将视角聚焦于此条目(与编辑器内按 F 类似)
[*]双击某个 trace event 可以使所有其他此类型的 event 高亮显示,双击 空白区域 退出高亮状态
[*]trace event 垂直方向上的 stacks 显示出了相关的调用堆栈
[*]Log Panel
[*]在使用 -trace=log 的情况下才会显示 游戏逻辑内的 log 信息
[*]支持搜索关键字
[*]点击任意一条 log,它所对应的时间节点将显示在 Timing Panel 上
[*]Timers Tab
[*]列出在 Timing Panel 所标定的时长区间内,所有 events 的耗时情况
[*]可根据数值大小进行升/降序排列,也可根据 event 的名称、类型进行分组观察
[*]Counters Tab
[*]列出在 Timing Panel 所标定的时长区间内,所有 stat 指标的增长情况
[*]可选的排列方式与 Timers Tab 相同
[*]Callers & Callees
[*]显示当前所选 event 的调用关系
[*]Callers 显示的是历经了哪些函数调用,才到达了当前所选的 event
[*]Callees 显示的是进入所选 event 后,又继续向下调用了哪些函数
[*]类似于 Unreal Frontend Profiler 中的 Function Details 区域
[*]常见操作流程
在 Frames panel 选取某一帧((Frames panel 以帧为单位),或在 Timing panel 中选取一段时长(Timing panel 以秒为单位), 在 Timers / Counters 查看这段时间内累积的性能消耗数值,在 Callers / Callees 查看各指令的调用者(Callers)和被调用者(Callees)
Asset Loading Insights
[*]使用 -trace=loadtime 时启用
[*]其实是精简版的 Timing Insights ,默认只显示 与资源加载相关 的 trace events(比如 GPU Thread 相关的信息在此窗口是默认不可见的),使我们在单独分析资源加载开销时能够免受其余信息的干扰
[*]操作逻辑与 Timing Insights 窗口完全相同
Memory Insights
[*]使用 -trace=memory 时启用
[*]从多个角度对比展示游戏在内存方面的使用情况
[*]默认会将 Meshes, Textures, Physics, Audio 分别作为独立的轨道,显示其对内存的占用
与 Profiler 的对比
[*]Profiler 只能记录 CPU 侧的开销信息;Unreal Insights 对 CPU, GPU 的信息都能捕获到
[*]Profiler 能够直接从 Editor 内部打开并检测 Editor 下的性能;Unreal Insights 只能作为独立应用打开,且必须通过添加启动参数才能统计到 Editor 的性能数据
[*]Profiler 对 Game Thread 的瓶颈定位分析粒度更小,能精确定位到开销较大的某个函数
[*]Unreal Insights 作为应用程序的性能更优,能更大程度上减少在本地进行性能检测时造成的额外影响
[*]Unreal Insights 支持远程监测,彻底消除 Profiling 本身对性能检测结果的影响
[*]Unreal Insights 在信息可视化上明显优于 Profiler,有更加具有辨识度的色彩、便捷的操作和良好的交互体验
参考
Collect, Analyze and Visualize with Unreal Insights
Unreal Insights reference
Unreal Insights | Live from HQ | Inside Unreal
Trace
页:
[1]