Bạn có thể xác định mức tiêu thụ điện năng của từng thành phần bằng cách so sánh dòng điện mà thiết bị lấy khi thành phần ở trạng thái mong muốn (chẳng hạn như bật, hoạt động, quét) và khi thành phần tắt. Đo dòng điện tức thời trung bình lấy trên thiết bị ở điện áp danh định bằng cách sử dụng một thiết bị giám sát nguồn điện bên ngoài, chẳng hạn như nguồn điện trên băng ghế hoặc các công cụ chuyên dụng để giám sát pin (chẳng hạn như phần mềm Power Monitor và Power Tool của Monsoon Solution Inc.).
Nhà sản xuất thường cung cấp thông tin về dòng điện tiêu thụ của một thành phần riêng lẻ. Hãy sử dụng thông tin này nếu thông tin đó thể hiện chính xác dòng điện lấy từ pin thiết bị trong thực tế. Tuy nhiên, hãy xác thực các giá trị do nhà sản xuất cung cấp trước khi sử dụng các giá trị đó trong hồ sơ nguồn điện của thiết bị.
Kiểm soát mức tiêu thụ điện năng
Khi đo lường, hãy đảm bảo thiết bị không có kết nối với nguồn sạc bên ngoài, chẳng hạn như kết nối USB với máy chủ phát triển dùng khi chạy Cầu gỡ lỗi Android (adb). Thiết bị đang được kiểm thử có thể lấy dòng điện từ máy chủ, do đó làm giảm mức đo lường tại pin. Tránh kết nối USB On-The-Go (OTG), vì thiết bị OTG có thể lấy dòng điện từ thiết bị đang được kiểm thử.
Ngoại trừ thành phần đang được đo lường, hệ thống phải chạy ở mức tiêu thụ điện năng không đổi để tránh việc đo lường không chính xác do các thay đổi trong các thành phần khác. Các hoạt động hệ thống có thể gây ra những thay đổi không mong muốn đối với kết quả đo lường điện năng bao gồm:
- Hoạt động quét, truyền hoặc nhận qua mạng di động, Wi-Fi và Bluetooth. Khi không đo công suất đài phát sóng di động, hãy đặt thiết bị ở chế độ trên máy bay và bật Wi-Fi hoặc Bluetooth khi thích hợp.
- Màn hình bật/tắt. Màu sắc hiển thị khi màn hình bật có thể ảnh hưởng đến mức tiêu thụ điện trên một số công nghệ màn hình. Tắt màn hình khi đo lường các giá trị cho các thành phần không phải màn hình.
- Tạm ngưng/tiếp tục hệ thống. Trạng thái tắt màn hình có thể kích hoạt trạng thái tạm ngưng hệ thống, đặt các phần của thiết bị ở trạng thái tiết kiệm pin hoặc tắt. Điều này có thể ảnh hưởng đến mức tiêu thụ điện năng của thành phần đang được đo lường và tạo ra sự khác biệt lớn trong các lần đọc điện năng khi hệ thống định kỳ tiếp tục gửi chuông báo, v.v. Để biết thông tin chi tiết, hãy xem phần Kiểm soát trạng thái tạm ngưng hệ thống.
- CPU thay đổi tốc độ và chuyển sang/thoát khỏi trạng thái rảnh của trình lập lịch biểu tiết kiệm pin.
Trong quá trình hoạt động bình thường, hệ thống thường xuyên điều chỉnh tốc độ CPU, số lượng nhân CPU trực tuyến và các trạng thái nhân hệ thống khác như tốc độ bus bộ nhớ và điện áp của đường dẫn nguồn liên kết với CPU và bộ nhớ. Trong quá trình thử nghiệm, những điều chỉnh này ảnh hưởng đến kết quả đo lường mức tiêu thụ điện năng:
- Các thao tác điều chỉnh tốc độ CPU có thể làm giảm mức điều chỉnh xung nhịp và điện áp của bus bộ nhớ cũng như các thành phần cốt lõi khác của hệ thống.
- Hoạt động lên lịch có thể ảnh hưởng đến tỷ lệ phần trăm thời gian CPU ở trạng thái rảnh có mức năng lượng thấp. Để biết thông tin chi tiết về cách ngăn các điều chỉnh này xảy ra trong quá trình kiểm thử, hãy xem phần Kiểm soát tốc độ CPU.
Ví dụ: Joe Droid muốn tính toán giá trị screen.on
cho một thiết bị. Anh bật chế độ trên máy bay trên thiết bị, chạy thiết bị ở trạng thái hiện tại ổn định, giữ tốc độ CPU không đổi và sử dụng một phần khoá chế độ thức để ngăn hệ thống tạm ngưng. Sau đó, Joe tắt màn hình thiết bị và đo lường (200 mA). Tiếp theo, Joe bật màn hình thiết bị ở độ sáng tối thiểu và đo lường lại (300 mA). Giá trị screen.on
là 100 mA (300 – 200).
Lưu ý: Đối với các thành phần không có dạng sóng phẳng của mức tiêu thụ hiện tại khi hoạt động (chẳng hạn như đài phát thanh di động hoặc Wi-Fi), hãy đo cường độ dòng điện trung bình theo thời gian bằng công cụ giám sát nguồn.
Khi sử dụng nguồn điện bên ngoài thay cho pin thiết bị, hệ thống có thể gặp sự cố do nhiệt điện trở pin không được kết nối hoặc các chân đồng hồ đo nhiên liệu tích hợp (tức là giá trị đọc không hợp lệ cho nhiệt độ pin hoặc dung lượng pin còn lại có thể tắt hạt nhân hoặc hệ thống Android). Pin giả có thể cung cấp tín hiệu trên các chân cảm biến nhiệt hoặc đồng hồ đo nhiên liệu mô phỏng nhiệt độ và trạng thái sạc cho một hệ thống thông thường, đồng thời cũng có thể cung cấp các đầu nối thuận tiện để kết nối với nguồn điện bên ngoài. Ngoài ra, bạn có thể sửa đổi hệ thống để bỏ qua dữ liệu không hợp lệ từ pin bị thiếu.
Tạm ngưng hệ thống điều khiển
Phần này mô tả cách tránh trạng thái tạm ngưng hệ thống khi bạn không muốn trạng thái này can thiệp vào các phép đo khác và cách đo mức tiêu thụ điện năng của trạng thái tạm ngưng hệ thống khi bạn muốn đo lường.
Ngăn chặn việc tạm ngưng hệ thống
Trạng thái tạm ngưng hệ thống có thể gây ra sự khác biệt không mong muốn trong các phép đo năng lượng và đặt các thành phần hệ thống ở trạng thái tiết kiệm pin không phù hợp để đo lường mức sử dụng năng lượng đang hoạt động. Để ngăn hệ thống tạm ngưng khi màn hình tắt, hãy sử dụng một chế độ khoá chế độ thức tạm thời một phần. Kết nối thiết bị với máy chủ phát triển bằng cáp USB, sau đó đưa ra lệnh sau:
adb shell "echo temporary > /sys/power/wake_lock"
Khi ở wake_lock
, trạng thái tắt màn hình không kích hoạt trạng thái tạm ngưng hệ thống.
(Hãy nhớ rút cáp USB khỏi thiết bị trước khi đo mức tiêu thụ điện năng.)
Cách xoá chế độ khoá chế độ thức:
adb shell "echo temporary > /sys/power/wake_unlock"
Đo lường trạng thái tạm ngưng hệ thống
Để đo mức tiêu thụ điện năng trong trạng thái tạm ngưng của hệ thống, hãy đo giá trị của cpu.idle
trong hồ sơ năng lượng. Trước khi đo lường:
- Xoá các khoá chế độ thức hiện có (như mô tả ở trên).
- Đặt thiết bị ở chế độ trên máy bay để tránh hoạt động đồng thời của đài phát sóng di động. Hoạt động này có thể chạy trên một bộ xử lý riêng biệt với các phần SoC do hệ thống tạm ngưng kiểm soát.
- Đảm bảo hệ thống ở trạng thái tạm ngưng bằng cách:
- Xác nhận các lần đọc hiện tại đã ổn định ở một giá trị nhất định. Kết quả đo lường phải nằm trong phạm vi dự kiến cho mức tiêu thụ điện năng của trạng thái tạm ngưng SoC cộng với mức tiêu thụ điện năng của các thành phần hệ thống vẫn được cấp nguồn (chẳng hạn như USB PHY).
- Kiểm tra đầu ra của bảng điều khiển hệ thống.
- Theo dõi các chỉ báo bên ngoài về trạng thái hệ thống (chẳng hạn như đèn LED tắt khi không ở trạng thái treo).
Kiểm soát tốc độ CPU
Bạn có thể đưa CPU đang hoạt động lên mạng hoặc đưa xuống mạng, thay đổi tốc độ xung nhịp và điện áp liên quan (cũng có thể ảnh hưởng đến tốc độ bus bộ nhớ và các trạng thái năng lượng lõi hệ thống khác) và có thể chuyển sang trạng thái rảnh có mức tiêu thụ điện năng thấp hơn trong vòng lặp rảnh của nhân. Khi đo lường các trạng thái điện năng khác nhau của CPU cho hồ sơ điện năng, hãy tránh sự biến động về mức tiêu thụ điện năng khi đo lường các tham số khác. Hồ sơ năng lượng giả định rằng tất cả CPU đều có cùng tốc độ và đặc điểm năng lượng.
Trong khi đo lường công suất CPU hoặc trong khi giữ công suất CPU không đổi để đo lường các thông số khác, hãy giữ nguyên số lượng CPU được đưa lên mạng (chẳng hạn như có một CPU trực tuyến và các CPU còn lại ngoại tuyến/được cắm nóng). Việc giữ tất cả CPU ngoại trừ một CPU ở trạng thái rảnh có thể mang lại kết quả chấp nhận được. Việc dừng khung Android bằng adb shell stop
có thể làm giảm hoạt động lên lịch của hệ thống.
Bạn phải chỉ định tốc độ CPU có sẵn cho thiết bị của mình trong mục cpu.speeds
của hồ sơ năng lượng. Để xem danh sách tốc độ CPU có sẵn, hãy chạy:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Các tốc độ này khớp với các phép đo công suất tương ứng trong giá trị cpu.active
.
Đối với các nền tảng mà số lượng lõi được đưa lên mạng ảnh hưởng đáng kể đến mức tiêu thụ điện năng, bạn có thể cần phải sửa đổi trình điều khiển hoặc trình quản lý cpufreq cho nền tảng đó. Hầu hết các nền tảng đều hỗ trợ kiểm soát tốc độ CPU bằng cách sử dụng trình điều khiển cpufreq không gian người dùng và sử dụng giao diện sysfs để đặt tốc độ. Ví dụ: để đặt tốc độ 200 MHz trên một hệ thống chỉ có 1 CPU hoặc tất cả CPU đều dùng chung một chính sách cpufreq, hãy sử dụng bảng điều khiển hệ thống hoặc shell adb để chạy các lệnh sau:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Lưu ý: Các lệnh chính xác sẽ khác nhau tuỳ thuộc vào cách triển khai cpufreq của nền tảng.
Các lệnh này đảm bảo tốc độ mới không nằm ngoài giới hạn cho phép, đặt tốc độ mới, sau đó in tốc độ mà CPU thực sự đang chạy (để xác minh). Nếu tốc độ tối thiểu hiện tại trước khi thực thi cao hơn 200000, bạn có thể cần đảo ngược thứ tự của hai dòng đầu tiên hoặc thực thi lại dòng đầu tiên để giảm tốc độ tối thiểu trước khi đặt tốc độ tối đa.
Để đo dòng điện do CPU chạy ở nhiều tốc độ tiêu thụ, hãy sử dụng bảng điều khiển hệ thống để đặt CPU vào một vòng lặp liên kết với CPU bằng lệnh:
# while true; do true; done
Đo lường trong khi vòng lặp thực thi.
Một số thiết bị có thể giới hạn tốc độ CPU tối đa trong khi điều tiết nhiệt do đo được nhiệt độ cao (tức là sau khi chạy CPU ở tốc độ cao trong thời gian dài). Hãy chú ý đến việc giới hạn như vậy, bằng cách sử dụng đầu ra của bảng điều khiển hệ thống khi đo lường hoặc bằng cách kiểm tra nhật ký hạt nhân sau khi đo lường.
Đối với giá trị cpu.awake
, hãy đo lường mức năng lượng tiêu thụ khi hệ thống không ở trạng thái tạm ngưng và không thực thi tác vụ. CPU phải ở chế độ trình lập lịch biểu tiết kiệm pin vòng lặp rảnh
, có thể thực thi lệnh ARM Wait For Event (Chờ sự kiện ARM) hoặc ở trạng thái tiết kiệm pin dành riêng cho SoC
với độ trễ thoát nhanh phù hợp với việc sử dụng ở trạng thái rảnh.
Đối với giá trị cpu.active
, hãy đo lường năng lượng khi hệ thống không ở chế độ tạm ngưng và không thực thi tác vụ. Một CPU (thường là CPU chính) sẽ chạy tác vụ trong khi tất cả các CPU khác phải ở trạng thái rảnh.
Đo lường năng lượng màn hình
Khi đo mức tiêu thụ điện năng khi màn hình bật, hãy đảm bảo rằng các thiết bị khác thường bật khi màn hình được bật cũng đang bật. Ví dụ: nếu màn hình cảm ứng và đèn nền màn hình thường bật khi màn hình bật, hãy đảm bảo các thiết bị này đang bật khi bạn đo lường để có được ví dụ thực tế về mức sử dụng điện năng của màn hình.
Một số công nghệ màn hình có mức tiêu thụ năng lượng khác nhau tuỳ theo màu sắc hiển thị, khiến mức đo năng lượng thay đổi đáng kể tuỳ thuộc vào nội dung hiển thị trên màn hình tại thời điểm đo. Khi đo lường, hãy đảm bảo màn hình đang hiển thị nội dung có đặc điểm tiêu thụ điện năng của một màn hình thực tế. Hãy nhắm đến giữa hai thái cực là màn hình toàn màu đen (tiêu thụ năng lượng thấp nhất cho một số công nghệ) và màn hình toàn màu trắng. Một lựa chọn phổ biến là chế độ xem lịch biểu trong ứng dụng lịch, trong đó có sự kết hợp giữa nền trắng và các phần tử không phải màu trắng.
Đo lường mức tiêu thụ điện năng của màn hình ở độ sáng màn hình/độ sáng đèn nền tối thiểu và tối đa. Cách đặt độ sáng tối thiểu:
- Sử dụng giao diện người dùng Android (không nên dùng). Đặt thanh trượt Cài đặt > Độ sáng màn hình thành độ sáng màn hình tối thiểu. Tuy nhiên, giao diện người dùng Android chỉ cho phép đặt độ sáng ở mức tối thiểu là 10-20% độ sáng bảng điều khiển hoặc đèn nền có thể có và không cho phép đặt độ sáng quá thấp đến mức màn hình có thể không hiển thị nếu không có nỗ lực lớn.
- Sử dụng tệp sysfs (nên dùng). Nếu có, hãy sử dụng tệp sysfs để kiểm soát độ sáng của bảng điều khiển xuống mức độ sáng tối thiểu mà phần cứng hỗ trợ.
Ngoài ra, nếu tệp sysfs của nền tảng cho phép bật và tắt bảng điều khiển LCD, đèn nền và màn hình cảm ứng, hãy sử dụng tệp này để đo lường khi màn hình bật và tắt. Nếu không, hãy đặt một chế độ khoá chế độ thức một phần để hệ thống không tạm ngưng, sau đó bật và tắt màn hình bằng nút nguồn.
Đo lường công suất Wi-Fi
Thực hiện đo lường Wi-Fi trên một mạng tương đối yên tĩnh. Tránh thêm công việc xử lý lưu lượng truy cập truyền tin lớn không liên quan đến hoạt động đang được đo lường.
Giá trị wifi.on
đo lường mức năng lượng tiêu thụ khi Wi-Fi đang bật nhưng không chủ động truyền hoặc nhận. Thông số này thường được đo lường bằng delta giữa mức tiêu thụ hiện tại ở trạng thái tạm ngưng (ngủ) của hệ thống khi bật Wi-Fi so với khi tắt Wi-Fi.
Giá trị wifi.scan
đo lường mức năng lượng tiêu thụ trong quá trình quét Wi-Fi để tìm điểm truy cập. Các ứng dụng có thể kích hoạt tính năng quét Wi-Fi bằng cách sử dụng lớp WifiManager
startScan()
API. Bạn cũng có thể mở phần Cài đặt > Wi-Fi. Phần này sẽ quét điểm truy cập mỗi vài giây với mức tiêu thụ điện năng tăng rõ ràng, nhưng bạn phải trừ mức tiêu thụ điện năng của màn hình khỏi các phép đo này.
Lưu ý: Sử dụng chế độ thiết lập có kiểm soát (chẳng hạn như iperf) để tạo lưu lượng truy cập nhận và truyền mạng.