แนวทางที่เราทำให้เซิร์ฟเวอร์ VALORANT ทำงานได้ยอดเยี่ยมที่สุดนับตั้งแต่ปล่อยตัวมา

มาดูกันว่าทีมผู้พัฒนาของเราเปลี่ยนวิกฤติให้กลายเป็นเซิร์ฟเวอร์ที่ทำงานได้ยอดเยี่ยมที่สุดตั้งแต่ปล่อยตัวออกมาได้ยังไง

การปล่อยตัวเซิร์ฟเวอร์ 128-tick เป็นสิ่งที่เราให้ความสำคัญมานานตั้งแต่ก่อนที่จะปล่อยตัว VALORANT ออกมาเลย เป้าหมายของเราคือการมอบประสบการณ์การแข่งขันระดับโลกด้วยเซิร์ฟเวอร์ 128-tick ให้กับทุกคน เข้ามาอ่านเพิ่มเติมว่าเราทำเป้าหมายนี้ให้สำเร็จก่อนปล่อยตัวยังไงได้ที่บทความ VALORANT’s 128-Tick Servers

การบำรุงรักษาประสิทธิภาพของเซิร์ฟเวอร์ก็เหมือนกับการสู้ศึกที่ไม่มีวันจบ การที่ต้องมีฟีเจอร์ใหม่ ๆ เข้ามาอยู่ตลอดนั้นทำให้เราจำเป็นต้องระวังเรื่องงบด้านประสิทธิภาพให้มาก เพื่อให้สามารถคงเซิร์ฟเวอร์ 128-tick ต่อไปได้ เมื่อเวลาผ่านไป รอยสึกกร่อนน้อย ๆ จะมารวมกัน บางครั้งก็เกิดเป็นรอยใหญ่ที่ต้องลงมือแก้ทันทีอยู่บ้าง

เมื่อเดือนสิงหาคม ปี 2022 เราได้พบรอยร้าวที่มีผลต่อประสิทธิภาพของเซิร์ฟเวอร์ที่ร้ายแรงที่สุดนับตั้งแต่เกมปล่อยตัวออกมา ปัญหานี้กระทบต่อ VALORANT ในเกมที่มีผู้เล่นมากกว่า 10 คนตามปกติ (เช่น โหมดสร้างห้องเองและการแข่งขันอีสปอร์ต) การแก้ปัญหานี้ต้องใช้แรงใจจากกองทัพน้อย ๆ ของเหล่าวิศวกร โปรดิวเซอร์ ทีมบริหาร และทีมอีสปอร์ตหน้างานจริงในอิสตันบูล โดยแก้กันก่อนหน้าจะเริ่มอีเวนต์การแข่งขันหนึ่งที่ใหญ่ที่สุดของเราในปีทีเดียว

การสืบสวนระหว่างแก้ปัญหานี้ได้เผยให้เห็นว่ามีหลายจุดที่เราจะสามารถปรับปรุงเฟรมไทม์ของเซิร์ฟเวอร์ได้ ซึ่งจะทำให้เพิ่มประสิทธิภาพขึ้นได้มาก ดังนั้นนับตั้งแต่แพตช์ 5.07 มา ผู้เล่นจึงได้เล่นในเซิร์ฟเวอร์ 128-tick ที่มีความเสถียรที่สุดตั้งแต่ปล่อย VALORANT ออกมาเมื่อเดือนมิถุนายน ปี 2020

ผม Aaron Cheney วิศวกรจากทีมพัฒนาประสิทธิภาพของ VALORANT และเราจะมาดูภาพรวมกันว่าบทความนี้จะมีอะไรกันบ้าง:

  • อธิบายว่าทีมพัฒนาประสิทธิภาพตรวจพบรอยร้าวเหล่านั้นได้ยังไง
  • ถกประเด็นเรื่องรอยร้าวใหญ่ที่เราพบก่อนที่จะเริ่มต้น Champions 2022
  • แสดงความคิดเห็นเรื่องการรับมือปัญหา เผยข้อมูลเชิงลึกว่าพวกเราจัดการปัญหาเร่งด่วนกันยังไง และอธิบายสิ่งที่เราได้เรียนรู้จากเหตุการณ์นี้

อย่างแรกเลย ผมจะเล่าว่าเราจับจุดเรื่องรอยร้าวในประสิทธิภาพของเซิร์ฟเวอร์ได้ยังไง และอธิบายเบื้องหลังเพื่อให้เข้าใจถึงความร้ายแรงของรอยร้าวนั้นกัน

เรารู้ได้ยังไงว่าประสิทธิภาพมันลดลง?

