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

ゲームラグ白書 › 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割り込みの単一コア集中」
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Linux Base Driver for Intel(R) Ethernet Network Connection (e1000) Linux kernel
    e1000の受信ディスクリプタ(リングのスロット)はデフォルト256個、4,096個まで増やせる
  2. drivers/net/ethernet/intel/ice/ice.h (Linux v6.12) Linux kernel
    iceドライバーの受信ディスクリプタはデフォルト2,048個、最大8,160個
  3. Interface statistics Linux kernel
    バッファ不足でデバイスが破棄したパケットはrx_missed_errorsで集計、ドライバーごとの統計はethtool -Sで確認
  4. ethtool(8) — Linux manual page ethtool
    -gでリングサイズ(現在値・最大値)を確認、-Gで変更、-Sでドライバーごとの統計

あわせて読みたい原因

同じ層:L6 サーバーのネットワークカード

同じ症状(ワープ)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る