วิเคราะห์และเพิ่มประสิทธิภาพเกม

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

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

กระบวนการเพิ่มประสิทธิภาพเกี่ยวข้องกับขั้นตอนต่อไปนี้

  1. การวัดประสิทธิภาพโดยรวมของเกม วัดปริมาณประสิทธิภาพที่ลดลงในแต่ละฉากเพื่อระบุความผิดปกติ

  2. ตรวจสอบว่า CPU และ GPU ทำงานได้ตามขีดจำกัดหรือไม่ ระบุสาเหตุเบื้องหลัง ไม่ว่าจะเป็น CPU หรือ GPU

    เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ เครื่องมือวัดประสิทธิภาพ

  3. การเพิ่มประสิทธิภาพ CPU แก้ไขจุดคอขวดด้านประสิทธิภาพที่ระบุ

    เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ Simpleperf

  4. การเพิ่มประสิทธิภาพ GPU แก้ไขจุดคอขวดด้านประสิทธิภาพที่ระบุ

    เครื่องมือ: RenderDoc, Arm Mobile Studio, AGI, เครื่องมือเฉพาะของผู้ให้บริการ

  5. การทดสอบ A/B ทำการทดสอบ A/B เพื่อตรวจสอบประสิทธิภาพของการเพิ่มประสิทธิภาพที่ใช้ อย่างเข้มงวด

    เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ เครื่องมือวัดประสิทธิภาพ, การล็อกความถี่ของ CPU หรือ GPU และ RenderDoc

  6. กระบวนการแบบวนซ้ำนี้ (1-5) จะดำเนินต่อไปจนกว่าจะบรรลุ FPS และพารามิเตอร์ความร้อน เป้าหมายได้สำเร็จ

สิ่งที่ต้องมีก่อน

วิเคราะห์ประสิทธิภาพของเกมอย่างครอบคลุม

คุณต้องตรวจสอบประสิทธิภาพโดยรวมของเกมและระบุการเสื่อมถอยหรือความผิดปกติของประสิทธิภาพตามฉาก ก่อนเพิ่มประสิทธิภาพเกม ให้ตรวจสอบ ประสิทธิภาพปัจจุบัน เนื่องจากเกมมี UI และฉากจำนวนมาก ให้วิเคราะห์ฉากที่มีการใช้งาน CPU หรือ GPU สูง หรือเลย์เอาต์ที่ทำงานอย่างไม่คาดคิด เพื่อตรวจสอบประสิทธิภาพที่ลดลงและการใช้งาน CPU หรือ GPU ต่อฉาก

  1. วัดการลดประสิทธิภาพ: ใช้เครื่องมือวัดประสิทธิภาพเพื่อ วัดประสิทธิภาพโดยรวมของเกม วัดประสิทธิภาพในแต่ละฉาก เพื่อระบุพื้นที่ที่เฉพาะเจาะจงซึ่งมีประสิทธิภาพลดลงหรือมีความผิดปกติ
  2. ระบุฉากที่มีปัญหา: วิเคราะห์ข้อมูลเพื่อค้นหาฉากที่มีการใช้งาน CPU หรือ GPU สูง หรือฉากที่เลย์เอาต์หน้าจอไม่ให้ ประสิทธิภาพตามที่คาดไว้
  3. รวบรวมข้อมูลการติดตาม: ใช้เครื่องมือติดตามเพื่อรวบรวมข้อมูลประสิทธิภาพโดยละเอียด สำหรับฉากที่มีปัญหาที่ระบุ