การที่ประสิทธิภาพลดลงเนี่ยเป็นสิ่งที่เลี่ยงไม่ได้เลยในการพัฒนาเกม เกมเป็นระบบที่ซับซ้อนมากและมีส่วนที่มีการเปลี่ยนแปลงได้อยู่หลายส่วน โดยแต่ละส่วนก็สามารถส่งผลต่อประสิทธิภาพโดยรวมได้ ความซับซ้อนพวกนี้ก็ขยายออกมาเป็นฟีเจอร์และระบบต่าง ๆ ที่เพิ่มเข้ามาเรื่อย ๆ การตรวจจับว่ามันมีประสิทธิภาพลดลงไหมและมีต้นตอสาเหตุมาจากที่ใดนั้นเป็นสิ่งสำคัญมาก

VALORANT มีทีมพัฒนาประสิทธิภาพผู้ทุ่มเทคอยรับผิดชอบส่วนนี้อยู่ ทีมของเรามีหน้าที่ตรวจสอบ บำรุงรักษา และปรับปรุงทั้งตัวไคลเอนต์และประสิทธิภาพของเซิร์ฟเวอร์บนฮาร์ดแวร์ประเภทต่าง ๆ เราใช้เครื่องมือและกระบวนการหลากหลายเพื่อตรวจจับปัญหาการเสื่อมประสิทธิภาพให้ได้ตั้งแต่เนิ่น ๆ และแก้ไขมันก่อนจะกระทบถึงผู้เล่น

เป้าหมายประสิทธิภาพของเซิร์ฟเวอร์

การบำรุงรักษาเซิร์ฟเวอร์ 128-tick นั้นหมายความว่าแต่ละเฟรมของเซิร์ฟเวอร์จะต้องประมวลออกมาเสร็จสมบูรณ์ภายในเวลา 7.8125 มิลลิวินาที (ms) แต่หากทำแบบนั้น ก็ต้องใช้ CPU Core ทั้งแผงเพื่อเกม ๆ เดียวเลย เพื่อให้ได้ความต้องการและเป้าหมายตามที่เราตั้งไว้สำหรับเซิร์ฟเวอร์ 128-tick เซิร์ฟเวอร์ของ VALORANT จึงถูกปรับให้สามารถใช้ 3 เฟรมในประมาณ 7.8 ms ได้ ซึ่งหมายความว่าโดยเฉลี่ยแล้วแต่ละเฟรมของเซิร์ฟเวอร์จำเป็นต้องใช้เวลาสั้นกว่า 2.6 ms และในความเป็นจริงแล้ว เป้าประสิทธิภาพของเฟรมไทม์ของเซิร์ฟเวอร์คือ 2.34 ms โดยเป้าประสิทธิภาพนี้ทำให้เราบรรลุเป้าหมายสำคัญสองอย่าง:

  1. ทำให้ได้ Headroom ที่จำเป็น การมีพื้นที่เสริมในเป้าประสิทธิภาพช่วยให้เราดูดซับเฟรมที่ยาวขึ้นได้โดยไม่กระทบเซิร์ฟเวอร์ 128-tick ทำให้เซิร์ฟเวอร์ของเรามีความยืดหยุ่นในหลายสถานการณ์มากขึ้นและมีพื้นที่เหลือสำหรับ OS, การตั้งเวลา และการรันซอฟต์แวร์อื่น ๆ บนเซิร์ฟเวอร์
  2. ทำให้ VALORANT มีศักยภาพทางการเงิน โครงสร้างพื้นฐานของเซิร์ฟเวอร์เป็นสิ่งที่มีราคาสูงมาก แม้มันจะดูเจ๋งดีถ้าแต่ละเกมของ VALORANT รันบนฮาร์ดแวร์ตัวเดียวไปเลย แต่นั่นก็เป็นรูปแบบธุรกิจที่ไม่ยั่งยืนเอาซะเลย

AskVal_Feb22_Champions_Article_Graph_3_TH_Mar30.jpg

การตรวจวัดในปัจจุบันและการทำนายอนาคต

ทีมพัฒนาประสิทธิภาพใช้ประโยชน์จากแหล่งข้อมูลหลักสองอย่างในการตรวจพบปัญหาการเสื่อมประสิทธิภาพ:

  1. Prerelease Data – คือข้อมูลที่สร้างขึ้นจากหลายแหล่งข้อมูล มีทั้งการทดสอบภายใน การทดสอบอัตโนมัติ และ PBE
  2. Live Data – ส่วนนี้คือข้อมูลที่สร้างขึ้นจากผู้เล่นในสถานการณ์จริงทั่วโลก

