Os processadores ARM em geral possuem baixo consumo de energia e uma boa capacidade de processamento, porém ainda são consideravelmente quentes, ao realizarmos uma Raspberry PI 3 realizamos o monitoramento da temperatura da CPU e a mesma se mostrou bem quente mesmo executando tarefas simples, como a navegação na internet e visualização de vídeos por exemplo. A Raspberry PI 3 conta com uma CPU Broadcom BCM2837 (Quad core ARMv8) rodando a 1.2GHz em full load, quando ociosa o kernel está configurado para jogar a CPU a 400MHz.
As temperaturas atingidas ficaram em torno dos 68~76ºC com o ambiente a 22ºC. Com o ambiente sem refrigeração, cerca de 28~30ºC a temperatura da CPU rapidamente chegou a casa dos 80ºC, iniciando a exibição de um pequeno termômentro indicando superaquecimento no canto superior direito.
Buscando diminuir essa temperatura para um limite mais aceitável (60~65ºC) sem gastar com dissipadores de calor e ventiladores foi feito um pequeno script que pode ser inicializado no boot do sistema para que a frequência das CPUs caia quando atingida determinada temperatura, no caso 60ºC.
A seguir veremos como fazer um pequeno script para monitoramento e controle da frequência em função da temperatura e também um pequeno visualizador em tempo real para essas duas variáveis.
Caso julgue necessário, poderá fazer underclocking (diminuição do clock da CPU) abaixo do definido originalmente no kernel, no caso, 600MHz. Em nossa Raspberry deixamos em 400MHz, para isso basta editar o arquivo “config.txt” presente na partição de boot da Raspberry, para acessar essa partição você pode colcoar o MicroSD em um computador com Windows ou Linux mesmo, no Windows ela será a única que estará montada, na imagem abaixo pode ser visto um exemplo dessa configuração no arquivo:
A linha para setar a frequência mínima é “arm_freq_min”, como já mencionado, para 400MHz deixamos “arm_freq_min=400”, tal frequência pode também ser maior que 600MHz, se preferir, pode ser usado 800MHz, para isso, “arm_freq_min=800”.
Agora veremos o script, para isso tenha em mãos um editor de textos, no meu caso abri um novo arquivo como “LuPaTemp”, pode dar o nome que quiser ao arquivo, lembre-se de não usar sinais como */-+! pois o terminal pode não reconhecê-lo na hora da execução, fazendo com que o script não rode. Observe que no script há um loop infinito que se repete a cada 500mS, este loop faz a verificação periódica da temperatura comparando a leitura com a constante “limit”, você pode setar o limite que quiser, no nosso caso “limit=60” (pode-se usar qualquer valor, mas não recomendo que passe dos 70ºC, sabendo disso definimos o limite para 60ºC. O script armazena os dados de leitura nas variáveis “hwtemp” (temperatura da CPU) e “cpufreq” para a leitura da frequência atual da CPU. O comando “if” então, verifica se “hwtemp” é maior ou igual a constante definida, se a leitura for maior ou igual a constante, ele faz com que a frequência máxima da CPU seja igual a frequência mínima definida pelo kernel (originalmente 600MHz) ou por um valor o qual você defina, como 400MHz ou 800MHz, caso a condição seja falsa (valor lido é menor que o valor definido) o clock máximo da CPU é mantido nos 1.2GHz. O comando chmod somente modifica algumas permissões do arquivo que sempre são revertidas pelo kernel, sem ele não será possível escrever no arquivo que seta a frequência.
O arquivo em si não precisa de extensão, pois quando o mesmo for chamado os comandos internos serão lidos.
Feito o script, basta salvá-lo, as permissões do arquivo depois de salvo devem ser alteradas para que qualquer um possa executa-lo, para isso basta clicar com o botão direito em cima do arquivo e ir nas propriedades, a seguinte janela se abrirá deixe como na imagem:
E para testá-lo basta ir no terminal e digitar os seguintes comandos:
sudo su → isso fará com que o terminal permita execução em superusuário;
cd /caminho/de/onde/arquivo/está/salvo → aqui somente selecionaremos o diretório de onde o arquivo está salvo;
./Nome_do_Arquivo → este comando fará com que o script seja executado, ele irá realizar o monitoramento do hardware e descer a frequência de acordo com o limite selecionado, no shell será exibida a temperatura e a frequência atual da CPU, lembrando que: a frequência descerá naturalmente se a carga do sistema estiver baixa, subindo somente quando maior poder de processamento for exigido, ao atingir a temperatura definida pelo utilizador a CPU ficará travada na frequência mínima selecionada.
Na imagem abaixo podemos ver o script rodando exibindo a temperatura atual da CPU e a frequência, observe que em certo momento 1.2GHz é exibido pois foi solicitado maior frequência devido incremento da carga do sistema, quando a carga diminui, a frequência cai.
Agora, solicitamos um pouco mais de processamento, fazendo com que a frequência e a temperatura aumentassem praticamente o tempo todo.
Agora, comprovando o funcionamento do script podemos ver a frequência travada em 400MHz (mínimo definido por nós lá no início) e a temperatura igual ou maior ao limite, no nosso caso 60ºC, então no momento em que o “if” se torna verdadeiro, a frequência é travada pelo script.
Agora, mostrarei como incializar o script no boot para que o mesmo fique rodando ao fundo no sistema:
Primeiro, certifique-se que tudo está funcionando perfeitamente e que não há erros no script, depois disso, mova (executando o pcmanfm como root, para isso basta digitar no terminal: “sudo su” e depois “pcmanfm”, copie o script para a pasta /etc/init.d como na imagem abaixo:
Depois de corretamente colocado na pasta init.d, volte até a pasta etc e procure pelo arquivo rc.local, nele você deverá adicionar a seguinte linha: /etc/init.d/NomeDoScript (no meu caso, LuPaTemp), como na imagem:
Salve o arquivo e reinicie o sistema, para testar se o script está realmente funcionando deixo este outro script que realiza exibição periódica no shell da frequência e da temperatura da CPU:
Basta executá-lo como o primeiro foi executado para os testes no terminal “sudo su” - “cd /caminhodoarquivo” - “./NomeDoArquivo”
Para os testes, abra um vídeo na internet e veja se ao chegar na temperatura escolhida a frequência é travada, caso isso não ocorra verifique se tudo foi feito conforme o tutorial.
Nessa imagem podemos ver o script rodando corretamente, mesmo com uma carga alta na CPU a frequência continua travada e isso se conservará até que a temperatura abaixa: