Измерение мощности компонентов

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

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