Prerelease Data ทำให้เราทำนายอนาคตได้ด้วยการวิเคราะห์คอนเทนต์และฟีเจอร์ที่ยังไม่ปล่อยตัวออกไป ข้อมูลชุดนี้มีขนาดเล็กกว่า Live Data มาก หมายความว่ามันยากจะหาบทสรุปเพราะมีสิ่งรบกวนและความแปรปรวนอยู่ หรือก็คือหากมีตัวอย่างไม่มากเท่าไหร่ ก็จะเห็นแนวโน้มได้ไม่ชัดนั่นเอง Corner case (สถานการณ์ไม่ปกติ) เองก็อาจเกิดขึ้นโดยไม่ได้รับการทดสอบได้ด้วยเช่นกัน เพราะถึงยังไงเราก็ไม่สามารถทดสอบทุกอย่างได้ครบถ้วนอยู่ดี

กลับกันแล้ว Live Data ทำให้เราเข้าใจประสบการณ์ผู้เล่นในปัจจุบันได้จากการประเมินว่าผู้เล่นเห็นอะไรในเกมจริงบ้าง ข้อมูลชุดนี้มันใหญ่กว่าข้อมูลภายในมาก ๆ (มันสร้างข้อมูลขึ้นมานับพันล้านเลย) ซึ่งทำให้ประมวลผลได้ยาก เราจึงนำข้อมูลมารวมกันเพื่อสรุปผลออกมา

พูดง่าย ๆ ก็คือ Prerelease Data ทำให้เราสามารถทำงานเชิงรุกกับเหล่าเนื้อหาที่ยังไม่ปล่อยออกไปได้ ในขณะที่ Live Data ทำให้เราสามารถทำงานเชิงตอบโต้กับสถานการณ์ที่เกิดขึ้นแบบสด ๆ ได้ เมื่อรวมกันแล้ว ข้อมูลทั้งสองชุดก็ทำให้สามารถรับรู้ถึงปัญหาใหญ่ได้

เกมโดยทั่วไปของ VALORANT

ผู้เล่นส่วนมากของ VALORANT จะเล่นเกมในโหมด Unrated และ Competitive กัน ทั้งสองโหมดนั้นเป็นเกมรูปแบบเดียวกันที่มีผู้เล่น 10 คน แค่มีการเดิมพันที่ต่างกันก็เท่านั้น แม้จะมีโหมดอื่น ๆ ในเล่น VALORANT ให้เล่นได้อยู่อีกมากมาย (โหมด Replication, โหมด Spike Rush, โหมด Deathmatch, อื่น ๆ) เราก็ใช้ทรัพยากรจำนวนมากไปกับโหมดเกม Spike เพื่อให้มันมอบประสบการณ์ที่ดีที่สุดเท่าที่จะเป็นไปได้แก่ผู้เล่น

ในขณะที่เกมส่วนใหญ่ใน VALORANT มีผู้เล่น 10 คนพอดี แต่ในสถานการณ์พิเศษ (และสำคัญ) บางครั้งก็จำเป็นต้องมีมากกว่านั้น

เกมโหมดพิเศษใน VALORANT

มันเป็นโหมดที่มีไคลเอนต์ถึง 22 ตัวเชื่อมต่อในโหมดเกม Spike ระหว่างการถ่ายทอดอีสปอร์ต พวกมันเป็นโหมดสร้างห้องเองที่จะช่วยมอบประสบการณ์การรับชมที่ดีให้ได้ จึงไม่แปลกที่จะได้เห็นรูปแบบเหล่านี้ในเกมพวกนี้:

  • ผู้เล่นจะได้รับ 10 ที่ (ทีมละ 5)
  • โค้ชจะได้รับ 2 ที่ (ทีมละ 1)
  • ผู้สังเกตการณ์ที่อยู่ในความควบคุมของทีมถ่ายทอดสดของเราจะได้รับ 10 ที่ ที่นั่งพิเศษเหล่านี้จะทำให้แฟน ๆ ได้รับประสบการณ์การรับชมที่ดีขึ้น ไม่ว่าจะรับชมจากทางบ้านหรือจากในสนามก็ตาม!

เกมที่มีไคลเอนต์ 22 ตัวเหล่านี้ไม่ใช่โหมดเกมปกติที่มีใน VALORANT ไคลเอนต์แต่ละตัวที่เชื่อมต่อเข้าเกมจะต้องได้รับการตรวจสอบจากเซิร์ฟเวอร์ เพื่อให้สามารถรับข้อมูลจำเป็นจากเซิร์ฟเวอร์และแสดงภาพบนจอได้ ซึ่งปกติแล้วมันจะเป็นปัญหาในการทำงานแบบสด ๆ แต่สำหรับอีสปอร์ตแล้ว เราใช้ฮาร์ดแวร์ภายในที่สามารถรักษาความสมบูรณ์ในการเล่นเกมให้เหล่านักกีฬาได้

เป้าประสิทธิภาพของโหมดเกมพิเศษใน VALORANT

