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

遊戲 Lag 白皮書 › L6 伺服器網路卡

GRO/LRO 合併等待延遲 GRO/LRO batching

原因 ID nic-offload · 主要負責 基礎設施團隊(伺服器基礎設施)

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

這是把多個封包合併成一個來減輕 CPU 負擔的功能。依設定不同,小型遊戲封包有時會短暫等待下一個可以一起合併的封包。

為什麼 NIC 或 kernel 把到達的封包合併後處理 → 於是 開啟硬體合併(LRO)或合併等待時間設定時,會短暫等待下一個封包 → 畫面上 延遲些微增加(大多在數十 µs 以下)

症狀
輸入延遲
因素
延遲
誰會遇到
整個伺服器
何時
一直都有
負責單位
主要負責 基礎設施團隊(伺服器基礎設施)
基礎設施團隊要做的事
依遊戲流量調整(關閉 LRO,確認合併等待時間設定),效果通常很小,排在其他原因之後確認。
圖表上
一開始就一直偏高 · 同一資料中心內的往返時間
查看位置
用 ethtool -k 確認 lro、gro 狀態,確認裝置的 sysfs 設定 gro_flush_timeout 值,並比較修改前後同一資料中心內小封包的往返時間
符合的跡象
LRO 為開啟或 gro_flush_timeout 大於 0,關閉或設為 0 後小封包的往返時間縮短
不符合的跡象
修改後差距在數 µs 以內時,就不是這個原因
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. NAPI Linux kernel
    gro_flush_timeout 設得大,雖然能合併處理,但在負載低時會產生延遲
  2. Linux Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Adapters (ixgbe) Linux kernel
    GRO 是把接收流量合併成大區塊以節省 CPU 的功能,是 LRO 的改良版
  3. ethtool(8) — Linux manual page ethtool
    ethtool -K 的 gro、lro on|off 設定

相關原因

同一層:L6 伺服器網路卡

同一症狀(輸入延遲)在其他層的原因

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