Chỉ số sức mạnh HAL

Nguồn điện của hệ thống con thiết bị thường được đo và ghi lại trong môi trường phòng thí nghiệm ở nhiều điều kiện trạng thái ổn định khác nhau, chẳng hạn như khi màn hình bật hoặc thiết bị ở trạng thái nguồn không hoạt động. Tính năng này hoạt động đối với các hệ thống con có mức tiêu thụ điện năng liên tục hoặc trong các điều kiện có thể dễ dàng đo được trong môi trường phòng thí nghiệm, nhưng không áp dụng cho một số trường hợp sử dụng nhất định, chẳng hạn như khi màn hình hiển thị video.

IPower.hal 1.0 cung cấp giao diện để chuyển các gợi ý về nguồn điện và báo cáo dữ liệu tích lũy về số liệu trạng thái ngủ của hệ thống con. Trong Android 10 trở lên, chức năng báo cáo thống kê tích lũy nằm trong API thu thập chỉ số năng lượng IPowerStats.hal và cung cấp cách truy xuất dữ liệu sử dụng năng lượng trên thiết bị. Điều này thay thế phần thu thập số liệu thống kê tích lũy của giao diện IPower.hal để phân tách chức năng rõ ràng hơn.

Các bài đọc dịch vụ IPowerStats không định kỳ. Chúng xảy ra vào những thời điểm quan trọng, chẳng hạn như khi pin giảm 1%. Số lần đọc ít thường xuyên hơn khi pin sắp hết và thường xuyên hơn khi pin cao. Dữ liệu có thể được gửi trở lại máy chủ và có thể được sử dụng trong các báo cáo lỗi để phân tích và phân loại. Điều này hỗ trợ những nỗ lực không ngừng nhằm giảm mức tiêu thụ điện năng và tăng tuổi thọ pin.

IPower.hal và IPowerStats.hal

Cả giao diện IPower.halIPowerStats.hal đều khả dụng trên Android 10, nhưng chức năng thu thập số liệu thống kê IPower.hal chỉ khả dụng từ giao diện IPowerStats.hal . Chức năng IPowerStats.hal bao gồm các API để thu thập và sử dụng dữ liệu được thu thập từ các phép đo nguồn trên thiết bị cho các thiết bị được hỗ trợ:

  • Thực hiện các phép đo năng lượng ở cấp độ đường ray cho cả máy khách tần số thấp ( getRailInfo ) và tần số cao ( streamEnergyData ), đồng thời báo cáo năng lượng tích lũy kể từ khi khởi động.
  • Báo cáo thông tin liên quan đến từng PowerEntity được hỗ trợ có dữ liệu sẵn có. PowerEntity là một hệ thống con nền tảng, thiết bị ngoại vi hoặc miền nguồn tác động đến tổng mức tiêu thụ năng lượng của thiết bị.
  • Báo cáo tập hợp các trạng thái thực thể quyền lực ( getPowerEntityStateInfo ) mà các thực thể được chỉ định cung cấp dữ liệu về nơi cư trú, sau đó báo cáo dữ liệu tích lũy cho từng PowerEntity được chỉ định.

API IPowerStats.hal được sử dụng bởi các khách hàng sau:

  • Statsd , để thu thập số liệu tiêu thụ điện năng trên mỗi đường ray.
  • Perfetto , để tương quan mức tiêu thụ điện năng với hoạt động của CPU.
  • Batterystats , để cải thiện việc phân bổ pin bằng cách sử dụng dữ liệu đo được thay vì ước tính mức tiêu thụ pin từ các hằng số được xác định trước trong power_profile.xml.

Với Android 10 trở lên, nhà sản xuất thiết bị có thể chọn giữa chức năng IPower.halIPowerStats.hal , nhưng tất cả khách hàng phải quay lại IPower.hal nếu IPowerStats.hal không được triển khai.

Tùy chọn triển khai IPowerStats.hal

Chỉ các chức năng IPower.hal mới khả dụng trên Android 7 đến Android 9. Các thiết bị đã được nâng cấp lên Android 10 phải có hệ thống con giám sát nguồn điện phần cứng hoặc các phương tiện khác có sẵn để theo dõi và ghi lại số liệu thống kê về nguồn điện. Một số SoC thu thập số liệu thống kê về mức sử dụng năng lượng cho bạn hoặc bạn có thể lấy thông tin về trạng thái thực thể quyền lực thông qua phần mềm. Phần cứng giám sát nguồn điện chỉ cần thiết để hỗ trợ getRailInfo() , getEnergyData()streamEnergyData() .

Nếu bạn triển khai IPowerStats.hal mà không có phần cứng giám sát nguồn, getRailInfo(), getEnergyData()streamEnergyData() sẽ trả về NOT_SUPPORTED . Tương tự, getPowerEntityInfo(), getPowerEntityStateInfo()getPowerEntityStateResidencyData() cũng có thể trả về NOT_SUPPORTED nếu nó không được sử dụng.

Ví dụ về dữ liệu được API giám sát đường sắt trả về bao gồm

  • Đường ray điện cho màn hình đã tiêu thụ X µW.
  • Đường ray nguồn cho modem tiêu thụ Y µW.