ระบุคอขวดของ CPU หรือ GPU

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

  1. วิเคราะห์ข้อมูลการติดตาม: ใช้เครื่องมือที่ต้องการเพื่อวิเคราะห์ข้อมูลการติดตาม

    • Unreal Insight (Unreal Engine): วิเคราะห์การติดตามเพื่อดูเวลาสำหรับ GameThread, RenderThread และ RHIThread
      • หาก GameThread หรือ RenderThread เกินขีดจำกัดเวลาเฟรม (เช่น 33.3 มิลลิวินาทีสำหรับ 30 FPS) แสดงว่าเกมขึ้นอยู่กับ CPU
      • หาก RHIThread มีการดำเนินการเป็นเวลานานหรือคิดเป็น เวลาที่ใช้ในการแสดงผลเฟรมส่วนใหญ่ แสดงว่าเกมขึ้นอยู่กับ GPU
    ไทม์ไลน์การติดตาม Unreal Insight ที่แสดงเวลาดำเนินการของ GameThread, RenderThread และ RHIThread
    รูปที่ 2 การติดตามข้อมูลเชิงลึกของ Unreal ด้วย GameThread, RenderThread และ RHIThread (คลิกเพื่อขยาย)
    • Profiler ของ Unity (Unity): หากเธรดหลักใช้เวลานานมาก ในเครื่องหมายอย่าง Gfx.WaitForPresentOnGfxThread ขณะที่เธรดการแสดงผล แสดง Gfx.PresentFrame หรือ <GraphicsAPIName>.WaitForLastPresent แสดงว่า เกมขึ้นอยู่กับ GPU
    ไทม์ไลน์ Unity Profiler แสดงชุดข้อความหลักที่รอ Gfx.WaitForPresentOnGfxThread
    รูปที่ 3 ตัวอย่างที่ขึ้นอยู่กับ GPU สำหรับ Unity Profiler (คลิกเพื่อขยาย)
    • Perfetto: วิเคราะห์การกำหนดค่าหลักของ CPU และรายละเอียดการดำเนินการของเธรด การวิเคราะห์นี้ช่วยให้ระบุคอขวดด้านประสิทธิภาพได้ ผ่านการตรวจสอบข้อมูลการดำเนินการของเธรดอย่างละเอียด
    • ค่าใช้จ่ายของ CPU: การติดตามระบุว่าภาระงานใน GameThread และ RenderThread ร่วมกับ VSync เป็น สาเหตุของความล่าช้าใน QueuePresent ของ RHI Thread ซึ่ง แสดงให้เห็นถึงสถานการณ์ที่ CPU ทำงานหนัก

      การติดตาม Perfetto ที่แสดงเวลาในการดำเนินการสำหรับ GameThread, RenderThread และ RHIThread
      รูปที่ 4 การติดตาม Perfetto พร้อมรายละเอียดการดำเนินการของ CPU (คลิกเพื่อขยาย)
    • ค่าใช้จ่ายของ GPU: หากเวลาที่ GPU ใช้ในการประมวลผลจนเสร็จเกินขีดจำกัดเวลาที่ใช้ในการแสดงผลเฟรม เช่น 25 มิลลิวินาที แสดงว่าเกมขึ้นอยู่กับ GPU การติดตามระบุว่า การทำงานของ GPU ใช้เวลานานกว่า 25 มิลลิวินาที ซึ่งแสดงถึงสถานการณ์ที่ GPU เป็นตัวจำกัด

      การติดตาม Perfetto แสดงบล็อกการรอให้ GPU เสร็จสิ้นที่รอให้ GPU เสร็จสิ้น
      รูปที่ 5 การติดตาม Perfetto ที่มีรายละเอียดค่าใช้จ่ายของ GPU (คลิกเพื่อขยาย)
  2. ใช้คำสั่ง stat ของ Unreal Engine:

    • stat unit: เปรียบเทียบเวลาที่จัดสรรให้กับเธรดเกม วาด และ RHI หากเวลาของเกมและเวลาในการวาดต่ำ แต่เวลา RHI เกิน ขีดจำกัดเวลาเฟรมอย่างต่อเนื่อง แสดงว่าเกมขึ้นอยู่กับ GPU ตัวอย่างเช่น หาก FPS ที่จำเป็นคือ 30 (เทียบเท่ากับ 33.33 มิลลิวินาทีต่อเฟรม) และทั้งเธรดเกมและเธรดวาดภาพยังคงอยู่ในช่วง 10-15 มิลลิวินาทีอย่างต่อเนื่อง แต่ RHI เกิน 30 มิลลิวินาทีอย่างต่อเนื่อง แสดงว่ามีแนวโน้มสูงที่จะเป็นสถานการณ์ที่ GPU เป็นตัวจำกัด
    โฆษณาซ้อนทับหน่วยสถิติที่แสดงเวลาการดำเนินการของเฟรม เกม การวาด GPU และ RHIT
    รูปที่ 6 หน่วยสถิติช่วยในการประมาณเงื่อนไขที่ขึ้นอยู่กับ GPU
    • stat VulkanRHI: ตรวจสอบระยะเวลาการส่งคิวและระยะเวลาการนำเสนอคิว
    การวางซ้อน Stat VulkanRHI ที่แสดงตัวนับรอบสำหรับ Queue Submit และ Queue Present
    รูปที่ 7 Stat VulkanRHI ช่วยในการประมาณ สภาวะที่ GPU ทำงานหนัก (คลิกเพื่อขยาย)
    • stat slow: ตรวจสอบเวลาที่จัดสรรให้กับเธรดเกม, เธรดการแสดงผล และเธรด RHI เพื่อระบุอุปสรรค
  3. ตรวจสอบเมตริกประสิทธิภาพ: ใช้ผลลัพธ์จากการวิเคราะห์ประสิทธิภาพเกมอย่างละเอียด ใน Android ให้ทำดังนี้

    • ขึ้นอยู่กับ CPU: การใช้งาน CPU (ปรับให้เป็นมาตรฐาน) มากกว่า 15% โดยมีการใช้งาน GPU ต่ำและ FPS ต่ำ
    • ขึ้นอยู่กับ GPU: การใช้งาน GPU มากกว่า 90%

    โดยปกติแล้ว หาก FPS และการใช้งาน GPU ต่ำในขณะที่การใช้งาน CPU เกิน 15% สถานการณ์ดังกล่าวถือว่า CPU ทำงานหนัก

    ตารางเมตริกประสิทธิภาพที่ไฮไลต์สถานการณ์ที่ขึ้นอยู่กับ CPU และ GPU
    รูปที่ 8 เมตริกประสิทธิภาพที่มีการใช้งาน CPU และ GPU

