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

Sách trắng lag game › Nguyên nhân gốc của truyền lại TCP

Host server nhận bỏ gói tin Receiver host drops (ring, softirq, CPU)

ID nguyên nhân rt-host-drop · 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 →

Gói tin đã đến được server nhưng bị bỏ vì ring buffer của NIC (bộ đệm tạm giữ gói tin vừa đến) bị tràn, hoặc core xử lý nhận gói của kernel bị bão hòa.

Vì sao Số người vào tăng vọt, ngắt dồn vào một core, CPU steal trên máy ảo, switch ảo quá tải → Dẫn đến Bị bỏ ở ring buffer (rx_missed_errors và các counter tương tự, tên khác nhau tùy driver) hoặc ở hàng đợi nhận của kernel (softnet dropped) → Trên màn hình Khi đông người, cả server cùng lúc bị trễ thao tác và khựng

Triệu chứng
Trễ thao tác, Đứng hình, Tua nhanh, Dịch chuyển tức thời
Yếu tố
Mất gói, Ngưng trệ
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)
Thêm counter bỏ gói như rx_missed_errors trong ethtool -S và dropped trong /proc/net/softnet_stat vào giám sát, tăng kích thước ring buffer (ethtool -G), phân tán RSS và ngắt ra nhiều core, tách core xử lý nhận gói khỏi thread game, bảo đảm CPU còn dư, nếu là máy ảo thì kiểm tra CPU steal và tải của switch ảo.
Con số tham khảo
Gói mà server đã nhận rồi bỏ thì client sẽ gửi lại. Vì vậy chỉ số truyền lại của server ít khi phản ánh vấn đề này; nó hiện ra trước ở các counter bỏ gói như rx_missed_errors trong ethtool -S (tên khác nhau tùy driver) và cột dropped trong /proc/net/softnet_stat.
Trên đồ thị
Chạm giới hạn rồi đi ngang · Mức sử dụng softirq theo core, counter bỏ gói của NIC
Chỗ cần xem
Counter bỏ gói trong ethtool -S (rx_missed_errors và các counter tương tự; với mlx5 là rx_out_of_buffer và rx_discards_phy), missed trong ip -s -s link, cột thứ 2 (dropped) và cột thứ 3 (time_squeeze) của /proc/net/softnet_stat; xem %soft (thời gian xử lý ngắt mềm) theo core bằng mpstat -P ALL. Nếu là máy ảo thì xem cả %steal
Đúng nếu
vào lúc đông người, counter bỏ gói hoặc softnet dropped tăng, %soft của core phụ trách nhận gói lên gần 100% rồi không tăng thêm được. Mọi kết nối của server đó cùng lúc bị trễ thao tác
Loại trừ nếu
counter bỏ gói của server không đổi và truyền lại dồn vào kết nối của một khu vực hoặc nhà mạng nhất định → mất gói trên tuyến đường. Nếu gói server gửi đi bị mất trên đường thì TcpRetransSegs trong nstat của server tăng, còn các counter này không đổi
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. Interface statistics Linux kernel
    rx_missed_errors là số gói host không nhận được vì hết bộ đệm (trong /proc/net/dev được cộng vào drop), xem bằng ip -s -s link
  2. drivers/net/ethernet/intel/igb/igb_ethtool.c Linux kernel
    Tên counter trong ethtool -S do driver đặt (ví dụ rx_missed_errors và rx_no_buffer_count của igb)
  3. Ethtool counters Linux kernel
    rx_out_of_buffer (hàng đợi nhận hết bộ đệm) và rx_discards_phy (bỏ gói vì thiếu bộ đệm của cổng) của driver mlx5
  4. net/core/net-procfs.c Linux kernel
    /proc/net/softnet_stat có mỗi CPU một dòng, số hệ 16; cột thứ 2 là dropped, cột thứ 3 là time_squeeze
  5. Documentation for /proc/sys/net/ Linux kernel
    netdev_max_backlog: giới hạn của hàng đợi nhận dùng để giữ gói khi gói đến nhanh hơn tốc độ kernel xử lý
  6. Scaling in the Linux Networking Stack Linux kernel
    RSS: NIC chia gói ra nhiều hàng đợi nhận để nhiều CPU cùng xử lý
  7. ethtool(8) — Linux manual page ethtool
    Đổi kích thước ring buffer bằng -G (--set-ring)
  8. proc_stat(5) — Linux manual page Linux man-pages
    steal trong /proc/stat: thời gian OS khác dùng CPU trong môi trường ảo hóa
  9. mpstat(1) — Linux manual page sysstat
    mpstat -P ALL cho biết mức sử dụng theo core; %soft là thời gian xử lý ngắt mềm, %steal là thời gian phải chờ vì hypervisor đang phục vụ CPU ảo khác
  10. net/ipv4/proc.c Linux kernel
    TcpRetransSegs trong nstat (RetransSegs của mục Tcp)

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

Cùng tầng: Nguyên nhân gốc của truyền lại TCP

Nguyên nhân ở tầng khác gây cùng triệu chứng (Trễ thao tác)

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