HAL (Lớp trừu tượng phần cứng) cho số liệu thống kê về sức mạnh

Công suất của hệ thống con của thiết bị thường được đo và ghi lại trong môi trường phòng thí nghiệm cho các điều kiện ổ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 rảnh. Điều này phù hợp với các hệ thống con có hằng số bản vẽ năng lượng hoặc trong những đ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 dành 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 để truyền gợi ý nguồ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 phụ. Trên Android 10 trở lên, chức năng báo cáo số liệu thống kê tích luỹ nằm trong API thu thập thống kê năng lượng IPowerStats.hal và cung cấp một phương thức để 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ế cho phần thu thập số liệu thống kê tích luỹ trên 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 theo định kỳ. Sự kiện diễn ra lúc thời điểm quan trọng, chẳng hạn như khi pin giảm 1%. Ít đọc được dữ liệu hơn khi pin yếu và thường xuyên hơn khi pin ở mức cao. Dữ liệu có thể gửi lại máy chủ và có thể được 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 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ó chức năng thu thập số liệu thống kê của IPower.hal có sẵn trong giao diện IPowerStats.hal. Chiến lược phát hành đĩa đơn Chức năng IPowerStats.hal bao gồm các API để lấy và sử dụng dữ liệu thu thập được qua kết quả đo lường năng lượng trên thiết bị cho các thiết bị được hỗ trợ:

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

API IPowerStats.hal đang được các ứng dụng sau sử dụng:

  • Statsd, để thu thập chỉ số tiêu thụ điện năng theo từng đường ray.
  • Perfetto, để tương quan mức tiêu thụ điện năng với CPU của bạn.
  • Batterystats, để cải thiện việc phân bổ pin bằng cách sử dụng thay vì ước tính mức tiêu thụ pin từ các hằng số 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 một trong các mục sau các hàm IPower.halIPowerStats.hal, nhưng tất cả khách hàng phải quay lại sử dụng IPower.hal nếu IPowerStats.hal chưa được triển khai .

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

Chỉ có các hàm IPower.hal dùng được trên Android 7 thông qua Android 9. Các thiết bị đã nâng cấp lên Android 10 phải có hệ thống phụ giám sát năng lượng phần cứng hoặ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 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ể nhận thông tin đăng ký cư trú của 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 giám sát nguồn điện phần cứng, getRailInfo(), getEnergyData()streamEnergyData() trả lại NOT_SUPPORTED. Tương tự, getPowerEntityInfo(), getPowerEntityStateInfo()getPowerEntityStateResidencyData()cũng có thể quay lại 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 năng lượng cho màn hình tiêu thụ X μW.
  • Đường dẫn năng lượng cho modem tiêu thụ Y μW.

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

  • Modem ở chế độ ngủ trong X mili giây.
  • SoC ở trạng thái tắt 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 phụ giám sát năng lượng phần cứng

Nếu thiết kế thiết bị của bạn có hệ thống phụ giám sát năng lượng 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 từ đó 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 lệnh gọi hệ thống kiểu ioctl.

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

Số liệu thống kê cho một thành phần nhất định (hoặc nhiều thành phần, không bắt buộc) phải nằm trong một nú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), lớp này đảm bảo tất cả dữ liệu nhất quán.

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

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

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

Khi chọn các thành phần hoặc hệ thống con cần thu thập IPowerStats.hal, chọn bất kỳ nội dung nào trên thiết bị sử dụng 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ư:

  • Các hệ thống con SoC riêng lẻ.
  • Các hệ thống phụ một phần hoặc hoàn toàn nằm ngoài SoC, chẳng hạn như Wi-Fi, 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à camera.
  • Các miền nguồn sử dụng nhiều chế độ (chẳng hạn như miền nguồn cho toàn bộ SoC).

Tuỳ chỉnh

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

  • Quyết định những đường ray cần đo và tần suất đo lường.
  • Quyết định thời điểm đọc 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 hành động dựa trên dữ liệu của bạn.

Xác nhận kết quả

Các quy trình kiểm tra VTS giúp đảm bảo việc đáp ứng các yêu cầu của Android. Nhận xét trong IPowerStats.hal dùng để xác minh rằng một thiết bị đang ở sự tuân thủ.

Ví dụ: nếu bạn gọi getRailInfo() và không trả về giá trị nào, thử nghiệm VTS không thành công vì bạn không nhận được thông tin về xét nghiệm đường dẫn hoặc trạng thái được trả về là SUCCESS. Tương tự, nếu bạn nhận được thông tin đường sắt, nhưng có đi kèm với NON_SUPPORTED hoặc FILE_SYSTEM_ERROR phản hồi, thì đây 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ị tuân thủ trong tệp HAL, bằng cách sử dụng các yêu cầu trong nhận xét IPower.hal và IPowerStats.hal. Một Dưới đây là ví dụ về chú thích dùng trong thử nghiệm 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);