เพิ่มประสิทธิภาพ CPU

หากการวิเคราะห์ระบุว่าเกมขึ้นอยู่กับ CPU ให้ตรวจสอบเพิ่มเติมเพื่อระบุ เธรดหรือ API ที่เฉพาะเจาะจงซึ่งทำให้เกิดคอขวด

ดูคำแนะนำโดยละเอียดได้ที่เคล็ดลับการเพิ่มประสิทธิภาพ CPU และ GPU สำหรับ Android

เพิ่มประสิทธิภาพ GPU

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

ดูคำแนะนำโดยละเอียดได้ที่เคล็ดลับการเพิ่มประสิทธิภาพ CPU และ GPU สำหรับ Android

ยืนยันประสิทธิภาพการเพิ่มประสิทธิภาพ

  1. ทำการทดสอบ A/B: สร้างบิลด์ที่มีการเพิ่มประสิทธิภาพที่ใช้งาน
  2. วัดประสิทธิภาพ: ใช้เครื่องมือและวิธีการเดียวกันจากการวิเคราะห์เริ่มต้น เพื่อวัดประสิทธิภาพของบิลด์ที่เพิ่มประสิทธิภาพแล้ว
  3. เปรียบเทียบผลลัพธ์: เปรียบเทียบข้อมูลประสิทธิภาพใหม่กับข้อมูลเริ่มต้น เพื่อยืนยันว่าปัญหาคอขวดที่ระบุได้รับการแก้ไขแล้ว และเป็นไปตามเป้าหมาย FPS และเป้าหมายด้านความร้อน
  4. ทำซ้ำ: ทำซ้ำขั้นตอนการวิเคราะห์และการเพิ่มประสิทธิภาพจนกว่าจะ ได้ประสิทธิภาพตามที่ต้องการ

ดูเพิ่มเติม