遊戲測試 Perfdog 實戰之減少 CPU 消耗
怎麼獲取測試報告此處不再贅述,有關perfdog怎麼使用的教程可以參考
Perfdog使用教程
# 1. 第一部分,查詢問題,找出問題特徵點
首先我們看到FPS資料,可以看到FPS波動較大,但這是從某一時間開始的,在前期遊戲FPS還是較為穩定的,那我們就要分析是什麼原因導致的FPS開始變得不穩定;
我們發現
CPU的消耗在這個時間段開始驟然上升,CPU的溫度升高,導致手機的降頻保護開啟,CPU的頻率開始下降,
# 2. 第二部分,分析報告後,得到分析結果
經過以上的資料分析,我們發現是遊戲在那個時間點時CPU消耗上升,導致CPU的溫度升高,處發了CPU的保護機制,引起CPU頻率下降,而遊戲得不到充足的算力支援,自然FPS變得不穩定;
# 3. 第三部分,得到分析結果,分析可以最佳化的空間
我們已經得知問題是CPU溫度過高的問題,那麼就要相應降低CPU的消耗,而CPU的消耗主要有以下幾個方面(這裡僅針對Unity引擎的,其他引擎僅供參考)
對於MMORPG手遊:
CPU的消耗可以從半透明渲染和不透明渲染入手解決;
可能有的同學會疑問,渲染通常都是GPU做的,和CPU有毛線的關係,這裡要解答一下,
在安卓機器設計結果中目前大部分都是沿用的馮·諾依曼結構,也就是我們通常說的計算機的五大部件:
運算器、控制器、儲存器、輸入裝置、輸出裝置, 而運算器、控制器組合就是CPU,所以算力通常都是由CPU提供的,而
如果不在遊戲中另做設定的話,即使渲染也是由CPU提供的算力,而GPU就是為了減輕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的溫度。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31420651/viewspace-2683964/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用MVVM減少控制器程式碼實戰(減少56%)MVVM
- 實戰 PerfDog 優化小遊戲效能優化遊戲
- 效能測試實踐 | PerfDog 助力微信小遊戲 / 小程式效能調優遊戲
- 效能測試實踐 | PerfDog助力微信小遊戲/小程式效能調優遊戲
- Ecoisme:連線一切智慧家居 減少能源消耗
- 【Parasoft SOAtest】如何減少重複工作以加速功能測試程式
- 《環形佇列》遊戲高《TPS》模式下減少cpu執行緒切換佇列遊戲模式執行緒
- 效能狗(Perfdog)測試與資料分析
- sql調優學習之cpu消耗過多...SQL
- 測試生存指南!如何在快速迭代的專案中減少返工?
- 移動效能測試---工具PerfDog簡單使用
- 騰訊效能測試工具——PerfDog使用初體驗
- 基於六西格瑪減少測試團隊報告問題的偏差
- 減少失誤提高策略性,ACT遊戲中的戰鬥資源控制遊戲
- LVM管理之減少LV的大小LVM
- WeTest 明星工具-移動端效能測試 PerfDog 初探
- 遊戲畫面如何去減少廉價感遊戲
- Jmeter效能測試實戰JMeter
- WEB安全測試實戰Web
- PerfDog 助力微信小遊戲優化-----實踐遊戲優化
- 實用測試技能分享:APP壓力穩定性測試之Monkey入門實戰APP
- 軟體測試專案實戰之功能測試 千鋒實戰教程
- PerfDog 效能狗實測智慧手錶效能
- PerfDog效能狗實測智慧手錶效能
- 智駕模擬測試實戰之自動泊車HiL模擬測試
- SQL Server 2005效能測試之CPU篇SQLServer
- 客戶端效能測試利器PerfDog嚐鮮體驗客戶端
- PerfDog測試騰訊影片、優酷、愛奇藝影片類小程式效能
- 移動端效能測試必備工具 PerfDog 效能狗
- React單元測試實戰React
- Playwright自動化測試工具之元素定位實戰
- 介面測試之DDT,純程式碼實戰,學起來
- Docker CPU 資源限制——CPU分片功能測試Docker
- 介面自動化測試實戰之智慧場景如何攻破
- APP專項測試實戰1APP
- UI自動化測試實戰UI
- 滲透測試入門實戰
- 智慧支付穩定性測試實戰