Pplware

Os consumos excessivos de bateria dos equipamentos móveis…

Por Francisco Franco para o PPLWARE.COM

Um dos temas principais quando se fala sobre Android ou iPhone é a bateria. Ainda para mais com o aparecimento dos dual cores (dois núcleos) a ideia geral dos utilizadores é que quantos mais “cores” existem mais bateria se consome. Será que é mesmo isso?

Com tantas empresas e com tantos engenheiros a trabalhar activamente para melhorar os consumos de energia será que está tudo a caminhar para melhor? Nesta artigo vou provar que nem tudo o que se pensa em relação a consumos é verdadeiro, e que, até uma companhia como a Samsung, está errada.

O Android foi programado para ter vários estados de gestão de energia e de uma maneira algo resumida funciona desta forma:

1. Ecrã ligado mas sem nenhuma acção no momento -> os cores ficam em halt devido ao uso da função do Kernel chamado CONFIG_NO_HZ

2. Ecrã desligado mas ainda não atingiu o estado mais profundo de idle -> Deep sleep

3. Ecrã desligado e sem nenhuma acção que o esteja a manter acordado -> Idle

O que nós queremos nos nossos Androids é que este entre em Idle o mais depressa possível para ficar power collapsed.

Power collapsing é uma funcionalidade interessante pois significa que o nosso telemóvel, independentemente da frequência do processador, não gaste quase bateria nenhuma. Sim leram bem, mesmo que o CPU esteja a 2Ghz, quando está power collapsed, não gasta quase bateria nenhuma pois o CPU entra num estado em que fica completamente powered down.

Há ainda a diferença entre estar powered down e os cores estarem offline. Durante o power collapse os cores ficam apenas num estado de poupança de energia muito eficiente como expliquei acima. Com cores offline (acção que se denomina por Hotplug) os cores são completamente desligados, como se se desligasse uma televisão da tomada de energia. Hotplug só pode ocorrer em dual cores, pois se num single core se desligasse o único core disponível o telemóvel desligava-se.

E é disto que vamos falar. Será que compensa, ou não, desligar um core para poupar energia? Será que é útil haver a capacidade de desligar o segundo core mesmo com o ecrã ligado mas com pouca load? E os custos associados a desligar/ligar um core?

Para uma melhor compreensão vou vos explicar o meu processo. Há cerca de 3 semanas comecei a programar uma função no kernel chamado Dynamic Hotplug, e estava associado ao meu Governor (ficheiro que gere as frequências do CPU dinamicamente). Quando o CPU estava abaixo dos 20% de load o cpu1 (segundo core) era desligado. Quando o load voltasse a ser maior que 20% e o numero de cpus online fosse > 1 (cpu0 = primeiro core, cpu1 = segundo core) a minha função voltava a ligar o cpu1 ficando de novo um dual core.

Pois bem, isto na prática é muito engraçado e se pensarmos bem (sem entrarmos em pormenores técnicos) é fantástico para a bateria… Mas está ERRADO!

A quantidade de vezes que a minha função era chamada por segundo arruinava completamente a ideia, e chegava a ligar e desligar o cpu1 umas 10 vezes por segundo, e a cada vez que isso acontecia o cpu0 aumentava a frequência para o máximo e o load ficava a 100%…

Como podem ver era basicamente o inferno para o CPU. Isto acontecia porque primeiro, o número de trocas de contexto aumentava consideravelmente, segundo, a latência inerente a ligar e desligar um core é brutal (não para nós humanos, mas para uma máquina 100ms é MUITO tempo), e é essa latência que faz com que o cpu0 tivesse cargas de load de 100%. Ora isto tudo junto a acontecer durante um segundo é péssimo a nível de bateria, e péssimo a nivel de interactividade pois isto sente-se quando se usa o telemóvel. Claro que acabei por descartar esta funcionalidade.

Recentemente adquiri um Galaxy Note (daí a referência à Samsung) e deparei me com o Dynamic Hotplug ligado de origem com o Kernel do Note… e como já tinha tido esta experiência com o Kernel do Galaxy Nexus (foi onde criei o meu próprio Dynamic Hotplug como expliquei acima) desactivei-o imediatamente e as diferenças foram imensas – o telemóvel ganhou outra vida. Agora pergunto-me, qual é o objectivo de activarem uma opção potencialmente prejudicial?

Podem ver por aqui uma série de testes que um user  fez depois de eu lhe ter dito que Dynamic Hotplug era mau para o telemóvel. Como podem ver, a nível energético a diferença entre ter os dois cores sempre activos ou um deles a ser desligado e ligado a todo o momento, é igual a 0.

O tema de Power Management no Android é muito vasto e divide muitas pessoas, portanto gostava de ouvir as vossas opiniões tendo em conta a minha experiência prática que vos descrevi acima.

Fica aberta a discussão no espaço para comentários abaixo

Artigos do autor

Exit mobile version