Nếu NIC chỉ gửi ngắt báo gói tin đến cho một core CPU, core đó sẽ thành điểm nghẽn.
Vì sao Chỉ có một hàng đợi nhận, hoặc RSS (phân tán ra nhiều core) đang tắt → Dẫn đến Một core lên 100% nên không lấy gói tin ra kịp → Trên màn hình Khi đông người, toàn server bị mất gói và trễ (dịch chuyển tức thời, trễ thao tác)
Cấu hình RSS (NIC phân tán), RPS (kernel phân tán), phân tán ngắt ra nhiều core, với UDP thì cấu hình để chia hàng đợi dựa cả trên cổng (rx-flow-hash udp4 sdfn của ethtool -N), tách core xử lý ngắt khỏi core chạy thread tick của game, giám sát %soft theo từng core.
Con số tham khảo
Lượng một core xử lý được qua kernel vào khoảng vài trăm nghìn gói mỗi giây, tùy kích thước gói và cấu hình. Nếu xem mức sử dụng theo từng core mà phần xử lý nhận (%soft của mpstat) chỉ dồn vào một core thì là trường hợp này.
Trên đồ thị
Chạm giới hạn rồi đi ngang · %soft theo core, số gói nhận mỗi giây
Chỗ cần xem
Dùng mpstat -P ALL 1 xem %soft (tỷ lệ xử lý ngắt mềm) của từng core, xem /proc/interrupts để biết ngắt của từng hàng đợi NIC đi tới core nào, ethtool -l để xem số hàng đợi, ethtool -S để xem số gói theo từng hàng đợi (tên khác nhau tùy driver)
Đúng nếu
chỉ một core có %soft bám sát 100%, các core còn lại rảnh, ngắt và gói tin dồn vào một hàng đợi. Từ lúc đó số gói nhận mỗi giây không tăng thêm được
Loại trừ nếu
%soft trải đều trên nhiều core → không phải nguyên nhân này; CPU rảnh mà vẫn mất gói → xem “Vượt giới hạn PPS trên cloud” hoặc “Ring buffer không đủ”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Dù có nhiều hàng đợi, nếu phần lớn lưu lượng đến từ vài địa chỉ như gateway hay proxy thì vẫn dồn vào một hàng đợi. Với UDP, cấu hình mặc định của NIC đôi khi chỉ dựa vào địa chỉ để chia hàng đợi, phải đổi sang dựa cả trên cổng thì mới phân tán đều.
Nguồn
Scaling in the Linux Networking StackLinux kernel RSS (NIC phân tán vào nhiều hàng đợi nhận), RPS (kernel phân tán), cấu hình cho mỗi hàng đợi một ngắt riêng và chia ra nhiều core, khuyến nghị RSS nếu xử lý ngắt nhận là điểm nghẽn
How to receive a million packets per secondCloudflare Số đo cho thấy khi một hàng đợi nhận chỉ đi tới một core, core đó nghẽn ở khoảng 350.000–430.000 gói mỗi giây; trường hợp NIC hash UDP chỉ theo địa chỉ IP nên dồn vào một hàng đợi