[情報] 開發者日記:服務器性能改善
開發者日記:服務器性能改善
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
在上表中,你可以看到,當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://www.ptt.cc/bbs/PUBG/M.1534919774.A.726.html
※ 編輯: madeinheaven (111.248.97.235), 08/22/2018 14:39:45
→
08/22 14:42,
6年前
, 1F
08/22 14:42, 1F
→
08/22 14:44,
6年前
, 2F
08/22 14:44, 2F
推
08/22 15:28,
6年前
, 3F
08/22 15:28, 3F
推
08/22 15:36,
6年前
, 4F
08/22 15:36, 4F
推
08/22 15:55,
6年前
, 5F
08/22 15:55, 5F
推
08/22 16:00,
6年前
, 6F
08/22 16:00, 6F
→
08/22 16:00,
6年前
, 7F
08/22 16:00, 7F
這邊應該是指伺服器FPS就是伺服器接收封包頻率
tickrate是指伺服器的發送封包頻率
※ 編輯: madeinheaven (111.248.97.235), 08/22/2018 16:22:04
推
08/22 16:24,
6年前
, 8F
08/22 16:24, 8F
今年的GDC不是在3月? 14輪更新是6月 19輪更新是8月
※ 編輯: madeinheaven (111.248.97.235), 08/22/2018 16:53:12
→
08/22 18:02,
6年前
, 9F
08/22 18:02, 9F
→
08/22 18:02,
6年前
, 10F
08/22 18:02, 10F
→
08/22 18:02,
6年前
, 11F
08/22 18:02, 11F
→
08/22 18:03,
6年前
, 12F
08/22 18:03, 12F
推
08/22 18:52,
6年前
, 13F
08/22 18:52, 13F
→
08/22 19:01,
6年前
, 14F
08/22 19:01, 14F
→
08/22 19:01,
6年前
, 15F
08/22 19:01, 15F
→
08/22 19:04,
6年前
, 16F
08/22 19:04, 16F
推
08/23 14:53,
6年前
, 17F
08/23 14:53, 17F
推
08/23 22:59,
6年前
, 18F
08/23 22:59, 18F
→
08/23 22:59,
6年前
, 19F
08/23 22:59, 19F
PUBG 近期熱門文章
PTT遊戲區 即時熱門文章
-8
17