UE4中性能优化和检测工具

news2024/11/26 9:41:27

UE4中性能优化和检测工具合集

  • 简述
  • CPU
    • Unreal Insight
    • Unreal Profiler
    • Simpleperf
    • Android Studio
    • Perfetto
    • XCode Timeprofiler
    • Best Practice
  • GPU
    • Adreno GPU
    • Mali GPU
    • Android GPU Inspector (AGI)
  • 内存
    • 堆内存分析
      • Android Studio
      • LoliProfiler
      • UE5 Memory Insights
      • Unity Mono 内存
      • Memreport
      • RHI Memory
      • XCode Allocations
  • 功耗
    • 硬件方案
      • 电流计
    • 软件方案
      • Perfdog
      • Android 的 Snapdragon Profiler
      • Ios 的 Instruments
  • 包体
    • SizeMap
    • Unreal PakViewer
    • Custom Built Profiler With CI
  • 代码崩溃 & 稳定性
    • Address Santizer
    • StompAllocator
    • Vulkan

简述

总结UE4中性能优化工具合集,之前转过一篇LLM内存统计工具,非常详细,这里会总结全面,包括了CPU/GPU/内存/功耗/包体/代码稳定的各类工具,方便筛选使用

对于每一帧来说,执行顺序依次为:Game Thread → Draw Thread → GPU Thread
Game Thread 首先会对整个游戏世界进行逻辑层面的计算与模拟(e.g.Spawn 多少个新的 actor、每个 actor 在这一帧位于何处、角色移动、动画状态等等),所有这些信息会被输送到 Draw Thread;
Draw Thread(也叫 Rendering Thread) 会根据这些信息,剔除(Culling)掉不需要显示的部分(e.g. 处于屏幕外的物体),接着创建一个列表,其中包含了渲染每个物体必备的关键信息(e.g. 如何被着色、映射哪些纹理等等),再将这个列表输送给 GPU Thread;
GPU Thread 在获取了这个列表之后,会计算出每个像素最终需要如何被渲染在屏幕上,形成这一帧的画面。

CPU

Game Thread 造成的开销,可以使用stat game显示 Tick 的耗时情况 ;dumpticks:可将所有正在 tick 的 actor 打印到 log 中

Unreal Insight

Unreal Insight在 Unreal Engine 4.24.3版本中开始支持移动平台性能数据录取。数据直接写入文件,GUI工具采集结束后离线解析数据文件。(平时使用较多)

优势:可长时间录制数据,数据在时间轴上以进程调度的形式展示,比较容易分析Game、RenderThread与WorkerThread的调度情况,从整体上结合时间连贯性对CPU瓶颈进行初步的定位。也可用于分析有规律的卡顿掉帧的情况。

劣势:所记录的调用堆栈较浅(可手动打点),较难定位到具体出问题的代码,人工分析需要时间与经验
在这里插入图片描述

Unreal Profiler

UE5已删除此模块

(平时使用较多)Unreal Engine 中的 Profiler则是分析CPU端性能情况的一个老工具,与Unreal Insights相比它缺少了线程间调度情况的数据,优点在于其记录的调用堆栈深度较深,可与Insights结合使用 UE4引擎窗口中菜单DeveloperTools下SessionFrontend界面即为Profiler所在的窗口 可通过两种方法抓取数据:

启动程序时增加参数:-messaging

游戏中使用命令: stat startfile, stat stopfile

/sdcard/UE4Game/YourProject/UE4CommandLine.txt
../../../YourProject/YourProject.uproject -messaging
# 数据存放于
/sdcard/UE4Game/FPSDemo/FPSDemo/Saved/Profiling/UnrealStats

在这里插入图片描述

Simpleperf

Simpleperf可录制很深的CPU调用堆栈,可用于详细分析问题时间内的CPU代码执行情况,其将数据聚合,输出类似于Instrument TimeProfiler的形式,可以看到不同函数在一段时间内的贡献、占比情况,及调用次数,方便对其进行更有针对性的优化。但这种聚合模式没有单帧的概念,主要用于宏观统计。因此可以与Profiler、Insights等工具结合使用。建议使用Test包进行数据分析,避免Development版本额外代码所造成的性能压力影响真实数据

Android Studio

使用Android Studio的 ProfileAPK 功能,即可较为自动的生成性能数据
在这里插入图片描述

Perfetto

