Quản lý hiệu suất

Việc quản lý nguồn điện và hiệu suất của thiết bị Android có thể giúp đảm bảo ứng dụng chạy nhất quán và trơn tru trên nhiều loại phần cứng. Trong Android 7.0 trở lên, nhà sản xuất thiết bị gốc (OEM) có thể triển khai tính năng hỗ trợ gợi ý về hiệu suất ổn định để cho phép ứng dụng duy trì hiệu suất thiết bị nhất quán và chỉ định một nhân độc quyền để cải thiện hiệu suất cho các ứng dụng trên nền trước, sử dụng nhiều CPU.

Hiệu suất ổn định

Đối với các ứng dụng chạy trong thời gian dài (trò chơi, máy ảnh, RenderScript, xử lý âm thanh), hiệu suất có thể thay đổi đáng kể khi đạt đến giới hạn nhiệt độ của thiết bị và công cụ hệ thống trên chip (SoC) bị điều tiết. Các nhà phát triển ứng dụng tạo ứng dụng có hiệu suất cao, chạy trong thời gian dài bị hạn chế vì các chức năng của nền tảng cơ sở là một mục tiêu di chuyển khi thiết bị bắt đầu nóng lên.

Để giải quyết những hạn chế này, Android 7.0 đã ra mắt tính năng hỗ trợ hiệu suất ổn định, cho phép nhà sản xuất thiết bị gốc (OEM) đưa ra gợi ý về khả năng hiệu suất của thiết bị cho các ứng dụng chạy trong thời gian dài. Nhà phát triển ứng dụng có thể sử dụng các gợi ý này để điều chỉnh ứng dụng nhằm đạt được mức hiệu suất thiết bị nhất quán, có thể dự đoán được trong thời gian dài.

Kiến trúc

Ứng dụng Android có thể yêu cầu nền tảng chuyển sang chế độ hiệu suất ổn định, trong đó thiết bị Android có thể duy trì mức hiệu suất nhất quán trong thời gian dài.

Hình 1. Cấu trúc chế độ hiệu suất cao bền vững.

Triển khai

Để hỗ trợ hiệu suất ổn định trong Android 7.0 trở lên, nhà sản xuất thiết bị gốc (OEM) phải:

  • Thực hiện các thay đổi dành riêng cho thiết bị đối với HAL nguồn để khoá tần suất CPU/GPU tối đa hoặc thực hiện các hoạt động tối ưu hoá khác để ngăn chặn tình trạng điều tiết nhiệt.
  • Triển khai gợi ý mới POWER_HINT_SUSTAINED_PERFORMANCE trong HAL nguồn.
  • Khai báo tính năng hỗ trợ bằng cách trả về TRUE thông qua API isSustainedPerformanceModeSupported().
  • Triển khai Window.setSustainedPerformanceMode.

Trong quá trình triển khai tham chiếu Nexus, gợi ý về nguồn điện sẽ giới hạn tần suất tối đa của CPU và GPU ở mức cao nhất có thể duy trì. Xin lưu ý rằng việc hạ thanh MAX trong tần suất CPU/GPU sẽ làm giảm tốc độ khung hình, nhưng tốc độ thấp hơn này được ưu tiên trong chế độ này do tính bền vững của nó. Ví dụ: một thiết bị sử dụng xung nhịp tối đa thông thường có thể kết xuất ở tốc độ 60 khung hình/giây trong vài phút, nhưng sau khi thiết bị nóng lên, thiết bị có thể giảm tốc xuống 30 khung hình/giây vào cuối 30 phút. Ví dụ: khi sử dụng chế độ duy trì, thiết bị có thể kết xuất nhất quán ở tốc độ 45 khung hình/giây trong suốt 30 phút. Mục tiêu là tốc độ khung hình khi sử dụng chế độ cao (hoặc cao hơn) tốc độ khung hình khi không sử dụng chế độ và nhất quán theo thời gian để nhà phát triển không phải theo đuổi mục tiêu di chuyển.

Bạn nên triển khai chế độ duy trì để thiết bị đạt được hiệu suất duy trì cao nhất có thể, chứ không chỉ các giá trị tối thiểu cần thiết để vượt qua bài kiểm thử (ví dụ: chọn giới hạn tần số MAX cao nhất có thể mà không khiến thiết bị bị điều tiết nhiệt theo thời gian).

Lưu ý: Bạn không cần giới hạn tốc độ xung nhịp MAX để triển khai chế độ duy trì.

Xác nhận kết quả

Nhà sản xuất thiết bị gốc (OEM) có thể sử dụng quy trình kiểm thử CTS (Android 7.0 trở lên) để xác minh việc triển khai API hiệu suất ổn định. Quá trình kiểm thử chạy một khối lượng công việc trong khoảng 30 phút và đo điểm chuẩn hiệu suất khi bật và không bật chế độ duy trì:

  • Khi bật chế độ duy trì, tốc độ khung hình phải tương đối không đổi (kiểm thử đo lường tỷ lệ phần trăm thay đổi về tốc độ khung hình theo thời gian và yêu cầu thay đổi <5%).
  • Khi bật chế độ duy trì, tốc độ khung hình không được thấp hơn tốc độ khung hình sau 30 phút khi tắt chế độ này.

Ngoài ra, bạn có thể kiểm thử cách triển khai theo cách thủ công bằng một số khối lượng công việc nặng về CPU và GPU để đảm bảo thiết bị không bị điều tiết nhiệt sau 30 phút sử dụng. Trong quá trình kiểm thử nội bộ, chúng tôi đã sử dụng các khối lượng công việc mẫu bao gồm cả trò chơi và ứng dụng đo điểm chuẩn (ví dụ: gfxbench).

Lõi độc quyền

Đối với các khối lượng công việc nặng về CPU và nhạy cảm về thời gian, việc bị một luồng khác chiếm quyền có thể là sự khác biệt giữa việc đáp ứng hay không đáp ứng thời hạn khung hình. Đối với các ứng dụng có yêu cầu nghiêm ngặt về độ trễ và tốc độ khung hình (chẳng hạn như ứng dụng âm thanh hoặc thực tế ảo), việc có một lõi CPU chuyên biệt có thể đảm bảo mức hiệu suất chấp nhận được.

Giờ đây, các thiết bị chạy Android 7.0 trở lên có thể dành riêng một lõi cho ứng dụng trên nền trước hàng đầu, cải thiện hiệu suất cho tất cả ứng dụng trên nền trước và cho phép các ứng dụng có khối lượng công việc cường độ cao kiểm soát nhiều hơn cách công việc được phân bổ trên các lõi CPU.

Cách hỗ trợ một lõi độc quyền trên thiết bị:

  • Bật cpusets và định cấu hình cpuset chỉ chứa ứng dụng trên nền trước hàng đầu.
  • Đảm bảo một lõi (đây là lõi độc quyền) được dành riêng cho các luồng từ cpuset này.
  • Triển khai API getExclusiveCores để trả về số lõi của lõi độc quyền.

Để xác định quy trình nào được lên lịch trên lõi nào, hãy sử dụng systrace trong khi chạy bất kỳ khối lượng công việc nào và xác minh rằng không có luồng không gian người dùng nào từ các ứng dụng khác ngoài ứng dụng trên nền trước hàng đầu được lên lịch trên lõi độc quyền.

Để xem cách triển khai tham chiếu cho Nexus 6P, hãy tham khảo android//device/huawei/angler/power/power.c.