遊戲 Lag 白皮書 › L5 資料中心網路設備
交換器 microburst Switch microburst drops
原因 ID dc-microburst · 主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(網路基礎設施), 基礎設施團隊(伺服器基礎設施)
在含圖解與實驗的完整版中開啟卡片 →
多台伺服器在同一瞬間同時對數千人送出封包時,這些流量匯集的交換器 port 上的小緩衝區,不到 1ms 就會滿溢。
為什麼 世界王出現、大範圍技能,或多台伺服器的 tick 在同一瞬間對齊,同時送出封包 → 於是 多個 port 匯入一個 port,或從快速 port 轉到慢速 port 的地方,緩衝區(每個 port 數百 KB~數 MB)瞬間塞滿 → 畫面上 部分封包被丟棄,許多人同時瞬移、技能被吃
- 症狀
- 瞬移, 吃指令/回檔
- 因素
- 遺失
- 誰會遇到
- 特定地點/頻道
- 何時
- 人潮湧入時
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(網路基礎設施), 基礎設施團隊(伺服器基礎設施)
- 遊戲開發團隊要做的事
- 在一個 tick 內平均分散傳送(pacing),讓各伺服器的 tick 開始時間稍微錯開。
- 基礎設施團隊要做的事
- 網路:採用緩衝區較大的交換器,分散流量(把伺服器分散接到多台交換器、多個 port),監看各交換器 port 的丟棄計數器。伺服器設備/OS:為整台伺服器設定傳送速率上限(Linux tc shaper)。
- 數值參考
- 10Gbps 的 port 在 1ms 內能送出的量約為 1.25MB。兩個 port 的流量同時湧入一個 port 時,每 1ms 就會累積 1.25MB。即使 1 秒平均使用率只有 10%,以 1ms 為單位來看仍可能滿溢。
- 圖表上
- 隨人數/負載上升 · 交換器 port 輸出丟棄數
- 查看位置
- 以盡可能短的間隔收集伺服器所接交換器 port,以及其流量匯集 port 的輸出丟棄計數器(ifOutDiscards,依設備可能為 output drops),對照世界王出現、大規模戰鬥的時間點。只看 1 秒、1 分鐘平均使用率圖表是看不出來的
- 符合的跡象
- 平均使用率很低,但每當人潮集中到一處的瞬間輸出丟棄就增加,同時多位玩家回報瞬移、技能被吃
- 不符合的跡象
- 丟棄在平均使用率高的時段持續增加時是「資料中心線路飽和」。輸入錯誤(CRC)增加時是「纜線不良與 port 錯誤」
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- High-Resolution Measurement of Data Center Microbursts (IMC 2017) ACM
資料中心突發流量有 70% 以上在數十 µs 內結束,平均使用率約 9% 的 port 也會因突發流量丟棄封包 - Data Center TCP (DCTCP) (SIGCOMM 2010) ACM
一般商用交換器的緩衝區很淺(48 個 port 共用 4MB,單一 port 最多約用到 700KB),多條 flow 在極短時間內湧入同一個 port 時就會遺失 - RFC 2863: The Interfaces Group MIB IETF
ifOutDiscards:沒有錯誤,卻因為要騰出緩衝區空間等原因而無法送出、被丟棄的封包數
相關原因
同一層:L5 資料中心網路設備
同一症狀(瞬移)在其他層的原因
查看含圖解與實驗的完整版卡片