ゲームラグ白書 › L6 サーバーのネットワークカード
リングバッファ不足 RX ring buffer overflow
原因ID nic-ring · 主担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
NICがパケットを一時的に入れておくリングバッファが小さいと、瞬間的に集中したときにバッファがあふれて破棄されます。
なぜ リングバッファがデフォルト値(ドライバーごとにスロット256〜2,048個)のままで小さい → すると バースト時にCPUが取り出す前にバッファがあふれる → 画面では バーストの瞬間だけパケットロス(ワープ・スキル不発)。ゲームサーバーのログには痕跡がない
- 症状
- ワープ, 不発・ロールバック
- 要因
- パケットロス
- 誰に起きるか
- サーバー全体
- いつ
- 人が集中したとき
- 担当
- 主担当 インフラチーム・サーバーインフラ
- インフラチームの対応
- リングバッファを大きくする(ethtool -G)、破棄(drop)カウンターを監視(ethtool -Sのrx_missed_errorsなど、名前はドライバーごとに異なる)。
- 数値の目安
- 毎秒100万パケットが集中すると、スロット1,024個は約1msで埋まります。その間にCPUが一度でも遅れればあふれます。ほとんどのNICは数千個まで増やせます。
- グラフでは
- 不定期なスパイク · NICの受信破棄カウンター
- 確認箇所
- ethtool -Sの受信破棄カウンター(rx_missed_errors、rx_fifo_errorsなど、名前はドライバーごとに異なる)とip -s -s linkのmissedを短い間隔で集め、ethtool -gで現在のリングサイズと最大値を確認
- 該当する場合
- バーストの瞬間に破棄カウンターが増え、現在のリングサイズが最大値よりずっと小さい。リングを大きくすると破棄が減る
- 該当しない場合
- 破棄カウンターが変わらないのにパケットロスがあれば、カーネルの次の段階(「カーネルのソケットバッファ不足」)かネットワーク区間。1つのコアの%softが100%なら「NIC割り込みの単一コア集中」
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- Linux Base Driver for Intel(R) Ethernet Network Connection (e1000) Linux kernel
e1000の受信ディスクリプタ(リングのスロット)はデフォルト256個、4,096個まで増やせる - drivers/net/ethernet/intel/ice/ice.h (Linux v6.12) Linux kernel
iceドライバーの受信ディスクリプタはデフォルト2,048個、最大8,160個 - Interface statistics Linux kernel
バッファ不足でデバイスが破棄したパケットはrx_missed_errorsで集計、ドライバーごとの統計はethtool -Sで確認 - ethtool(8) — Linux manual page ethtool
-gでリングサイズ(現在値・最大値)を確認、-Gで変更、-Sでドライバーごとの統計
あわせて読みたい原因
同じ層:L6 サーバーのネットワークカード
同じ症状(ワープ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る