จำเป้าประสิทธิภาพของเซิร์ฟเวอร์ก่อนหน้านี้กันได้ไหม? เป้าที่ว่าจะทำให้ได้เฟรมเซิร์ฟเวอร์ใน 2.34 ms นั้นมีไว้เพื่อโหมดเกมปกติใน VALORANT ที่มีผู้เล่น 10 คน ในกรณีที่มีผู้เล่นมากกว่า 10 คนเชื่อมต่อเข้าเกมนั้น ความคาดหวังของเราคือการที่ประสิทธิภาพจะสเกลไปตามจำนวนผู้เล่นที่เพิ่มเข้ามาในรูปแบบเส้นตรง

ยกตัวอย่างเช่น เมื่อมีไคลเอนต์ 22 ตัว เฟรมไทม์เฉลี่ยจะสเกลขึ้นมาอีก 2.2 เท่าจาก 2.34 ms ไปเป็น 5.2 ms ซึ่งก็ยังน้อยกว่า 7.8 ms ที่เป็นเกณฑ์ของเฟรมไทม์ที่จำเป็นเพื่อให้เซิร์ฟเวอร์ 128-tick คงอยู่ได้

จากประสบการณ์ที่เรามีกับโหมดเกมพิเศษของ VALORANT และความเข้าใจในประสิทธิภาพเซิร์ฟเวอร์ของเราแล้ว นี่เป็นวิธีคาดการณ์ข้อมูลประสิทธิภาพที่ถูกต้องจากเกมโหมดปกติเพื่อทำความเข้าใจโหมดเกมพิเศษ

แต่จะเกิดอะไรขึ้นหากมีอะไรเปลี่ยนไปล่ะ? ถ้าประสิทธิภาพเซิร์ฟเวอร์ไม่ได้สเกลไปตามจำนวนไคลเอนต์ที่เชื่อมเข้ามาในรูปแบบเส้นตรงล่ะ?

ความเสื่อมถอยของเซิร์ฟเวอร์

เรามาย้อนเวลาไปเมื่อเดือนสิงหาคมปี 2022 กันก่อน สัญญาณเตือนถึงปัญหาแรกมันเกิดขึ้นในช่วงทดสอบตัวไคลเอนต์ 22 ตัวนี่แหละ ผู้เล่นในช่วงทดสอบสังเกตเห็นว่า Tick ของเซิร์ฟเวอร์มันดูผันผวนไป และรู้สึกว่าเกมเพลย์โดยทั่วไปก็เกิดความไม่ลื่นไหลขึ้น ซึ่งพออัดวิดีโอตอนเล่นเกมก็ยืนยันได้ว่ามันมีบางอย่างผิดปกติไปจริง ๆ เราโชคดีมากที่เจอปัญหานี้ เพราะช่วงทดสอบการใช้งานไคลเอนต์ 22 ตัวในตอนนั้นยังไม่ใช่อะไรที่เป็นมาตรฐานของเราด้วยซ้ำ ระหว่างที่กำลังสับเปลี่ยนทีมและเตรียมพร้อมสำหรับ Champions 2022 ก็มีผู้พัฒนา VALORANT ส่วนหนึ่งจำได้ว่าต้องมีการทดสอบการใช้งานไคลเอนต์ 22 ตัวจากผู้ทำการทดสอบด้วย

แม้จะยังไม่ถึงเวลาลั่นระฆังเตือนถึงปัญหา แต่เราก็อยากตรวจสอบปัญหาโดยทันที รีบหาทางแก้มันเสีย และลงมือแก้ไขไปเลย

ตรวจสอบปัญหา

ข้อมูลชี้ประเด็นเพียงชุดเดียวนั้นไม่สามารถชี้ให้เห็นถึงแนวโน้มโดยรวมได้ เราเริ่มจากการประมวลผลทางไกลจากเกมในสถานการณ์จริงของเรา เพื่อให้เข้าใจความร้ายแรงและขอบเขตของปัญหา เราแยกเกมด้วยจำนวนไคลเอนต์ที่เชื่อมต่อเข้ามา โดยมีตั้งแต่ 10 ไปจนถึง 22 ตัว ซึ่งสิ่งที่เราพบมันน่าตกใจมาก

ถึงจะไม่รู้ต้นเหตุปัญหาแน่ชัด แต่กราฟมันแสดงให้เห็นถึงความสัมพันธ์อันน่าตกใจระหว่างจำนวนไคลเอนต์ที่เชื่อมต่อและประสิทธิภาพเซิร์ฟเวอร์ ปัญหาคือมันไม่ได้สเกลประสิทธิภาพไปตามจำนวนผู้เล่นแบบเส้นตรงเนี่ยสิ

