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

Sách trắng lag game › L6 Card mạng server

Ring buffer không đủ RX ring buffer overflow

ID nguyên nhân nic-ring · Phụ trách chính Hạ tầng server (Đội hạ tầng)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Nếu ring buffer, nơi NIC tạm giữ gói tin, quá nhỏ thì khi gói dồn đến trong tích tắc, bộ đệm sẽ tràn và gói bị bỏ.

Vì sao Ring buffer để ở giá trị mặc định nhỏ (256–2.048 slot tùy driver) → Dẫn đến Khi có burst, bộ đệm tràn trước khi CPU kịp lấy gói ra → Trên màn hình Chỉ mất gói vào lúc burst (dịch chuyển tức thời, nuốt skill). Log của server game không để lại dấu vết

Triệu chứng
Dịch chuyển tức thời, Nuốt thao tác·rollback
Yếu tố
Mất gói
Ai gặp phải
Cả server
Khi nào
Khi đông người
Phụ trách
Phụ trách chính Hạ tầng server (Đội hạ tầng)
Việc cần làm (Đội hạ tầng)
Tăng ring buffer (ethtool -G), giám sát bộ đếm gói bị bỏ (drop), như rx_missed_errors trong ethtool -S (tên khác nhau tùy driver).
Con số tham khảo
Nếu 1 triệu gói dồn đến mỗi giây thì 1.024 slot sẽ đầy trong khoảng 1 ms. Trong khoảng đó chỉ cần CPU đến muộn một lần là tràn. Phần lớn NIC có thể tăng lên vài nghìn slot.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Bộ đếm gói nhận bị bỏ của NIC
Chỗ cần xem
Thu thập với khoảng ngắn bộ đếm gói nhận bị bỏ trong ethtool -S (rx_missed_errors, rx_fifo_errors…, tên khác nhau tùy driver) và missed trong ip -s -s link, rồi dùng ethtool -g xem kích thước ring hiện tại và giá trị tối đa
Đúng nếu
bộ đếm gói bị bỏ tăng vào lúc burst, và kích thước ring hiện tại nhỏ hơn nhiều so với tối đa. Tăng ring lên thì gói bị bỏ giảm
Loại trừ nếu
bộ đếm gói bị bỏ không đổi mà vẫn mất gói → bước tiếp theo trong kernel (“Bộ đệm socket của kernel quá nhỏ”) hoặc đoạn mạng; %soft của một core ở mức 100% → xem “Ngắt NIC dồn vào một core”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)

Nguồn

  1. Linux Base Driver for Intel(R) Ethernet Network Connection (e1000) Linux kernel
    Descriptor nhận (slot của ring) của e1000 mặc định 256, có thể tăng tới 4.096
  2. drivers/net/ethernet/intel/ice/ice.h (Linux v6.12) Linux kernel
    Descriptor nhận của driver ice mặc định 2.048, tối đa 8.160
  3. Interface statistics Linux kernel
    Gói bị thiết bị bỏ do thiếu bộ đệm được tính vào rx_missed_errors, thống kê riêng của driver xem bằng ethtool -S
  4. ethtool(8) — Linux manual page ethtool
    -g xem kích thước ring (giá trị hiện tại và tối đa), -G để đổi, -S xem thống kê theo driver

Nguyên nhân nên xem cùng

Cùng tầng: L6 Card mạng server

Nguyên nhân ở tầng khác gây cùng triệu chứng (Dịch chuyển tức thời)

Xem thẻ gốc có hình minh họa và thí nghiệm