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



Обзор


Intel VTune Amplifier для специализированных систем позволяет оптимизировать энергопотребление приложений, предназначенных для встраиваемых платформ Linux, для операционных систем Android и Windows. Делается это благодаря анализу, который проводится с помощью Intel Energy Profiler.

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

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

Целевая платформа и хост-система


В этом материале рассматривается процесс профилирования энергопотребления на целевой платформе Android с использованием инструментов, включенных в состав Intel System Studio, установленной на Windows-компьютере. В материал так же включены комментарии об особенностях работы с системой, которая установлена на ОС Linux. Система, установленная на Mac OS, будет работать схожим образом, однако, мы не проводили эксперименты на Mac. Копии экрана, которые имеются в статье, сделаны на компьютере с установленной ОС Windows.

Проверка наличия необходимых драйверов


За работу с Android-устройствами в Energy Profiler отвечают несколько компонентов.

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

Следующий компонент – низкоуровневое приложение, которое взаимодействует с драйверами. С приложением можно работать через командную строку. В частности – собирать данные с устройства. Это приложение обычно называют сборщиком данных Intel SoC Watch. Обращение к нему ведется с помощью команды socwatch, сборщик можно установить на устройстве с помощью ADB-скрипта.

И, наконец, компонент для визуализации данных, который встроен в пользовательский интерфейс Intel VTune Amplifier. Вполне допустимо собирать данные по анализу энергопотребления, используя Intel SoC Watch через командную строку и обрабатывать полученные сведения вручную без использования графических инструментов Intel VTune Amplifier. Именно поэтому во многих работах, посвященных оптимизации энергопотребления, говорится лишь об «Intel SoC Watch», но не об «Intel Energy Profiler».

Для того чтобы узнать, установлен ли на устройстве, с которым вы собираетесь работать, нужный драйвер, а так же то, какая версия средства для сбора данных понадобится, нужно открыть adb shell и проверить, есть ли в директории /lib/modules/ или /system/lib/modules/ файл драйвера SOCWATCHx_x.ko.


Пример проверки устройства на наличие драйвера SOCWATCH

После проверки оказалось, что на устройстве, которое мы используем в этом примере, драйвер уже включён в образ системы. Располагается он по адресу /lib/modules/SOCWATCH1_3.ko. Имя файла драйвера позволяет нам понять, какую версию Intel SoC Watch надо использовать для сбора данных. Это – версия 1.3.

Если бы оказалось, что имя файла выглядит как SOCWATCH1_5.ko, нам бы пришлось воспользоваться Intel SoC Watch версии 1.5. Обратите внимание на то, что в Android Lollipop драйвер, скорее всего, будет находиться в папке /system/lib/modules. Однако и на этой версии Android стоит проверить обе папки. Например, на планшетном компьютере Asus Fonepad 8 с CPU Intel Atom Z3530, обновлённом до Android 5.0, драйвер был обнаружен именно в папке /lib/modules/.

Если необходимого драйвера не удаётся найти в системе, его нужно включить в ядро при сборке. Это выходит за рамки данной статьи. Полезные сведения на эту тему можно найти в руководстве пользователя, в разделе «Building the Kernel Modules». Ниже мы расскажем о том, где можно найти это руководство. Особое внимание следует обратить на то, чтобы драйвер имел такую же подпись, как и системное ядро, либо – должна быть возможность предоставить драйверу разрешения системного уровня.

Установка приложения для сбора данных


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

Найдите файл system_studio_target.tgz. Он находится в папке установки Intel System Studio. Путь к директории, где он расположен, может выглядеть как <ISS_install_dir>/Targets. Здесь <ISS_install_dir> представляет собой папку, куда выполнена установка System Studio. При использовании ОС Windows это обычно «C:\Program Files (x86)\Intel\System Studio yyyy.x.xxx». На Linux – «opt/intel/system_studio_yyyy.x.xxx».
Здесь yyyy.x.xxx – это номер версии набора установленных приложений. В вышеупомянутом .tgz-архиве содержатся файлы, которые нужны для хост-систем под управлением Windows или Linux. Архив следует распаковать куда-нибудь, где легко будет найти его содержимое. В нашем случае он был распакован в директорию «C:\Users\Public\ISS-2015_SoCWatch».

Если вы уже пользуетесь бета-версией Intel System Studio 2016, нужный файл можно найти по адресу «C:\Program Files (x86)\Intel_sw_development_tools\system_studio_2016.x.xxx\Targets».

С помощью командной строки перейдите к одной из только что распакованных папок, имя которой соответствует версии драйвера Intel SoC Watch, который ранее был идентифицирован на устройстве. В нашем случае это папка «C:\Users\Public\ISS-2015_SoCWatch\system\studio\target\socwatch_android_v1.3d\».

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

Убедитесь, что Android-устройство подключено к компьютеру по USB и запустите установочный скрипт. При работе в Windows нужно запустить пакетный файл socwatch_android_install.bat. В Linux вам понадобится shell-скрипт socwatch_android_install.sh. Если вы уже пользовались этими скриптами, вы увидите сообщение о том, что установка не удалась. Поэтому, если вы случайно установили не ту версию Android-приложения, перед установкой нужной версии вам понадобится удалить с устройства папку /data/socwatch с помощью adb shell. В случае успеха вы увидите список копируемых на устройство файлов.


Установка сборщика данных на устройство

Сбор данных


Сбор данных для анализа, в самой простой форме этого процесса, состоит из трёх шагов. Первый – настройка окружения. Второй – загрузка драйвера. Третий – запуск скрипта, который и собирает данные.

Настройка окружения


Этот шаг нужно выполнять каждый раз, когда производится новое ADB-подключение к устройству для сбора данных.

Подключитесь к устройству с помощью ADB и перейдите в директорию /data/socwatch. Здесь вы обнаружите скрипт setup_socwatch_env.sh. Запустите скрипт. В ходе его работы текущие настройки окружения будут показаны на экране. Кроме того, среди выведенных данных вы увидите напоминание о том, что нужно загрузить драйвер, но этим мы займёмся на следующем шаге. А сейчас нам нужны следующие команды:

source ./setup_socwatch_env.sh

или

. ./setup_socwatch_env.sh



Настройка окружения для сбора данных с помощью shell-скрипта

Загрузка драйвера


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

На данном шаге в оперативную память устройства загружается драйвер, обнаружением которого на устройстве мы занимались выше. Делается это с помощью команды insmod. В нашем примере драйвер расположен по адресу /lib/modules/SOCWATCH1_3.ko, он присутствует на устройстве и его можно загрузить для дальнейшей работы. Для большей уверенности можно проверить еще раз, загружен ли драйвер. Делается это с помощью команды lsmod. Вот пример её использования:

insmod /lib/modules/SOCWATCHx_y.ko



Загрузка и подтверждение загрузки драйвера socwatch

Некоторым версиям socwatch требуется загрузка дополнительного драйвера (socperf_xxx.ko). Так это или нет, будет указано после выполнения скрипта set_socwatch_env.sh.

Запуск скрипта для сбора данных


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

./socwatch --max-detail -f cpu -s 5 -t 30 -o ./results/GSG_examplerun



Запуск сбора данных

Здесь программа собирает сведения о C-состояниях и P-состояниях ядра процессора, выждав 5 секунд перед началом сбора данных. Сбор ведется в течение 30 секунд. Результаты выводятся в папку /data/socwatch/results/, при этом имена файлов начинаются с «GSG_examplerun».

Обратите внимание на то, что подключение Android-устройства к компьютеру через USB-кабель, весьма вероятно, повлияет на режим энергопотребления устройства. Поэтому кабель часто отключают сразу после запуска команды, но до начала сбора данных. Это можно сделать, например, с помощью фоновой задачи и команды nohup. Соответствующая команда может выглядеть так: «nohup ./socwatch &». После того, как она исполнена, кабель можно отключить.

Нередко весьма желательно, чтобы данные были собраны только при выполнении какого-то определенного приложения. Этого можно добиться с помощью параметра socwatch «-p». Подробности об этом приёме можно узнать из руководства пользователя или применив ключ --help.

Визуализация результатов с помощью VTune Amplifier


Для того чтобы проанализировать собранные данные с помощью Intel VTune Amplifier, нам понадобится пройти еще два этапа. А именно – скопировать файлы с собранными данными с устройства и импортировать их в приложение.

Копирование файлов с устройства


Для того чтобы скопировать файлы с устройства, нужно, воспользовавшись командной строкой, перейти в директорию компьютера, в которой вы можете сохранить эти файлы. Рекомендуется, чтобы это была папка, отличная от той, в которой хранятся проекты Intel VTune Amplifier. Дело в том, что при импорте эти файлы будут автоматически скопированы именно туда, поэтому лучше всего перенести их с устройства в какую-нибудь временную директорию.

Если опустить данный шаг и попытаться перейти напрямую к файлам на устройстве (например, начало пути к ним может выглядеть как «devicename/internal storage/data»), работать с ними не удастся из-за различных ограничений, связанных с разрешениями.

Когда вы перешли в командной строке к временной директории, в которую хотите скопировать файлы с устройства, воспользуйтесь командой adb pull. Если вы не помните точные имена файлов, можно получить их список командой вида «adb shell ls /data/socwatch/results». Вот примеры команд, с помощью которых мы скопировали нужные файлы:

