คุณระบุปริมาณการใช้พลังงานของคอมโพเนนต์แต่ละรายการได้โดยเปรียบเทียบกระแสที่อุปกรณ์ดึงเมื่อคอมโพเนนต์อยู่ในสถานะที่ต้องการ (เช่น เปิด ทำงาน สแกน) และเมื่อคอมโพเนนต์ปิดอยู่ วัดกระแสไฟฟ้าเฉลี่ยที่ดึงในอุปกรณ์ที่แรงดันไฟฟ้าที่กำหนดโดยใช้เครื่องมือตรวจสอบพลังงานภายนอก เช่น แหล่งจ่ายไฟแบบตั้งโต๊ะหรือเครื่องมือตรวจสอบแบตเตอรี่เฉพาะ (เช่น ซอฟต์แวร์เครื่องมือวัดพลังงานและเครื่องมือไฟฟ้าของ Monsoon Solution Inc.)
ผู้ผลิตมักจะระบุข้อมูลเกี่ยวกับกระแสไฟฟ้าที่องค์ประกอบแต่ละรายการใช้ ใช้ข้อมูลนี้หากแสดงกระแสที่ดึงมาจากแบตเตอรี่ของอุปกรณ์ได้อย่างถูกต้อง อย่างไรก็ตาม ให้ตรวจสอบค่าที่ผู้ผลิตระบุก่อนใช้ค่าเหล่านั้นในโปรไฟล์พลังงานของอุปกรณ์
ควบคุมการใช้พลังงาน
เมื่อทำการวัด ให้ตรวจสอบว่าอุปกรณ์ไม่ได้เชื่อมต่อกับแหล่งจ่ายไฟภายนอก เช่น การเชื่อมต่อ USB กับโฮสต์การพัฒนาที่ใช้เมื่อเรียกใช้ Android Debug Bridge (adb) อุปกรณ์ที่ทดสอบอาจดึงกระแสไฟฟ้าจากโฮสต์ ซึ่งทำให้การวัดที่แบตเตอรี่ลดลง หลีกเลี่ยงการเชื่อมต่อ USB แบบใช้ได้ทุกที่ (OTG) เนื่องจากอุปกรณ์ OTG อาจดึงกระแสไฟฟ้าจากอุปกรณ์ที่ทดสอบ
ระบบควรทำงานที่ระดับการสิ้นเปลืองพลังงานคงที่โดยไม่รวมส่วนประกอบที่วัด เพื่อหลีกเลี่ยงการวัดที่ไม่ถูกต้องที่เกิดจากการเปลี่ยนแปลงของส่วนประกอบอื่นๆ กิจกรรมของระบบที่อาจทำให้เกิดการเปลี่ยนแปลงที่ไม่พึงประสงค์ในการวัดกำลังไฟฟ้า ได้แก่
- กิจกรรมการรับ ส่ง หรือการสแกนเครือข่ายมือถือ, Wi-Fi และบลูทูธ เมื่อไม่ได้วัดกำลังสัญญาณวิทยุของเครือข่ายมือถือ ให้ตั้งค่าอุปกรณ์เป็นโหมดบนเครื่องบินและเปิดใช้ Wi-Fi หรือบลูทูธตามความเหมาะสม
- เปิด/ปิดหน้าจอ สีที่แสดงขณะที่หน้าจอเปิดอยู่อาจส่งผลต่อการสิ้นเปลืองพลังงานในเทคโนโลยีหน้าจอบางประเภท ปิดหน้าจอเมื่อวัดค่าของคอมโพเนนต์ที่ไม่ใช่หน้าจอ
- ระงับ/กลับมาทำงานต่อของระบบ สถานะหน้าจอปิดอาจทริกเกอร์การระงับระบบ ซึ่งจะทำให้อุปกรณ์บางส่วนอยู่ในสถานะพลังงานต่ำหรือปิดอยู่ ซึ่งอาจส่งผลต่อการใช้พลังงานของส่วนประกอบที่วัดและทำให้เกิดความผันผวนอย่างมากในการอ่านค่าพลังงานเนื่องจากระบบจะกลับมาส่งสัญญาณเตือนเป็นระยะๆ ฯลฯ ดูรายละเอียดได้ที่การควบคุมการระงับระบบ
- CPU เปลี่ยนความเร็วและเข้าสู่/ออกจากสถานะไม่มีการใช้งานของเครื่องจัดตารางเวลาพลังงานต่ำ
ในระหว่างการทํางานตามปกติ ระบบจะปรับความเร็วของ CPU, จํานวนแกน CPU ที่ออนไลน์ และสถานะแกนหลักอื่นๆ ของระบบ เช่น ความเร็วบัสหน่วยความจําและแรงดันไฟฟ้าของรางจ่ายไฟที่เชื่อมโยงกับ CPU และหน่วยความจํา อยู่บ่อยครั้ง ในระหว่างการทดสอบ การปรับเหล่านี้จะส่งผลต่อการวัดกำลังไฟฟ้า
- การดำเนินการปรับความเร็วของ CPU สามารถลดการปรับความถี่และแรงดันไฟฟ้าของบัสหน่วยความจำและคอมโพเนนต์หลักอื่นๆ ของระบบ
- การกำหนดเวลาของกิจกรรมอาจส่งผลต่อเปอร์เซ็นต์เวลาที่ CPU อยู่ในสถานะ "ไม่มีการใช้งาน" ที่ใช้พลังงานต่ำ โปรดดูรายละเอียดเกี่ยวกับการป้องกันการปรับเปลี่ยนเหล่านี้ในระหว่างการทดสอบที่หัวข้อการควบคุมความเร็วของ CPU
ตัวอย่างเช่น Joe Droid ต้องการคํานวณค่า screen.on
สําหรับอุปกรณ์ เขาเปิดโหมดเครื่องบินในอุปกรณ์ เรียกใช้อุปกรณ์ในสถานะปัจจุบันที่เสถียร คงความเร็วของ CPU ไว้ และใช้สภาวะการล็อกบางส่วนเพื่อป้องกันไม่ให้ระบบหยุดทำงาน จากนั้นโจปิดหน้าจออุปกรณ์และทำการวัด (200 mA) จากนั้น โจเปิดหน้าจออุปกรณ์ที่ความสว่างขั้นต่ำและทำการวัดอีกครั้ง (300 mA) ค่า screen.on
คือ 100 mA (300 - 200)
หมายเหตุ: สำหรับคอมโพเนนต์ที่ไม่มีรูปแบบคลื่นที่ราบเรียบของการใช้กระแสไฟฟ้าเมื่อทำงาน (เช่น วิทยุมือถือหรือ Wi-Fi) ให้วัดกระแสไฟฟ้าเฉลี่ยเมื่อเวลาผ่านไปโดยใช้เครื่องมือตรวจสอบพลังงาน
เมื่อใช้แหล่งจ่ายไฟภายนอกแทนแบตเตอรี่ของอุปกรณ์ ระบบอาจพบปัญหาเนื่องจากเทอร์มิสเตอร์ของแบตเตอรี่หรือหมุดวัดระดับน้ำมันเชื้อเพลิงแบบรวมไม่ได้เชื่อมต่อ (เช่น การอ่านอุณหภูมิแบตเตอรี่หรือความจุแบตเตอรี่ที่เหลือไม่ถูกต้องอาจทำให้เคอร์เนลหรือระบบ Android ปิดลง) แบตเตอรี่จำลองสามารถส่งสัญญาณบนหม้อแปลงความร้อนหรือขาวัดระดับน้ำมันที่เลียนแบบการอ่านอุณหภูมิและสถานะการชาร์จสำหรับระบบปกติ และอาจให้สายไฟที่สะดวกสำหรับเชื่อมต่อกับแหล่งจ่ายไฟภายนอกด้วย หรือจะแก้ไขระบบให้ละเว้นข้อมูลที่ไม่ถูกต้องจากแบตเตอรี่ที่หายไปก็ได้
ระบบควบคุมหยุดทำงานชั่วคราว
ส่วนนี้จะอธิบายวิธีหลีกเลี่ยงสถานะการหยุดทำงานของระบบเมื่อคุณไม่ต้องการให้รบกวนการวัดอื่นๆ และวิธีวัดการสิ้นเปลืองพลังงานของสถานะการหยุดทำงานของระบบเมื่อคุณต้องการวัด
ป้องกันการระงับระบบ
การระงับระบบอาจทำให้เกิดความแปรปรวนที่ไม่ต้องการในการวัดพลังงานและทำให้คอมโพเนนต์ของระบบอยู่ในสถานะพลังงานต่ำซึ่งไม่เหมาะสมสำหรับการวัดการใช้พลังงานที่ใช้งานอยู่ หากต้องการป้องกันไม่ให้ระบบหยุดทำงานชั่วคราวขณะที่หน้าจอปิดอยู่ ให้ใช้การล็อกบางส่วนชั่วคราว ใช้สาย USB เพื่อเชื่อมต่ออุปกรณ์กับโฮสต์การพัฒนา แล้วออกคำสั่งต่อไปนี้
adb shell "echo temporary > /sys/power/wake_lock"
ขณะอยู่ใน wake_lock
สถานะปิดหน้าจอจะไม่ทริกเกอร์การระงับระบบ
(อย่าลืมถอดสาย USB ออกจากอุปกรณ์ก่อนวัดการสิ้นเปลืองพลังงาน)
วิธีนำการล็อกให้ตื่นออก
adb shell "echo temporary > /sys/power/wake_unlock"
ระบบการวัดถูกระงับ
หากต้องการวัดปริมาณการใช้พลังงานขณะที่ระบบอยู่ในสถานะหยุดทำงาน ให้วัดค่า cpu.idle
ในโปรไฟล์พลังงาน ก่อนวัด
- นำ Wakelock ที่มีอยู่ออก (ตามที่อธิบายไว้ด้านบน)
- ตั้งค่าอุปกรณ์เป็นโหมดเครื่องบินเพื่อหลีกเลี่ยงกิจกรรมที่ดำเนินพร้อมกันโดยวิทยุมือถือ ซึ่งอาจทำงานบนโปรเซสเซอร์แยกจากส่วน SoC ที่ควบคุมโดยระบบการระงับ
- ตรวจสอบว่าระบบอยู่ในสถานะ "หยุดชั่วคราว" โดยทำดังนี้
- ยืนยันว่าค่าที่อ่านได้ปัจจุบันมีค่าคงที่ ค่าที่อ่านได้ควรอยู่ในช่วงการใช้พลังงานที่คาดไว้สำหรับสถานะการระงับของ SoC บวกการใช้พลังงานของส่วนประกอบของระบบที่ยังคงมีไฟเข้า (เช่น PHY ของ USB)
- กำลังตรวจสอบเอาต์พุตคอนโซลของระบบ
- การเฝ้าดูตัวบ่งชี้ภายนอกของสถานะระบบ (เช่น LED ปิดอยู่เมื่อไม่ได้อยู่ในโหมดสลีป)
ควบคุมความเร็วของ CPU
สามารถทำให้ CPU ที่ทำงานอยู่ออนไลน์หรือออฟไลน์ได้ เปลี่ยนความเร็วสัญญาณนาฬิกาและแรงดันไฟฟ้าที่เกี่ยวข้อง (อาจส่งผลต่อความเร็วบัสหน่วยความจำและสถานะพลังงานของแกนระบบอื่นๆ ด้วย) และสามารถเข้าสู่สถานะพลังงานต่ำขณะอยู่ในลูปการทำงานแบบไม่มีการใช้งานของเคิร์กเนล เมื่อวัดสถานะพลังงานของ CPU แบบต่างๆ สําหรับโปรไฟล์พลังงาน ให้หลีกเลี่ยงความผันผวนของปริมาณการดึงพลังงานเมื่อวัดพารามิเตอร์อื่นๆ โปรไฟล์พลังงานจะถือว่า CPU ทั้งหมดมีความเร็วและลักษณะพลังงานที่ใช้ได้เหมือนกัน
ขณะวัดกำลังของ CPU หรือขณะคงกำลังของ CPU ไว้เพื่อทำการวัดอื่นๆ ให้คงจำนวน CPU ที่ออนไลน์ไว้ (เช่น มี CPU 1 ตัวที่ออนไลน์และที่เหลือออฟไลน์/ถอดออก) การรักษา CPU ทั้งหมดยกเว้น 1 ตัวให้อยู่ในสถานะ "ไม่มีงาน" ในการกําหนดเวลาอาจให้ผลลัพธ์ที่ยอมรับได้ การหยุดเฟรมเวิร์ก Android ด้วย adb shell stop
อาจลดกิจกรรมการจัดตารางเวลาของระบบ
คุณต้องระบุความเร็วของ CPU ที่พร้อมใช้งานสำหรับอุปกรณ์ของคุณในรายการโปรไฟล์พลังงาน cpu.speeds
หากต้องการดูรายการความเร็วของ CPU ที่พร้อมใช้งาน ให้เรียกใช้คำสั่งต่อไปนี้
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
ความเร็วเหล่านี้ตรงกับการวัดกำลังไฟฟ้าที่เกี่ยวข้องในค่า cpu.active
สำหรับแพลตฟอร์มที่จำนวนแกนประมวลผลที่เปิดใช้งานส่งผลต่อการใช้พลังงานอย่างมาก คุณอาจต้องแก้ไขไดรเวอร์หรือตัวควบคุม cpufreq สำหรับแพลตฟอร์มนั้น แพลตฟอร์มส่วนใหญ่รองรับการควบคุมความเร็วของ CPU โดยใช้ตัวควบคุม cpufreq ในพื้นที่ผู้ใช้และใช้อินเทอร์เฟซ sysfs เพื่อกำหนดความเร็ว เช่น หากต้องการตั้งค่าความเร็วเป็น 200MHz ในระบบที่มี CPU เพียง 1 ตัวหรือ CPU ทั้งหมดใช้นโยบาย cpufreq เดียวกัน ให้ใช้คอนโซลระบบหรือเชลล์ adb เพื่อเรียกใช้คำสั่งต่อไปนี้
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
หมายเหตุ: คำสั่งที่แน่นอนจะแตกต่างกันไปตามการใช้งาน cpufreq ของแพลตฟอร์ม
คำสั่งเหล่านี้ช่วยให้มั่นใจว่าความเร็วใหม่จะไม่อยู่นอกขอบเขตที่อนุญาต ตั้งค่าความเร็วใหม่ แล้วพิมพ์ความเร็วที่ CPU ทำงานจริง (เพื่อยืนยัน) หากความเร็วต่ำสุดปัจจุบันก่อนการเรียกใช้สูงกว่า 200000 คุณอาจต้องกลับลำดับของ 2 บรรทัดแรก หรือเรียกใช้บรรทัดแรกอีกครั้งเพื่อลดความเร็วต่ำสุดก่อนตั้งค่าความเร็วสูงสุด
หากต้องการวัดกระแสไฟฟ้าที่ CPU ที่ใช้ในการทำงานที่ความเร็วต่างๆ ให้ใช้คอนโซลระบบเพื่อวาง CPU ในลูปที่เชื่อมโยงกับ CPU โดยใช้คำสั่งต่อไปนี้
# while true; do true; done
ทำการวัดขณะที่การวนซ้ำทํางาน
อุปกรณ์บางเครื่องอาจจำกัดความเร็วสูงสุดของ CPU ขณะใช้กลไกควบคุมความร้อนเนื่องจากการวัดอุณหภูมิสูง (กล่าวคือ หลังจากเรียกใช้ CPU ที่ความเร็วสูงเป็นระยะเวลานาน) โปรดตรวจสอบการจำกัดดังกล่าวโดยใช้เอาต์พุตคอนโซลของระบบเมื่อทำการวัดผล หรือตรวจสอบบันทึกเคอร์เนลหลังจากการวัด
สําหรับค่า cpu.awake
ให้วัดพลังงานที่ใช้เมื่อระบบไม่ได้อยู่ในโหมดหยุดชั่วคราวและไม่ได้ดําเนินการงาน CPU ควรอยู่ในตัวจัดตารางเวลาพลังงานต่ำลูปการทำงานแบบไม่มีการใช้งาน
ซึ่งอาจกำลังดำเนินการตามคำสั่งรอเหตุการณ์ของ ARM หรืออยู่ในสถานะพลังงานต่ำเฉพาะ SoC
โดยมีความล่าช้าในการออกอย่างรวดเร็วซึ่งเหมาะสำหรับการใช้งานแบบไม่มีการใช้งาน
สำหรับค่า cpu.active
ให้วัดกำลังไฟเมื่อระบบไม่ได้อยู่ในโหมดสลีปและไม่ได้ทำงาน CPU 1 ตัว (โดยปกติจะเป็น CPU หลัก) ควรทำงานตามภารกิจ ขณะที่ CPU อื่นๆ ทั้งหมดควรอยู่ในสถานะ "ไม่มีการใช้งาน"
วัดกำลังไฟของหน้าจอ
เมื่อวัดกำลังไฟที่หน้าจอเปิดอยู่ ให้ตรวจสอบว่าอุปกรณ์อื่นๆ ที่เปิดอยู่ตามปกติเมื่อเปิดใช้หน้าจอก็เปิดอยู่ด้วย ตัวอย่างเช่น หากปกติแล้วหน้าจอสัมผัสและไฟแบ็กไลท์ของจอแสดงผลจะเปิดอยู่เมื่อหน้าจอเปิดอยู่ ให้ตรวจสอบว่าอุปกรณ์เหล่านี้เปิดอยู่เมื่อคุณวัดเพื่อให้ได้ตัวอย่างการใช้งานพลังงานของหน้าจอที่สมจริง
เทคโนโลยีการแสดงผลบางเทคโนโลยีใช้พลังงานแตกต่างกันไปตามสีที่แสดง ทำให้การวัดพลังงานแตกต่างกันอย่างมากโดยขึ้นอยู่กับสิ่งที่แสดงบนหน้าจอขณะทำการวัด เมื่อทำการวัด ให้ตรวจสอบว่าหน้าจอแสดงสิ่งที่มีลักษณะเป็นหน้าจอที่สมจริง ปรับให้อยู่ตรงกลางระหว่างหน้าจอสีดําล้วน (ซึ่งใช้พลังงานน้อยที่สุดสําหรับเทคโนโลยีบางรายการ) กับหน้าจอสีขาวล้วน ตัวเลือกที่พบบ่อยคือมุมมองกำหนดการในแอปปฏิทินซึ่งมีพื้นหลังสีขาวและองค์ประกอบที่ไม่ใช่สีขาวผสมกัน
วัดหน้าจอเมื่อเปิดเครื่องที่ความสว่างของจอแสดงผล/แสงพื้นหลังขั้นต่ำและสูงสุด วิธีตั้งค่าความสว่างขั้นต่ำ
- ใช้ UI ของ Android (ไม่แนะนำ) ตั้งค่าแถบเลื่อนการตั้งค่า > ความสว่างของจอแสดงผลเป็นความสว่างของจอแสดงผลขั้นต่ำ อย่างไรก็ตาม UI ของ Android อนุญาตให้ตั้งค่าความสว่างได้เพียง 10-20% ของความสว่างของแผงหรือแสงสะท้อนด้านหลังที่เป็นไปได้เท่านั้น และไม่อนุญาตให้ตั้งค่าความสว่างให้ต่ำจนทำให้มองเห็นหน้าจอได้ยาก
- ใช้ไฟล์ sysfs (แนะนำ) หากมี ให้ใช้ไฟล์ sysfs เพื่อควบคุมความสว่างของแผงลงไปจนถึงความสว่างขั้นต่ำที่ฮาร์ดแวร์รองรับ
นอกจากนี้ หากไฟล์ sysfs ของแพลตฟอร์มเปิดใช้การเปิดและปิดแผง LCD, ไฟแบ็กไลท์ และหน้าจอสัมผัส ให้ใช้ไฟล์ดังกล่าวเพื่อทำการวัดผลเมื่อหน้าจอเปิดและปิดอยู่ หรือตั้งค่าการล็อกบางส่วนเพื่อไม่ให้ระบบหยุดทำงานชั่วคราว จากนั้นเปิดและปิดหน้าจอด้วยปุ่มเปิด/ปิด
วัดกำลัง Wi-Fi
ทำการวัด Wi-Fi ในเครือข่ายที่ค่อนข้างเงียบ หลีกเลี่ยงการเพิ่มงานเพิ่มเติม การประมวลผลการเข้าชมการออกอากาศจํานวนมากที่ไม่เกี่ยวข้องกับกิจกรรมที่วัด
ค่า wifi.on
จะวัดพลังงานที่ใช้เมื่อเปิดใช้ Wi-Fi แต่ไม่ได้ส่งหรือรับข้อมูล ซึ่งมักวัดเป็นค่าต่างระหว่างปริมาณการดึงกระแสไฟฟ้าขณะที่ระบบอยู่ในสถานะ "หยุดทำงานชั่วคราว" (สลีป) โดยเปิดใช้ Wi-Fi เทียบกับปิดใช้
ค่า wifi.scan
จะวัดพลังงานที่ใช้ไปในระหว่างการสแกน Wi-Fi เพื่อหาจุดเข้าใช้งาน แอปพลิเคชันสามารถเรียกใช้การสแกน Wi-Fi โดยใช้คลาส WifiManager
startScan()
API นอกจากนี้ คุณยังเปิดการตั้งค่า > Wi-Fi ซึ่งจะสแกนจุดเข้าใช้งานทุกๆ 2-3 วินาทีโดยมีการสิ้นเปลืองพลังงานที่เพิ่มขึ้นอย่างเห็นได้ชัด แต่คุณต้องหักพลังงานหน้าจอออกจากการวัดเหล่านี้
หมายเหตุ: ใช้การตั้งค่าที่มีการควบคุม (เช่น iperf) เพื่อสร้างการรับและส่งข้อมูลของเครือข่าย