Perfetto可以拿到simpleperf、systrace等数据

可用于分析APP、系统整体CPU调度,渲染节奏等问题

XCode Timeprofiler

XCode Timeprofiler 与Simpleperf原理相同的CPU性能分析工具,功能强大

Best Practice

粗粒度工具:FramePro、UnrealInsight 用于开发期CI暴漏明显问题

发现问题后,使用细粒度工具进行深度分析:Simpleperf、Streamline、TimeProfiler

建议使用Test包,排除Cache、冗余代码、Profiler本身对性能的影响

尝试:离线计算、ParallelFor、异步化、SOA化等方案

并使用CacheSim、Streamline进行 Cache Miss 分析,压榨出最后的水分

GPU

如果是在PC平台上可以使用ProfileGPU命令或者使用快捷键Ctrl+Shift+,影响GPU瓶颈最主要的是BasePass和PrePass

现代Mobile GPU通常使用 TBR、TBDR 硬件架构
在这里插入图片描述
在有限的功耗下提供尽可能多的性能空间
除了控制 运算负载、动态分支、全精度运算 等天然GPU不友好的指标之外
Mobile GPU因其On-chip Memory较小的原因
需要严格控制寄存器数量,避免Register Spill产生额外IO带宽

Adreno GPU

Adreno GPU
使用Snapdragon Profiler进行Counter数据抓取 提供python脚本进行Counter数据汇总与分类

Mali GPU

Android GPU Inspector (AGI)

Android GPU Inspector (AGI)

在这里插入图片描述
系统性能分析
执行系统级跟踪和分析,以深入了解游戏和系统服务使用的资源,例如 GPU、CPU、内存、电池和 GPU 计数器。支持 Qualcomm® AdrenoTM、Arm® MaliTM 和 Imagination® PowerVRTM GPU
帧性能分析
从单个应用帧捕获跟踪记录,然后对游戏的 GPU 使用情况执行深入分析。其中包括对 Vulkan 和 OpenGL ES API 调用进行更深入的介绍和分析

内存

Android、iOS内存管理核心:

  1. 分页(Paging)
  2. 内存映射(Memory Mapping)

CPU & GPU 公用一套内存硬件(GPU有少量OnChip Memory)
当内存不足时触发分页(Page Out)释放内存:触发 内存压缩; 删除Clean Page; 当剩余内存低于阈值,系统将开始杀进程

堆内存分析

Android Studio

Android Studio 支持 Native(C++) 堆内存分配的分析工作
在这里插入图片描述

Perfetto组件可使用Heapperfd进行Native内存分析工作

LoliProfiler

LoliProfiler支持整合至 UE、Unity 引擎分析 Native(C++)内存
在这里插入图片描述

UE5 Memory Insights

UE5 Memory Insights

在这里插入图片描述

Unity Mono 内存

Mono虚拟机(IL2CPP)提供内存快照接口

UnityMemPerf用C++&QT完美还原了Unity IL2CPP内存工具PerfAssist的体验,无需Unity、无需SDK,连接USB拉起APP即可抓取托管内存快照,进行内存分析、快照Diff

Memreport

提供 UE4 Memreport 数据解析、Diff与可视化功能:(经常使用)

RHI Memory

可针对性的对 UE Vulkan、GL、Metal RHI层内存申请接口结合 FRHIResource 的DebugName

实现一套数据Dump机制,以链接 RHI 内存与 UE RHI资源,深入分析RHI内存

XCode Allocations

类似 Simpleperf 在 iOS 可查看堆内存分配数据的工具
iOS Memory Deep Dive

功耗

手机硬件集成度高,重度手游发热明显,发热与功耗的关系越来越受到开发者的重视
功耗统计难点:

  1. 硬件集成度高,被动散热上限低
  2. 难以测量单模块功耗
  3. 静态、动态功耗叠加
  4. 能耗和利用率、频率呈线性关系,和电压呈二次关系
    综合导致:功耗数据获取难度大,功耗数据体现非线性,数据分析难度也很大

优化建议:均衡CPU利用率;多线程使用;空间换时间;注意屏幕耗电;实时查询响应能耗发热;与硬件厂商合作

硬件方案

电流计

设备充满电(100%),将电流计与充电头连接。
在系统的蓝牙管理面板中查找设备,配对连接并且获取其Mac地址记下。

软件方案

Perfdog