adb pull /data/socwatch/results/GSG_examplerun.csv
adb pull /data/socwatch/results/GSG_examplerun.sw1



Копирование файлов с результатами тестирования на компьютер

Импорт данных в VTune для дальнейшего анализа


На этом шаге нам понадобится лишь файл с расширением .sw1, который был скопирован с устройства. Файл .csv (comma separated values) это текстовый файл с результатами, его можно использовать как источник данных для собственных скриптов анализа данных или других инструментов.

Запустите приложение Intel VTune Amplifier и загрузите нужный проект. Если вы не знакомы с этим продуктом, обратитесь к статье Начало работы с Intel VTune Amplifier для специализированных систем или к какому-нибудь похожему руководству. На вкладке «Welcome» щёлкните по ссылке «Import Result…». Можно поступить иначе – перейти к группе «Energy Analysis», которую можно найти в разделе «Analysis Type» на вкладке «New Analysis», и щёлкнуть «Import Data».

Обратите внимание на то, что вышеописанные действия актуальны для Intel System Studio 2015 Update 1 или более поздней. Если вы пользуетесь более ранней версией Intel System Studio, вам может понадобиться воспользоваться инструментами командной строки для импорта данных.


Импорт данных с вкладки Welcome


Импорт данных с экрана выбора типа анализа

И в том и в другом случаях следующим шагом будет вкладка «Import a File and Create a Result». На ней будет поле, в котором можно указать путь к .sw1-файлу, скопированному с устройства, который вы хотите импортировать в приложение.


Вкладка выбора файла для импорта

После того, как файл выбран, щёлкните по кнопке Import и понаблюдайте за тем, как программа анализирует и выводит данные, которые можно будет рассмотреть.

Интерпретация результатов


То, какие именно данные будут доступны для анализа, сильно зависит от аппаратного обеспечения тестируемого устройства, от версии сборщика данных и параметров командной строки, использованных при сборе информации.

При загрузке результатов режим просмотра «Platform Power Analysis» будет выбран по умолчанию (обычно других вариантов нет), будет показана вкладка «Summary». На этой вкладке можно найти такие полезные сведения, как «Elapsed time», то есть – время тестирования, и время работы ядер процессора (обычно – это количество ядер, умноженное на время тестирования). Здесь же есть сведения о событиях (событий в секунду на ядро), которые приводят к выходу процессора из режима пониженного энергопотребления. На этой же вкладке можно обнаружить сведения о частоте активных ядер и о причинах событий, которые их «пробуждают».

Здесь показан пример анализа данных, полученных после использования такой команды:

./socwatch --max-detail -f cpu -f device -f sys -t 30 -s 5 –o ./results/idleasleep

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


Данные по устройству, которое находилось в спящем режиме

Еще одна полезная закладка – это «Correlate Metrics». Здесь можно увидеть раскладку по времени для различных состояний и событий. Тут можно легко увеличить масштаб просмотра нужного отрезка времени и исследовать точные временные рамки событий и то, как они соотносятся друг с другом. Кроме того, обратите внимание на то, что если удерживать какое-то время указатель мыши над интересующим вас участком, можно увидеть всплывающее сообщение с более подробными сведениями. Именно этот момент показан на следующем рисунке.


Просмотр данных на вкладке System Correlate Metrics

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

Для сравнения результатов двух испытаний сначала нужно раздельно импортировать в приложение оба набора данных, затем закрыть их вкладки анализа данных. На этом шаге рекомендуется переименовать результаты анализа в окне «Project Navigator» для того, чтобы с ними было удобнее работать, однако, это необязательно. Затем нужно воспользоваться значком «Compare Results» и указать, какие именно результаты анализа следует сравнить. Приложение покажет оба набора аналитических данных в одном окне, где их можно сопоставить. Вот пример сравнения двух наборов данных, полученных при выполнении различных тестов.


Сравнение результатов нескольких испытаний: общие сведения


Сравнение результатов нескольких испытаний: причины выхода процессора из режима с пониженным энергопотреблением

Итоги


Мы рассмотрели пример использования средств Intel System Studio для анализа энергопотребления устройств, работающих на платформе Android. Теперь у вас есть всё необходимое для того, чтобы приступить к анализу и оптимизации ваших приложений.

Домашнее задание


» Документация по Intel VTune Amplifier 2015
» Руководства по оптимизации и повышению производительности

Комментарии (1)


  1. pak63
    28.08.2015 17:02

    Пробовали, но поддержка не помогла.
    На socwatch_android_install.sh устройство отвечает “ADB cannot run as root in production builds”. Lenovo Yoga Tablet 2