คู่มือเกมแลค › L8 ซ็อกเก็ตและโปรโตคอล
นโยบายจัดการไคลเอนต์ที่ช้า (slow consumer) Slow-consumer policy
ID สาเหตุ sk-slow-client · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
เมื่อข้อมูลที่ต้องส่งให้ไคลเอนต์ใดกองสะสมเรื่อย ๆ เซิร์ฟเวอร์จะทิ้งอัปเดตเก่าหรือตัดการเชื่อมต่อ
ทำไม เน็ตของไคลเอนต์รับไม่ทันปริมาณที่เซิร์ฟเวอร์ส่ง → ผลคือ เซิร์ฟเวอร์ทิ้งอัปเดตเก่า หรือตัดการเชื่อมต่อเมื่อเกินขีดจำกัด → บนหน้าจอ เฉพาะคนนั้นวาร์ปหรือหลุด
- อาการ
- วาร์ป, หลุด
- ปัจจัย
- แพ็กเก็ตหาย
- ใครเจอ
- เราคนเดียว
- เกิดเมื่อไร
- ตอนคนแห่มารวมกัน
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
- งานฝั่งทีมพัฒนาเกม
- ลดปริมาณที่ส่ง (ความถี่อัปเดตตามระยะห่าง), ลดคุณภาพแต่ยังส่งต่อไป, ลดปริมาณข้อมูลที่กองไว้ในเคอร์เนล (TCP_NOTSENT_LOWAT ของ Linux)
- ตัวเลขที่ควรรู้
- ถ้า send buffer มีขนาด 256 KB บนเน็ต 30 KB/s จะมีข้อมูลกองรอเกิน 8 วินาที และบางครั้ง Linux ยังขยายบัฟเฟอร์นี้เองได้ถึงหลาย MB
- บนกราฟ
- สูงเฉพาะบางกลุ่ม · Send-Q ต่อการเชื่อมต่อ, จำนวนอัปเดตที่ทิ้งต่อไคลเอนต์
- จุดที่ต้องดู
- ความยาวคิวส่ง จำนวนอัปเดตที่ทิ้ง และสาเหตุการหลุดของแต่ละไคลเอนต์ที่เซิร์ฟเวอร์เกมบันทึกไว้ และ Send-Q กับ cwnd ของการเชื่อมต่อนั้นคู่กันจาก ss -tni บนเซิร์ฟเวอร์
- สัญญาณว่าใช่
- เฉพาะการเชื่อมต่อของคนที่วาร์ปหรือหลุดเท่านั้นที่ Send-Q เต็มตลอด และ log ของเกมบันทึกว่าทิ้งอัปเดตของคนนั้นหรือตัดการเชื่อมต่อเพราะคิวส่งเกิน
- สัญญาณว่าไม่ใช่
- Send-Q ว่างแต่ยังวาร์ป: ไม่ใช่ปัญหาฝั่งการส่งของเซิร์ฟเวอร์ ให้ดูแพ็กเก็ตหายบนเน็ตของคนนั้น (“แพ็กเก็ตหายช่วงไร้สาย”) หรือ interpolation บนหน้าจอ
- วิธีตรวจ
- ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
แหล่งอ้างอิง
- IP Sysctl Linux kernel
tcp_wmem: ค่าสูงสุดของ send buffer ที่ปรับอัตโนมัติ ค่าเริ่มต้น 64 KB–4 MB (ตามหน่วยความจำ), tcp_notsent_lowat และ TCP_NOTSENT_LOWAT จำกัดปริมาณข้อมูลที่ยังไม่ได้ส่ง - net/ipv4/tcp_diag.c (Linux v6.12) Linux kernel
ค่า Recv-Q และ Send-Q ของ ss: ซ็อกเก็ตที่ listen อยู่คือจำนวนการเชื่อมต่อที่รอ accept และขีดจำกัด backlog, ซ็อกเก็ตที่เชื่อมต่อแล้วคือไบต์ที่แอปยังไม่ได้อ่าน และไบต์ที่ส่งไปแล้วแต่ยังไม่ได้รับ ACK
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L8 ซ็อกเก็ตและโปรโตคอล
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (วาร์ป)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง