HAL สถิติพลังงาน

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

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);