Комментарии 72
Если ещё и замерите потребление в зависимости от текущей частоты CPU (на андроиде, наверное, удобнее их для этого зафиксировать настройками governor), загрузки процессора и количества задействованных ядер для основных чипсетов — будет вообще праздник, ибо есть подозрение, что в power_profile.xml у производителей телефонов обычно числа от балды.
Ну и реальное потребление WiFi, Bluetooth и т.п. тоже интересно…
По поводу разборки телефона — да, все так. Есть телефоны, у которых вынимается аккумулятор — там не надо курочить батарейку. Но для чего-то типа айфона, например, можно найти в сервисе неисправный аккумулятор, откусить от него контроллер и припаяться к нему. А свой работающий отложить в сторонку. Конечно есть риск спалить телефон, но тут уже ничего не поделаешь ) Говорят, у айфона 5 экраны одноразовые — один раз собрал и все. Разобрать и собрать обратно можно с шансом 50/50.
0.05% точно измерять ток и напряжение. Это намного повысит точность. Плюс у низ встроенный интегратор тока.
Иными словами, упомянутые устройства подходят нам только в качестве референсных, чтобы откалиброваться и узнать погрешность. Этого мы пока не делали, но теоретически, если учесть, что Arduino дает 10 бит на 5В, то ее разрешающая способность — это 5 мА/бит. Можно брать внешние 16-битные АЦП на ADS1115, которые соответственно дадут 0.05 мА/бит. Или другие АЦП. Характеристики MAX471 я не помню, их можно посмотреть в даташите. Там, правда, написанно, что не стоит использовать их для новых разработок, но на алиэкспрессе их столько, что нам еще на годы хватит )
Чтобы не быть голословным, вот картинка, полученная с более новой версии коробочки, которая сейчас в разработке. По горизонтальной оси — микросекунды, по вертикальной — миллиамперы. Миллион измерений в секунду, 12 бит на диапазон в 3.3В.
Иными словами, упомянутые устройства подходят нам только в качестве референсных, чтобы откалиброваться и узнать погрешность. Этого мы пока не делали, но теоретически, если учесть, что Arduino дает 10 бит на 5В, то ее разрешающая способность — это 5 мА/бит.
Разрешающая способность — да, а погрешность проверяли? Вполне возможно, что она в разы больше — как из-за погрешности самого arduino, так и к примеру от неточности шунта. И так как вы используете сравнения также между разными экземплярами такой «коробочки», то важна и постоянность результатов между экземплярами.
Это все конечно не означает, что мы остановились и не думаем, как сделать лучше. У нас уже есть прототипы на ARM и ESP8266, и мы, после уточнения требований и спроса на коробочки, готовы сесть проектировать все это «по науке». Если конечно это будет оправдано.
Текущий разброс результатов замера ± 15%.
Ещё интегрирование можно делать внутри, чтобы реже отсылать результат, уж на это-то ардуины хватит. Интегрирующая RC-цепочка на входе с постоянной времени на единицы миллисекунд тоже неплохо бы вписалась, как мне кажется.
По комментарию про погрешность ниже замечу, что тут важна скорей не точность измерений, а больше повторяемость.
Про интегрирующую RC-цепочку думаем, возможно, поставим, но нужно поэкспериментировать. А реже отсылать результат нам, похоже, не потребуется — 500 SPS пролезает и через USB serial, и через UDP пакеты по WiFi. Если же взять ARM (в нашем случае это пока что Arduino Due, stm32 уже в пути), то там вообще нативный USB и 2 MB в секунду при 1 миллионе SPS тоже спокойно пролезает.
При 1MSPS это вообще не так важно, график получается гладкий (см. выше), похоже мы и так успеваем все увидеть. Но тут уже нужно тестить девайс на синтетическом сигнале, посмотреть, как он отвечает на пики, ступеньки — и таким образом узнать предел наших возможностей.
Описанное выше относится к Sony Ericsson, другими я тогда не пользовался.
В последнем Android есть примерно это — критичные функции нужно разрешать после запуска. Но это поддерживают только приложения, собранные с последним SDK, плюс Google Play перестал показывать что приложение хочет интернета, решив, что все хотят интернета...
За месяц с ним почти освободился от мобильного рабства и вместо залипания в интернете снова читаю книжки, хотя пару раз всё же понадобилась карта.
Тон повествования и инструментарий очень похож на работы моих студентов. Уж не уверен, это студентам комплимент, или наоборот...
Вопрос такой — а зачем вы это делаете? Если говорить про энергопотребление телефона, то всё, что может сделать Яндекс — это более хитро управлять подсветкой, оптимизировать алгоритмы для меньшего сжирания процессорного времени и меньше отсылать в бекграунде свои логи в Кремль. Плюс пара очевидных мелочей вроде частоты опроса GPS. Неужели эти факторы не получается отследить без контроля за батарейкой? Понимаю, что это было бы нужно, если бы Яндекс делал свой дистрибутив Android, но этот проект кажется давно умер, как и yandex.store, которому это тоже было бы полезно...
Выводы сделал такие:
Потребление напрямую зависит от частоты и загрузки ЦП. От 0.47А в десктопе и 1% загрузки ЦП (400МГц) до 1.1А (1.28ГГц) в тяжелых приложениях типа «покемонов».
Потребление сильно зависит от яркости дисплея (0.33А в десктопе при 10% яркости, 0.44А при 80% яркости и 0.53А при 100% яркости). Снижение яркости реально работает.
Потребление в спящем режиме примерно 0.09А (колеблется). Если включен плеер и наушники, то скачет 0.12А — 0.15А. Т.е. плеер потребляет не так уж много по сравнению с общим холостым потреблением.
Включение\выключение Bluetooth показывает потребление на уровне точности методики измерения (очень мало т.е.)
WiFi тоже оказался не таким уж прожорливым (0.44А против 0.53А соответственно, т.е. 0.09А). Но если экономить каждый мА\ч то можно и выключать.
GPS модуль жрёт порядка 0.02А (довольно мало)
Можно заблокировать максимальную частоту и число ядер на 400МГц и 2 ядра максимум. Тогда потребление падает до 0.61А при полной загрузке ЦП, но игра (и сам Андроид) начинают жутко тормозить, так что овчинка выделки не стоит.
Радиомодуль еще очень прожорлив. Если включен только wifi, телефон просто лежит на столе с включенным экраном — 300 мА. Включаем радиомодуль — 350 мА. Выключаем wifi — 560 мА. Так что если есть wifi — лучше сидеть на wifi.
Еще интересный кейс — некоторые приложеньки, собирающие данные о положении телефона, жрут больше, если телефон в движении. Была идея собрать из лего специальную шаталку телефона, чтобы их тестировать.
Да и 50 mA просто от включения радиомодуля imho тоже многовато (для телефонов характерно отнюдь не 60 часов чистого standby).
А насчёт «если есть wifi — лучше сидеть на wifi» — лично я подумываю настроить tasker, чтобы дома и в офисе телефон переключался на 2G (вроде бы при этом меньше жрёт в фоне).
Почему такой большой ток — экран включен, он довольно много отжирает. Когда телефон лежит в кармане, экран выключен и он вообще в standby уходит, там маленькое потребление.
Ну или хотя бы чтобы не показывал при последующих запусках. А то возникает ассоциация с уличным попрошайкой. Предыдущий год ни разу не не кликнул на рекламу — может хоть в этом году кликнешь...
Это я к тому, что интерфейс приложений и их поведение подгоняется под целевую аудиторию. А мы тут на хабре не очень то похожи на всех остальных. Приходится терпеть или делать что-то свое (opensource, конечно), чтобы мир стал лучше.
Мне тоже показалось. Но у меня ровно те же причины, что вы указали — телефон сам решает, что он пускает на зарядку батареи и что на работу с периферией. Плюс к этому я подозреваю, что по факту всё всё равно проходит через аккумулятор, а не идёт сразу на обслуживание потребностей компонентов. А что там происходит на умном контроллере аккумулятора — одному богу известно, и это заведомо зависит от конкретного производителя. Вот некоторые просто взрываются...
Плюс при работе от сети он может радостно снимать внутренние ограничения на расход батареи и начинать светить ярче \ выполнять полезные внутренние функции вроде поиска и установки обновлений. Собственно, ровно под это есть даже специальный Intent — ACTION_BATTERY_CHANGED. Кстати, было бы интересно произвести анализ приложений с маркета и стандартных компонент на предмет того, какой процент из них обрабатывает этот Intent — задачка не очень сложная.
Ну и вы сами выше упомянули, что некоторые приложения начинают кушать батарею больше во время движения. Так что надо мерить потребление, приклеив на вентилятор...
Зато мы воочию увидели, как телефон договаривается с зарядкой о максимально допустимом токе (ступеньками поднимает ток, потом возрващается на пару ступенек назад). Причем разные телефоны заряжаются по-разному.
А теперь камушек в огород яндекса.
Для чего всё это? Зачем измерять потребление, если потом ничего не делать для его снижения? Наглядный пример — стояли и работали у меня на nokia c5-00 яндекс.карты, всё нормально. Но чёрт меня дёрнул скачать поновее версию — и она, кстати, нашлась, и поставилась. Изменений — только декоративные, больше украшательств, и намного сильнее тормозит. Пытался найти предыдущую версию — а не нашёл. Хорошо, сохранилась на телефоне. Поставил снова старую. Аналогично с веб-интерфейсом яндекс почты: пару лет назад дизайн сменился, я немного огорчился, что старый комп на работе стал тормозить в яндекс.почте. Но оказалось, это только цветочки — вот они, недавние изменения — вроде с виду стало всё простенько, но тормозит ещё больше, и ссылки на легкую версию интерфейса с ходу не видно (ранее даже предлагалось автоматически).
К чему я? К тому, что измерения сами по себе ничего не сделают, надо тестировать приложения, на разных устройствах, в т.ч. и на старых. Ещё лучше, если сами разработчики будут пользоваться своими программами на медленных устройствах — так сразу оценят вклад каждого нововведения в прожорливость программы.
Если вы имеете в виду питон на самом устройстве, то тут да — только C/C++, чтобы быть поближе к железу =) Даже Golang туда не хочу тащить, хотя возможность есть.
Скажите, а вы не в курсе, зачем ВСЕ мобильные приложения Яндекса грузят друг друга в память андроида, при запуске любого из них?
Янлекс.картой, я.метро, я.парковками, я.такси, я.электричками я пользуюсь редко.
Я.маркет, я.диск, я.радио — время от времени.
Я.браузер и я.навигатор использую постоянно.
Во первых, бесит, что все эти проги после установки (и после каждого обновления!) лезут в авто загрузку. Ок, прибил их оттуда (вообще, за это отдельные «лучи счастья» для 99% разработчиков, которые пихают софт в автозагрузку андроида).
Во-вторых, все приложения Яндекса при запуске любого из них опять начинают через триггеры (типа .provider.AccountProvider) грузить обратно в память все остальные установленые приложения Яндекса.
В итоге, запустили, например, я.навигатор, и в память лезут все приложения Яндекса. А памяти свободной мало, так что все начинает тормозить, и остальной софт из памяти уходит в спящий режим. Ну и в результате при переключении на предыдущее приложение (НЕ от яндекса) оно «достается» из спячки и грузится по новой.
Далее, опять переключаемся в я.навигатор, и весь процесс («яндекс» просыпается, грузит все я.приложения, память заканчивается, «неЯндекс» выгружается) повторяется по новой.
В итоге в памяти постоянно висят ВСЕ установленые приложения Яндекса. Нифига!?
«во-первых» можно наблюдать в любом софте, показывающем автозагрузку (и в андроиде 6 это доступно напрямую в настройках) и запущенные приложения в фоне.
«во-вторых» покажет (и прибьет) Greenify. В свое время я долго не мог понять, почему у меня постоянно висят в фоне я.электрички и я.метро, если я запускал их месяц назад=)
Итого, вы не в курсе, зачем так яндекс издевается над лояльными пользователям, у которых стоит с десяток мобильных приложений яндекса? Все таки 99% людей без рута и никогда и не подумают на яндекс, что их простой смарт тормозит, даже если они поставили всего 5-10 приложений от яндекса.
На момент, когда я перестал этим заниматься около года назад, коробочки прикручивали к ферме мобильных устройств (даже не телефонов, а devboard-ов с андроидами). Что было дальше, не в курсе )
Измеряем потребление батарейки на мобильных устройствах. Эксперимент в Яндексе