電源統計資料 HAL

裝置子系統的電源通常是在實驗室環境中測量及記錄 各種穩定狀態條件 (例如螢幕開啟時) 裝置處於閒置電源狀態。這適用於包含常數的子系統 進行檢測,或是在實驗室環境中輕鬆測量 但不適用於某些用途,例如螢幕顯示影片時

IPower.hal 1.0 提供用來傳遞 的介面 電源提示,以及回報子系統睡眠狀態指標的累計資料。 在 Android 10 以上版本中,使用累計統計資料報表功能 位於 IPowerStats.hal Power-stat 收集 API 中。 可擷取裝置端的能源使用資料。這會取代 IPower.hal 介面的累計統計資料收集部分, 以便清楚區隔各項功能

IPowerStats 服務不會定期讀取資料。它們的發生時間 重要時刻,例如電池電量下降 1% 時。朗讀頻率較低 並在電量過低時增加輸出頻率。資料 傳回至伺服器,並可用於錯誤報告,以便進行分析和分類。 藉此持續降低耗電量及提高耗電量 電池續航力。

IPower.hal 與 IPowerStats.hal

Android 10 提供 IPower.hal IPowerStats.hal 介面,但 IPower.hal 統計資料集合功能 可透過 IPowerStats.hal 介面取得 IPowerStats.hal 功能包含可取得和使用的 API 從支援裝置端電源測量結果收集的資料:

  • 針對低頻率執行軌道上的能源測量 (getRailInfo)。 且頻率高 (streamEnergyData) 以及系統記錄自裝置開機以來累積的能源用量。
  • 針對每項支援的 PowerEntity 提供可用資料的報表資訊。PowerEntity 是平台子系統、週邊裝置或電源網域,會影響 耗電量
  • 回報電力實體狀態 (getPowerEntityStateInfo) 而指定的實體提供的 每個指定 PowerEntity 的累計資料。

下列用戶端會使用 IPowerStats.hal API:

  • Statsd,用於收集每個軌道的耗電量指標。
  • Perfetto,為耗電量與 CPU 建立關聯 活動。
  • Batterystats,根據測量資料改善電池歸因成效 ,而不是根據預先定義的常數估算電池耗電量 在「power_profile.xml.」中

如果是 Android 10 以上版本,裝置製造商可能會選擇以下其中一種方案: IPower.halIPowerStats.hal 函式,但 凡是符合以下條件的客戶,均須改回使用 IPower.halIPowerStats.hal 未實作。

IPowerStats.hal 實作選項

Android 7 只能使用 IPower.hal 函式 。已升級至 Android 10 的裝置必須採用 硬體功率監控子系統或其他方式 並記錄功率統計資料有些 SoC 會收集 或取得電源實體狀態居住地 資訊電源監控硬體只有在 支援 getRailInfo()getEnergyData()streamEnergyData()

如果您在沒有電源監控的情況下實作 IPowerStats.hal 硬體、getRailInfo(), getEnergyData()streamEnergyData() 會傳回 NOT_SUPPORTED。同樣地 getPowerEntityInfo(), getPowerEntityStateInfo()getPowerEntityStateResidencyData()可能會傳回 NOT_SUPPORTED

Rail-monitoring API 傳回的資料範例包括

  • 螢幕的電源軌資料消耗了 X μW。
  • 數據機的電源軌道消耗了 Y μW。

子系統休眠狀態 API 傳回的資料範例包括

  • 數據機在睡眠時剩 X 毫秒。
  • SoC 處於關機狀態達 Y 毫秒。
  • GPU 處於暫停狀態 Z 毫秒。

使用硬體電源監控子系統

如果裝置設計配備硬體電源監控子系統,請 IPowerStats.hal,方法是建立單一 sysfs 節點 PowerStats.hal 可以剖析資料,或製作 ioctl 類型的系統呼叫集合。

您必須以防止加總方式實作核心驅動程式 溢位視硬體的電源監控方式而定,可以使用的演算法 子系統設計,必須具備即時和平均公車電壓 以及目前的測量結果核心驅動程式必須按照 不會清除能量累計器,必須 測量裝置開機後每個子軌的累積能源資料,格式為 64 位元 這個變數,會隨著每個加總的能量讀數逐漸增加 。

特定元件 (也可視需要加入多個元件) 的統計資料 例如 4 個節點雖然這並不是傳統的 sysfs 用法 (通常會限制每個節點只使用單一值),可以確保所有資料 保持一致

設計指南

  • sysfs 節點或發出系統呼叫。
  • 確保輔助統計資料功能不會明顯地增加 耗電:
    • 不要增加存取點 (AP) 和/或子系統喚醒功能以便追蹤 參數,例如睡眠模式所花的時間。
    • 適時在應用程式處理器和韌體之間轉移統計資料 盡可能減少與其他流量的流量
  • 如有需要,子系統可以使用下列驅動程式函式:
    • 內部快取資料,以避免延遲/喚醒,但會稍微降低 過時資料。
    • 在子系統休眠時進行推斷以提供更新 休眠時間。

選擇元件、子系統和統計資料

選擇要從哪個元件或子系統收集資料時 IPowerStats.hal 資料,請選取裝置上任何會耗用大量資料的工具 現有 5 mA 以上),或支援 多種耗電模式,例如:

  • 個別 SoC 子系統。
  • 部分或完全位於 SoC 以外的子系統,例如 Wi-Fi 或是安全性處理器
  • 週邊裝置,例如高功率 LED 和攝影機。
  • 採用不同模式的電源網域 (例如整個 SoC 的功率域)。

自訂

這項選用功能是可供自訂的。設計用途 以及自訂使用方式:

  • 決定要測量哪些軌道,以及測量的頻率。
  • 決定何時讀取資料及解讀方式。
  • 根據您的資料,決定要採取哪些行動及處置時機。

驗證

VTS 測試可確保符合 Android 規定。中的留言 IPowerStats.hal 的用途是驗證裝置是否入學 確保符合法規。

舉例來說,如果您呼叫 getRailInfo() 且未傳回任何內容, 您沒有收到受監控項目的相關資訊,因此 VTS 測試失敗 軌道,或傳回 SUCCESS 的狀態。同樣地,如果您收到 火車資訊,但附有 NON_SUPPORTEDFILE_SYSTEM_ERROR 回應,也會導致失敗。VTS 影片 檢查 HAL 檔案是否遵循裝置製造商規格 使用 IPower.hal 和 IPowerStats.hal 註解中的要求。一個 以下是 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);