支持基于驱动上报的功耗数据获取, iOS直接解析了XCode Energy的数据

Android 的 Snapdragon Profiler

Snapdragon Profiler
使用实时指标识别潜在问题区域,从 150 多个硬件性能计数器中进行选择
分析跨 CPU、GPU 和 DSP* 的系统、图形和 ML 工作负载
使用 Snapshot 捕获捕获和调试图形工作负载,从而实现更深入的帧和着色器分析
对任何 DirectX、Vulkan、OpenCL 和 OpenGL ES 工作负载进行详细分析
在这里插入图片描述

Ios 的 Instruments

Instruments 是 Xcode 的一个工具集,为我们提供了强大的程序性能分析及测试能力。可以进行CPU 性能测试、图形性能测试、内存性能测试等

包体

包体的大小、首包资源的大小对于玩家有较大影响

尽可能减少包体大小,也是开发者需要关注的重点问题

SizeMap

SizeMap介绍,可以将本地的pak包加载, SizeMap以TreeMap图的形式将资源分类,我们可以点击任意分类进入更深的层级来分析数据
在这里插入图片描述

Unreal PakViewer

Unreal PakViewer

Custom Built Profiler With CI

Asset Registry 中包含资源的 Meta 信息(AssetRegistrySearchable),可在Cook & Package 结束后使用 Commandlet 分析此信息

代码崩溃 & 稳定性

可通过addr2line翻译崩溃符号至具体代码行号

# android-ndk-r21d\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe
addr2line.exe -f -C -e path/to/libUE4.so 0x009988ff

Address Santizer

Android、iOS平台原生支持 ASan,UE也已整合至引擎中
测试ASan包,提前发现内存越界、Use-after-free等常见内存问题
安卓使用ASan检查UE4内存问题

StompAllocator

Windows平台也支持ASan,不行的是至少4.27版本的引擎仍旧无法正常使用ASan功能
可使用替代品,UE内部的 Stomp Allocator(会占用巨量虚拟内存(60G+))

https://pzurita.wordpress.com/2015/06/29/memory-stomp-allocator-for-unreal-engine-4/

通过Page可以设置Read、Write保护的特性,在每次申请内存时,使用Page读写保护来保护内存区域
当越界读写时,就会触发保护,从而崩溃在问题出现的第一现场

Vulkan

Vulkan RHI在较新的移动设备中已全面支持
其RHI性能、驱动内存占用,可玩性、以及可优化性 远超 OpenGL RHI
包含Command的Trace工具,发现崩溃问题时,可通过Trace工具记录完整Command数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.什么是C语言

什么是 C 语言? C语言是一种用于和计算机交流的高级语言, 它既具有高级语言的特点,又具有汇编语言的特点 非常接近自然语言程序的执行效率非常高 C语言是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的, 例如:C、C#、Object-C、…

驾考小技巧:老北京布鞋!距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”——早读(逆天打工人爬取热门微信文章解读)

我20年驾校4000多块钱,你呢? 引言Python 代码第一篇 洞见 距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”第二篇 视频新闻结尾 引言 昨天的文章顺利发出 看来“梅西” 这两个字在我们这边 不是敏感词 只是很多个罗粉搞得有点过头了 …

Spring框架的最新进展:2023年Spring Boot和Spring Cloud功能更新

引用 Spring框架的最新动态:2023年Spring Boot与Spring Cloud功能升级 Spring框架作为Java开发领域的重要技术之一,一直致力于简化开发流程和提高开发效率。2023年,Spring Boot和Spring Cloud两大核心组件再次迎来功能升级,为开…

以10位明星为你献上的祝福视频为标题的科普介绍文章-华媒舍

祝福视频的意义和影响 祝福视频是指明星通过录制的视频,向观众表达美好的祝愿和关怀。这种视频以真挚的情感和鼓舞人心的话语,给人们带来了不同寻常的温暖和感动。由于明星的影响力和号召力,他们的祝福视频可以更广泛地传播,让更…

RedTail 僵尸网络积极利用新漏洞发起攻击

自从 Palo Alto 的 PAN-OS 漏洞公开披露以来,研究人员发现已有攻击者将该漏洞纳入武器库中。 CVE-2024-3400 2024 年 4 月 11 日,Palo Alto 发布公告称基于 PAN-OS 的产品中存在的 0day 漏洞已经被攻击者利用,安全公司 Volexity 已经发现了…

