Medir a potência do componente

Para determinar o consumo de energia de um componente específico, compare a corrente consumida pelo dispositivo quando o componente estiver no estado desejado (como ligado, ativo, em busca) e quando o está desativado. Meça a corrente média instantânea mostrada no dispositivo a um tensão nominal usando um monitor de energia externo, como uma fonte de alimentação de banco ferramentas de monitoramento de bateria (como Monsoon Solution Inc. Power Monitor e software Power Tool).

Os fabricantes geralmente fornecem informações sobre a corrente consumida por um componente individual. Use essa informação se ela representar com precisão a corrente extraída da bateria do dispositivo prática. No entanto, valide os valores fornecidos pelo fabricante antes de usá-los no seu dispositivo. perfil de energia.

Controlar o consumo de energia

Durante a medição, confira se o dispositivo não está conectado a uma fonte externa de carga, como como uma conexão USB com um host de desenvolvimento usado ao executar o Android Debug Bridge (adb). O dispositivo em teste pode extrair corrente do host, reduzindo as medições na bateria. Evitar USB Conexões on-the-Go (OTG), já que o dispositivo OTG pode usar corrente do dispositivo em teste.

Excluindo o componente que está sendo medido, o sistema deve funcionar em um nível constante de energia consumo de energia para evitar medições imprecisas causadas por mudanças em outros componentes. Sistema atividades que podem introduzir mudanças indesejadas nas medições de energia incluem:

  • Atividade de rede celular, Wi-Fi e Bluetooth de recebimento, transmissão ou busca. Quando não estiver medindo a energia do rádio celular, coloque o dispositivo no modo avião e ative o Wi-Fi ou o Bluetooth como apropriados.
  • Tela ligada/desativada. As cores mostradas enquanto a tela está ligada podem afetar o consumo de energia em algumas tecnologias de tela. Desligue a tela ao medir valores de componentes que não são da tela.
  • Suspensão/retomada do sistema. O estado de tela desligada pode provocar uma suspensão do sistema, colocar partes do dispositivo em um estado de baixo consumo de energia ou desligados. Isso pode afetar o consumo de energia do que está sendo medido e introduz grandes variações nas leituras de potência, já que o sistema é retomado para enviar alarmes etc. Para mais detalhes, consulte Como controlar o sistema suspender.
  • CPUs mudando de velocidade e entrando/saindo do estado inativo do programador de baixo consumo. Durante a operação normal, o sistema faz ajustes frequentes na velocidade da CPU, no número de Núcleos de CPU e outros estados do núcleo do sistema, como velocidade do barramento de memória e tensões dos trilhos de energia associados às CPUs e à memória. Durante os testes, esses ajustes afetam as medições de energia:
    • As operações de escalonamento de velocidade da CPU podem reduzir a quantidade de escalonamento de clock e tensão dos barramentos de memória e outros componentes essenciais do sistema.
    • A atividade de programação pode afetar a porcentagem de tempo que as CPUs passam em estados ociosos de baixo consumo de energia. Para obter detalhes sobre como impedir que esses ajustes ocorram durante o teste, consulte Como controlar a velocidade da CPU.

Por exemplo, Joe Droid quer calcular o valor de screen.on para um dispositivo. Ele ativa o modo avião, executa o dispositivo em um estado atual estável, mantém a CPU de velocidade constante e usa um wakelock parcial para evitar a suspensão do sistema. Joe então gira o dispositivo tela desligada e faz uma medição (200 mA). Em seguida, Joe liga a tela do dispositivo pelo menos brilho e faz outra medição (300 mA). O valor screen.on é 100 mA (300 - 200).

Observação: para componentes que não têm uma forma de onda plana de consumo atual ao ativo (como rádio celular ou Wi-Fi), meça a corrente média ao longo do tempo usando e monitoramento de modelos.

