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

คู่มือเกมแลค › L8 ซ็อกเก็ตและโปรโตคอล

slow start หลัง idle Slow start after idle

ID สาเหตุ sk-slowstart · ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

เมื่อการเชื่อมต่อ idle ไปสักพัก TCP จะลด congestion window (ปริมาณที่ส่งได้ในครั้งเดียว) กลับลงมา พอต้องส่งข้อมูลก้อนใหญ่ขึ้นมากะทันหันจึงต้องแบ่งส่งหลายรอบ

ทำไม ส่งข้อมูลก้อนใหญ่ผ่านการเชื่อมต่อที่ idle อยู่ เช่น ตอนเข้าเมือง → ผลคือ congestion window ลดลงแล้ว จึงต้องแบ่งส่งเป็นหลายรอบเวลาไปกลับ → บนหน้าจอ หลังเข้าพื้นที่ ตัวละครและ NPC รอบตัวโผล่ช้าไปเท่ากับเวลาไปกลับไม่กี่รอบ (ยิ่งเซิร์ฟเวอร์อยู่ไกลยิ่งเห็นชัด)

อาการ
อินพุตดีเลย์, มองไม่เห็น/ตัวผี
ปัจจัย
ความหน่วง
ใครเจอ
เราคนเดียว
เกิดเมื่อไร
ระหว่างเดินทาง/ย้ายแมพ, หลังอยู่เฉย ๆ สักพัก
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
ลดข้อมูลตอนเข้าพื้นที่ (ส่งสิ่งที่จำเป็นก่อน)
งานฝั่งทีมอินฟรา
ปิด tcp_slow_start_after_idle (Linux, ตั้งค่าทั้งเซิร์ฟเวอร์)
ตัวเลขที่ควรรู้
ถ้า idle นานกว่า RTO congestion window จะเริ่มลดลง และถ้า idle นานมากจะลดลงเหลือประมาณ 14 KB (10 แพ็กเก็ต) ข้อมูล 100 KB จึงส่งครั้งเดียวไม่ได้ ต้องแบ่งส่งใน 3 รอบเวลาไปกลับ
บนกราฟ
สูงเฉพาะบางกลุ่ม · เวลาส่งข้อมูลหลังเข้าพื้นที่ (ผู้เล่นที่ RTT ยาว)
จุดที่ต้องดู
ค่า sysctl net.ipv4.tcp_slow_start_after_idle และ cwnd (congestion window) ใน ss -ti ของการเชื่อมต่อนั้นว่าเล็กลงหรือไม่ ตอนที่ผู้เล่นเข้าพื้นที่หลัง idle
สัญญาณว่าใช่
ค่าตั้งเป็น 1 (ค่าเริ่มต้น) และตอนเข้าพื้นที่หลัง idle cwnd ลดลงเหลือราว 10 จนการส่งถูกแบ่งเป็นหลายรอบเวลาไปกลับ ผู้เล่นที่ RTT ยาวจะเห็นของโผล่ช้ากว่า และเปลี่ยนเป็น 0 แล้วหายไป
สัญญาณว่าไม่ใช่
cwnd ยังใหญ่อยู่แต่ของยังโผล่ช้า: น่าจะเป็นการจัดการตอนเข้าพื้นที่ฝั่งเซิร์ฟเวอร์ (“spawn ทะลักเมื่อเข้าพื้นที่คนหนาแน่น”)
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)

แหล่งอ้างอิง

  1. IP Sysctl Linux kernel
    tcp_slow_start_after_idle เปิดเป็นค่าเริ่มต้น, ถ้า idle นานเท่า RTO จะลด congestion window (วิธีของ RFC 2861)
  2. RFC 5681: TCP Congestion Control IETF
    ถ้าไม่ได้ส่งข้อมูลนานกว่า RTO จะลด congestion window ให้ไม่เกิน restart window min(IW, cwnd) แล้วเริ่ม slow start ใหม่
  3. RFC 6928: Increasing TCP's Initial Window IETF
    initial window 10 segment, สูงสุด 14,600 ไบต์
  4. ss(8) — Linux manual page iproute2
    cwnd (congestion window) และ ssthresh (เกณฑ์ของ slow start) ใน -i

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L8 ซ็อกเก็ตและโปรโตคอล

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (อินพุตดีเลย์)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง