Измерьте мощность компонента

Вы можете определить энергопотребление отдельного компонента, сравнивая ток, потребляемый устройством, когда компонент находится в желаемом состоянии (например, включен, активен, сканирует) и когда компонент выключен. Измерьте средний мгновенный ток, потребляемый устройством при номинальном напряжении, используя внешний монитор питания, например настольный источник питания, или специализированные инструменты контроля заряда батареи (например, программное обеспечение Monsoon Solution Inc. Power Monitor и Power Tool).

Производители часто предоставляют информацию о токе, потребляемом отдельным компонентом. Используйте эту информацию, если она на практике точно отражает ток, потребляемый от батареи устройства. Однако проверьте значения, предоставленные производителем, прежде чем использовать их в профиле мощности вашего устройства.

Контроль энергопотребления

При измерении убедитесь, что устройство не подключено к внешнему источнику зарядки, например USB-подключению к хосту разработки, используемому при запуске Android Debug Bridge (adb). Тестируемое устройство может потреблять ток от хоста, что приводит к снижению измерений на батарее. Избегайте подключений USB On-The-Go (OTG), так как устройство OTG может потреблять ток от тестируемого устройства.

За исключением измеряемого компонента, система должна работать с постоянным уровнем энергопотребления, чтобы избежать неточных измерений, вызванных изменениями в других компонентах. Действия системы, которые могут привести к нежелательным изменениям в измерениях мощности, включают:

  • Сотовая связь, Wi-Fi и Bluetooth принимают, передают или сканируют активность . Если вы не измеряете мощность сотовой радиосвязи, переведите устройство в режим полета и включите Wi-Fi или Bluetooth, если это необходимо.
  • Экран вкл/выкл . Цвета, отображаемые при включенном экране, могут влиять на энергопотребление некоторых экранных технологий. Выключите экран при измерении значений для компонентов, не являющихся экраном.
  • Приостановка/возобновление работы системы . Состояние выключенного экрана может привести к приостановке работы системы, переводя части устройства в режим пониженного энергопотребления или в выключенное состояние. Это может повлиять на энергопотребление измеряемого компонента и привести к большим отклонениям в показаниях мощности, поскольку система периодически возобновляет отправку сигналов тревоги и т. д. Подробности см. в разделе Управление приостановкой работы системы .
  • Процессоры меняют скорость и входят в состояние ожидания планировщика с низким энергопотреблением или выходят из него . Во время нормальной работы система часто корректирует скорость ЦП, количество подключенных к сети ядер ЦП и другие состояния ядер системы, такие как скорость шины памяти и напряжение шин питания, связанных с ЦП и памятью. Во время тестирования эти настройки влияют на измерения мощности:
    • Операции масштабирования скорости процессора могут уменьшить масштабирование тактовой частоты и напряжения шин памяти и других компонентов ядра системы.
    • Планирование может повлиять на процент времени, которое процессоры проводят в состояниях простоя с низким энергопотреблением. Подробную информацию о том, как предотвратить возникновение этих изменений во время тестирования, см. в разделе «Управление скоростью процессора» .

Например, Джо Дроид хочет вычислить значение screen.on для устройства. Он включает режим полета на устройстве, запускает устройство в стабильном текущем состоянии, поддерживает постоянную скорость процессора и использует частичную блокировку пробуждения для предотвращения приостановки системы. Затем Джо выключает экран устройства и проводит измерение (200 мА). Далее Джо включает экран устройства на минимальную яркость и проводит еще одно измерение (300 мА). Значение screen.on составляет 100 мА (300–200).

Примечание . Для компонентов, которые не имеют плоской формы кривой потребления тока в активном состоянии (например, сотовая связь или Wi-Fi), измерьте средний ток с течением времени с помощью инструмента мониторинга мощности.

При использовании внешнего источника питания вместо аккумулятора устройства в системе могут возникнуть проблемы из-за неподключенного термистора аккумулятора или встроенных контактов указателя уровня топлива (т. е. неверные показания температуры аккумулятора или оставшейся емкости аккумулятора могут привести к отключению ядра или системы Android). . Поддельные батареи могут подавать сигналы на контакты термистора или указателя уровня топлива, которые имитируют показания температуры и состояния заряда для обычной системы, а также могут иметь удобные выводы для подключения к внешним источникам питания. Альтернативно вы можете изменить систему, чтобы она игнорировала неверные данные от отсутствующей батареи.