Ao usar uma fonte de energia externa no lugar da bateria do dispositivo, o sistema pode enfrentar devido a um termistor de bateria desconectado ou pinos de medidor de combustível integrados (por exemplo, um a leitura da temperatura da bateria ou da capacidade restante da bateria pode desligar o kernel ou o Android sistema. Baterias falsas podem fornecer sinais no termistor ou pinos do medidor de combustível que imitam a temperatura e o estado de carregamento de um sistema normal, além de fornecer leads convenientes para ao conectar a fontes de alimentação externas. Como alternativa, modifique o sistema para ignorar as dados inválidos da bateria ausente.

Suspensão do sistema de controle

Esta seção descreve como evitar o estado de suspensão do sistema quando você não quiser que ele interfira com outras medições e como medir o consumo de energia do estado de suspensão do sistema quiser medir.

Impedir a suspensão do sistema

A suspensão do sistema pode introduzir variação indesejada nas medições de energia e colocar os componentes do sistema em estados de baixa potência, inadequados para medir o uso ativo de energia. Para evitar que o sistema suspendendo enquanto a tela está desligada, use um wake lock parcial temporário. Usando um cabo USB, conecte o dispositivo para um host de desenvolvimento e execute o seguinte comando:

adb shell "echo temporary > /sys/power/wake_lock"

Em wake_lock, o estado de tela desligada não aciona a suspensão do sistema. Desconecte o cabo USB do dispositivo antes de medir o consumo de energia.

Para remover o wake lock:

adb shell "echo temporary > /sys/power/wake_unlock"

Suspensão do sistema de medição

Para medir o consumo de energia durante o estado de suspensão do sistema, meça o valor de cpu.idle no perfil de energia. Antes de medir:

  • Remova os wake locks atuais, conforme descrito acima.
  • Coloque o dispositivo no modo avião para evitar a atividade simultânea do rádio celular, o que pode ser executado em um processador separado das partes do SoC controladas pela suspensão do sistema.
  • Para verificar se o sistema está em estado suspenso:
    • Confirmar que as leituras atuais se estabelecem em um valor estável. As leituras precisam estar dentro do esperado intervalo para o consumo de energia do estado de suspensão do SoC mais o consumo de energia do sistema componentes que permanecem energizados (como o USB PHY).
    • Verificando a saída do console do sistema.
    • Observar indicações externas de status do sistema (como um LED se apaga quando não está em suspender).

Controlar a velocidade da CPU

CPUs ativas podem ser colocadas on-line ou off-line, com velocidades de clock tensões alteradas (possivelmente também afetando as velocidades do barramento de memória e outros estados de energia do núcleo do sistema), e podem entrar em estados de inatividade com baixo consumo de energia durante o loop inativo do kernel. Ao medir diferentes valores de CPU para o perfil de potência, evite a variação de consumo de energia ao medir outros parâmetros. O perfil de energia pressupõe que todas as CPUs tenham as mesmas velocidades e características de energia disponíveis.

Ao medir a potência da CPU ou manter a energia da CPU constante para fazer outras medições, constante do número de CPUs on-line (como uma CPU on-line e as outras off-line/conectado. Manter todas as CPUs, exceto uma na programação inativa, pode ser aceitável. resultados. Interromper o framework do Android com adb shell stop pode reduzir agendar a atividade.

Especifique as velocidades de CPU disponíveis para o dispositivo no perfil de energia Entrada cpu.speeds. Para conferir uma lista de velocidades de CPU disponíveis, execute:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

Essas velocidades correspondem às medições de potência correspondentes no valor cpu.active.

Nas plataformas em que o número de núcleos conectados à Internet afeta significativamente o consumo de energia, é talvez seja necessário modificar o driver ou o controlador cpufreq da plataforma. A maioria das plataformas oferece suporte controlando a velocidade da CPU usando o controlador de cpufreq do espaço do usuário e usando interfaces sysfs para definir o velocidade Por exemplo, para definir a velocidade de 200 MHz em um sistema com apenas uma CPU ou que todas as CPUs compartilhem uma política cpufreq comum, use o console do sistema ou o shell do adb para executar os seguintes comandos:

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

Observação: os comandos exatos diferem de acordo com a implementação do cpufreq da plataforma.

Esses comandos garantem que a nova velocidade não ultrapasse os limites permitidos, definem a nova velocidade e exibe a velocidade com que a CPU está sendo executada (para verificação). Se a fase atual a velocidade mínima antes da execução for maior que 200.000, talvez seja necessário inverter a ordem das duas primeiras linhas ou execute a primeira linha novamente para diminuir a velocidade mínima antes definir a velocidade máxima.

Para medir a corrente consumida por uma CPU em execução em diversas velocidades, use o console do sistema para a CPU em um loop vinculado à CPU usando o comando:

# while true; do true; done

Receba a medição enquanto o loop é executado.

Alguns dispositivos podem limitar a velocidade máxima da CPU ao realizar a limitação térmica devido a um efeito medida de temperatura, ou seja, após executar CPUs em alta velocidade por períodos prolongados. Atenção essa limitação, seja usando a saída do console do sistema ao fazer medições ou verificando o registro do kernel após a medição.

Para o valor cpu.awake, meça a energia consumida quando o sistema não está em suspender e não executar tarefas. A CPU precisa estar em um loop inativo do programador de baixo consumo de energia , possivelmente executando uma instrução de espera para evento do ARM ou em um estado de baixo consumo de energia específico do SoC. com latência de saída rápida adequada para uso ocioso.

Para o valor cpu.active, meça a energia quando o sistema não estiver no modo de suspensão. e não executar tarefas. Uma CPU (geralmente a CPU principal) executará a tarefa, enquanto todas as outras CPUs. precisa estar no estado inativo.

Medir a potência da tela

Ao medir a tela quando ele estiver ligado, verifique se outros dispositivos normalmente ligados quando a tela está também estejam ativadas. Por exemplo, se a tela touchscreen e a luz de fundo da tela estiverem ligadas quando a tela estiver ligada, certifique-se de que esses dispositivos estejam ligados durante a medição para ter um exemplo realista da tela sobre o uso de energia.

Algumas tecnologias de tela variam no consumo de energia de acordo com as cores exibidas, causando que as medidas de potência variem consideravelmente dependendo do que é exibido na tela no momento de medida. Ao medir, certifique-se de que a tela está exibindo algo que tem energia características de uma tela realista. Fique entre os extremos de uma tela totalmente preta (que consome a menor energia para algumas tecnologias) e uma tela totalmente branca. Uma escolha comum é uma visualização de uma programação no app de agenda, que tem uma combinação de elementos brancos e não brancos.

Meça o brilho da tela quando ele estiver ligado com o brilho mínimo e máximo da luz de fundo/tela. Para definir o brilho mínimo:

  • Usar a IU do Android (não recomendado). Defina as Configurações > Brilho da tela para o brilho mínimo da tela. No entanto, a interface do Android permite definir o brilho apenas para de pelo menos 10% a 20% do brilho possível da luz de fundo ou do painel e não permite a configuração brilho tão baixo que a tela pode não ser visível sem muito esforço.
  • Use um arquivo sysfs (recomendado). Se disponível, use um arquivo sysfs para controlar o brilho do painel até o nível mínimo permitido pelo hardware.

Além disso, se o arquivo sysfs da plataforma permitir girar o painel LCD, a luz de fundo e o tela touch ativada e desativada, use o arquivo para fazer medições com a tela ligada e desligada. Caso contrário, defina um wake lock parcial para que o sistema não seja suspenso, depois ative e desative o com o botão liga/desliga.

Medir a potência do Wi-Fi

Realize medições de Wi-Fi em uma rede relativamente silenciosa. Evitar a introdução de mais trabalho processar grandes volumes de tráfego de transmissão não relacionados à atividade que está sendo medida;

O valor wifi.on mede a energia consumida quando o Wi-Fi está ativado, mas não transmitir ou receber ativamente. Isso geralmente é medido como o delta entre o sorteio atual estado de suspensão do sistema (suspensão) com Wi-Fi ativado vs. desativado.

O valor wifi.scan mede a energia consumida durante uma busca por Wi-Fi para acesso pontos. Os aplicativos podem acionar buscas por Wi-Fi usando a classe WifiManager startScan()API. Você também pode abrir Configurações > Wi-Fi, que executa o ponto de acesso faz verificações com intervalos de poucos segundos com um aumento aparente no consumo de energia, mas é necessário subtrair a tela poder a partir dessas medições.

Observação: use uma configuração controlada (como iperf) para gerar o recebimento e a transmissão da rede do tráfego de entrada.