一、初识游戏性能 1.1 游戏性能测试是做什么的

游戏性能测试,见其名思其意,就是对游戏进行测试,发现性能问题,分析问题的原因。

什么是性能问题呢?

我们平时玩游戏,发现玩一会游戏手机就开始烫手了,或者某一款大型游戏在手机上玩起来特别的卡顿。这些都属于游戏性能问题。一局话来总结,游戏对性能的需求超过了设备提供的性能(算力)。性能问题包括但不限于卡顿、内存、发热、画质表现。这里的设备包括且不限于手机、PC、VR、、AR设备等等。

那么为什么要进行游戏测试,去发现性能问题呢,并推动程序去解决性能问题呢?

做好游戏的性能优化,可以有以下好处:

1.2 游戏性能测试基本指标

“设备烫手”、“画面太卡”、“玩起来不流畅”等词汇对性能问题的描述过于笼统。我们需要将性能问题进行量化,这就引申出了大量描述性能问题的指标。接下来我们会一一介绍这些指标。

各大游戏公司基本都有自己做的基础性能指标采集工具。腾讯有、网易有、字节有、华为有 。本文主要以面向市场的为例,对基础性能指标做一个简单的介绍。

定义:一定时间内屏幕显示画面的数量,是衡量流畅性的重要指标。

这里的画面也可以直接理解为图片。当物体快速运动时,人眼看到的影像消失后迷人眼仍能继续保留其影像1/24S左右的图像,这就是电影都是24帧/S的原因。

定义:帧耗时就是每一帧的耗时。是衡量卡顿的重要指标。对于60帧/S的画面,1S=/60=16.66ms。60帧/S的情况下帧耗时就是16.66ms。

CPU: Unit(中央处理单元)。主要用于复杂的逻辑计算以及提交渲染任给GPU。

CPU占用率。即在实际工作频率下,CPU执行任务的总时间/CPU总时间。

CPU频率是指CPU的时钟速度,以赫兹(Hz)为单位。

时钟速度(Clock Speed)是计算机处理器内部的时钟在一秒内发出的信号次数,通常与处理器的性能有关。

在计算机中,CPU执行的每条指令都会有一个预定的时间间隔,这个时间间隔被称为CPU的“时钟周期”(Clock Cycle),或者“时钟频率”(Clock )。CPU的时钟速度就是以这个频率来度量的。

CPU频率的高低,对计算机性能的影响很大,越高的时钟速度意味着计算机可以在同样的时间内执行更多的指令。即CPU频率越高性能越好。但是,并非所有的CPU都在相同的时钟频率下工作,例如,有些CPU(如服务器CPU)的工作频率远低于消费级CPU,但是这些服务器CPU会利用大量的超标量()、超线程(Hyper-)等技术,来实现更高的处理能力。

即在实际工作频率下,GPU执行任务的时间/GPU总时间。

GPU频率是指GPU核心(图形处理器)的运行频率。它是GPU的核心频率,用于衡量GPU处理数据的速度。GPU频率越快,性能越强。就像CPU的主频一样,

硬件的频率大小决定了硬件的性能和运算速度,那么我们可以把频率进行拟人。

某个施工队每次施工可以使用的人力为50~100人,对应硬件频率的0.5~1GHz。

某次施工任务,施工队实际到施工现场的人数70人,对应硬件频率的0.7GHz。

施工时,发现工程量较小,到场70人过多,实际上进行施工的人数为35人,占用了到场人数的50%,对应硬件的CPU/GPU占用率:50%。

1.3 游戏性能测试工具链简单介绍

工具名称

工具作用

适用设备

下载链接

备注

分析渲染流程、定位渲染瓶颈

Frame

分析渲染流程、定位渲染瓶颈

Frame

华为版,在上进行二次开发

高通官方移动设备性能分析工具

高通芯片的设备

Intel

Inter官方性能分析工具

Inter芯片的设备

GPA

类似于PC版的

PC

| 开发者

PC截帧工具

PC

User Guide

Arm MS

Arm GPU设备截帧工具

Arm GPU的设备

华为出品的基础数据采集工具

华为系设备

UI - with - |

用于检查CPU线程调度,初步判性能瓶颈是在CPU还是GPU上的工具

设备

UE引擎官方的性能工具

UE引擎游戏

介绍 | 虚幻引擎文档 ()

Unity

Unity引擎官方的性能工具

unity引擎游戏

Unity - : The

Unity

Unity官方的内存镜像采集工具

unity引擎游戏

模块 - Unity 手册

UPR

unity官方的性能测试监控平台

unity引擎游戏

UPR - Unity专业性能优化工具

Xcode

苹果官方开发工具,可用于截帧、内存Alloc采集、消耗分析、带宽采集等等。

ios

Xcode 15 - Apple

//

基础性能数据采集工具

通用

| 全平台性能测试分析专家 ()

官方CPU性能采集工具

设备

Loli

内存工具

设备

- /: tool for app&game .

Wwise客户端

用wwise的官方工具

通用

二、游戏渲染基础知识 Arm GPU 架构介绍 1.1、TB(D)R架构 1.1.1 IMR架构( Mode )

IMR架构就是桌面端的GPU架构,每一个绘图的指令来到显卡,每一次渲染API的调用,都会直接绘制图像对象,从头到尾跑完整个渲染管线,最终将结果输入到Frame 中。因此,每一次物体颜色和深度的渲染,都要读写Frame 和Depth 。

下图为IMR架构渲染流程。

上半部分为 (渲染管线)。

下半部分为显存的数据:几何数据,纹理贴图数据、Depth (深度缓冲)、Frame 。

IMR架构存在一个问题,在开启深度测试后每一个的输出都需要和Depth 中的深度值进行深度测试,通过测试则需要更新Depth 和Frame 。

整个过程包含对 的一次读取和两次写入,然而数量巨大,这就带来了很大的访问 的压力。IMR的解决办法是给GPU配备足够大的缓存和足够大的带宽。

为了容下更多的缓存就需要越来越大的主板,而频繁的带宽访问会造成功耗大量增加导致发热。

然而,在规格尺寸及功耗较低的移动端,IMR架构的功耗显然不是能够被接受的。

因此,为了降低移动端的带宽,减少功耗,TB(D)R架构应运而生。

1.1.2 TBR架构

TB(D)R(Tile-Based())是目前主流的移动GPU渲染架构。

简单理解TB(D)R:屏幕被分块(16×16或者32×32)渲染:

TBR:VS-Defer-RS-PS

TBDR:VS-Defer-RS-Defer-PS

Defer:字面意思为延迟,从渲染数据的角度来看,defer就是“阻塞+批处理”GPU的“一帧”的多个数据,然后一起处理。

在渲染时,直接渲染对象不再是当前的Frame 和Depth (深度缓冲),而是Tile 的高速缓存。从而将IMR中对Color/Depth 进行的读写操作改为对GPU中告诉内存的读写操作。如下图所示:

最上面一层: (渲染管线)

中间一层:On-Chip (片上内存,Tiled Frame &Tiled Depth )

最下一层:系统内存,CPU、GPU共享。

List:

固定长度数组,长度为tile的数量

数组中,每个元素是一个 list,存的是和当前tile香蕉的所有三角形的指针,指针指向 Date。

Date:

存放顶点和顶点属性数据。

TBR渲染流程:

第一阶段:几何处理阶段:

首先,从内存中读取 date,经过 阶段先将顶点信息进行着色。

接下来将整个大的画面切成一个个的Tile/bin,在此阶段会判断每个Tile与哪些三角面有关。确定好后将信息存回到内存中。当所有分类储存后, 才会启动。

第二阶段(光栅化),以Tile为单位执行

(光栅化)会等所有的三角形完成第一阶段(几何处理阶段),才会进入第二阶段。它会从 quchu tile的三角形列表,然后根据列表对当前tile的所有三角形进行光栅化以及顶点属性的插值。

第三阶段:像素着色,以Tile为单位执行。因为 只需要读取当前像素的几何信息进行着色,因此场景仍可以使用(延迟渲染)一个Tile一个Tile的处理其中的像素。

1.1.3 TBDR架构

TB(D)R架构的两个渲染阶段:

TBDR再TBR的基础上,通过硬件层面的特性HSR(隐藏面消除)解决了问题。

如上图所示,相比TBR,TBDR 多了一个HSR和,HSR为独有的特性,再硬件上减少。

HSR原理:

每个,通过了Early Z Test后,先不绘制,而是HSR阶段读取 list,标记该像素由哪个图元绘制。

HSR(隐藏面消除)读取片上的Depth (深度缓冲),以判断该由哪个图元绘制。等这个Tile上所有的图元处理完成,只记录通过Early Z Test的那个图元。

在 (偏远着色器)绘制时,只绘制标记这个像素点,最终通过Early Z Test的那个

可以理解为:虚拟出一个射线,遇到第一个不透明的三角形停下,只渲染最近的不透明和最近的透明对象,余下的偏远会被剔除不进行渲染。

1.1.4 TBDR架构的优缺点

TBDR架构的,给消除提供了机会,

TBDR核心是为了降低带宽、减少功耗。实际渲染帧率并不快。

TBDR优点:

(1)TBR给消除提供了机会,Power使用了HSR技术,Mail使用了 Pixel 技术,目标一样,就是要最大限度减少被遮挡Pixel的和。

(2)TBR主要是 ,在cache里头的速度要比全局内存的速度快的多,以降低帧率的代价,降低带宽,省电。

