HAL số liệu thống kê về nguồn

Công suất của hệ thống con thiết bị thường được đo lường và ghi lại trong môi trường phòng thí nghiệm cho nhiều điều kiện trạng thái ổn định, chẳng hạn như khi màn hình đang bật hoặc thiết bị ở trạng thái nguồn điện ở chế độ rảnh. Phương pháp này hoạt động cho các hệ thống con có mức tiêu thụ điện năng không đổi hoặc trong các điều kiện dễ đo lường 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, chẳng hạn như khi màn hình hiển thị video.

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

Các lần đọc dịch vụ IPowerStats không định kỳ. Các sự kiện này 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 sẽ ít hơn khi mức tiêu hao pin thấp và thường xuyên hơn khi mức tiêu hao pin cao. Dữ liệu có thể được gửi lại cho máy chủ và có thể được dùng trong báo cáo lỗi để phân tích và phân loại. Điều này hỗ trợ các nỗ lực liên tục nhằm giảm mức tiêu thụ điện năng và tăng thời lượng pin.

IPower.hal và IPowerStats.hal

Cả giao diện IPower.hal IPowerStats.hal đều có trên Android 10, nhưng chức năng thu thập số liệu thống kê IPower.hal chỉ có trong 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 năng lượng trên thiết bị cho các thiết bị được hỗ trợ:

  • Thực hiện đo lường năng lượng cấp đường dẫn cho cả ứng dụng tần số thấp (getRailInfo) và ứng dụng tần số cao (streamEnergyData), đồng thời báo cáo năng lượng tích luỹ 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. PowerEntity là một hệ thống con, thiết bị ngoại vi hoặc miền nguồn điện của nền tảng ảnh hưởng đến tổng mức tiêu thụ điện năng của thiết bị.
  • Báo cáo tập hợp các trạng thái thực thể nguồn điện (getPowerEntityStateInfo) mà các thực thể được chỉ định cung cấp dữ liệu cư trú, sau đó báo cáo dữ liệu tích luỹ cho từng PowerEntity được chỉ định.

Các ứng dụng sau đây sử dụng API IPowerStats.hal:

  • Statsd để thu thập các chỉ số tiêu thụ điện năng trên mỗi đường dẫn.
  • Perfetto, để liên kết mức tiêu thụ điện năng với hoạt động của CPU.
  • Batterystats, để cải thiện hoạt động phân bổ pin bằng cách sử dụng dữ liệu đo lường 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 các hàm IPower.halIPowerStats.hal, nhưng tất cả ứng dụng phải quay lại IPower.hal nếu không triển khai IPowerStats.hal .

Các tuỳ chọn triển khai IPowerStats.hal

Chỉ có các hàm IPower.hal trên Android 7 thông qua 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ác phương tiện khác để giám sát và ghi lại số liệu thống kê về nguồn điện. Một số SoC thu thập 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 cư trú của thực thể năng lượng thông qua phần mềm. Bạn chỉ cần phần cứng theo dõi nguồn để 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 không có ý định sử dụng.

Sau đây là ví dụ về dữ liệu do API giám sát đường sắt trả về

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

Sau đây là ví dụ về dữ liệu do các API trạng thái ngủ của hệ thống con trả về:

  • Modem ở trạng thái ngủ trong X mili giây.
  • SoC ở trạng thái thu gọn nguồn trong Y mili giây.
  • GPU ở trạng thái tạm ngưng trong Z mili giây.

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

Nếu thiết kế thiết bị của bạn có hệ thống con theo dõi nguồn điệ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à PowerStats.hal có thể phân tích cú pháp dữ liệu hoặc bằng cách tạo một tập hợp các lệnh gọi hệ thống loại ioctl.

Bạn phải triển khai trình điều khiển hạt nhân theo cách ngăn tình trạng tràn tích luỹ. Thuật toán được sử dụng phụ thuộc vào thiết kế hệ thống con giám sát nguồn điện phần cứng riêng biệt của bạn. Hệ thống này phải cung cấp cả điện áp bus tức thì và trung bình cũng như các phép đo dòng điện. 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 xoá các bộ tích luỹ năng lượng và phải duy trì dữ liệu năng lượng tích luỹ cho mỗi đường dẫn phụ kể từ khi khởi động, dưới dạng một biến 64 bit được tăng lên theo kết quả đọc năng lượng từ mỗi truy vấn tích luỹ.

Số liệu thống kê cho một thành phần nhất định (hoặc nhiều thành phần nếu muố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 thông thường của sysfs (thường giới hạn mỗi nút ở một giá trị duy nhất), nhưng cách này đảm bảo tất cả dữ liệu đều nhất quán.

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

  • Giữ độ trễ ở mức thấp (tối đa 1 mili giây) khi đọc từ nút sysfs hoặc thực hiện lệnh gọi hệ thống.
  • Đảm bảo rằng chức năng hỗ trợ số liệu thống kê không làm tăng đáng kể mức tiêu thụ pin:
    • 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à phần mềm khi có thể với lưu lượng truy cập khác.
  • Nếu cần, hệ thống con có thể sử dụng các hàm trình điều khiển sau:
    • Lưu dữ liệu vào bộ nhớ đệm nội bộ để tránh độ trễ/trạng thái thức, nhưng phải trả giá bằng dữ liệu hơi cũ.
    • Thực hiện ngoại suy khi hệ thống con đang ở trạng thái ngủ, để cung cấp thời gian ngủ đã cập nhật mà không cần đánh thức hệ thống con.

Chọn 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 để thu thập dữ liệu IPowerStats.hal, hãy chọn bất kỳ thành phần nào 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 nằm một phần hoặc hoàn toàn bên 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 điện sử dụng nhiều chế độ (chẳng hạn như miền nguồn điện cho toàn bộ SoC).

Tuỳ chỉnh

Tính năng không bắt buộc này có thể được tuỳ chỉnh. Thiết kế các trường hợp sử dụng và tuỳ chỉnh cách sử dụng:

  • Quyết định đo lường những đường dẫn nào và tần suất đo lường các đường dẫn đó.
  • 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 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.

Xác nhận kết quả

Các kiểm thử 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 dùng để xác minh rằng một thiết bị có tuân thủ hay không.

Ví dụ: nếu bạn gọi getRailInfo() và hàm này không trả về giá trị nào, thì quy trình kiểm thử VTS sẽ không thành công vì bạn không nhận được thông tin về các dải được theo dõi 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 sắt nhưng thông tin đó đ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 rằng nhà sản xuất thiết bị tuân thủ quy cách trong tệp HAL, sử dụng các yêu cầu trong các nhận xét IPower.hal và IPowerStats.hal. Dưới đây là ví dụ về các nhận xét được dùng trong quy trình kiểm thử 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);