Tutorial de Undervolt via Software (sem risco de brickar seu valioso Deck)
Primeiro de tudo você vai precisar de um teclado e mouse conectado ao Deck OU instalar algum programa de acesso remoto. Eu uso o AnyDesk que pode ser baixado direto pelo Discover no SteamOS (Modo Desktop) e no seu PC diretamente no site deles (Google). O programa é gratuito pra uso pessoal, tendo somente a limitação de sessão ativa por 1h, quando acaba ele desconecta mas basta conectar novamente.
Após isso nós vamos ao github do KyleGospo para baixar uma parte do app “ryzenadj”, que foi modificado e compilado para rodar com a APU Van Gogh (Ryzen do Deck).
Link:
GitHub KyleGospo – Steam-Deck-Software-Undervolt
Agora vamos baixar o pacote de tudo o que o Kyle compilou, vá em Code e em Download Zip
Agora com o zip baixado, deszipe ele pra uma pasta, para ajudar futuramente com os comandos, vamos renomear a pasta para “undervolt” sem aspas.
Caso esteja já fazendo diretamente no deck, só baixe ou copie a pasta pro desktop, caso esteja em um PC, copie em um pendrive ou mesmo use o gerenciador de arquivos do próprio AnyDesk para copiar a pasta (ele lembra muito o sistema de FTP, de cada lado se tem os diretórios, do PC e do Deck, bastando selecionar a pasta e dar um “upload” para copiar ela para o diretório no lado do deck, no caso vamos para o desktop.
Agora vai ser a parte mais chatinha do procedimento, como estamos lidando com Linux, você simplesmente não consegue copiar os arquivos e colar nos diretórios com privilégios de adm. Para isso vamos ter que usar linha de comando com autorização de senha de root. Eu não me lembro bem quando foi que pediu para eu criar a senha no meu deck, mas provavelmente caso você tente usar o comando sudo pela primeira vez, ele peça para criar. Caso não peça, tem vários vídeos no YT ensinando onde colocar a senha no Deck (não vou mostrar aqui para não ficar maior do que já está).
Primeiro abram o Konsole, nele vamos entrar na pastinha “undervolt” para copiar os arquivos. Para isso basta digitar:
Código:
cd /home/deck/Desktop/undervolt
Ou somente digite o “cd” e arraste a pastinha do desktop para dentro da janela do Konsole, caso após vc arrastar ficar um espaço no final do caminho, aperte o backspace e dai digite enter.
Após isso estaremos dentro da pasta undervolt, então vamos copiar com elevação de root.
Vai ser necessário copiar duas pastas, a “etc” e a “home”. Neste caso vamos copiar todos os arquivos dentro de uma vez para seus destinos. Para isso digite:
De enter e digite sua senha que você já cadastrou do deck. Após isso vamos copiar a segunda pasta:
E de enter novamente. Dessa vez ele não pedirá a senha pois já vai estar com a elevação por senha. OBS.: Se atente aos espaços dos comandos, por exemplo
Código:
sudo<espaço>cp<espaço>-r<espaço>home<espaço>/
Pronto! Agora que copiamos os arquivos necessários e que eles não vão ser apagados após atualizações no SteamOS (teoricamente hehehehe)
Agora vamos partir para o início mesmo, para rodar o script dos serviços, execute no Konsole o comando:
Código:
sudo udevadm control --reload-rules
Pronto, agora podemos começar a editar o arquivo que vai fazer o undervolt de verdade. Navegue pelo Dolphin (gerenciador de arquivos) até a pasta /home/deck/.local/bin
(Lembrando de clicar no canto direito onde há duas linhas com bolinhas, e em “Show hiden files”, para mostrar arquivos ocultos)
É no arquivo set-ryzenadj-tweaks.sh que fazemos a config do undervolt, botão direito e em Abrir com o KWrite, teremos uma estrutura de arquivo assim:
Código:
#!/bin/sh
set -eu
allow=$(</home/deck/.local/bin/allowadj.txt)
# https://github.com/NGnius/PowerTools/issues/84#issuecomment-1482736698
# https://www.amd.com/system/files/documents/faq-curve-optimizer.pdf
# Expect your UV to be 3-5x your set curve value. IE: -5 = -15mv to -25mv
# CPU
if [[ $allow = "1" ]]
then
# 0x100000 - 5 (Range: -30, 30)
/home/deck/.local/bin/ryzenadj --set-coall=0xFFFFB
echo "Undervolt on" > /home/deck/.local/bin/statusadj.txt
else
# 0x100000 - 0
/home/deck/.local/bin/ryzenadj --set-coall=0x100000
echo "Undervolt off" > /home/deck/.local/bin/statusadj.txt
fi
# GPU - Not functional
# 0x100000 - 5 (Range: -30, 30)
#/home/deck/.local/bin/ryzenadj --set-cogfx=0xFFFFB
Pode parecer bizarro mas nós vamos mexer somente em 1 variável, que é a primeira lá em cima, na parte de CPU, onde consta o --set-coall=0xFFFFB
Aqui vamos usar uma calculadora já predefinida para nos ajudar, acessem o site
Calculadora HEX pré-configurada para o Undervolt do Deck
Nesse site ele vai gerar o código hex que vai ser usado pro undervolt, por padrão o Kylo usou -5, esse valor no Curve Optimization representa de 3x a 5x o valor de undervolt real, ou seja, em baixa carga será de -15 e de alta carga será -25. Bem, no site basta mudar o valor do campo “5” para outro que você irá testar, por exemplo vamos colocar -10, como na conta já está o sinal negativo, basta mudar no campo onde está 5 para 10 e clicar em Calculate, nesse exemplo ele dará o hex de FFFF0, então vamos no arquivo aberto que estamos editando e vamos trocar na primeira linha onde está 0xFFFFB para 0xFFFF0. Basta clicar em Save, vai pedir a senha de adm, coloque e pronto, o arquivo está configurado para aplicar o padrão de -10 (efetivo -30 a -50)
Agora o Kylo também criou um atalho para se ativar e desativar o undervolt diretamente no modo game, que são os arquivos de on.sh e off.sh, para ativar o serviço onde fica esperando roda-los, rode o seguinte script no konsole:
Código:
systemctl enable --now set-ryzenadj-tweaks.path
Algumas vezes os arquivos não aceitam modificação pelo usuário, então vamos navegar para a pasta home/.local e com o botão direito fora das pastas clique em Open Terminal Here (um atalho caso não queira digitar o cd e blablabla no Konsole).
Agora vamos mudar as permissões dos arquivos, então digite:
Supondo que o nome do usuário continue padrão, que é “deck”. Com isso se vc já rodar os arquivos on.sh e off.sh dentro da pasta mesmo, eles já alteram os parâmetros pra ativar (teste e veja que muda o horário de modificado para “Just Now”.
Abra o Steam e adicione esses atalhos como Games Non Steam, para poder ativar ou desativar no modo Game.
Mas ainda falta de fato rodar o arquivo que configuramos, então vamos rodar esse script:
Código:
sudo systemctl start set-ryzenadj-tweaks.service
Lembrando que após rodar esse commando você já estará rodando o undervolt! Porém não é permanente, após reiniciar o Deck ele volta pro padrão sem undervolt, e é essa a segurança desse método, pois caso se coloque um valor muito agressivo, o deck vai reiniciar ou travar, bastando segurar o power para reiniciar, mas na maioria das vezes ele vai reiniciar sozinho, assim quando ligar novamente o undervolt não está aplicado, basta ir no arquivo e subir o valor, por exemplo de -18 para -17, achando assim o limite estável.
Recomendo jogar por bastante tempo ativando ele manualmente, assim que nenhum jogo travar, der glitch ou reiniciar, então esse valor é totalmente seguro, assim você pode rodar o script definitivo para manter sempre esse valor, para isso digite no Konsole:
Código:
sudo systemctl enable set-ryzenadj-tweaks.service
No meu caso eu cheguei no valor minimo de -19, com -20 ele até entra nos jogos mas logo em seguida reinicia, com -19 em nenhum momento tive problema até agora.
Undervolt na GPU também é possível, mesmo no script estando que ela não está ativa, você pode testar também. Basta retirar o # do inicio da linha:
Código:
#/home/deck/.local/bin/ryzenadj --set-cogfx=0xFFFFB
E fazer a mesma coisa que foi feito com o CPU, entretanto pelo que testei ele é muito mais instável que o CPU e infelizmente não traz um ganho sensível, ou seja, não consegui rodar com mais clock usando menos watts, então acabei deixando de lado ele mesmo.
Os novos atalhos no modo Game funcionam perfeitamente! Só precisam lembrar de mudar o dono do arquivo para o usuário “deck”. Eu testei aqui no Cyberpunk e assim que eu ligo ele cai 2w de uso do CPU no menu, ficando entre 6 e 7w... desliguei ele pula pra 8 e pouco.
Lembrando que o melhor ganho que se tem no deck tem sido a temperatura, aqui tem uma boa diferença entre 6C e 8C a menos em média. Em jogos mais leves onde não se usa o clock total da CPU/GPU, com o undervolt vc mantem o consumo da TDP porém usa clocks mais altos, dando mais FPS. Dependendo do jogo também se ganha uma sobrevida de bateria (eu não cheguei a testar muito bem, mas vocês testem e reportem ai!)
É isso pessoal, espero que todos possam aproveitar o tutorial, postem seus resultados e se por acaso forem copiar para outros lugares, peço por favor para darem crédito, pois deu um trabalhinho escrever e testar tudo (ainda mais em relação aos comandos de Linux que é incrível como ninguém passa fácil, todo mundo quer ensinar o que é, mas ninguém fala logo como fazer)