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

คู่มือเกมแลค › L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์

ปริมาณ broadcast พุ่ง Broadcast fan-out (N×N)

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

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

ถ้าส่งการเคลื่อนไหวของผู้เล่นหนึ่งคนไปให้ทุกคนที่มองเห็น จะเกิดอัปเดตที่ต้องส่งเท่ากับจำนวนคนที่รวมตัวยกกำลังสอง

ทำไม ส่งการเปลี่ยนแปลงของผู้เล่นหนึ่งคนไปให้ทุกคนที่มองเห็น → ผลคือ ถ้า 1,000 คนมองเห็นกันทั้งหมด จะมีอัปเดต 1 ล้านรายการทุกทิก → บนหน้าจอ คิวส่งและแบนด์วิดท์เต็ม เกิดดีเลย์และแพ็กเก็ตหาย (อินพุตดีเลย์, กรอเร็ว, วาร์ป)

อาการ
อินพุตดีเลย์, วาร์ป, กรอเร็ว
ปัจจัย
ความหน่วง, แพ็กเก็ตหาย
ใครเจอ
บางจุด/บางแชนแนล, ทั้งเซิร์ฟเวอร์
เกิดเมื่อไร
ตอนคนแห่มารวมกัน
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา)
งานฝั่งทีมพัฒนาเกม
ลดความถี่อัปเดตตามระยะห่างและความสำคัญ (ศัตรูใกล้ตัวทุกทิก คนที่อยู่ไกลไม่กี่ครั้งต่อวินาที), จำกัดปริมาณที่ส่งให้แต่ละคนแล้วเติมจากสิ่งที่สำคัญก่อน, รวมหลายอัปเดตไว้ในแพ็กเก็ตเดียว, จำกัดจำนวนคนที่แสดง
งานฝั่งทีมอินฟรา
ตั้ง alert โดยเทียบแบนด์วิดท์ขาออกและจำนวนแพ็กเก็ตต่อวินาทีของแต่ละเซิร์ฟเวอร์กับขีดจำกัดเครือข่ายของ NIC และอินสแตนซ์, ตรวจว่ายังเหลือที่ว่างพอก่อนอีเวนต์ใหญ่
ตัวเลขที่ควรรู้
1,000 คน × 1,000 คน × 20 ทิก = 20 ล้านรายการต่อวินาที ถ้ารายการละ 40 ไบต์ ทั้งเซิร์ฟเวอร์จะใช้ประมาณ 6.4 Gbps และผู้รับแต่ละคนประมาณ 6.4 Mbps ถ้าจำกัดจำนวนคนที่มองเห็นไว้ 150 คน จะเหลือทั้งหมดประมาณ 1 Gbps และคนละประมาณ 1 Mbps
บนกราฟ
สูงตามจำนวนคนและโหลด · แพ็กเก็ตและไบต์ขาออกของเซิร์ฟเวอร์, จำนวนคนที่รวมตัวในจุดเดียว
จุดที่ต้องดู
txpck/s และ txkB/s (แพ็กเก็ตและ KB ที่ NIC ของเซิร์ฟเวอร์ส่งต่อวินาที) จาก sar -n DEV 1 ดูคู่กับกราฟจำนวนผู้เล่น สำหรับอินสแตนซ์บนคลาวด์ ดูตัวนับที่เกินขีดจำกัดใน ethtool -S (AWS ENA คือ bw_out_allowance_exceeded และ pps_allowance_exceeded)
สัญญาณว่าใช่
เมื่อคนรวมตัวมากขึ้น แพ็กเก็ตและไบต์ขาออกเพิ่มเร็วกว่าจำนวนคน (เกือบเท่ากำลังสอง) และตั้งแต่ตอนที่ชนขีดจำกัด ตัวนับที่เกินขีดจำกัดหรือการทิ้งแพ็กเก็ตขาออกจะเพิ่มขึ้น
สัญญาณว่าไม่ใช่
ปริมาณขาออกไม่เปลี่ยนแต่เวลาต่อทิกเพิ่มอย่างเดียว: น่าจะเป็นการคำนวณระยะมองเห็นหรือลอจิกของเกม
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)
กรณีจริง
CCP Games 2014: เซิร์ฟเวอร์ EVE Online โหลดเกินในศึกกองยานขนาดใหญ่ที่ HED-GP

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

  1. HED-GP Technical Retrospective: What a HED-ache CCP Games
    การส่งแบบ O(n²) ที่การกระทำของ n คนต้องให้ n คนเห็น เป็นปัจจัยจำกัดที่เลี่ยงไม่ได้ในศึกกองยานขนาดใหญ่
  2. Actor Priority in Unreal Engine Epic Games
    เมื่อแบนด์วิดท์ของการเชื่อมต่อเต็ม จะให้ลำดับความสำคัญกับ actor แต่ละตัว (ระยะห่าง, แนวสายตา, เวลาที่ผ่านไปนับจากส่งครั้งล่าสุด) แล้วแบ่งแบนด์วิดท์ให้ตัวที่สำคัญก่อน
  3. Detailed Actor Replication Flow in Unreal Engine Epic Games
    NetUpdateFrequency กำหนดความถี่อัปเดตของ actor แต่ละตัว และส่งตามลำดับความสำคัญ เมื่อการเชื่อมต่อเต็มแล้ว ที่เหลือจะเลื่อนไปทิกถัดไป
  4. sar(1) — Linux manual page sysstat
    rxpck/s และ txpck/s (แพ็กเก็ตที่รับและส่งต่อวินาที), rxkB/s และ txkB/s (KB ที่รับและส่งต่อวินาที) ใน sar -n DEV
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    bw_out_allowance_exceeded (เกินขีดจำกัดแบนด์วิดท์ขาออก) และ pps_allowance_exceeded (เกินขีดจำกัด PPS): จำนวนแพ็กเก็ตที่ถูกพักไว้ในคิวหรือถูกทิ้ง

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

ชั้นเดียวกัน: L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์

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

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