缺点:

(1)操作需要在阶段之后,将输出的几何数据写入到DDR,然后才被 读取。几何数据过多的管线,容易在此处出现性能瓶颈。

(2)如果某些三角形叠加在数个图块(),则需要绘制数次,这意味着总渲染时间会高于即时渲染模式。

不同GPU的Early-DT/第二个defer

高通采用外置模块LRZ。在正常渲染管钱前,先多执行一次VS生成低精度depth ,以剔除之前不可见的三角形。就是直接用硬件做 ,功能类似于软光栅遮挡剔除。

Arm Mail采用 Pixel Kill技术来剔除远处物体。

iOS:

采用内置模块HSR(隐形面剔除)。修改原渲染管线架构,增强硬件模块为HSR。

虚拟出一个射线,遇到第一个不透明的三角形停下,只渲染最近的不透明和最近的透明对象,余下的偏远会被剔除不进行渲染。

1.2.以Mali GPU为例解读GPU指标 1.2.1 Mail GPU

Job:=GPU实际执行的单位,存在两种类型:

Non- job: ,,

job:

Job 有两个job slots:可以同时处理non- & job

GPU 即GPU time。

GPU 指标解读:

下图为Mali-G77 perf.

Front-end

当 后,会产生许多以2*为单位的Quads。

内dFdx,dFdy的计算便是依赖quad的结构

quad:=该quad有人一个不在内部。在符合某些条件下(no :alpha to ,no depth write in ,no )。

FPK(mali架构特有): Pixel Kill

在 的情况下,当quad在FPK 排队等待进入 core执行时,会再根据新进quad的ZS状态剔除前面排队的quad。(类似于HSR,即不透明绘制时绘制最后进入quad的内容。)

接着每4个quads(数量依架构不同),会在组成一个warp,排进等待执行。此时一个warp内有16个单元会进行平行运算,概念上可视为16 ,每个在同一时间是执行一样的指令,但是处理的资料会不同。

在执行 时,每个对应一个,且同一warp内的不一定都来自于同一个,在执行 时,每个则是对应于一个。

Warp的排程与执行:

假设

1.我们一次只能执行一个

2.根据 的用量,目前只能分配给4 warps使用,

若使用过多,能同时执行的数量会降低, warps数量会降低,遇到stall时,可替换的选择性变少,hide 能力降低

(若Mail-使用超过,数量会从1024降成512()。

core:

1.2.2 指标

1.2.3 指标

Tiler 的单位是

test 在一般3D 大约会在50%。

Micro : rate 超过10%

当在image Plane所投影之范围未包含任何一个Pixel 时,会遭到剔除。

当此问题发生时,建议制作 LOD 或是CPU 。

注意:请留意每个 stage处理单位:Tiler :;Early-ZS :quad; core:warp

渲染管线 帧渲染流程 三、内存测试基础知识 3.1 内存测试入门 为什么要监控优化内存大小

游戏内存过大通常会带来的后果——闪退。

闪退(OOM):每台设备的内存是有限的,当进程的内存超过阈值,系统就会kill掉这个进程,就会出现闪退的情况。

因此,一般情况下要求: 游戏进程的内存峰值(PSS/)手机不高于设备RAM的60%,Pad不高于设备RAM的70%。

我们在实际测试中,碰到的内存出现性能问题导致闪退的情况主要是有两种。

这两种情况的表现都是内存峰值超过设备所能使用的内存导致进程被杀掉游戏出现闪退。

了解手机的内存

内存指标 相关内存指标:

VSS( Set Size):虚拟内存(包含共享库占用的内存)

RSS( Set Size):应用独占的内存及全部共享库占用的内存。即使共享库只加载到内存中一次,无论有多少进程使用它,也把整个共享库的内存算在里面。

PSS( Set Size):应用独占的内存大小及按比例分配的共享内存大小。中统计的内存就是应用的PSS内存—————在安卓上我们主要关注的内存大小就是PSS内存

USS:进程独占内存,进程销毁时可以回收的内存

swap :交换内存。部分设备可以在存储空间中建立一个区域用于交换数据,这个空间就是swap虚拟内存。当设备PSS内存不足时,会对PSS进行压缩放入swap内存空间中,PSS内存会相应的减少。swap内存会增加。

iOS相关内存指标:

: 运行内存,官方推荐的内存衡量指标,与应用的OOM直接相关。对应中的内存。

/: 实际占用物理内存,该指标不作为衡量内存占用情况的直接指标,但是可以辅助进行应用表现的分析。就是中的内存。

iOS 内存阈值测试工具:

3.2 unity项目的内存组成

mono

3.3 UE项目的内存组成

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处墨迹游戏网

原文地址:《游戏性能新手测试入门指北》发布于:2024-11-20