การสืบสวนอย่างละเอียดของโปรแกรมเมอร์เกี่ยวกับปัญหาประสิทธิภาพในเกมแข่งรถ Trackmania 2020 ได้จุดประกายการอย่างในชุมชนเกี่ยวกับวิธีการแก้ไขปัญหาและความสำคัญของการตรวจสอบการดัดแปลงต่างๆ ในช่วงต้นของกระบวนการวินิจฉัย
นักพัฒนาคนนี้ประสบปัญหาการสะดุดอย่างต่อเนื่อง โดยอัตราเฟรมจะลดลงจาก 160 ไปต่ำสุดที่ 90 FPS ระหว่างการเล่นเกม ในเกมแข่งรถที่เร็วอย่าง Trackmania การลดลงของประสิทธิภาพเช่นนี้สามารถทำให้รถแล่นไปได้มากกว่า 40 เมตรระหว่างเฟรม ทำให้การควบคุมอย่างแม่นยำเป็นไปไม่ได้เลย
รายละเอียดผลกระทบต่อประสิทธิภาพ:
- อัตราเฟรมเดิม: ประมาณ 160 FPS
- อัตราเฟรมที่ลดลงเนื่องจากการกระตุก: 110-90 FPS
- ระยะทางที่เดินทางได้ระหว่างการกระตุก 100ms: มากกว่า 40 เมตร
- เครื่องมือ profiling ที่ใช้: JetBrains dotTrace
วิธีการ Deep Dive Profiling ได้รับปฏิกิริยาที่หลากหลาย
โดยใช้ JetBrains dotTrace profiler นักพัฒนาได้ทำการวิเคราะห์ประสิทธิภาพของเกมอย่างครอบคลุมโดยไม่มีการเข้าถึง source code การสืบสวนนี้เผยให้เห็นรายละเอียดทางเทคนิคที่น่าสนใจ รวมถึงการมีอยู่ของระบบ overlay หลายระบบและ video decoder thread ลึกลับที่ทำงานระหว่างการเล่นเกม อย่างไรก็ตาม การตอบสนองของชุมชนได้เน้นย้ำถึงข้อผิดพลาดพื้นฐานในวิธีการแก้ไขปัญหา
ผู้ใช้ที่มีประสบการณ์หลายคนชี้ให้เห็นว่าการตรวจสอบการดัดแปลงจากบุคคลที่สามควรเป็นหนึ่งในขั้นตอนแรกๆ เมื่อวินิจฉัยปัญหาประสิทธิภาพ ข้อผิดพลาดนี้ชัดเจนมากขึ้นเมื่อพิจารณาว่านักพัฒนาได้ติดตั้ง OpenPlanet ซึ่งเป็นแพลตฟอร์มการดัดแปลงที่ขับเคลื่อนโดยชุมชนที่ได้รับความนิยมสำหรับ Trackmania พร้อมกับปลั๊กอินต่างๆ
การวิจารณ์ของชุมชนต่อลำดับการแก้ไขปัญหา
การเปิดเผยว่า third-party plugin เป็นผู้รับผิดชอบต่อปัญหาการสะดุดในท้ายที่สุดได้ดึงดูดการวิจารณ์จากชุมชน ผู้ใช้เปรียบเทียบวิธีการสืบสวนนี้กับการถอดเครื่องยนต์รถทั้งคันเพื่อวินิจฉัยปัญหาประสิทธิภาพการใช้เชื้อเพลิงในขณะที่เพิกเฉยต่อร่มชูชีพลากที่ติดตั้งไว้เมื่อเร็วๆ นี้
มันเหมือนกับว่าใครบางคนเขียนโพสต์ที่ให้รายละเอียดการถอดเครื่องยนต์รถของพวกเขาทีละขั้นตอนเพื่อหาสาเหตุว่าทำไมพวกเขาถึงได้ระยะทางต่อแกลลอนที่แย่ลง แต่จบด้วย 'โอ้ รู้มั้ย มันอาจจะเป็นเพราะร่มชูชีพลากขนาดยักษ์ที่เปิดอยู่ตลอดเวลาที่ฉันติดตั้งก่อนที่จะเริ่มได้ระยะทางต่อแกลลอนที่แย่'
การวิจารณ์มุ่งเน้นไปที่หลักการแก้ไขปัญหาที่ได้รับการยอมรับซึ่งแนะนำให้เริ่มต้นด้วยสาเหตุที่เป็นไปได้ที่ชัดเจนที่สุด โดยเฉพาะการเปลี่ยนแปลงล่าสุดหรือการดัดแปลงระบบ
การสืบสวนทางเทคนิคเผยให้เห็นรายละเอียดที่น่าสนใจ
แม้จะมีข้อกังวลเกี่ยวกับวิธีการ การสืบสวนทางเทคนิคได้เปิดเผยการค้นพบที่น่าสนใจหลายประการ การ profiling เผยให้เห็นว่า Trackmania มีปฏิสัมพันธ์กับทั้ง Steam และ Ubisoft Connect overlays พร้อมกัน และทำงาน video decoder thread อย่างลึกลับแม้ระหว่างการเล่นเกมจริงมากกว่าแค่ในเมนู
การวิเคราะห์ของนักพัฒนาแสดงให้เห็นว่า OpenPlanet มีระบบเตือนที่ออกแบบมาเพื่อตรวจจับเมื่อปลั๊กอินทำให้เกิดปัญหาประสิทธิภาพ อย่างไรก็ตาม ระบบนี้ล้มเหลวในการระบุปลั๊กอินที่มีปัญหาเพราะการสะดุดเกิดขึ้นทางอ้อมผ่าน game code ทำให้ยากต่อการติดตามกลับไปยังแหล่งที่มาของปลั๊กอินดั้งเดิม
ผลการตรวจสอบทางเทคนิค:
- เกมมีการเชื่อมต่อกับทั้ง Steam Overlay (overlay64.dll) และ Ubisoft Connect Overlay (d3doverlayrender.dll)
- มี webmdecoder thread ที่ลึกลับทำงานระหว่างการเล่นเกม
- ระบบเตือนของ OpenPlanet plugin ไม่สามารถตรวจจับปัญหาประสิทธิภาพทางอ้อมได้
- ปัญหาได้รับการแก้ไขโดยการถอนการติดตั้ง OpenPlanet modding platform
การแก้ไขและบทเรียนที่ได้เรียนรู้
หลังจากถอนการติดตั้ง OpenPlanet ปัญหาการสะดุดหายไปทันที ยืนยันสาเหตุที่เกี่ยวข้องกับปลั๊กอิน การติดตั้งแพลตฟอร์มใหม่โดยไม่มีปลั๊กอินที่มีปัญหาทำให้การเล่นเกมกลับมาราบรื่น นักพัฒนาสังเกตว่าพวกเขาไม่สามารถระบุได้ว่าปลั๊กอินใดเป็นสาเหตุของปัญหา เนื่องจากพวกเขาไม่มีรายการที่แน่นอนของการดัดแปลงที่ติดตั้งไว้ก่อนหน้านี้
กรณีนี้เน้นย้ำถึงความสำคัญของการรักษาความตระหนักรู้เกี่ยวกับการดัดแปลงระบบและการปฏิบัติตามลำดับชั้นการแก้ไขปัญหาที่ได้รับการยอมรับ แม้ว่างาน profiling ที่ละเอียดจะแสดงให้เห็นทักษะทางเทคนิคที่น่าประทับใจ ฉันทามติของชุมชนแนะนำว่าการตรวจสอบการเปลี่ยนแปลงล่าสุดและการดัดแปลงจากบุคคลที่สามควรยังคงเป็นลำดับความสำคัญในการวินิจฉัยประสิทธิภาพ
การอภิปรายยังเผยให้เห็นคำถามที่กว้างขึ้นเกี่ยวกับความรับผิดชอบของระบบนิเวศปลั๊กอินและความท้าทายในการดีบักปัญหาที่เกิดขึ้นทางอ้อมผ่าน game code ที่ถูกดัดแปลง ซึ่งเครื่องมือตรวจสอบประสิทธิภาพแบบดั้งเดิมอาจไม่สามารถระบุสาเหตุรากได้อย่างชัดเจน
อ้างอิง: Profiling without source code - how I diagnosed Trackmania stuttering