พลังงานของระบบย่อยของอุปกรณ์มักจะวัดและบันทึกในสภาพแวดล้อมของห้องทดลอง สำหรับสภาวะคงที่ต่างๆ เช่น เมื่อหน้าจอเปิดอยู่ หรือ อุปกรณ์อยู่ในสถานะไม่มีการใช้งาน เหมาะสำหรับระบบย่อยที่มีค่าคงที่ การดึงพลังงาน หรือภายใต้เงื่อนไขที่วัดได้ง่ายในสภาพแวดล้อมของห้องทดลอง แต่ไม่ใช่ในบางกรณีการใช้งาน เช่น เมื่อหน้าจอแสดงวิดีโอ
IPower.hal 1.0
มีอินเทอร์เฟซสำหรับการส่งผ่าน
คำแนะนำเกี่ยวกับพลังงานและการรายงานข้อมูลสะสมเกี่ยวกับเมตริกสถานะการนอนหลับของระบบย่อย
ใน Android 10 ขึ้นไป ฟังก์ชันการรายงานสถิติสะสม
อยู่ใน API การรวบรวมสถิติพลังงาน IPowerStats.hal
และ
เป็นวิธีเรียกข้อมูลการใช้พลังงานในอุปกรณ์ วิธีนี้แทนที่
ส่วนที่รวบรวมสถิติแบบสะสมของอินเทอร์เฟซ IPower.hal
เพื่อแยกฟังก์ชันการทำงานที่ชัดเจนขึ้น
การอ่านบริการ IPowerStats
ไม่ได้เป็นช่วงเวลา โดยเกิดขึ้นที่
ช่วงสำคัญ เช่น เมื่อแบตเตอรี่ลดลง 1% อ่านถี่น้อยลง
เมื่อแบตเตอรี่ใกล้หมด และบ่อยขึ้นเมื่อแบตเตอรี่หมด ข้อมูลอาจมีลักษณะดังนี้
ส่งกลับไปยังเซิร์ฟเวอร์ และอาจนำไปใช้ในรายงานข้อบกพร่องเพื่อการวิเคราะห์และคัดแยก
ซึ่งสนับสนุนความพยายามอย่างต่อเนื่องในการลดการใช้พลังงานและเพิ่ม
อายุการใช้งานแบตเตอรี่
IPower.hal และ IPowerStats.hal
ทั้งอินเทอร์เฟซ IPower.hal
และ
IPowerStats.hal
มีให้ใช้งานใน Android 10 แต่
ฟังก์ชันการรวบรวมสถิติ IPower.hal
เพียงอย่างเดียว
จากอินเทอร์เฟซ IPowerStats.hal
ฟังก์ชันการทำงานของ IPowerStats.hal
มี API สำหรับรับและใช้
ข้อมูลที่รวบรวมจากการวัดกำลังไฟในอุปกรณ์สำหรับอุปกรณ์ที่รองรับ:
- วัดพลังงานระดับรางรถไฟทั้งสำหรับความถี่ต่ำ
(
getRailInfo
) และความถี่สูง (streamEnergyData
) ลูกค้า และรายงานพลังงานสะสมตั้งแต่เปิดเครื่อง - ข้อมูลรายงานที่เกี่ยวข้องกับ
PowerEntity
ที่รองรับแต่ละรายการ ซึ่งมีข้อมูลพร้อมใช้งานPowerEntity
เป็นระบบย่อยของแพลตฟอร์ม อุปกรณ์ต่อพ่วง หรือโดเมนพลังงานที่มีผลต่อ การใช้พลังงานของอุปกรณ์ - รายงานชุดสถานะของเอนทิตีพลังงาน (
getPowerEntityStateInfo
) ซึ่งเอนทิตีที่ระบุให้ข้อมูลถิ่นที่อยู่ จากนั้นจะรายงาน ข้อมูลที่รวบรวมสำหรับแต่ละPowerEntity
ที่ระบุ
ไคลเอ็นต์ต่อไปนี้ใช้ API ของ IPowerStats.hal
Statsd
เพื่อรวบรวมเมตริกการใช้พลังงานต่อรางPerfetto
เพื่อเชื่อมโยงการใช้พลังงานกับ CPU กิจกรรมBatterystats
เพื่อปรับปรุงการระบุแหล่งที่มาของแบตเตอรี่โดยใช้ "วัดแล้ว" ข้อมูลมากกว่าการประมาณการใช้แบตเตอรี่จากค่าคงที่ที่กำหนดไว้ล่วงหน้า ในpower_profile.xml.
สำหรับ Android 10 ขึ้นไป ผู้ผลิตอุปกรณ์อาจเลือกใช้
IPower.hal
และ IPowerStats.hal
แต่
ลูกค้าทั้งหมดต้องกลับไปใช้ IPower.hal
หาก
ไม่มีการใช้งาน IPowerStats.hal
ตัวเลือกการใช้งาน IPowerStats.hal
เฉพาะฟังก์ชัน IPower.hal
พร้อมให้บริการใน Android 7
ผ่าน Android 9 อุปกรณ์ที่อัปเกรดเป็น Android 10 จะต้อง
มีระบบย่อยการตรวจสอบพลังงานของฮาร์ดแวร์ หรือวิธีอื่นๆ ที่สามารถตรวจสอบได้
และบันทึกสถิติพลังงาน SoC บางแห่งมารวมตัว
สถิติการใช้งานพลังงานสำหรับคุณ หรือคุณอาจได้รับถิ่นพำนักของรัฐที่ควบคุมพลังงาน
ข้อมูลผ่านทางซอฟต์แวร์ ฮาร์ดแวร์ตรวจสอบพลังงานจำเป็นเฉพาะสำหรับ
รองรับ getRailInfo()
, getEnergyData()
และ
streamEnergyData()
หากคุณใช้ IPowerStats.hal
โดยไม่มีการตรวจสอบพลังงาน
ฮาร์ดแวร์, getRailInfo(), getEnergyData()
และ
streamEnergyData()
กลับ NOT_SUPPORTED
ในทำนองเดียวกัน
getPowerEntityInfo(), getPowerEntityStateInfo()
และ
getPowerEntityStateResidencyData()
อาจส่งคืน
NOT_SUPPORTED
หากไม่ได้ตั้งใจจะใช้
ตัวอย่างข้อมูลที่แสดงผลโดย API การตรวจสอบรถไฟ ได้แก่
- รางไฟฟ้าสำหรับจอแสดงผลใช้ X μW
- รางไฟของโมเด็มใช้ Y μW
ตัวอย่างข้อมูลที่แสดงผลโดย API การนอนหลับของระบบย่อย ได้แก่
- โมเด็มอยู่ในโหมดสลีปเป็นเวลา X มิลลิวินาที
- SoC เคยอยู่ในสถานะยุบพลังงานเป็นเวลา Y มิลลิวินาที
- GPU เคยอยู่ในสถานะระงับเป็นเวลา Z มิลลิวินาที
ใช้ระบบย่อยการตรวจสอบพลังงานของฮาร์ดแวร์
หากการออกแบบอุปกรณ์มีระบบย่อยในการตรวจสอบพลังงานของฮาร์ดแวร์ ให้ใช้
IPowerStats.hal
โดยการสร้างโหนด sysfs เดี่ยว
ซึ่ง PowerStats.hal
สามารถแยกวิเคราะห์ข้อมูล หรือสร้าง
การรวบรวมการเรียกระบบประเภท ioctl
คุณต้องใช้ไดรเวอร์เคอร์เนลในลักษณะที่ป้องกันการสะสม รายการเพิ่มเติม อัลกอริทึมที่ใช้จะขึ้นอยู่กับการตรวจสอบพลังงานของฮาร์ดแวร์ที่ไม่ซ้ำกัน การออกแบบระบบย่อย ซึ่งต้องจัดหาทั้งแรงดันไฟฟ้าของรถบัสและแรงดันไฟฟ้าเฉลี่ยทันที และการวัดผลปัจจุบัน ไดรเวอร์เคอร์เนลต้องบันทึกข้อมูลนี้ไว้ในลักษณะ ที่ไม่ล้างเครื่องสะสมพลังงาน และต้องรักษา ข้อมูลพลังงานสะสมของรางย่อยแต่ละรายการตั้งแต่เปิดเครื่องในรูปแบบ 64 บิต ตัวแปรที่ได้รับการเพิ่มขึ้นจากค่าพลังงานจากการสะสมแต่ละรายการ คำถาม
สถิติสำหรับคอมโพเนนต์หนึ่งๆ (หรือคอมโพเนนต์หลายรายการ (ไม่บังคับ) จะต้องอยู่ใน) โหนดเดียว แม้ว่านี่ไม่ใช่การใช้งาน sysfs ตามปกติ (ซึ่งปกติจะจำกัดแต่ละโหนดเป็นค่าเดียว) จะช่วยให้มั่นใจว่าข้อมูลทั้งหมด มีความสม่ำเสมอ
คำแนะนำในการออกแบบ
- รักษาเวลาในการตอบสนองให้ต่ำ (1 มิลลิวินาที สูงสุด) เมื่ออ่านจาก sysfs หรือการเรียกใช้ระบบ
- ตรวจสอบว่าฟังก์ชันฟังก์ชันสถิติสนับสนุนไม่ได้เพิ่มผลลัพธ์ การระบายพลังงาน:
- ไม่เพิ่มจุดเข้าใช้งาน (AP) และ/หรือการปลุกระบบระบบย่อยเพื่อติดตาม เช่น เวลาที่ใช้ในโหมดสลีป
- โอนสถิติระหว่างตัวประมวลผลของแอปและเฟิร์มแวร์ตามความเหมาะสม กับการเข้าชมอื่นๆ หากเป็นไปได้
- หากจำเป็น ระบบย่อยอาจใช้ฟังก์ชันไดรเวอร์ต่อไปนี้
- การแคชข้อมูลภายในเพื่อหลีกเลี่ยงเวลาในการตอบสนอง/การปลุกระบบโดยมีค่าใช้จ่ายเล็กน้อย ข้อมูลที่ไม่อัปเดต
- ทำการคาดการณ์เมื่อระบบย่อยอยู่ในโหมดสลีปเพื่อจัดเตรียมข้อมูลที่อัปเดต เวลานอนหลับโดยไม่ปลุกระบบย่อย
เลือกคอมโพเนนต์ ระบบย่อย และสถิติ
เมื่อเลือกคอมโพเนนต์หรือระบบย่อยที่จะรวบรวม
อินเทอร์เน็ตมือถือ IPowerStats.hal
เลือกอะไรก็ได้ในอุปกรณ์ที่ใช้
ปัจจุบันอย่างมีนัยสำคัญ (5 mA ขึ้นไป) หรือรองรับ
โหมดการใช้พลังงานหลายโหมดดังตัวอย่างต่อไปนี้
- ระบบย่อย SoC แต่ละรายการ
- ระบบย่อยบางส่วนหรือทั้งหมดที่อยู่นอก SoC เช่น Wi-Fi, โปรเซสเซอร์รูปภาพ หรือตัวประมวลผลความปลอดภัย
- อุปกรณ์ต่อพ่วง เช่น ไฟ LED และกล้องกำลังสูง
- โดเมนพลังงานที่ใช้โหมดต่างๆ (เช่น โดเมนพลังงานสำหรับ SoC ทั้งหมด)
การปรับแต่ง
ฟีเจอร์เสริมนี้รองรับการปรับแต่ง ออกแบบกรณีการใช้งาน และปรับแต่งการใช้งานได้ ดังนี้
- ตัดสินใจว่าจะวัดเส้นทางใดและความถี่ที่จะวัดค่าเหล่านั้น
- เลือกว่าจะอ่านข้อมูลเมื่อใดและจะตีความข้อมูลอย่างไร
- ตัดสินใจว่าจะดำเนินการใดและเมื่อใด โดยพิจารณาจากข้อมูลของคุณ
การตรวจสอบความถูกต้อง
การทดสอบ VTS ช่วยให้มั่นใจว่าเป็นไปตามข้อกำหนดของ Android ความคิดเห็นใน
IPowerStats.hal
ใช้เพื่อยืนยันว่าอุปกรณ์อยู่ใน
การปฏิบัติตามข้อกำหนด
ตัวอย่างเช่น หากคุณโทรหา getRailInfo()
แต่ไม่มีผลลัพธ์ใดๆ
การทดสอบ VTS ล้มเหลว เนื่องจากคุณไม่ได้รับข้อมูลเกี่ยวกับการตรวจสอบ
ทางรถไฟ หรือสถานะ SUCCESS
ที่ส่งกลับ ในทำนองเดียวกัน หากคุณได้รับ
ข้อมูลรถไฟ แต่ประกอบกับ NON_SUPPORTED
หรือ
ตอบ FILE_SYSTEM_ERROR
ถือว่าไม่ผ่าน VTS
ให้ยืนยันว่าผู้ผลิตอุปกรณ์ได้ปฏิบัติตามข้อกำหนดในไฟล์ HAL
โดยใช้ข้อกำหนดในความคิดเห็น IPower.hal และ IPowerStats.hal CANNOT TRANSLATE
ด้านล่างคือตัวอย่างความคิดเห็นที่ใช้ในการทดสอบ VTS
/** * Rail information: * Reports information related to the rails being monitored. * * @return rails Information about monitored rails. * @return status SUCCESS on success or NOT_SUPPORTED if * feature is not enabled or FILESYSTEM_ERROR on filesystem nodes * access error. */ getRailInfo() generates(vec<e;RailInfo>e; rails, Status status);