【React】极客园--04.发布文章模块

实现基础文章发布 创建基础结构 import {Card,Breadcrumb,Form,Button,Radio,Input,Upload,Space,Select } from antd import { PlusOutlined } from ant-design/icons import { Link } from react-router-dom import ./index.scssconst { Option } Selectconst Publish () …

LeetCode 1-两数之和

LeetCode第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现…

重磅!2024年最新影响因子(生态学/林学/土壤学/遥感/微生物/环境科学/植物科学) 收藏版!

2024年最新影响因子正式揭晓!2024年6月20日,Clarivate Analytics(科睿唯安)发布了各大SCI期刊的2023年影响因子。从最新结果看,今年的影响因子继续“普跌”,其中顶刊Nature和Science均有下降,分…

萨科微slkor宋仕强论道华强北假货之六

萨科微slkor宋仕强论道华强北假货之六,华强北的假货这么多,搞得客户害怕、同行焦虑,话说“在华强北没有被坑过的,就不是华强北人”。我们金航标Kinghelm(www.kinghelm.com.cn)公司以前有一个贸易部&#xf…

R语言数据分析案例33-基于logistic回归下的信用卡违约情况分析

一、选题背景 随着互联网产业的蓬勃发展,传统金融行业开始向着金融互联网化和互联网金融快速转型。网络信贷、信用卡等凭借门槛低、快速便捷、高收益等特点,借助互联网平台存在的优势,迅速成长。然而高收益的背后也存在着高风险,…

Docker配置阿里云加速器(2续)

默认情况下镜像是从docker hub下载,由于docker hub服务器在国外,由于网络原因镜像下载速度较慢,一般会配置镜像加速进行下载 国内镜像加速器有阿里云、网易云、中科大等,本章配置阿里云镜像加速器,速度较快 镜像加速源…

JavaWeb——SQL简介

1. SQL的介绍 SQL是一门结构化查询语言,就是一门用来操作关系型数据库的数据库语言; 使用SQL语句,可以操作所有的关系数据库; 但是,不同的关系型数据库的SQL操作略有不同,称为“方言”; 2. S…

408数据结构-图的遍历 自学知识点整理

前置知识:图的存储与基本操作 图的遍历是指从图的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次,且仅访问一次。因为树是一种特殊的图,所以树的遍历实际上也可以视为一种特殊的图的遍历。图的遍历算法是求解…

excel数据透视

Excel中,数据透视图(PivotChart)和数据透视表(PivotTable)是两个紧密相关的工具,用于分析数据。数据透视表是数据透视图的数据源,也就是说,数据透视图是基于数据透视表中的数据创建的…

matplotlib 创建多个子图

有些时候我们需要用for循环来创建多个子图,来对比特征。现在已画出8组随机数来作为示例。 from matplotlib import pyplot as plt import numpy as np #设置画布大小 figplt.figure(figsize(20,8)) #解决中文乱码问题 plt.rcParams[font.sans-serif] [SimHei] fo…

BlockingQueue详解(含动画演示)

目录 BlockingQueue详解0、BlockingQueue简介BlockingQueue接口中方法注释BlockingQueue的实现,总结计划 1、ArrayBlockingQueue简介2、ArrayBlockingQueue的继承体系3、ArrayBlockingQueue的构造方法①、 ArrayBlockingQueue(int capacity)②、ArrayBlockingQueue(…

HumanPlus——斯坦福ALOHA团队开源的人形机器人:融合影子学习技术、RL、模仿学习

前言 今天只是一个平常的日子,不过看到了两篇文章 一篇是《半年冒出近百家新公司,「具身智能」也有春天》 我看完之后转发到朋友圈,并评论道:让机器人翻一万个后空翻,不如让机器人打好一个螺钉,毕竟在目前…

Python酷库之旅-第三方库openpyxl(03)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

html--404页面

<!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <title>404 错误页面不存在&…

01--MySQL数据库概述

目录 第1章 MySQL数据库概述 1.1 基本概念 1.2 MySQL数据库管理系统 1.3 表的关系 第2章 MySQL卸载、安装、登录 第3章 客户端使用演示 3.1 命令行客户端 3.1.1 数据库 3.1.2 数据表 3.1.3 导入数据 3.1.4 导出数据 3.2 可视化客户端 第4章 SQL语句 4.1 SQL的分类…