Как измерить энергопотребление компонента

Вы можете определить энергопотребление отдельного компонента, сравнив ток, потребляемый устройством, когда компонент находится в нужном состоянии (например, включен, активен, сканирует), и когда он выключен. Измерьте средний мгновенный ток, потребляемый устройством при номинальном напряжении, с помощью внешнего монитора питания, например лабораторного источника питания или специализированных инструментов мониторинга батареи (таких как 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, управляемых приостановкой системы.
  • Убедитесь, что система находится в спящем режиме:
    • Подтверждение текущих показаний, которые стабилизируются на определенном значении. Показания должны находиться в ожидаемом диапазоне энергопотребления однокристальной системы в режиме ожидания и компонентов системы, которые остаются включенными (например, 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 на платформе.

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

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

# 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 с помощью класса WifiManager startScan()API. Вы также можете открыть "Настройки > Wi-Fi". В этом случае точка доступа сканируется каждые несколько секунд, что приводит к заметному скачку энергопотребления. Однако из этих измерений необходимо вычесть энергопотребление экрана.

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