Manual

do

Maker

.

com

Tunning no Raspberry Pi

Tunning no Raspberry Pi

Dá pra afirmar seguramente que a maioria das pessoas que usa o Raspberry não faz ajustes finos no sistema. Normalmente o foco é a configuração do sistema (seja para jogos ou IoT) e de resto, nada se mexe. Bem, se desejar controlar melhor os recursos do sistema e de quebra conhecer mais sobre configurações específicas, esse artigo vai te ajudar a fazer um tunning no Raspberry Pi para ajustar seu funcionamento como desejado, é pura diversão.

Consumo de energia

Sempre desejamos mais recursos, mais clock, mais memória, claro. Mas nem sempre o sistema está sob demanda, o que acaba gastando mais energia do que o necessário e por subsequente, gerar mais calor desnecessariamente. O oposto também acontece; você precisa de mais poder da sua Raspberry Pi, mas parece que ela chegou no limite. Boa notícia pra você; dá pra fazer o ajuste em ambas as direções.

Política de frequência da CPU

O Linux tem um driver que gerencia a frequência da CPU baseado em variáveis chamadas convencionadas como 'política'. Sempre que o sistema iniciar, alguma delas será carregada por padrão. No Raspbian a política padrão é powersave. Isso significa que não importa o que você faça, o clock estará configurado para um valor mínimo. Estou utilizando o Raspbian baseado no Debian Stretch. A CPU atualmente está em 600MHz utilizando a política powersave:

scalling_cur_freq-powersave.webp

O mais interessante é que podemos mudar a frequência on-the-fly.

scalling_cur_freq-performance.png

Ou podemos definir que a frequência mude sob demanda:

scalling_cur_freq-ondemand.png

Desse modo, a CPU estará sempre em modo de economia até que seja requisitada. Porém, pode ser pretendido que ela já esteja pronta para uma tarefa que demande mais processamento, por isso esse controle pode ser feito por sua aplicação, de modo que ela seja retirada imediatamente do modo de economia para o modo de demanda.

Tabela de políticas de frequência do Governor

As possíveis configurações são:

conservativemuda a frequência da CPU suavemente conforme carga
ondemandmuda do mínimo para o máximo sob demanda
performanceajusta a frequência para o máximo sempre
powersaveajusta a frequência para o mínimo sempre
userspacepermite o controle por um serviço no userspace

Apenas para esclarecer, existe o userspace e o kernelspace. O kernelspace é uma área de manipulação de recursos do kernel que é protegida. Um bom exemplo disso é o firewall do Linux, o Netfilter, que atua no kernelspace e por isso é um dos firewall mais seguros que existem, pois não pode ser interrompido pelo user space. No userspace é onde o usuário pode interagir com recursos do kernel. Seguindo o mesmo exemplo, o firewall é configurado através do iptables, que cria uma tabela de regras e informa ao kernel que ele deve ler as novas instruções em uma determinada região da memória onde as regras foram alocadas.

Interação via sysfs

Se você reparar nas imagens acima, utilizei o comando echo para escrever uma modificação no userspace, a ser lido pelo kernel. Ainda sendo um recurso do userspace, somente o usuário root pode escrever dentro desse nível de diretório devido às hierarquias do sistema. Do mesmo modo, para saber qual a política atual em uso, basta utilizar o comando catnesse mesmo arquivo descritor contido no diretório do sysfs.

Como ajustar o Governor on boot

Uma das opções é colocando em /etc/rc.local. Tão logo o sistema tenha finalizado sua carga, o arquivo /etc/rc.local é lido e executado. Basta escrever o comando da mesma forma que se está interagindo via sysfs.

A outra opção é definir diretamente no kernel, mas para isso você deverá recompilar o kernel. Se dejar fazê-lo, basta seguir esse tutorial.

As opções do .config a serem modificadas são:

CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE

Configurações do /boot/config.txt

Esse arquivo tem muitas configurações que são ajustadas durante o boot. Reparou que em minha modificação anterior de powersave para performance a frequência do processador ficou em 900MHz? Bem, esse parâmetro pode ser configurado para mais ou para menos, através do arquivo /boot/config.txt. O parâmetro relacionado à frequência é o arm_freq. A configuração padrão para ele é 900MHz, porém para X, onde 'X' depende do Raspberry. Para o Raspberry Pi 1 e 2, **não exceda os 900MHz.**Para o Raspberry Pi 3, você pode subir até 1.3GHz.

Como fazer overclock na Raspberry Pi

Eu não vou descrever o processo porque além de aumentar a frequência além do limite, ainda precisa fazer um over voltage na CPU. Se quiser ver essa loucura, siga esse link. Se quiser testar (por sua conta e risco), crie uma sessão #overclock e adicione esses parâmetros para a Raspberry Pi 3:

arm_freq=1300
core_freq=500
over_voltage=4
gpu_mem=320

Minha sugestão é que se você quiser aumentar o desempenho, mude apenas arm_freq=1200, que é o limite, mas tenha dissipadores em sua RPi.

vcgencmd

Uma outra forma de ver os parâmetros configurados no sistema é através do comando vcgencmd, com os respectivos parâmetros:

vcgencmd get_config <config> - lista o valor de uma configuração específica (ex.: arm_freq)
vcgencmd get_config int - lista todas as opções configuradas
vcgencmd get_config str - lista as configurações que são string

Esse arquivo (config.txt) tem muitas sessões, como video, memória, divisão de memória, câmera, memória da GPU, rede, áudio e uma bela tabela de overclock. Sugiro que visite esse link para ver todos os parâmetros.

Corrente máxima da USB

O padrão da USB é 600mA e na Raspberry Pi 3 você pode configurar a USB para fornecer o dobro dessa corrente - 1.2A, considerando que você tem alimentação o suficiente para suprir o consumo nas portas USB. Essa corrente é para as 4 portas combinadas, ou seja, se você estiver com seu Raspberry Pi fornecendo 600mA e utilizando as 4 portas USB que, somadas ultrapassem os 600mA, certamente haverá diversas instabilidades. Sendo o caso, vem bem a calhar essa configuração. Adicione o parâmetro:

max_usb_current=1

E para 600mA, apenas mude o valor da variável para 0:

max_usb_current=1

Outros parâmetros

Alguns parâmetros são adicionados também se você habilitar por exemplo o SPI ou I²C através do comando raspi-config.  Para finalizar, você pode iniciar o processador em modo ARMv8, passando o parâmetro:

arm_control=0x200

Depois (e antes) você pode verificar a diferença através do comando lscpu ou cat /proc/cpuinfo.

/boot/cmdline.txt

Esse arquivo não tem muitos parâmetros. No meu estou utilizando:

fastboot noswap smsc95xx.turbo_mode=N kernel.nohalt kernel.panic=5 \
logo.nologo selinux=0 dwc_otg.dma_enable=1 dwc_otg.dma_burst_size=256 \
dwc_otg.lpm_enable=0 dwc_otg.fiq_fix_enable=1 plymouth.enable=0 \
console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline \
rootwait ro fsck.mode=auto fsck.repair=yes loglevel=1

Tudo em uma linha só. eu quebrei as linhas aqui para caber na janela do navegador. Se quiser ler a respeito dos parâmetros, sugiro esse link.

Magic keys

As magic keys do kernel do Debian vem desabilitado por padrão. Se quiser habilitar via sysctl, edite o arquivo /etc/sysctl.conf e descomente o parâmetro kernel.sysrq=1. Se não conhece as magic keys, sugiro que leia esse outro artigo.

Por enquanto é isso, se eu me lembrar de algo novo, atualizo esse artigo ou escrevo outro.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.