Unreal Engine 4 Network Profiler (1)

windkey
NeoBards
Published in
6 min readApr 30, 2019
“ green, blue, and pink textile” by Jack B on Unsplash

Network profiler 是 Unreal Engine 4 (UE4) 的一個外部工具,係用來分析UE4 原生的網路傳輸量,包含 RPC (Remote Procedure Call)、Replicated property 等。

1. 如何使用

1.1 建立資料檔

  • 首先在你要分析的對象(一般情況為 server),執行 console 命令
    netprofile enable 便會開始記錄。
  • 接著遊戲一段時間之後,再執行 netprofile disable 結束紀錄。
  • 結束後在 [Project path]/Saved/Profiling 資料夾中會看到 .nprof 檔,就是 network profiler 記錄下來的資料。

1.2 執行 Network profiler

Network Profiler 的執行檔一直到 4.22 的版本都仍無法在 editor 內直接啟動,必須到 [Engine path]/Binaries/DotNET/NetworkProfiler.exe 執行。啟動後點選 open 選擇剛剛錄好的 .nprof 檔案就可開始分析。

2. Network profiler 介面介紹

2.1 折線圖與 Summary

啟動後會列出多個數據的折線圖,可以先了解一下平均傳輸的級距大概落在哪裡,以及是否有特別不平均的現象,比如有很多突峰的情況要特別注意。
左下方 Summary 頁面則是有影格與秒數資訊,以及總傳輸與每秒傳輸的各細項數據,初步建議可先針對總傳輸量與每秒傳輸量。

Network Profiler 範例

2.2 Actors 頁面

Actors 頁面預設會列出整段資料所有 replicate actor 的資訊。單點某一時間區段的話就是改為這段時間區段 replicate actor 的資訊。

Actors 頁面範例
  • MS 欄位代表 server 花了多少時間在處理這個 actor 的 replication
  • KB/s 以及 Bytes 就是這個 actor property 的每秒傳輸量與總傳輸量
  • Count 是傳輸次數(接近 property count 的總和)
  • UpdateHz 是 server CPU 計算處理這個 actor 要 replicate 的頻率
  • RepHz 則是實際上有 replicate 東西出去的頻率
  • Waste = (UpdateHz - RepHz) / UpdateHz

官方的影片有提到 Waste 高代表 server 的 CPU 有浪費的情況,也就是有可能 server 一直在計算這個 actor,但是這個 actor 都沒有變動,根本不需要 replicate。若有此情況發生,建議降低這個 actor 的 net update frequency。

一般來說,這個 Actors 分頁是最最最常用的部分,通常就是看哪些 Actor 的Bytes 太高,然後哪些 property 傳的次數太多或是量太大。如果次數太多就考慮降低次數(修改 net update frequency,或是修改邏輯);如果量太大就要想想這些變數是不是真的需要,可不可以不要傳或是修改類型(如 integer改成 enum、uint8、bool 之類的)。

此外,property 的 Count 欄位計算方式是要注意的,如果一個 Actor 有 1 個structure,內含 2 個 float 與 1 個 uint8,並且 structure 內的值都有變動的話,欄位上會顯示 Count=3,Bytes=9 (2*4+1),這代表了我們不能單純的用 Bytes/Count 來推斷傳一次的 Bytes(因為實際上傳一次是 9 Bytes 而不是
3 Bytes),也不能單純看 Count 很高就急於降低頻率,有的時候是因為structure 內 property 數量多的關係。

2.3 All Actors 分頁

All Actors 分頁就是單純的列出整段時間所有 actor 的傳輸以及所耗 CPU 時間等資訊,一般就是直接對 Total Size 從大到小排序,針對比較大的項目回到 Actors 一一檢討即可。

All Actors 分頁

2.4 All Properties 分頁

All Properties 分頁是用來看有沒有哪個系列的 property 特別高需要注意,一般應該是 ReplicatedMovement 最高,如果自己的 gameplay 系統有特別高的部分就要注意。

All Properties 分頁

2.5 All RPCs 分頁

All RPCs 分頁列出有送出的 RPC 資訊。一般來說不建議使用 RPC 來遞送資料,請儘可能的使用 replicated property 取代 RPC。所以以我個人來說,這個項目是讓我用來檢查哪些 gameplay 程式有用 RPC,這是需要移除的。

All RPCs 分頁

2.6 追蹤特定 Actor

通常鎖定某個傳輸最高的 Actor 之後,就是要開始了解這個 Actor 的細節,這時候就要用上 Filter 功能。在 Network Profiler 的右下角有 Actor Filter 可以選擇你只想看的 Actor,然後按下 Apply Filters 作用。
通常在這樣的情境,會把 view 改為只有看 Property Bytes,如下圖。

使用 Actor Filter 了解 Actor 細節

這樣就可以一目瞭然這個 Actor 的傳送狀況,如果要更細部知道 Property Filter 的話,則可以繼續選擇 Property 來過濾。

[參考資訊]

--

--

windkey
NeoBards

位於台灣遊戲業的程式設計師,樂於分享遊戲引擎相關的心得與開發技術。