Система управления приостанавливается

В этом разделе описывается, как избежать состояния ожидания системы, если вы не хотите, чтобы оно мешало другим измерениям, и как измерить энергопотребление в состоянии ожидания системы, когда вы хотите его измерить.

Предотвратить зависание системы

Приостановка системы может привести к нежелательным отклонениям в измерениях мощности и перевести компоненты системы в режимы пониженного энергопотребления, непригодные для измерения использования активной мощности. Чтобы предотвратить приостановку работы системы при выключенном экране, используйте временную частичную блокировку пробуждения. С помощью USB-кабеля подключите устройство к хосту разработки, затем введите следующую команду:

adb shell "echo temporary > /sys/power/wake_lock"

В режиме wake_lock состояние выключенного экрана не приводит к приостановке работы системы. (Не забудьте отсоединить USB-кабель от устройства перед измерением потребляемой мощности.)

Чтобы удалить вейклок:

adb shell "echo temporary > /sys/power/wake_unlock"

Система измерения приостанавливается

Чтобы измерить энергопотребление в режиме ожидания системы, измерьте значение cpu.idle в профиле питания. Перед измерением:

  • Удалите существующие вейклокы (как описано выше).
  • Переведите устройство в режим полета, чтобы избежать одновременной активности сотовой связи, которая может работать на процессоре, отдельном от частей SoC, управляемых приостановкой системы.
  • Убедитесь, что система находится в состоянии ожидания:
    • Подтверждение того, что текущие показания стабилизируются. Показания должны находиться в пределах ожидаемого диапазона энергопотребления в режиме ожидания SoC плюс энергопотребления компонентов системы, которые остаются включенными (например, USB PHY).
    • Проверка вывода системной консоли.
    • Отслеживание внешних индикаторов состояния системы (например, выключение светодиода, когда система не находится в режиме ожидания).

Управление скоростью процессора

Активные процессоры можно подключить к сети или отключить от сети, изменить их тактовую частоту и связанное с ней напряжение (возможно, это также повлияет на скорость шины памяти и другие состояния питания ядра системы), а также они могут переходить в состояния простоя с пониженным энергопотреблением, находясь в цикле простоя ядра. При измерении различных состояний питания ЦП для профиля мощности избегайте отклонений в энергопотреблении при измерении других параметров. Профиль мощности предполагает, что все процессоры имеют одинаковую доступную скорость и характеристики мощности.

При измерении мощности ЦП или при сохранении постоянной мощности ЦП для выполнения других измерений количество ЦП, включенных в онлайн-режим, должно оставаться постоянным (например, один ЦП должен быть подключен к сети, а остальные отключены от сети/горячего подключения). Оставление всех процессоров, кроме одного, в плановом простое может дать приемлемые результаты. Остановка платформы Android с помощью adb shell stop может снизить активность планирования системы.

Вы должны указать доступную скорость процессора для вашего устройства в записи профиля питания cpu.speeds . Чтобы получить список доступных скоростей процессора, запустите:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

Эти скорости соответствуют соответствующим измерениям мощности в значении cpu.active .

Для платформ, где количество подключенных к сети ядер существенно влияет на энергопотребление, вам может потребоваться изменить драйвер или регулятор cpufreq для платформы. Большинство платформ поддерживают управление скоростью процессора с помощью регулятора cpufreq в пользовательском пространстве и использования интерфейсов sysfs для установки скорости. Например, чтобы установить скорость 200 МГц в системе только с одним процессором или со всеми процессорами, использующими общую политику cpufreq, используйте системную консоль или оболочку adb для запуска следующих команд:

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

Примечание . Точные команды различаются в зависимости от реализации cpufreq на платформе.

Эти команды гарантируют, что новая скорость не выходит за допустимые пределы, устанавливают новую скорость, а затем выводят скорость, с которой фактически работает процессор (для проверки). Если текущая минимальная скорость перед выполнением превышает 200000, возможно, вам придется изменить порядок первых двух строк или выполнить первую строку еще раз, чтобы снизить минимальную скорость перед установкой максимальной скорости.

