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

遊戲 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 大規模艦隊戰的伺服器過載

出處

  1. Time Dilation – How’s That Going? CCP Games
    EVE Online 的 Time Dilation 以節點為單位,所以同一節點上的遙遠星系也會一起變慢;大型戰鬥改在只放 4 個星系的強化節點上處理
  2. mpstat(1) — Linux manual page sysstat
    分別顯示各處理器的使用率與整體平均(-P ALL);%soft 是處理軟體中斷所花的時間比例
  3. pidstat(1) — Linux manual page sysstat
    加 -t 可一併顯示處理程序所屬各執行緒的統計(CPU 使用率等)

相關原因

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

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

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