- Измеряем потребление батарейки на мобильных устройствах. Эксперимент в Яндексе
- С самого начала у нас была какая-то тактика
- Электроника работает на белом дыме
- Что нам это дает
- Пара слов про софт
- Как определить, какое приложение потребляет слишком много заряда, и что с ним делать
- Ищем приложение
- Что делать после?
- Энергосбережение Anddroid OS. Часть 1.
Измеряем потребление батарейки на мобильных устройствах. Эксперимент в Яндексе
В наши дни можно утверждать, что телефон перестал быть устройством только для звонков. Он позволяет нам оплачивать покупки, находить правильную дорогу, вызывать такси. Ситуация, в которой у вас садится батарейка, становится одной из самых стрессовых. Остаться ночью на незнакомой улице без телефона довольно неприятно. При этом расход батарейки растет во многом как следствие расширения возможностей.
Производители как железа, так и софта, стараются решить эту проблему. Для Яндекса она тоже актуальна, потому что наши сервисы — это то, что должно быть под рукой у человека в любой момент. Мы по-разному над этим работаем и в рамках эксперимента создали устройство для измерения тока, который потребляется телефоном с батарейки. Теперь мы умеем мерить мгновенные значения тока с батарейки телефона (Nexus, iPhone и др.) в миллиамперах 500 раз в секунду, сохранять эту метрику на диск и считать по ней среднее потребление.
Под катом я расскажу, как у нас это получилось. Будет много фото железок, но заранее прошу прощения за качество — снимки сделаны в боевых условиях.
С самого начала у нас была какая-то тактика
Несколько месяцев назад, когда мы начинали прикручивать нагрузочное тестирование телефонов к Яндекс.Танку (это наш opensource инструмент для тестирования производительности), мы столкнулись с тем, что одну из самых важных метрик — потребление тока с батарейки — мы не можем замерить достоверно, а на некоторых телефонах не можем замерить вообще. Например, вот как выглядит график потребления тока на iPhone, полученный стандартными средствами от Apple:
Все три запуска теста значение потребления вообще не изменялось и было равно 1/20. Удивляет использованная единица измерения — 1/20 означает, что если телефон дальше будет работать с тем же энергопотреблением, то сядет он за 20 часов. То есть, метрика получается очень неточная и не очень интерпретируемая. Кроме того, цифры в сыром виде получить нельзя, только разве что скриншот сделать и приложить его к тикету.
С Android девайсами ситуация выглядит лучше, но все равно далека от идеала. Ток замерять можно, читая из /proc/… циферку, но лучше не делать это слишком часто — опросом значения можно просадить производительность телефона и испортить тесты. На разных девайсах циферка находится в разных местах файловой системы. На части Android телефонов вообще отсутствует железка, измеряющая ток, поэтому на них не получится программными средствами снимать потребление. На Nexus, которые мы взяли как reference, значение в /proc меняется раз в 20 секунд.
В общем, мы решили попробовать измерять потребление хардверно и таким образом убить всех зайцев разом: так можно мерить вообще на всех девайсах, включая ноутбуки и холодильники. Мы знали о существовании Power Monitor, но цена устройства (примерно $800 за штуку, а на каждый телефон потребуется свой девайс), и его несовместимость с Linux (а значит, и сложности с автоматизацией), заставили задуматься о своем велосипеде. Аналогичная ситуация наблюдается с осциллографами и другими измерительными устройствами общего назначения на рынке — покупать дорого, автоматизировать сложно.
Существует еще проект BattOr, по описанию это примерно то, что мы хотим. Сам я не пробовал связаться с авторами, но коллеги говорят, что команду купил Google и с тех пор от них ничего не слышно и на почту они не отвечают. Совпадение? =)
Для начала, в качестве proof-of-concept, мы собрали схему с шунтом, аналогичную представленной в этой статье. Ток мы измеряли в разрыве провода USB. Поскольку значение силы тока ожидалось небольшое, до 500 мА, пришлось усиливать напряжение с помощью инструментального усилителя, а не снимать его напрямую с шунта ардуинкой.
После еще некоторых танцев с бубном нам удалось получить на экране ноутбука график потребления телефоном тока с USB. Тут мы поняли, что таких измерений нам не хватает — мы мерим не ток с батарейки, а ток с USB, телефон запасает энергию в батарейке, и мы не можем сопоставить график потребления тока с тем, что происходит на телефоне. Решили, что нужно вытаскивать батарейку из телефона и использовать вместо нее внешнее питание, а USB во время тестов вообще не втыкать.
Электроника работает на белом дыме
Как известно, все, чему нас учили на уроках физики и электротехники, — ложь, никаких электронов не существует, а устройства работают на белом дыме. И если этот белый дым выходит, то устройство работать перестает. В очередном эксперименте белый дым вышел из Arduino и мы ее потеряли. Оказалось, что между “0” на входе нашего блока питания и “-“ на его выходе — 88 вольт переменного напряжения. После еще нескольких экспериментов с разными БП мы поняли, что не все они одинаково хороши, но есть такие, которые нам подходят. И мы стали использовать эти подходящие. Также мы решили больше не использовать схему с шунтом и инструментальным усилителем и вместо этого взять готовый модуль измерения тока к Arduino на базе MAX471, которая по сути то же самое, только в виде микросхемы. Еще мы рассматривали вариант на базе датчика Холла (ACS712), но, изучив документацию на этот чип, увидели, что он сильно шумит и решили даже не пробовать.
Для того, чтобы питать современный телефон не от встроенной батареи, а от внешнего источника, мало его разобрать и вытащить батарею — уж слишком умны современные батареи. Поэтому мы вытаскиваем из батареи контроллер и подключаемся уже к нему.
Чтобы вернуть модифицированный таким образом iPhone (или другое устройство) в собранное состояние, мы сверлим корпус и выводим два проводка.
Вот такая коробочка у нас получилась в результате. Правда, в метро ее лучше не возить, телефон, провода, вот это все… могут не понять =)
Что нам это дает
Мы уже начали внедрять тестирование наших приложений на энергопотребление, так что ждите улучшений в этой области. Процитирую коллег, которые пользуются нашей коробочкой.
Для получения релевантного результата теста при прямых замерах батарейки этим устройством достаточно пяти минут. Если же замерять «как раньше», то есть смотреть на скорость уменьшения % заряда батареи — то требуется 6-8 часов, плюс не забывайте про человеческий фактор. То есть, время теста сократили с 8 часов до 5 минут: почти в 100 раз.
Текущий разброс результатов замера ± 15%. Это не идеал и надо погрешность уменьшать. Однако, теперь доверие к результату повысилось за счёт исключения человеческого фактора и существенно меньшего времени на 1 замер. Достаточно выполнить за полдня много-много замеров и отсечь результаты, пострадавшие от внезапных всплесков непонятной активности на телефоне.
Стало возможным кросс-платформенное, и кросс-девайсное сравнение значений. Единица измерения — mA, а не «скорость уменьшения процентов заряда», которая зависит от платформы, объёма батареи, «свежести» батареи, не говоря уже про запущенные процессы… Сравнить только mA при одном и том же запущенном Я.Сервисе на Andoird и на iOS — нельзя. Надо добавить поправочный коэффициент — сколько жрёт каждая платформа, без Я.Сервиса. Но, это опять-таки вопрос на пол дня замеров (и это с кофе-поболтать).
Пара слов про софт
Чтобы собирать данные от Arduino (а она просто 500 раз в секунду шлет их по USB), мы написали простенькую читалку. На Python возникли проблемы с повторным открытием устройства на чтение — во второй раз данные уже не читались. Мы не стали разбираться и просто переписали то же самое на Golang — после этого все заработало.
Тут нас ждали еще небольшие грабли: в буфере устройства с предыдущего запуска остаются старые данные. Поэтому сейчас мы просто отбрасываем первые 500 измерений (1 секунда). Затем собранные в .csv данные обрабатываем скриптом на Python (в котором используются Pandas и Seaborn) и получаем графики, которые вы видели в начале статьи.
Если вам интересны исходники читалки, прошивка и код для обработки данных — могу поделиться, пишите в личку.
Источник
Как определить, какое приложение потребляет слишком много заряда, и что с ним делать
Аккумулятор в мобильном устройстве, пожалуй, как раз та вещь, о которой нужно беспокоиться. Вряд ли кому-то нравится каждую ночь ставить гаджет на подзарядку или, того хуже, посреди рабочего дня. Конечно, можно отключить различные функции и сервисы, дабы не допустить быстрой разрядки, но зачастую причина кроется далеко не в этом. Если на вашем смартфоне установлено много приложений, то, скорее всего, среди них найдется парочка, которая нерационально потребляет энергию. Но волноваться не стоит. Далее мы расскажем, что нужно делать в таком случае.
Ищем приложение
Некоторые программы, которые мы считаем полезными и которыми день ото дня пользуемся, в один прекрасный момент (например, после обновления) могут начать потреблять ресурсы батареи «как не в себя». Если ваш смартфон из топовой линейки устройств, возможно, это никак не отразится на производительности, однако по части аккумулятора, вернее автономной работы, однозначно возникнут проблемы.
Паниковать не стоит. Для начала нужно выяснить, какое приложение потребляет больше всего. Просто перейдите в «Настройки», затем «Батарея». Перед вами отобразится список активных приложений. В процентах будет указано, какое количество энергии они расходуют.
В некоторых случаях это меню работает не совсем корректно, то есть не регистрирует активность некоторых приложений. В таком случае мы советуем скачать одну из специальных утилит, например Battery Doctor, которая поможет найти самую энергозатратную программу.
Что делать после?
Казалось бы, нашли приложение, удалили, однако на деле все не так просто. Программа может оказаться очень нужной, да и без этого спешить с удалением не стоит. Для начала попробуйте очистить кеш или в крайнем случае стереть данные в надежде, что это решит проблему. Также можем посоветовать принудительно завершить работу приложения и запустить его снова. Всё это делается в «Настройки» — «Приложения».
Если ни одно из приложений никак не проявило себя с худшей стороны, то стоит проверить такие параметры, как яркость экрана и автоблокировка. Ни для кого не секрет, что дисплей является главным потребителем заряда аккумулятора, поэтому не стоит без толку оставлять его включенным.
Также проблема может быть в том, что смартфон не уходит в глубокий сон. Чтобы проверить это, загрузите приложение CPU Spy. Если в графе «Deep Sleep» стоит слишком маленький процент и вы не нашли ни одного подозрительного приложения, то лучше всего будет сделать резервную копию всех важных данных и попробовать сбросить настройки до заводских.
Возможно, у вас есть какие-то свои способы, с помощью которых вы в свое время решили проблему с чрезмерным потреблением заряда? Напишите о них в комментариях.
Источник
Энергосбережение Anddroid OS. Часть 1.
Наверное, притчей во языцех стала излишняя прожорливость электроэнергии операционной системой Android. Google идет на различные ухищрения, производители увеличивают емкость аккумуляторов, но проблема все еще актуальна.
Поэтому сегодня я расскажу о некоторых ухищрениях, которые позволят сохранить десяток-другой драгоценных процентов, когда это будет необходимо. Многие уже о них знают, но, думаю, так же многим материал будет полезен. Говорю сразу: да, почти все скопировано с других ресурсов, но моя цель — собрать как можно больше информации «под одной крышей». Будет рассказано об снижении энергопотребления без использования Root-доступа. О возможностях с Root-доступом планирую рассказать во второй части.
Начнём с простого. Потяните вниз шторку уведомлений. Какие беспроводные соединения включены? Безжалостно отключайте те, которые сейчас не нужны. Следует понимать, даже если вы не пользуетесь включенными в данный момент Wi-Fi, Bluetooth, GPS, ваше устройство всё равно расходует энергию на многочисленные неявные соединения. Поэтому совет прост, включаем при необходимости и отключаем при ненадобности.
В дополнительных настройках Wi-Fi включите функцию «отключение Wi-Fi в спящем режиме», это значительно уменьшит расход энергии, тогда, когда экран устройства выключен и Wi-Fi по сути не нужен.
Чтобы навигационное приложение быстрее и менее энергозатратно вас находило, включите функцию «определение координат по беспроводным сетям» вместо GPS, во многих случаях полученной точности местоположения будет достаточно, а энергии на это потребуется в несколько раз меньше.
Чтобы ускорить поиск спутников посредством GPS (а значит и сэкономить заряд), включите кратковременно «Передачу данных», программа скачает координаты спутников из интернета и быстрее их найдёт.
Передача данных (мобильный интернет) тоже расходует энергию. Включённая функция «Передача данных» позволяет многочисленным приложениям постоянно «ломиться» в сеть для обновления своих данных, загрузки рекламы и отправки различных запросов. Поэтому рекомендуется при неиспользовании интернет-соединения всегда отключать передачу данных (EDGE, 3G, WiFi и пр.), это может сэкономить до 20% заряда за ночь. Если интернет вам всё же необходим на постоянной основе, можно снизить энергопотребление от передачи данных уменьшив кол-во приложений имеющий свободный доступ в интернет. Для этого необходимо установить и настроить Firewall (например Mobiwol: Firewall без root, а также отключить автосинхронизацию в ненужных аккаунтах (учётных записях).
Экономичный режим для 3G сети.
При использовании режима 3G и в случае если вы не пользуетесь SIP-протоколом можно уменьшить расход энергии на связь путём отключения обязательную регистрацию IMS в сети.
1. В звонилке набираем код *#*#4636#*#*;
2. В открывшемся меню выбираем «Информация о телефоне»;
3. Нажимаем кнопку «Обязательная регистрация IMS», должно стать «отключена».
4. Закрепляем результат перезагрузкой.
Отключение радиомодуля и «лишних» радиочастот.
Уровень приёма сотовой связи оказывает значительное влияние на сохранение заряда. Чем слабее уровень принимаемого сигнала (меньше делений индикатора антенны на экране) тем больше аппарат тратит энергии на его усиление. Поэтому, в зонах неуверенного приёма сети (к примеру в поездке) лучше отключать радиомодуль аппарата, переводя его в режим «в самолете».
Сэкономить заряд можно также отключив не задействованные вашим сотовым оператором диапазоны частот, тем самым аппарат не будет впустую тратить энергию на их сканирование. Для этого необходимо попасть в инженерное меню с помощью кода. Далее на вкладке Telephony выбрать BandMode -> SIM1 (SIM2) -> убрать галочки с неиспользуемых диапазонов и нажать SET.
В России используются следующие режимы частот:
для GSM (2G) — GSM900 и DCS1800;
для UMTS (3G) — WCDMA-GSM-900, WCDMA-IMT-2000 (2100) и CDMA450 (абоненты Скайлинк);
для LTE (4G) — LTE2500, LTE800, LTE2600, реже LTE2300 (Ростелеком), LTE1800 (Екатеринбург), LTE450 (Скайлинк).
По возможности отключайте автояркость, автоповорот дисплея.
Сенсоры и датчики (акселерометр, датчик магнитного поля и т.д.)
Современные мобильные устройства буквально напичканы всевозможными датчиками, которые естественно, требуют энергии для своей работы. Посмотреть, какие датчики есть в вашем аппарате и сколько они потребляют очень просто, достаточно установить приложение Android System Info, зайти во вкладку System и выбрать пункт Sensor. В первых Android-устройствах обычный акселерометр (датчик, определяющих положение устройства) потреблял до 15 мАч, в современных аппаратах это значение как правило в 100 раз меньше, порядка 0.1-0.15 мАч. Если у вас примерно такие же цифры, то нет особого смысла отключать «автоматическую ориентацию экрана» или «автоматическую яркость» (датчик освещённости), каким-либо значительным образом это не отразится на общем энергопотреблении аппарата.
Однако, следует помнить, что многие приложения (прежде всего игры), в которых задействовано управление наклонами аппарата, могут использовать сразу несколько датчиков (акселерометр, гироскоп, датчик вращения, датчик ускорения, датчик ориентации, датчик гравитации и т.д.), что в сумме может дать потребление до 50 мАч.
Не выставляйте яркость выше потребной на данный момент, в темноте можно снизить вообще до минимума. Как показывает опыт, наибольшую экономию дает яркость на уровне до 30%. Чем выше — тем больше потребление энергии. Если вы являетесь обладателем устройства с AMOLED-дисплеем или производным, то у вас есть еще один скрытый резерв. Дело в том, что экономия энергии в данных дисплеях достигается за счёт отсутствия общей подсветки матрицы и светятся в них только сами пиксели. При этом для отображения черного цвета в AMOLED-дисплее просто отключаются необходимые участки экрана, поэтому на энергопотребление таких экранов существенное влияние оказывает отображаемая картинка.
Чем больше на этой картинке будет чёрного цвета и тёмных оттенков, тем меньше AMOLED экран будет потреблять энергии. Поэтому используйте по возможности тему с чёрным или тёмным цветным фоном, с температурой цветов более 6500К (см. рис. ниже).
Сторонние и встроенные режимы энергосбережения, приложения для экономии.
Еще три-четыре года назад некоторые производители начали включать в свои устройства различные энергосберегающие режимы. Как правило, они работают по простому принципу: давайте отключим все-все-все кроме возможности разговаривать. Но возможны и другие варианты, например, экономия за счет понижения яркости экрана, а то и вовсе за счет перевода дисплея в черно-белый режим. Порой энергосберегающих режимов может быть несколько: просто экономный, довольно сильно экономный, чрезвычайно экономный – выбирай, какой тебе больше подходит.
В Android 5.0 наконец-таки появился встроенный режим энергосбережения. Чтобы активировать его, идём в Настройки (Параметры) > Батарея, жмем на три точки в правом верхнем углу, выбираем Режим энергосбережения — и вуаля!
Думаю, на скриншотах все ясно без объяснений. Можно выбрать, при каком уровне заряда он будет включаться автоматически, либо включить принудительно.
Одной из «фишек» недавно презентованной ОС Android 6.0 Marshmallow стал режим Doze.
В этом режиме устройство при помощи датчиком движения автоматически определяет то, что его надолго оставили без внимания. Как только это произошло, девайс сам, без вмешательства человека, переводится в глубокий режим сна и экономит, экономит, экономит заряд батареи. Если нужно, чтобы те или иные приложения при любых обстоятельствах продолжали работать, можно внести их в список исключений, и они не отключаются.
Если же у вас нет ни того, ни другого, на помощь придут многочисленные приложения для экономии электроэнергии в Google Play. Достаточно набрать в поисковой строке «battery saver», «экономия энергии», и появится список наиболее популярных приложений. На мой взгляд, наиболее полезными функциями в таких программах является выбор режима экономии из предусмотренных, добавление своих режимов, а также автоматическая смена режимов — либо при достижении определенного уровня заряда, либо в указанный временной промежуток.
По поводу использования таск-киллеров, мнения обычно делятся на два лагеря:
1. Встроенный менеджер задач прекрасно справляется, выгружая из памяти неиспользуемые приложения. Если вы видите в «Запущенных», например, Браузер, который не запускали, — не пугайтесь, просто система заблаговременно сама поместила неактивные части программы в память и, когда вы решите его-таки запустить, необходимо будет подгрузить лишь малую активную часть (activity). Лучше пусть при запуске подгрузится лишь часть необходимых ресурсов.
2. Эти-то фоновые приложения и вытягивают драгоценную энергию, лучше их совсем «прибить». Да и оперативная память очистится.
Поэтому я не могу дать однозначного ответа, полезны ли менеджеры задач для экономии энергии или наоборот, вредны.
Кстати, еще совет: если вам не нужно устройство, например, ночью или в поездке, не отключайте его совсем, а отключите все беспроводные соединения и переведите в режим полета. Меньше энергии затратится при работе в режиме ожидания в течение 8-9 часов, чем на выключение и последующее включение устройства.
Стандартные средства ОС Android дают возможность отключать многие системные программы, начиная с версии ОС 4.0 и принудительно останавливать ВСЕ программы. И то, и другое будет полезно для экономии энергии.
Пользуетесь любимым музыкальным плеером, а стандартный простаивает без дела? Так отключите же его! Для этого идём в Настройки (Параметры) > Приложения > Все > [Нужное приложение] и смотрим, есть ли пункт «Отключить».
Но будьте внимательны: некоторые системные программы, отвечающие за корректную работу системы и взаимодействие с пользователем, отключать нельзя, а удалять уж тем более. Обычно такие программы не отображаются в меню приложений и не имеют пользовательского интерфейса. Android вроде бы не даст отключить приложения, без которых система не будет работать при перезагрузке, но приложения, без которых не будут работать те, или иные компоненты, отключить, тем не менее, можно. Например, в моем Sony не будет работать геопозиционирование без приложения ANT Radioservice, хотя отключить его можно. Уточняйте приложения, необходимые для стабильной работы вашего аппарата на тематических сайтах. Что смело можно отключать: приложения экосистемы Google (Play Market, YouTube, Google+, Карты Google и т.п., но не трогайте Сервисы Google Play (Play Services Framework), без них не будут работать оставшиеся гуглоприложения), медиаприложения (галерея, аудио/видеоплер, эквалайзер/улучшалка звука камера (без отключенной стандартной камеры могут перестать работать сторонние)), сторонние приложения, встроенные в систему.
Принудительная остановка той или иной программы тоже поможет сэкономить энергию. Для этого идём в Настройки (Параметры) > Приложения > ищем нужное и жмем «Остановить».
Наконец, удаление ненужных сторонних приложений тоже можеть дать некую экономию.
Вот, вроде, все. Если что забыл, где-то ошибся, прошу больно не бить. =) На вопросы постараюсь ответить. =)
Ссылки на веб-страницы, использованные при написании:
Источник