ซึ่งมันยืนยันว่าเราได้มีปัญหาใหญ่ให้แก้กันแล้ว ยิ่งมันเป็นช่วงใกล้กับ Champions 2022 ที่จะเข้ามาในแพตช์ 5.04 ด้วย เราเลยลั่นระฆังเตือนและเริ่มหาทางรับมือปัญหาทันที

AskVal_Feb22_Champions_Article_Graph_2_TH.jpg

(ชาร์ทนี้จะแสดงเฟรมไทม์ของเซิร์ฟเวอร์แยกตามแพตช์ แต่ละเส้นจะแทนจำนวนไคลเอนต์ โดยมีตั้งแต่เกมปกติที่มี 10 ไคลเอนต์ ไปจนถึงเกมที่มีสูงสุดถึง 22 ไคลเอนต์ ตามที่เราคาดไว้ ประสิทธิภาพของเซิร์ฟเวอร์แย่ลงเรื่อย ๆ เมื่อมีไคลเอนต์เชื่อมเข้ามามากขึ้น แต่กราฟก็มาพุ่งทะยานขึ้นที่แพตช์ 5.03 ซึ่งหมายความว่ามันไม่ได้สเกลเป็นเชิงเส้นแล้ว)

รับมือกับปัญหา

โดยปกติแล้วการรับมือปัญหาก็หมายถึงการบรรเทาผลกระทบจากมันทั้งที่ยังไม่เข้าใจสาเหตุอย่างถ่องแท้ เทคนิคนี้ถูกใช้ในทางการแพทย์เพื่อประเมินสถานการณ์และเพื่อ “ห้ามเลือด” และในรูปแบบเดียวกัน Riot ก็ได้ใช้เทคนิคนี้ในการรับมือกับปัญหาปัจจุบันได้อย่างเร่งด่วนเช่นกัน

เราจึงรับมือกับปัญหาด้วยสองสิ่งนี้

การสร้างแผนฉุกเฉิน

อย่างแรกเลย ทีมบริหารของ VALORANT ร่วมมือกับพาทเนอร์ในอิสตันบูลเพื่อสร้างแผนฉุกเฉินขึ้นมา เราคิดแผนขึ้นมาเพื่อพิจารณาว่าหากเราแก้ปัญหาไม่ทัน Champions 2022 จะเกิดอะไรขึ้น

ในเมื่อเราเข้าใจว่าปัญหาจะสเกลตามจำนวนไคลเอนต์ที่เชื่อมต่อเข้ามา เราจึงอยากรู้ว่าจำนวนผู้สังเกตการณ์ที่น้อยที่สุด แต่ไม่กระทบประสบการณ์การรับชมอีสปอร์ต จะอยู่ที่จำนวนเท่าไหร่ การรันไคลเอนต์ 22 ตัวใช้ไม่ได้แล้วแน่ ๆ... งั้นโดยทฤษฎีแล้ว เราสามารถรันไคลเอนต์ในสภาพการณ์แบบนี้ได้กี่ตัวกันล่ะ? เราจับมือกับสหายในวงการอีสปอร์ตของเรา และได้คำตอบมาว่าไคลเอนต์ 15 ตัวจะยังทำให้เซิร์ฟเวอร์ 128-tick รันต่อไปอย่างมั่นคงได้ ในขณะที่สามารถใส่ผู้สังเกตการณ์ทีมอีสปอร์ตได้ 5 ที่เพื่อทำการถ่ายทอดสด ที่ทำแบบนั้นได้ก็เพราะ Headroom ที่เราติดตั้งไว้ในเฟรมไทม์ของเซิร์ฟเวอร์ปกตินั่นเอง

การหาต้นสายปลายเหตุ

อย่างที่สอง ผู้พัฒนา VALORANT ยังคงทำการสืบหาต่อไปเพื่อให้เข้าใจปัญหาได้ดีขึ้นและหาต้นตอของปัญหาการเสื่อมประสิทธิภาพให้พบ เมื่อเกิดเรื่องใหญ่แบบนี้ขึ้น มันก็ไม่น่าจะเชื่อมถึงระบบอื่น ๆ ด้วย

เราคิดว่าเราอาจจะโชคดีและหาต้นตอปัญหาพบโดยเร็ว จากนั้นก็ลงมือแก้ปัญหาก่อนเริ่ม Champions 2022 ได้ น่าเสียดายที่มันไม่ใช่แบบนั้น

แก้ไขปัญหาความเสื่อมถอยของเซิร์ฟเวอร์

เราจับปัญหานี้ได้ครั้งแรกเมื่อวันที่ 25 สิงหาคม 2022 และแก้ไขได้ในอีกหนึ่งอาทิตย์ต่อมา ในช่วงระยะเวลา 7 วันนั้น วิศวกร VALORANT หลายคนได้ถูกดึงเข้ามาช่วยหาทางแก้ที่น่าจะเป็นไปได้ออกมา

