遊戲測試 Perfdog 實戰之減少 CPU 消耗

導語:最近在測試過程中發現了一些比較典型的性能問題,所以來分享下作為測試怎麼為解決問題提供更多的有效信息,本次主要從優化角度分析Perfdog測試報告。本次主要介紹關於CPU的優化;怎麼獲取測試報告此處不再贅述,有關perfdog怎麼使用的教程可以參考Perfdog使用教程

# 1. 第一部分,查找問題,找出問題特徵點

首先我們看到FPS數據,可以看到FPS波動較大,但這是從某一時間開始的,在前期遊戲FPS還是較為穩定的,那我們就要分析是什麼原因導致的FPS開始變得不穩定;

遊戲測試 Perfdog 實戰之減少 CPU 消耗

我們發現CPU的消耗在這個時間段開始驟然上升,CPU的溫度升高,導致手機的降頻保護開啟,CPU的頻率開始下降,

遊戲測試 Perfdog 實戰之減少 CPU 消耗


遊戲測試 Perfdog 實戰之減少 CPU 消耗


遊戲測試 Perfdog 實戰之減少 CPU 消耗


# 2. 第二部分,分析報告後,得到分析結果

經過以上的數據分析,我們發現是遊戲在那個時間點時CPU消耗上升,導致CPU的溫度升高,處發了CPU的保護機制,引起CPU頻率下降,而遊戲得不到充足的算力支持,自然FPS變得不穩定;

# 3. 第三部分,得到分析結果,分析可以優化的空間

我們已經得知問題是CPU溫度過高的問題,那麼就要相應降低CPU的消耗,而CPU的消耗主要有以下幾個方面(這裡僅針對Unity引擎的,其他引擎僅供參考)

對於MMORPG手遊:CPU的消耗可以從半透明渲染和不透明渲染入手解決;可能有的同學會疑問,渲染通常都是GPU做的,和CPU有毛線的關係,這裡要解答一下,在安卓機器設計結果中目前大部分都是沿用的馮·諾依曼結構,也就是我們通常說的計算機的五大部件:運算器、控制器、存儲器、輸入設備、輸出設備, 而運算器、控制器組合就是CPU,所以算力通常都是由CPU提供的,而如果不在遊戲中另做設置的話,即使渲染也是由CPU提供的算力,而GPU就是為了減輕CPU的這種渲染壓力而設計出來的一個部件,嚴格意義上來講也屬於運算器;

遊戲測試 Perfdog 實戰之減少 CPU 消耗

所以為了減輕壓力,我們要把一些算力分給GPU,減輕CPU的負擔,而unity常用的手法有以下幾種:1.開啟GPU Instancing,降低drawcall:該技術可有效降低Draw Call的佔用,從而對渲染模塊的CPU端壓力起到一定的緩解作用。但是,在使用該技術時,需要注意機型的測試,此技術僅可以用於OpenGL ES 3.0,而且一些低端設備雖然支持OpenGL ES 3.0,且SystemInfo.supportsInstancing API返回也為True,但經過實際測試時,其底層並沒有按照真實的GPU Instancing功能來進行渲染,而是通過逐個Draw Call來進行渲染,所以,雖然開啟了GPU Instancing功能,但其渲染耗時並沒有下降;這裡涉及到了drawcall,簡單介紹一下:


drawcall是CPU對底層圖形繪製接口的調用命令GPU執行渲染操作,一次渲染就是一個Drawcall渲染流程採用流水線實現,CPU和GPU並行工作,它們之間通過命令緩衝區連接,CPU向其中發送渲染命令,GPU接收並執行對應的渲染命令,過多的DrawCall會造成CPU的性能瓶頸:大量時間消耗在DrawCall準備工作上。很顯然的一個優化方向就是:儘量把小的DrawCall合併到一個大的DrawCall中,這就是批處理的思想,也就是GPU Instancing主要做的事情;但要注意不要過於消耗GPU,在開發遊戲過程中隨著PBR、圖像後處理的大量使用會導致GPU端的壓力越來越大,甚至影響到了CPU端的Draw Call無法正常傳輸。可以說,主線程等待時間的體現方式因芯片的不同、具體使用情況的不同和引擎版本的不同,可謂是五花八門,在這裡不一一進行說明,但歸根原因主要還是GPU壓力過大;2.注意控制GC觸發頻率很隨著MMORPG遊戲越來越重度化,GC平均耗時在逐步上升,也會造成卡頓,大量的GameObject在頻繁實例化和Destroy會造成很大的性能開銷;3.Shader.Parse這裡給出一些建議,1)Shader在遊戲運行過程中是否存在冗餘情況,即重複加載的情況;2)是否有自定義的Shader資源放入到Always Included中,如有,請儘量去除;3)移動端上Standard Shader的使用是否確實有必要。沒有必要,則詳細檢測並刪除。4.動畫模塊大量動畫的產生會產生嚴重的開銷,unity引擎可以考慮使用GPU Skinning的方式進行優化,這種方式對於實現場景中的大量同種怪物非常有效,可以減少很多開銷。其核心其實也是合批的思想;5.粒子系統這裡建議儘可能將粒子使用數量峰值控制在600以下(低端設備)和1000以下(中高端設備),可以檢查下1)粒子系統(特別是技能特效)的配置文件是否過量;2)特效中是否含有長久不用的粒子系統。


以上是結合Perfdog的測試報告針對在遊戲開發中CPU優化的一些常用手段,相信可以帶來一些啟發,大家可以根據自己的項目實際情況做參考;減少CPU的消耗,降低CPU的溫度。


分享到:


相關文章: