作者madeinheaven ()
看板PUBG
标题[情报] 开发者日记:服务器性能改善
时间Wed Aug 22 14:36:10 2018
开发者日记:服务器性能改善
https://www.weibo.com/ttarticle/p/show?id=2309404275786537393274
玩家们大家好,
今天我们要在本次开发者日记和大家分享目前为止为了改善服务器性能做出的努力和成果
。
估计很多玩家们都非常了解服务器性能的重要性。 PUBG使用的虚幻引擎是客户端-服务器
模式为基础的引擎,因此所有的客户端需要通过服务器更新每个Actor的状态信息。
※ actor是虚幻引擎中非常重要的概念,是能在游戏Level中布置的大多物体,包括角色
,建筑,背景,玩家视角镜头等。
服务器性能通常通过服务器的FPS(每秒帧数)检测。 如果服务器的性能上升的话,每帧
的时间会减少,按照这个时间的减少,服务器的响应时间会减少。
服务器响应时间也可以描述为‘网络延迟’。如果服务器的响应时间减少(或者网络延迟
减少) 的话,玩家们可以体验到更加顺畅的游戏环境。因为服务器响应越快,向其他人
显示我的行动/动作所需的时间就越少。举个例子,玩家们可以更快看到我发射子弹的动
作和效果。如果我们想要减少我们通常所知的‘非同步’现象,我们需要减少服务器响应
时间。
通过第14轮更新进行的改善内容
https://www.weibo.com/ttarticle/p/show?id=2309404245773154914049
第14轮更新之前的网络流程结构
在第14轮更新之前,虚幻引擎在服务器处理网络的方式如下:
https://wx4.sinaimg.cn/large/006ACrpagy1fuibrwlij8j30lw0c1gob.jpg
我们先来解释一下上面的网络流程。
在‘Net Dispatch’阶段,服务器会处理从客户端收到的信息报。此阶段会处理枪械的发
射,角色移动等内容。在此阶段中处理的许多内容会按照效率和适应性,以一种形式(
RPC或Relication)传达给其他客户端。此後,服务器所需的游戏逻辑处理(例如,物理
模拟)会在“Simulate & Render ”阶段中完成,处理结果会通过“Net Flush” 传送给
所有的客户端。
上述的流程结构会让“Net Dispatch”阶段处理的RPC进入Buffer 队列而不会直接传送。
进入“Net Flush”阶段时,所有的现有Buffer保存内容会传送给所有的客户端,并会 刷
新Buffer。
在这种结构中,RPC 传递到“Net Flush”之前必须通过“Simulate & Render”阶段,从
而导致延迟。我们预测虚幻引擎的结构是为了减少传送给UDP的数据包数量。因为数据包
的数量越少,网络的使用效率会越提高
新的网络流程结构和改善内容
但我们内部认为减少网络延迟比减少数据包的数量要重要,因而在第14轮更新更改了处理
流程,我们如下图 在“Simulate & Render”之前添加了叫“
Net Send Flush”的新阶段
。
https://wx1.sinaimg.cn/large/006ACrpagy1fuibsu7kz9j30dc0etdh8.jpg
在第14轮更新添加的“Net Send Flush”阶段,系统会传送Buffer内保存的所有UDP数据
,并会 刷新
。通过这个新流程,我们不再需要“Simulate & Render”所需的时间,从而减少了之前
发生的延迟时间。“Net Send Flush”里系统会处理之前进入队列的所有数据
这流程上的更改可以让游戏通过两次更新网络数据, 因此从14轮更新开始游戏提高的网络
更新率为2倍。(部分玩家猜测的是服务器帧率的提高,然而,我们实际提高的是网络更
新率。处理服务器帧数的过程中可以追加传送服务器更新数据,所以玩家们可以体验到
60Hz了)
更改的结果可以在Youtube主播Battle(non)sense的第14轮更新网络代码分析视频中找到
。
https://www.youtube.com/watch?v=dOVwu517GmI
通过以下分析图片我们可以确认40名玩家生存时,Gunfire(开火)时发生的平均延迟从
94.5减少为77msec(较少了18%)
https://wx4.sinaimg.cn/large/006ACrpagy1fuic6671arj312a0acjxe.jpg
第19轮更新改善事项
https://www.weibo.com/ttarticle/p/show?id=2309404270492583380316
第19轮更新之前的数据分析结果和新假设
19轮更新之前的2018年6月25日,在90名生存的情况下检测的游戏数据结果如下:
https://wx3.sinaimg.cn/large/006ACrpagy1fuic0damwrj307q053jrb.jpg
“
Net Flush” 阶段需要的时间为43.2msec,是整个帧数时间的 41%。这时间的相当部分
是为了复制(Replication) 各个 actor至客户端,系统‘序列化(Serialize)’的时间。
※ 序列化(Serialize)是翻译一段数据并记录到内存的一种过程,这可以让Actor的状态
通过网络传送给客户端
当我们根据上述分析结果搜索优化方法时,我们想到“如果我们能够减少复制的“Actor(
尤其是Character)”的数量,那麽总Net Flush时间也会减少很多”
因为《绝地求生》比使用虚幻设计服务器的游戏,同时玩游戏的玩家人数多,因此Actor
的数量必然要高得多。Actor的的大数据量是一个问题,但Actor的数量是更大的问题。
当我们苦恼减少Actor数量的方案时,想到了低频率复制远距离角色的方法。因为这方法
会只会给远距离的角色带来一些变化,所以不悔影响到游戏的玩法,并切会减少大量的序
列化Actor数量,从而减少Net Flush的消耗时间。
开发过程: 复制交错系统(Replication Interleaving)
从上述想法出发,我们得出结论来实现一个系统叫‘复制交叉’系统,因为该系统会根据
客户端和Actor距离,合适的频率下跳过复制要求。首先,我们强制性分开了Actor被覆制
的部分,并降低了远处角色的复制频率。 然後我们分析了问题的类型和视觉变化的类型
。
测试後,我们解决了降低频率时发生的问题,并结论到降低频率至之前复制频率的4分之1
也不会很影响到游戏体验。
完成的复制交错系统实现内容如下:
· 根据距离决定在多少帧数之间跳过多少个复制
· 可以设置为3个步骤:步骤1跳过1帧,步骤2跳过2帧,步骤3跳过3帧。
在实施该系统後,QA团队测试了该系统,以便为每个步骤找到合适的距离值。由於测试结
果显示跳过3帧时, 角色动作会出现晃动的现象,因此我们决定不使用步骤3。每个步骤的
的使用数值如下:
· 步骤1:离玩家70米以上的角色跳过1帧
· 步骤2:离玩家400米以上的角色跳过2帧
· (注意:这是目前反应到游戏的内容,此後也许会变更具体的数据,以改善服务器性
能及角色动作的流畅度 )
改善结果
新系统更新後,服务器性能提高了20%。在下图为当85个玩家还活着时的NA服务器的帧率
数据检测结果。通过更新,服务器帧率从18.5增加到22.9,增长了22%。其他地区的平均
帧率增幅也超过20%
https://wx1.sinaimg.cn/large/006ACrpagy1fuic5ox1zjj30i60ei0td.jpg
更令人惊讶的是响应时间的变化。 请查看更新#19相关的Youtuber Battle(non)Sense
的视频。
https://www.youtube.com/watch?v=KA43TocEAWs
https://wx1.sinaimg.cn/large/006ACrpagy1fuicbrw3f7j312a0acjxe.jpg
在上表中,你可以看到,当85名玩家还活着时,开火(Gunfire)的平均延迟时间下降了58
%,从149.4毫秒下降到61.6毫秒。该结果表明非同步的问题已经改善了很多。
除了复制交错之外,通过其他改进,当超过80个玩家还活着时,服务器帧率增加了20%,
网络延迟减少了50%。
卷尾语
自PUBG推出以来,我们已经在改进服务器FPS方面做了很多努力。除改善软件外,还对硬
件进行了改进。然而,在第19轮更新之前,过去几个月的更新中没有包含到玩家们可以明
确的体验到的游戏环境改善内容。
在绝地求生,百日行动期间,我们明确优先考虑服务器性能改进,并正在研究和试验各种
方法。
为了实现单个功能,我们必须完成初步研究并且在实现该功能之後,需要大量的分析,验
证和测试过程。因为每个问题都需要不断地投入精力和时间,很难在短时间内解决。新功
能的错误实现可能会导致更大的问题。因此,我们必须尽可能谨慎地实施和应用新功能。
进行上述改善内容的更新後,我们现在正处於优化过程中的““Net Dispatch”阶段。根
据我们的分析,大部分时间都用於角色移动处理,并且已经确认了优化这部分的可能性。
角色的移动对PUBG游戏的影响很大。因此,此任务需要大量注意,以确保此优化不会以异
常方式影响角色的移动。
我们正在尝试一系列的优化方案,如果这些想法通过测试的话,我们预计“Net Dispatch
”所需的时间将从当前的41.8毫秒下降50%以上。但新的方案的稳定工作预计会需要一个
多月,我们将尽最大努力快速开发和完成。
目前的目标是始终将服务器帧率从游戏的开始到结束保持在30。我们将坚持不懈地努力实
现这一目标,并提供更好的 战术竞技体验。
谢谢
Sang-kyun Kim
PUBG阿姆斯特丹开发部总监
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.248.97.235
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PUBG/M.1534919774.A.726.html
※ 编辑: madeinheaven (111.248.97.235), 08/22/2018 14:39:45
1F:→ toomtoom: 谁来给文组翻译翻译 08/22 14:42
2F:→ FreezingFish: ping可以再低一点更好 08/22 14:44
3F:推 tryit015124: 看不懂给推 08/22 15:28
4F:推 zxc8424: 128ticks了再叫我 08/22 15:36
5F:推 kugga: 笑死 IT人员主动跟user讲那麽多 根本失格 08/22 15:55
6F:推 seal46825: 伺服器侦数就是itcklerates吗? 不太懂 08/22 16:00
7F:→ seal46825: *tick 08/22 16:00
这边应该是指伺服器FPS就是伺服器接收封包频率
tickrate是指伺服器的发送封包频率
※ 编辑: madeinheaven (111.248.97.235), 08/22/2018 16:22:04
8F:推 k387259: GDC怎没来分享 现在才讲? 08/22 16:24
今年的GDC不是在3月? 14轮更新是6月 19轮更新是8月
※ 编辑: madeinheaven (111.248.97.235), 08/22/2018 16:53:12
9F:→ loukmartin: 讲那麽多 到底什麽时候才可以不用加速器就能好好玩 08/22 18:02
10F:→ loukmartin: 原本坚持不用加速器 实在是被延迟杀搞到受不了了 08/22 18:02
11F:→ loukmartin: 上礼拜用拿到的试用HINET加速器 根本两个游戏 08/22 18:02
12F:→ loukmartin: 搞得我都想怒刷一年了 08/22 18:03
13F:推 happy1234557: 直接跟你讲对枪毫秒反应从一百多减到六十 不错了啦 08/22 18:52
14F:→ zweibeee: 楼楼上,这议题讲很久了,延迟问题在台湾就是会有,不 08/22 19:01
15F:→ zweibeee: 过多少有进步了啦在连线的优化上 08/22 19:01
16F:→ zweibeee: 不过蓝洞讲这麽多 不懂的还是照喷 没什麽意义XD 08/22 19:04
17F:推 starbucksman: 解释还喷是怎样 学暴雪"我们觉得这很酷"比较好吗? 08/23 14:53
18F:推 iq1000x: 意思是现在大概是15-20左右 08/23 22:59
19F:→ iq1000x: 85人的时候 08/23 22:59