遊戲 Lag 白皮書 › L9 伺服器遊戲程式
單執行緒區域過載(熱點) Single-threaded hot zone
原因 ID sp-hotzone · 主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(伺服器基礎設施)
在含圖解與實驗的完整版中開啟卡片 →
在每個區域由一個執行緒負責的架構中,人潮擠到同一處時,只有那一個核心會到 100%。
為什麼 一個區域(頻道)由一個執行緒負責 → 於是 人潮擠到同一處時只有那個核心飽和,其餘核心還有餘裕 → 畫面上 只有那個區域 lag,其他區域正常
- 症狀
- 慢動作, 輸入延遲
- 因素
- 停滯
- 誰會遇到
- 特定地點/頻道
- 何時
- 人潮湧入時
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(伺服器基礎設施)
- 遊戲開發團隊要做的事
- 分散到多個頻道、區域內部平行化、設定人數上限。
- 基礎設施團隊要做的事
- 把各核心的 CPU 使用率加入監控與警示(單一核心的飽和會被整台伺服器的平均值掩蓋)。
- 數值參考
- 在 16 核心的伺服器上,即使一個核心達到 100%,整台伺服器的 CPU 使用率看起來也只有約 6%。要看各核心的使用率才找得到。
- 圖表上
- 隨人數/負載上升 · 各核心的 CPU 使用率、各執行緒的 CPU
- 查看位置
- 用 mpstat -P ALL 1 看各核心的使用率、用 pidstat -t 1 看遊戲處理程序各執行緒的 CPU,並與最忙的執行緒所負責 zone 的人數比較
- 符合的跡象
- 整台伺服器的 CPU 很低,只有一個執行緒(一個核心)貼近 100%,而當時該執行緒負責的 zone 擠滿了人
- 不符合的跡象
- 多個核心平均偏高時是整台伺服器過載。只有一個核心的 %soft(接收處理)偏高時,是「NIC 中斷集中在單一核心」
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
- 深入了解
- 其他區域正常,前提是每個區域各自執行 tick。如果各區域的執行緒每個 tick 都要互相等待、再一起進入下一個 tick,最忙的那個區域就會拖慢整台伺服器的 tick。
- 實際案例
- CCP Games 2014: EVE Online HED-GP 大規模艦隊戰的伺服器過載
出處
- Time Dilation – How’s That Going? CCP Games
EVE Online 的 Time Dilation 以節點為單位,所以同一節點上的遙遠星系也會一起變慢;大型戰鬥改在只放 4 個星系的強化節點上處理 - mpstat(1) — Linux manual page sysstat
分別顯示各處理器的使用率與整體平均(-P ALL);%soft 是處理軟體中斷所花的時間比例 - pidstat(1) — Linux manual page sysstat
加 -t 可一併顯示處理程序所屬各執行緒的統計(CPU 使用率等)
相關原因
同一層:L9 伺服器遊戲程式
同一症狀(慢動作)在其他層的原因
查看含圖解與實驗的完整版卡片