Чтобы измерить ток, потребляемый ЦП, работающим на различных скоростях, используйте системную консоль, чтобы поместить ЦП в цикл с привязкой к ЦП, используя команду:

# while true; do true; done

Выполняйте измерения во время выполнения цикла.

Некоторые устройства могут ограничивать максимальную скорость ЦП при выполнении теплового регулирования из-за измерения высокой температуры (то есть после продолжительной работы ЦП на высоких скоростях). Следите за таким ограничением, либо используя вывод системной консоли при проведении измерений, либо проверяя журнал ядра после измерения.

Для значения cpu.awake измеряется потребляемая мощность, когда система не находится в режиме ожидания и не выполняет задачи. ЦП должен находиться в цикле ожидания планировщика с низким энергопотреблением, возможно, выполняя инструкцию ARM Wait For Event, или в состоянии низкого энергопотребления, специфичном для SoC, с задержкой быстрого выхода, подходящей для использования в режиме ожидания.

Для значения cpu.active измеряется мощность, когда система не находится в режиме ожидания и не выполняет задачи. Один ЦП (обычно основной ЦП) должен выполнять задачу, в то время как все остальные ЦП должны находиться в состоянии ожидания.

Измерьте мощность экрана

При измерении питания экрана убедитесь, что другие устройства, которые обычно включаются при включении экрана, также включены. Например, если сенсорный экран и подсветка дисплея обычно включаются при включенном экране, убедитесь, что эти устройства включены во время измерения, чтобы получить реалистичный пример энергопотребления экрана.

Некоторые технологии отображения различаются по энергопотреблению в зависимости от отображаемых цветов, в результате чего измерения мощности значительно различаются в зависимости от того, что отображается на экране во время измерения. При измерении убедитесь, что на экране отображается то, что имеет характеристики мощности реалистичного экрана. Выбирайте между крайностями: полностью черным экраном (который потребляет наименьшее количество энергии для некоторых технологий) и полностью белым экраном. Распространенным выбором является просмотр расписания в приложении календаря, в котором используется сочетание белого фона и небелых элементов.

Измерьте экран при включении питания при минимальной и максимальной яркости дисплея/подсветки. Чтобы установить минимальную яркость:

  • Используйте пользовательский интерфейс Android (не рекомендуется). Установите ползунок «Настройки» > «Яркость дисплея» на минимальную яркость дисплея. Однако пользовательский интерфейс Android позволяет устанавливать яркость только на уровне не менее 10–20 % от возможной яркости панели или подсветки и не позволяет устанавливать яркость настолько низкую, чтобы экран мог быть не виден без особых усилий.
  • Используйте файл sysfs (рекомендуется). Если возможно, используйте файл sysfs для управления яркостью панели вплоть до минимальной яркости, поддерживаемой оборудованием.

Кроме того, если файл sysfs платформы позволяет включать и выключать ЖК-панель, подсветку и сенсорный экран, используйте этот файл для проведения измерений с включенным и выключенным экраном. В противном случае установите частичную блокировку пробуждения, чтобы система не приостанавливалась, а затем включите и выключите экран кнопкой питания.

Измерьте мощность Wi-Fi

Выполните измерения Wi-Fi в относительно тихой сети. Избегайте выполнения дополнительной работы по обработке больших объемов широковещательного трафика, не связанной с измеряемой деятельностью.

Значение wifi.on измеряет мощность, потребляемую, когда Wi-Fi включен, но не осуществляет активную передачу или прием. Это часто измеряется как разница между потреблением тока в состоянии ожидания (сна) системы с включенным и отключенным Wi-Fi.

Значение wifi.scan измеряет мощность, потребляемую во время сканирования Wi-Fi на наличие точек доступа. Приложения могут запускать сканирование Wi-Fi с помощью API- startScan() класса WifiManager. Вы также можете открыть «Настройки» > «Wi-Fi», который выполняет сканирование точек доступа каждые несколько секунд с очевидным скачком энергопотребления, но из этих измерений необходимо вычесть мощность экрана.

Примечание . Используйте контролируемую настройку (например, iperf ) для генерации сетевого трафика приема и передачи.