添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
性能工具-内存篇

性能工具-内存篇

1 年前

由于工作需要,花费N长时间精力来把市面上能试的方法都试了一遍。对内存,profile和骁龙分析器的使用有了一些理解。记录一下使用笔记,以备查阅。文章将分为ue4性能工具,GPU厂商性能工具,开发者工具功能及其他四个部分。

1.ue4性能工具

1.1Memreport

使用方法很简单,统计不全,部分Unknown内存会有遗漏。手机上游戏控制台输入memreport -full可得到完整版内存分析报告,只输入memory得简略版。

得到的文件路径在:\手机内部存储设备\Android\data\com.gongsi.xiangmu\files\UE4Game\xiangmu\xiangmu\Saved\Profiling\MemReports

1.2LLM(Low Level Memory Tracker)

LLM(Low Level Memory Tracker) 是从 4.18 开始引入的新的内存统计工具,比 memreport 统计数据更加详细精确,但又不会像 MallocProfiler 那样有很大的本身开销。虚幻4.27对LLM有新的改动,推荐使用。

详解:通过插入各种tag来将所有待统计的内存划归到某个tag下。维护一个tag的堆栈,将fmalloc到的内存统计到当前栈顶的tag下。Llm在最底层hook了fmalloc的每一个统计,如果没有任何tag在当前栈中,那么所有内存计入在untagged这个tag下,如果在代码中插入一个基于scoped的tag,就可以把这个scope下的内存计入到该tag下。通过LLm不会遗漏任何Fmalloc分配的内存。

Android 命令行

要启动 LLM

首先新建一个 UE4CommandLine.txt,内容如下。放在/sdcard//UE4Game/YourProject目录下

                 ../../../YourProject/YourProject.uproject -LLM -LLMCSV               

然后新建一个 PushCommandLine.bat ,内容如下

 %ANDROID_HOME%\platform-tools\adb.exe shell mkdir -p /sdcard/UE4Game/YourProject 
 %ANDROID_HOME%\platform-tools\adb.exe push UE4CommandLine.txt /sdcard/UE4Game/YourProject/UE4CommandLine.txt               

最后将这两个文件放入手机根目录后执行PushCommandLine.bat

手机上游戏控制台输入-LLM和-LLMCSV取得内存数据

得到的文件路径在:\手机内部存储设备\Android\data\com.gongsi.xiangmu\files\UE4Game\xiangmu\xiangmu\Saved\Profiling\LLM

可将csv文件用excel排序注释找出内存占用最大的部分,针对性优化。

参考: UE4 LLM工具 - 可可西 - 博客园 (cnblogs.com)

UE4 Low Level Memory Tracker 使用 - 知乎 (zhihu.com)

1.3Profile 工具

需要修改相关参数但是只能在小型游戏中(第三人称模板亲测可得)测试,工具本身占用非常高 。大型项目不可用,用就是卡死。中大型项目可以直接跳过这个了。

具体用法参见 UE4内存Profiler - 知乎 (zhihu.com)

1.4unreal Insight

没错它有内存信息,虚幻引擎移动端团队正在研究许多安卓的其它领域,例如Unreal Insights。

参考: Unreal Insights介绍 | 虚幻引擎文档 (unrealengine.com)

UE移动端负责人:虚幻引擎如何让手游实现主机画质?_设备 (sohu.com)

2GPU厂商性能工具

2.1Snapdragon Profiler

这里用的高通家性能分析软件,手机开发者模式后即插即用非常方便,可以用来对比竞品的相关性能参数,以给自家游戏一个优化参考指标(毕竟优化是无止境的,优化到一定程度边际效益递减没有性价比)。顺便一提发热测温:用这个工具测温很方便,相比于RenderDoc更便捷。

①Realtime可以查看游戏不同阶段的变化,定位到瓶颈和高峰位置。

②Snapshot精确到一帧,信息详实,需有OpenGL和图形学的基础,可以做技术性能分析和逆向。

可以将相关数据导出至表格。找出Clocks最多的几个DrawCall,分析该段DrawCall,我们可以找出游戏内存读写的瓶颈,重新安排纹理贴图,顶点属性等数据的读写顺序,保证DrawCall的内存读写峰值匹配手机硬件的性能。

参见: 移动端平台的profiler工具调研 - 知乎 (zhihu.com)

UE4项目《和平精英》渲染技术浅析-Magesbox

2.2高通 GPU

可以通过命令 adb shell cat /d/kgsl/proc/pid/mem 获取到详细的 Graphics 内存分配记录文件,从该文件中可以分析某个进程 Textur、 buffer 、comman 等的内存占用。

3.开发者工具

3.1Android Studio

参考: 使用内存性能分析器查看应用的内存使用情况 | Android 开发者 | Android Developers (google.cn)

Android Studio:利用 Profiler 来监控 CPU、内存和网络 - 简书 (jianshu.com)

4.其他:

1.2D美术资源

美术2D资源占用的内存大小与图片的尺寸和像素格式相关,与文件格式没关系。所以PNG格式转为JPG只是压缩了文件大小,但并不能降低内存开销!也不能减少包体大小!

参考: 移动游戏性能优化通用技法 - 0向往0 - 博客园 (cnblogs.com)

2.相关文档

UE手游在iOS平台运行时内存占用太高?试试这样着手优化 - 知乎 (zhihu.com)

低级内存跟踪器 | 虚幻引擎文档 (unrealengine.com)

UE性能分析:内存优化 - 云+社区 - 腾讯云 (tencent.com)

UE手游研发中,如何做好Android内存优化? | indienova 独立游戏

堡垒之夜的移动端优化实践(Vulkan与OpenGL ES) - 知乎 (zhihu.com)

悠米高级技术总监韩天扬:UE4手游如何进行性能优化? | 游戏大观 | GameLook.com.cn

剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite) - 0向往0 - 博客园 (cnblogs.com)

内存屏障(Memory Barrier)究竟是个什么鬼? - 知乎 (zhihu.com)

发布于 2021-12-31 20:43