ในการสืบหาวันแรก เราก็ตัดสินได้ว่าโค้ดเบสส่วนไหนที่ทำให้เกิดปัญหานี้ ซึ่งมันก็คือส่วน Replication (ไม่ ๆ อันนี้ไม่ใช่โหมดเกมนะ) Replication คือวิธีที่ Unreal ใช้คงความเสถียรระหว่างเซิร์ฟเวอร์กับตัวไคลเอนต์ ด้วยการซิงโครไนซ์ Properties บน Actors และ Components คุณสามารถเข้าไปอ่านเกี่ยวกับระบบ Replication ของ Unreal ได้ที่นี่

ลำดับความสำคัญในตอนแรกของเราคือการวิเคราะห์ความเปลี่ยนแปลงระหว่างแพตช์ 5.02 และ 5.03 เพื่อหาหลักฐานว่ามีอะไรเปลี่ยนไปเพราะ Replication หรือเปล่า ซึ่งก็เป็นเรื่องยาก ในเมื่อเราเพิ่งจะอัปเกรดไปเป็น Unreal Engine 4.26 ซึ่งหมายความว่ามีเอนจินส่วนหลักหลายส่วนที่ถูกปรับแต่งไป (อ่านเพิ่มเติมเกี่ยวกับการอัปเดต Unreal Engine ของ VALORANT ได้ ที่นี่ ในเธรด Twitter โดย Marcus Reid หัวหน้าฝ่ายเทคโนโลยีของ VALORANT)

การสืบสวน Replication ไม่ง่ายเลยจริง ๆ มันไม่ใช่ระบบที่ต้องการความสนใจจากผู้พัฒนา VALORANT มาก เพราะเราได้วางแผนปฏิบัติงานที่มีประสิทธิภาพ (Best Practice) ไว้หลายปีแล้ว แล้วก็ไม่ใช่ระบบที่สร้างขึ้นจากวิศกรของ Riot เองด้วย เราทำการปรับเอนจินพื้นฐานเพื่อให้ตรงตามความต้องการ แต่ไม่ได้เชี่ยวชาญมันลึกซึ้งอะไรขนาดนั้น

ต่อมา เราจึงแบ่งเกมส่วนต่าง ๆ ออกมา เพื่อหาความต่างระหว่างแพตช์ 5.02 และ 5.03 โดยมีเป้าหมายให้สามารถบีบขอบเขตต้นตอปัญหาให้แคบลงได้ เราใช้ประโยชน์จากเครื่องมือสร้างโปรไฟล์ของ Unreal และเครื่องมือภายในของ Riot เพื่อเทียบรูปแบบการทำงานระหว่างแพตช์ทั้งสอง ทำให้นำเราไปสู่บทสรุปว่าตัวละคร อาวุธ และสกิล มีการประมวลผลซ้ำมากขึ้นกว่าเดิมในแพตช์ 5.03 เมื่อเทียบกับแพตช์ 5.02

โดยเราได้ออกสำรวจลู่ทางไว้สองแบบในระหว่างนี้ด้วย

  1. ค้นหาตัว ปั ญ ห า และแก้ไขมันซะ นี่เป็นสถานการณ์ที่ดีที่สุดที่เราอยากได้เลยล่ะ
  2. ค้นหาโอกาสในการปรับปรุงประสิทธิภาพอื่น ๆ หากเราสามารถหาพื้นที่ในจุดอื่นที่สามารถปรับปรุงได้ (มากพอที่จะกู้เอาเฟรมไทม์ที่หายไปคืนมาได้) เราก็จะสามารถคุมประสิทธิภาพได้เหมือนเดิม แม้จะไม่สามารถแก้ปัญหาเดิมได้ก็ตาม

วิศวกรหลายคนได้ติดตามเส้นทางการสืบหาของเราไปเพื่อทดสอบแก้บั๊กและทำการปรับปรุงประสิทธิภาพ ระหว่างนั้น วิศวกรหลายคนก็เริ่มคุ้นเคยและเชี่ยวชาญในส่วนของ Replication เราพบว่ามีโอกาสหลายจุดที่เราสามารถปรับปรุงประสิทธิภาพให้ดีขึ้นในช่วงนี้ด้วย แต่หากนำมาใช้จะเสี่ยงเกินไป เราเลยบันทึกไว้เผื่อได้ทำในอนาคตแทน

ในวันที่ 1 กันยายน 2022 เราก็ได้พบปัญหาเข้า นั่นคือมีโค้ดบรรทัดหนึ่งจากการอัปเกรดเอนจิน UE 4.26 ที่ทำให้ Replication เกิดขึ้นมากเกินควร ภายใต้เงื่อนไขบางอย่างที่เกิดขึ้นบ่อยครั้งใน VALORANT ส่งผลให้เกิดการเสื่อมประสิทธิภาพ ซึ่งจะยิ่งเลวร้ายลงเมื่อมีไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์มากขึ้น แม้ปัญหามันจะพบเห็นได้ในเกมโหมดปกติ 10 คน แต่พอเป็นไคลเอนต์ 22 ตัว มันจะไม่สามารถเล่นเกมได้เลย