Ví dụ về dữ liệu được API trạng thái ngủ của hệ thống con trả về bao gồm

  • Modem đã ngủ trong X ms.
  • SoC ở trạng thái mất điện trong Y ms.
  • GPU ở trạng thái tạm dừng trong Z ms.

Sử dụng hệ thống con giám sát nguồn phần cứng

Nếu thiết kế thiết bị của bạn có hệ thống con giám sát nguồn phần cứng, hãy triển khai IPowerStats.hal bằng cách tạo một nút sysfs duy nhất mà từ đó PowerStats.hal có thể phân tích cú pháp dữ liệu hoặc bằng cách thực hiện một tập hợp các lệnh gọi hệ thống ioctl -type.

Bạn phải triển khai trình điều khiển hạt nhân theo cách ngăn chặn tình trạng tràn bộ tích lũy. Thuật toán được sử dụng tùy thuộc vào thiết kế hệ thống con giám sát nguồn phần cứng duy nhất của bạn, thuật toán này phải cung cấp cả các phép đo dòng điện và điện áp bus trung bình và tức thời. Trình điều khiển hạt nhân phải thu thập dữ liệu này theo cách không xóa bộ tích lũy năng lượng và nó phải duy trì dữ liệu năng lượng tích lũy cho mỗi đường ray phụ kể từ khi khởi động, dưới dạng biến 64 bit được tăng lên khi đọc năng lượng từ mỗi truy vấn tích lũy.

Số liệu thống kê cho một thành phần nhất định (hoặc tùy chọn, nhiều thành phần) phải nằm trong một nút duy nhất. Mặc dù đây không phải là cách sử dụng sysfs thông thường (thường giới hạn mỗi nút ở một giá trị duy nhất), nhưng nó đảm bảo tất cả dữ liệu đều nhất quán.

Hướng dẫn thiết kế

  • Giữ độ trễ thấp (1 mili giây, tối đa) khi đọc từ nút sysfs hoặc thực hiện cuộc gọi hệ thống.
  • Đảm bảo rằng chức năng thống kê hỗ trợ không làm tăng mức tiêu hao năng lượng một cách có thể đo lường được:
    • Không tăng số lần đánh thức điểm truy cập (AP) và/hoặc hệ thống con để theo dõi các thông số như thời gian ở chế độ ngủ.
    • Chuyển số liệu thống kê giữa bộ xử lý ứng dụng và chương trình cơ sở một cách cơ hội với lưu lượng truy cập khác khi có thể.
  • Nếu cần, hệ thống con có thể sử dụng các chức năng trình điều khiển sau:
    • Dữ liệu được lưu vào bộ nhớ đệm nội bộ để tránh độ trễ/đánh thức do dữ liệu hơi cũ.
    • Thực hiện phép ngoại suy khi hệ thống con ở chế độ ngủ, để cung cấp thời gian ngủ được cập nhật mà không đánh thức hệ thống con.

Chọn các thành phần, hệ thống con và số liệu thống kê

Khi chọn thành phần hoặc hệ thống con nào để thu thập dữ liệu IPowerStats.hal , hãy chọn bất kỳ thứ gì trên thiết bị tiêu thụ dòng điện đáng kể (5 mA trở lên) hoặc hỗ trợ nhiều chế độ tiêu thụ điện năng, chẳng hạn như sau:

  • Các hệ thống con SoC riêng lẻ.
  • Các hệ thống con một phần hoặc hoàn toàn nằm ngoài SoC, chẳng hạn như WiFi, bộ xử lý hình ảnh hoặc bộ xử lý bảo mật.
  • Các thiết bị ngoại vi như đèn LED công suất cao và máy ảnh.
  • Các miền nguồn sử dụng các chế độ khác nhau (chẳng hạn như miền nguồn cho toàn bộ SoC).

Tùy chỉnh

Tính năng tùy chọn này có thể tùy chỉnh được. Thiết kế các trường hợp sử dụng và tùy chỉnh việc sử dụng của bạn:

  • Quyết định nên đo đường ray nào và tần suất đo chúng.
  • Quyết định thời điểm đọc dữ liệu và cách diễn giải dữ liệu đó.
  • Quyết định hành động nào cần thực hiện và thời điểm thực hiện dựa trên dữ liệu của bạn.

Thẩm định

Các bài kiểm tra VTS đảm bảo đáp ứng các yêu cầu của Android. Các nhận xét trong IPowerStats.hal được sử dụng để xác minh rằng thiết bị có tuân thủ hay không.

Ví dụ: nếu bạn gọi getRailInfo() và không trả về kết quả nào thì thử nghiệm VTS không thành công vì bạn không nhận được thông tin về đường ray được giám sát hoặc trạng thái trả về là SUCCESS . Tương tự, nếu bạn nhận được thông tin về đường ray nhưng đi kèm với phản hồi NON_SUPPORTED hoặc FILE_SYSTEM_ERROR thì đó cũng là một lỗi. VTS xác minh thông số kỹ thuật của nhà sản xuất thiết bị được tuân thủ trong tệp HAL, sử dụng các yêu cầu trong nhận xét IPower.hal và IPowerStats.hal. Một ví dụ về các nhận xét được sử dụng trong thử nghiệm VTS được hiển thị bên dưới:

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