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

遊戲 Lag 白皮書 › TCP 重傳的根本原因

Policer 丟棄超額流量 Traffic policing

原因 ID rt-policer · 主要負責 基礎設施團隊(網路基礎設施) · 協同 基礎設施團隊(伺服器基礎設施), 遊戲開發團隊(伺服器開發)

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

電信業者的資費方案、雲端執行個體的上限、DDoS 防護設備,有時會把超過規定速度的封包直接丟棄,不放進佇列。

為什麼 瞬間傳送量超過允許速率或允許突發量 → 於是 超出的封包不經佇列直接丟棄(policing) → 畫面上 每逢突發量大的瞬間就有多個封包消失,定格後快轉;平均速度看起來低於上限

症狀
定格, 快轉, 瞬移
因素
遺失
誰會遇到
整個伺服器, 特定地區/電信業者, 只有我
何時
人潮湧入時, 晚間尖峰時段
負責單位
主要負責 基礎設施團隊(網路基礎設施) · 協同 基礎設施團隊(伺服器基礎設施), 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
把每個 tick 集中送出的量分散到 tick 內,讓瞬間傳送量低於允許突發量;碰到每秒封包數上限時,把一個 tick 的訊息合併成一個封包。
基礎設施團隊要做的事
網路:檢查設備的 policer 超出計數器、改用 shaper 取代 policer、調高允許突發量。伺服器設備/OS:檢查雲端上限超出指標(AWS 為 ethtool -S 的 bw_out_allowance_exceeded、pps_allowance_exceeded)、升級執行個體規格、在伺服器上做 pacing(Linux fq 佇列)。
數值參考
Shaper(放進佇列延後送出)會增加延遲,policer(立即丟棄)會增加遺失。TCP 遊戲連線遺失一次就可能停住數百 ms,所以只是短暫超過上限的程度時,通常 policer 的影響比較大。
圖表上
碰到上限後持平 · 短間隔的傳送量、policer/allowance 超出計數器
查看位置
查看套用 policer 的設備上的超出(exceed)與丟棄計數器,雲端環境則看 ethtool -S 的 bw_out_allowance_exceeded、pps_allowance_exceeded。發生遺失的連線,用 ss -ti 的 rtt 或封包擷取查看遺失前的 RTT
符合的跡象
超出計數器增加,短間隔的傳送量像被截斷在某個值一樣持平。遺失前 RTT 沒有升高,只有在突發量大的瞬間才有多個封包一起消失
不符合的跡象
遺失前 RTT 先升高時是佇列溢位(「瓶頸佇列溢位」、「突發傳送造成淺緩衝區溢位」)。超出計數器沒有變化就是其他原因
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. RFC 2475: An Architecture for Differentiated Services IETF
    定義:shaping 把封包延後以符合流量規格(traffic profile),policing 則丟棄超出規格的封包
  2. An Internet-Wide Analysis of Traffic Policing Google
    被 policing 的傳輸平均遺失率高出 6 倍,用 pacing 或 shaping 也能達到相同目的。policing 在 RTT 沒有增加的情況下丟棄超額部分,佇列溢位則是遺失前 RTT 會先升高(SIGCOMM 2016)
  3. Monitor network performance for ENA settings on your EC2 instance AWS
    ethtool -S 的 bw_out_allowance_exceeded、pps_allowance_exceeded:超過執行個體上限而被放進佇列或丟棄的封包數
  4. tc-fq(8) — Linux manual page iproute2
    Linux fq 佇列的每連線 pacing
  5. ss(8) — Linux manual page iproute2
    ss -i 的 rtt(平均往返時間)

相關原因

同一層:TCP 重傳的根本原因

同一症狀(定格)在其他層的原因

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