เราจึงระบุหาการเสื่อมประสิทธิภาพออกมาได้ การแก้ไขไม่ใช่เรื่องเสี่ยงอะไร และเราค่อนข้างมั่นใจพอสมควร มันเป็นเรื่องเยี่ยมที่สุดเลย เราไม่ได้ดื่มฉลองกันทันทีหรอกนะ แต่ก็มีการปรับโค้ดไปในแบบที่น่าพึงพอใจอยู่

หลังจากนั้น

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

ปล่อยตัวแก้ออกมา

แม้เราจะได้รับการแก้ไขออกมาในวันที่ 1 กันยายน 2022 แต่ก็ไม่ได้ปล่อยออกมาใช้ในระบบของอีสปอร์ต จนกระทั่งถึงวันที่ 8 กันยายน 2022 หลังจากรอบแบ่งกลุ่ม เพื่อให้เวลาในช่วงทดสอบและตรวจสอบเพิ่มเป็นพิเศษเพื่อลดความเสี่ยงลง และเพื่อให้มันกระทบต่อทีมต่าง ๆ ในอิสตันบูลให้น้อยที่สุด

ส่วนเกมในสภาพแวดล้อมจริงของเราได้รับการแก้ไขกันไปในแพตช์ 5.05 ทำให้ประสิทธิภาพเพิ่มขึ้นสูงทีเดียว

หลังจากผ่าน Champions 2022

ความสนุกมันไม่ได้จบลงที่แพตช์ 5.05 หรอกนะ ในช่วงอาทิตย์ที่เราทำการค้นระบบ Replication เราพบจุดที่สามารถปรับปรุงได้อีกมากมาย และเราก็มีกำหนดจะพัฒนาพวกมันต่อไป ในตอนนั้นหากนำมาปรับใช้เลยก็จะเสี่ยงเกินไป เพราะมันไม่ได้ช่วยแก้ปัญหาที่ต้นตอ หลังจากแก้ปัญหาการเสื่อมประสิทธิภาพเดิมได้แล้ว เราก็ฉวยจังหวะที่เพิ่งได้เรียนรู้ Replication จนเชี่ยวชาญมาแก้ปัญหาหลาย ๆ ด้านที่เรารู้สึกว่าจะสามารถยกระดับประสิทธิภาพเซิร์ฟเวอร์ขึ้นได้อีก

ซึ่งก็ทำให้ประสิทธิภาพมันดีขึ้นจริง ๆ มันช่วยลดเฟรมไทม์โดยรวมของเซิร์ฟเวอร์ได้ถึง 15% เมื่อเทียบกับจำนวนก่อนหน้าที่จะเกิดปัญหาเสื่อมประสิทธิภาพ ทั้งยังช่วยลดความแปรปรวนในทุกภูมิภาค และเพิ่มความเสถียรสำหรับเฟรมไทม์ของเซิร์ฟเวอร์ด้วย

นับตั้งแต่แพตช์ 5.07 เฟรมของเซิร์ฟเวอร์มากกว่า 99.3% ก็สามารถทำงานตามเงื่อนไขอันเข้มงวดของเซิร์ฟเวอร์ 128-tick ของเราได้ หมายความว่าผู้เล่นจะได้สนุกไปกับเซิร์ฟเวอร์ที่มีความมั่นคงและเสถียรที่สุดนับตั้งแต่ปล่อย VALORANT ออกมาทีเดียว

AskVal_Feb22_Champions_Article_Graph_1_TH.jpg

(ชาร์ทนี้จะแสดงเฟรมไทม์ของเซิร์ฟเวอร์แยกตามแพตช์ แต่ละเส้นจะแทนจำนวนไคลเอนต์ โดยมีตั้งแต่เกมปกติที่มี 10 ไคลเอนต์ ไปจนถึงเกมที่มีสูงสุดถึง 22 ไคลเอนต์ หลังจากเกิดปัญหาการเสื่อมประสิทธิภาพครั้งใหญ่ไปในแพตช์ 5.03 และ 5.04 เราก็แก้ไขมันได้ และกลับมาสู่ค่าเดิมในแพตช์ 5.05 ส่วนการปรับปรุงอื่น ๆ นั้นได้ปล่อยออกมาในแพตช์ 5.07 ซึ่งทำให้เห็นถึงประสิทธิภาพเซิร์ฟเวอร์ที่สูงขึ้นถึง 15% ก่อนพบปัญหาการเสื่อมประสิทธิภาพ)

