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

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

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

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

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

สถาปัตยกรรม

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

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

การใช้งาน

OEM ต้องดำเนินการต่อไปนี้เพื่อรองรับประสิทธิภาพที่ยั่งยืนใน Android 7.0 ขึ้นไป

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

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

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

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

การตรวจสอบความถูกต้อง

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

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

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

แกนเฉพาะ

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

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

วิธีรองรับแกนหลักในอุปกรณ์

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

หากต้องการดูว่าระบบกำหนดเวลากระบวนการใดให้ทำงานบนแกนใด ให้ใช้ systrace ขณะทำงานหนักและตรวจสอบว่าไม่มีการกำหนดเวลาเธรดพื้นที่ผู้ใช้จากแอปอื่นที่ไม่ใช่แอปที่ทำงานอยู่เบื้องหน้าอันดับแรกให้ทำงานบนแกนที่ไม่ซ้ำกัน

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