遊戲 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 以內時,就不是這個原因
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- NAPI Linux kernel
gro_flush_timeout 設得大,雖然能合併處理,但在負載低時會產生延遲 - Linux Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Adapters (ixgbe) Linux kernel
GRO 是把接收流量合併成大區塊以節省 CPU 的功能,是 LRO 的改良版 - ethtool(8) — Linux manual page ethtool
ethtool -K 的 gro、lro on|off 設定
相關原因
同一層:L6 伺服器網路卡
同一症狀(輸入延遲)在其他層的原因
查看含圖解與實驗的完整版卡片