สิ่งที่เราได้เรียนรู้

ปัญหาประสิทธิภาพที่เกิดขึ้นนี้ต้องเกณฑ์ทัพคนมารับศึกกันเลยทีเดียว ทั้งวิศวกร พาทเนอร์อีสปอร์ต ผู้ทดสอบระบบ โปรดิวเซอร์ ทีมบริหาร และทีมพาทเนอร์ผู้มีน้ำใจที่คอยให้คำแนะนำและแนวทางแก่เรา เราได้เรียนรู้หลายเรื่องจากเหตุการณ์นี้และเห็นช่องโหว่ในกระบวนการทำงานที่เราอยากจะลงมือแก้กัน

  • ควบคุมดูแลโหมดเกมพิเศษ – เรามุ่งความสนใจส่วนใหญ่ไปที่ประสบการณ์ VALORANT ในโหมดปกติที่เล่น 10 คนอย่างโหมดเกม Bomb สุดคลาสสิก ข้อมูลของเราไม่ได้แสดงให้เห็นรายละเอียดตามจำนวนผู้เล่นที่เชื่อมต่อ ทำให้เราไม่สามารถเห็นสเกลการเสื่อมประสิทธิภาพจนกระทั่งสร้างชาร์ทใหม่ขึ้นมา ตั้งแต่นั้นมาเราจึงสร้างกระบวนการใหม่ขึ้นมาเพื่อตรวจสอบและทำความเข้าใจลักษณะประสิทธิภาพโหมดเกมพิเศษของ VALORANT ที่มีมากกว่า 10 ไคลเอนต์ในนั้น
  • เพิ่มขอบเขตการทดสอบสำหรับโหมดเกมพิเศษ – ในขณะที่โหมดเกม Bomb แบบมาตรฐานที่มีผู้เล่น 10 คนจะยังเป็นส่วนสำคัญที่สุดของเราอยู่ แต่เราจะสร้างกระบวนการและวิธีทดสอบใหม่ ๆ เพื่อให้เข้าใจประสิทธิภาพเซิร์ฟเวอร์ในสภาพแวดล้อมที่มี 22 ไคลเอนต์ไปด้วย ขนาดตัวอย่างของเกมที่มี 22 ไคลเอนต์ถูกเรื่องอื่น ๆ ดันไปหมด ดังนั้นการจะเก็บข้อมูลได้หมายความว่าเราต้องทำการรันทดสอบ 22 ไคลเอนต์บ่อย ๆ ตอนนี้การรันตัวทดสอบ 22 ไคลเอนต์ถือเป็นมาตรฐานในทุก ๆ ครั้งที่มีการปล่อยแพตช์ แทนที่จะไปรันก่อนมีทัวร์นาเมนต์ใหญ่แล้ว อีกทั้งเรายังน่าจะต้องใช้กระบวนการทดสอบที่ละเอียดซับซ้อนกว่านี้ด้วย
  • สนับสนุนการพัฒนาผู้เชี่ยวชาญเฉพาะทาง (SME) – แม้จะต้องทุ่มเวลาเยอะ แต่การสร้าง SME ไว้ในทีมก็ช่วยเติมในส่วนที่ขาด และช่วยพัฒนาทุกคนขึ้นได้ วิศวกรหลายคนเริ่มเชี่ยวชาญ Replication ระหว่างที่เราแก้เรื่องเซิร์ฟเวอร์เสื่อมประสิทธิภาพในครั้งนี้ ซึ่งกลายเป็นการลงทุนที่ยอดเยี่ยมไปเลย
  • ลดความเสี่ยงให้ทัวร์นาเมนต์ – การใช้แพตช์ใหม่ใน Champions 2022 ยิ่งถ้านับว่าเราเพิ่งจะรวม Unreal Engine เวอร์ชันใหม่เสร็จแล้วด้วย ทำให้เราต้องพบกับความเสี่ยงอย่างมาก ในขณะที่เราอยากให้มีการเปลี่ยนแปลงในเกมเพลย์ (เช่น การปรับสมดุล ตัวละคร อื่น ๆ) ในทัวร์นาเมนต์ใหญ่ แต่ทัวร์นาเมนต์ในอนาคตคงไม่เอาแบบคาบเส้นตายแบบนี้แล้วล่ะ อย่างน้อยเราก็จะตรวจสอบซ้ำสักสองรอบในกรณีที่เลี่ยงไม่ได้จริง ๆ

คุณจะได้เห็นเราพัฒนาระบบนี้ต่อไปเรื่อย ๆ เพื่อผู้เล่น VALORANT ทั้งหลายอย่างแน่นอน ขอให้สนุกกับเซิร์ฟเวอร์ 128-tick และการเก็บคิลนะ!