遊戲 Lag 白皮書 › L6 伺服器網路卡
NIC 驅動程式/韌體問題 NIC hang / reset
原因 ID nic-reset · 主要負責 基礎設施團隊(伺服器基礎設施)
在含圖解與實驗的完整版中開啟卡片 →
驅動程式 bug 或功能異常讓網路卡停住並重新啟動,這段期間所有收發都會中斷。
為什麼 驅動程式 bug、offload 功能異常 → 於是 NIC 停住後重新啟動(數秒) → 畫面上 那台伺服器上所有人的畫面一起停住,接著瞬移或斷線
- 症狀
- 定格, 斷線
- 因素
- 遺失
- 誰會遇到
- 整個伺服器
- 何時
- 偶爾隨機發生, 開越久越嚴重
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施)
- 基礎設施團隊要做的事
- 確認 kernel log 中的「transmit queue … timed out」、「Link is Down」紀錄並設定警示,更新驅動程式與韌體,關閉有問題的功能(offload 等)。
- 圖表上
- 中斷後一次湧入 · 伺服器收發封包數
- 查看位置
- 用 dmesg 在 kernel log 中找「NETDEV WATCHDOG … transmit queue N timed out」、驅動程式的重設,以及「Link is Down」、「Link is Up」紀錄,並查看該時間點伺服器的收發封包數
- 符合的跡象
- 停住的時間點 kernel log 中有傳送佇列逾時或鏈路 down/up 紀錄,且那幾秒內收發封包數為 0
- 不符合的跡象
- kernel log 很乾淨、交換器端的 port 也正常時,是遊戲伺服器處理程序的停頓(「伺服器 GC 全面暫停」、「死結」)或「網路設備容錯移轉(failover)」
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- net/sched/sch_generic.c (Linux v6.12) Linux kernel
傳送佇列停住時,kernel 看門狗會留下「NETDEV WATCHDOG … transmit queue N timed out」,並呼叫驅動程式的重設函式 - drivers/net/ethernet/intel/ixgbe/ixgbe_main.c (Linux v6.12) Linux kernel
ixgbe 驅動程式在傳送停住時重設介面卡,鏈路中斷時記錄「NIC Link is Down」 - ethtool(8) — Linux manual page ethtool
用 ethtool -K 逐一關閉 offload 功能的選項
相關原因
同一層:L6 伺服器網路卡
同一症狀(定格)在其他層的原因
查看含圖解與實驗的完整版卡片