한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L9 伺服器遊戲程式

視野(AOI)計算量暴增(N²) Area-of-interest explosion

原因 ID sp-aoi · 主要負責 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

若要判斷誰能看到誰而讓所有人兩兩比較,人數變成 10 倍時,運算量會變成 100 倍。

為什麼 所有角色兩兩比較距離,或即使切成格狀(grid),一個格子附近仍擠了數百人 → 於是 100 人約比較 1 萬次,1,000 人約 100 萬次 → 畫面上 在世界王、攻城戰等人潮聚集的地方 tick 時間暴增,出現慢動作、卡頓

症狀
慢動作, 卡頓
因素
停滯
誰會遇到
特定地點/頻道, 整個伺服器
何時
人潮湧入時
負責單位
主要負責 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
以格狀或區塊切分、只比較附近的對象;遠處的對象降低更新頻率;限制一個人能看到的人數上限。
數值參考
假設距離比較加上「看得見/看不見」清單的更新,每兩人一對要花 0.1µs(千萬分之一秒),1,000 人(約 100 萬對)時一個 tick 要花 100ms。這是 20 tick 預算(50ms)的 2 倍。
圖表上
隨人數/負載上升 · 伺服器 tick 時間、聚集在同一處的人數
查看位置
把各 zone/頻道的人數與 tick 時間放在同一張圖表上,並看 tick 中視野計算所花時間的單獨量測值。沒有單獨量測時,用 perf top -p 看遊戲處理程序各函式的 CPU 占比
符合的跡象
同一處的人數變成 2 倍時 tick 時間增加將近 4 倍,視野與距離計算函式占了大部分 CPU 時間
不符合的跡象
tick 時間與人數成正比增加,或傳送、序列化函式的占比很大時,是「廣播量暴增」或「序列化與壓縮的成本」
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. Comparing Interest Management Algorithms for Massively Multiplayer Games ACM
    NetGames 2006 論文(作者公開版本)。量測所有配對距離的方式在人數增加時無法負荷;切成正方形格子時只需檢查周圍 9 個格子
  2. Replication Graph in Unreal Engine Epic Games
    為每個 actor 逐一檢查所有連線的預設方式,在人數與 actor 很多時會成為伺服器 CPU 瓶頸;MMORPG 等會把世界切成格狀,重複使用每個格子的清單
  3. perf-top(1) — Linux manual page perf
    依函式(symbol)即時顯示執行中處理程序(-p)或執行緒(-t)的 CPU 使用占比

相關原因

同一層:L9 伺服器遊戲程式

同一症狀(慢動作)在其他層的原因

查看含圖解與實驗的完整版卡片