การจัดการประสิทธิภาพ

การจัดการพลังงานและประสิทธิภาพของอุปกรณ์ Android ช่วยให้มั่นใจได้ว่าแอปพลิเคชันจะทำงานได้อย่างต่อเนื่องและราบรื่นบนฮาร์ดแวร์หลากหลายประเภท ใน Android 7.0 และใหม่กว่า OEM สามารถใช้การสนับสนุนสำหรับคำแนะนำด้านประสิทธิภาพที่ยั่งยืน ซึ่งช่วยให้แอปสามารถรักษาประสิทธิภาพของอุปกรณ์ให้สอดคล้องกัน และระบุคอร์พิเศษเฉพาะเพื่อปรับปรุงประสิทธิภาพสำหรับแอปพลิเคชันเบื้องหน้าที่ใช้ CPU มาก

ประสิทธิภาพที่ยั่งยืน

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

เพื่อแก้ไขข้อจำกัดเหล่านี้ Android 7.0 ได้แนะนำการสนับสนุนเพื่อประสิทธิภาพที่ยั่งยืน ช่วยให้ OEM สามารถให้คำแนะนำเกี่ยวกับความสามารถด้านประสิทธิภาพของอุปกรณ์สำหรับแอปพลิเคชันที่ทำงานระยะยาว นักพัฒนาแอปสามารถใช้คำแนะนำเหล่านี้เพื่อปรับแต่งแอปพลิเคชันให้มีระดับประสิทธิภาพของอุปกรณ์ที่คาดเดาได้และสม่ำเสมอตลอดระยะเวลาอันยาวนาน

สถาปัตยกรรม

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

รูปที่ 1 สถาปัตยกรรมโหมดประสิทธิภาพที่ยั่งยืน

การนำไปปฏิบัติ

เพื่อรองรับประสิทธิภาพที่ยั่งยืนใน Android 7.0 และใหม่กว่า OEM ต้อง:

  • ทำการเปลี่ยนแปลงเฉพาะอุปกรณ์กับพลังงาน HAL เพื่อล็อคความถี่ CPU/GPU สูงสุด หรือ ดำเนินการปรับแต่งอื่นๆ เพื่อป้องกันการควบคุมปริมาณความร้อน
  • ใช้คำแนะนำใหม่ POWER_HINT_SUSTAINED_PERFORMANCE ใน power HAL
  • ประกาศการสนับสนุนโดยส่งคืน TRUE ผ่าน isSustainedPerformanceModeSupported() API
  • ใช้ Window.setSustainedPerformanceMode

ในการใช้งานอ้างอิงของ Nexus คำใบ้ด้านพลังงานจะจำกัดความถี่สูงสุดของ CPU และ GPU ในระดับที่ยั่งยืนสูงสุด โปรดทราบว่าการลดแถบ MAX ในความถี่ CPU/GPU จะลดอัตราเฟรมลง แต่ควรใช้อัตราที่ต่ำกว่านี้ในโหมดนี้เนื่องจากความยั่งยืน ตัวอย่างเช่น อุปกรณ์ที่ใช้นาฬิกาสูงสุดปกติอาจสามารถเรนเดอร์ที่ 60 FPS ได้เป็นเวลาสองสามนาที แต่หลังจากที่อุปกรณ์ร้อนขึ้น อุปกรณ์อาจเร่งความเร็วไปที่ 30 FPS ภายในสิ้น 30 นาที เมื่อใช้โหมดต่อเนื่อง อุปกรณ์สามารถเรนเดอร์อย่างสม่ำเสมอที่ 45 FPS ตลอด 30 นาที เป้าหมายคืออัตราเฟรมเมื่อใช้โหมดที่สูง (หรือสูงกว่า) มากกว่าอัตราเฟรมเมื่อไม่ได้ใช้โหมดและสม่ำเสมอเมื่อเวลาผ่านไปเพื่อให้นักพัฒนาไม่ต้องไล่ตามเป้าหมายที่กำลังเคลื่อนที่

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

หมายเหตุ : ไม่จำเป็นต้องมีการกำหนดอัตรานาฬิกาสูงสุดเพื่อใช้โหมดต่อเนื่อง

การตรวจสอบ

OEM สามารถใช้การทดสอบ CTS (Android 7.0 ขึ้นไป) เพื่อตรวจสอบการใช้งาน API ประสิทธิภาพที่ยั่งยืน การทดสอบรันปริมาณงานประมาณ 30 นาที และเปรียบเทียบประสิทธิภาพทั้งที่เปิดและไม่เปิดใช้งานโหมดยั่งยืน:

  • เมื่อเปิดใช้งานโหมดต่อเนื่อง อัตราเฟรมจะต้องค่อนข้างคงที่ (การทดสอบจะวัดเปอร์เซ็นต์ของการเปลี่ยนแปลงอัตราเฟรมในช่วงเวลาหนึ่ง และต้องมีการเปลี่ยนแปลง <5%)
  • เมื่อเปิดใช้งานโหมดต่อเนื่อง อัตราเฟรมจะต้องไม่ต่ำกว่าอัตราเฟรมเมื่อสิ้นสุด 30 นาทีโดยปิดใช้งานโหมด

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

แกนพิเศษ

สำหรับเวิร์กโหลดที่ใช้ CPU มากและไวต่อเวลา การได้รับการจองล่วงหน้าโดยเธรดอื่นอาจเป็นความแตกต่างระหว่างการกำหนดเส้นตายของเฟรมหรือไม่ก็ได้ สำหรับแอปที่มีข้อกำหนดด้านเวลาแฝงและอัตราเฟรมที่เข้มงวด (เช่น แอปเสียงหรือความเป็นจริงเสมือน) การมีแกน CPU พิเศษสามารถรับประกันประสิทธิภาพในระดับที่ยอมรับได้

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

หากต้องการสนับสนุนคอร์พิเศษบนอุปกรณ์:

  • เปิดใช้งาน cpusets และกำหนดค่า cpuset ที่มีเฉพาะแอปพลิเคชันเบื้องหน้าระดับบนสุดเท่านั้น
  • ตรวจสอบให้แน่ใจว่าคอร์หนึ่งคอร์ (นี่คือคอร์พิเศษ) ถูกสงวนไว้สำหรับเธรดจาก cpuset นี้
  • ใช้ getExclusiveCores API เพื่อส่งคืนหมายเลขคอร์ของคอร์พิเศษ

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

หากต้องการดูการใช้งานอ้างอิงสำหรับ Nexus 6P โปรดดูที่ android//device/huawei/angler/power/power.c