Passo a Passo: Como reduzir a temperatura do processador através do undervolt da CPU – 2

No post anterior, houve a definição do “Core Voltage Offset” do processador, no entanto quando a máquina é reiniciada, esta configuração é perdida, o que obriga o usuário a ter que reabrir o XTU (eXtreme Tuning Utility) para reaplicar o Offset.

O que vamos configurar aqui, é uma maneira de fazer isso automaticamente durante a inicialização do computador. Primeiro vamos criar um script no powershell, depois veremos como agenda-lo para ser executado com privilégios administrativos durante o logon.

 

Definir o Core Voltage Offset via script

Execute “Windows PowerShell ISE” como administrador

Vá em Arquivo > Novo > Cole o conteudo do código abaixo.

Substitua -10 na segunda linha pelo “Core Voltage Offset” que você encontrou no post anterior anterior (a unidade é em mV, portanto se encontrou -0,155V então coloque -155) e salve em C:\Windows\XTUvoltage.ps1

Tente executar este script (F5), se houver erro de permissão, vá no prompt logo abaixo do arquivo .ps1 e libere a permissão de execução com o seguinte comando: “Set-ExecutionPolicy RemoteSigned”

O script que vêm circulando na internet é muito simples, não possui as proteções necessárias, não detecta corretamente o serviço “XTU3SERVICE”, nem verifica o Offset atual antes de aplica-lo. Escrevi o script abaixo para contornar essas limitações e adicionar algumas proteções.

Repare que este script verifica o Offset atual ANTES de aplicar o novo Offset. Essa proteção é necessária porque uma segunda definição do mesmo Offset ANULA a primeira, fazendo o sistema retornar ao default, que é ZERO. (Levou um certo tempo para descobrir isso)

Basta alterar o valor de $DESIRED_OFFSET_MILLIVOLTS e executa-lo quantas vezes desejar, ele possui todas as proteções necessárias.

# PLEASE SET YOUR CORE VOLTAGE OFFSET HERE (ONLY NEGATIVE NUMBERS. EG: -100)
$DESIRED_OFFSET_MILLIVOLTS = -10

# DO NOT TOUCH FROM THIS POINT ON
function Countdown-And-Quit {
    param( [int] $seconds = 3 )
    Write-Host -NoNewLine -ForegroundColor Cyan "Closing this window in "
    For ($i=$seconds; $i -gt 0; $i--) {
        Write-Host -NoNewLine -ForegroundColor Cyan "$i..."
        Start-Sleep -Milliseconds 1000
    }

    if (Test-Path variable:global:psISE) {
        Write-Host "`nRunning on ISE"
    } else {
        stop-process -id $PID -force
    }
    Break Script
}

if (($DESIRED_OFFSET_MILLIVOLTS -isnot [Int32]) -or ($DESIRED_OFFSET_MILLIVOLTS -gt 0 )) {
    Write-Host "DESIRED_OFFSET_MILLIVOLTS MUST BE NUMERIC AND NEGATIVE. PLEASE CORRECT"
    Countdown-And-Quit
}

$xtuService = Get-Service -name "XTU3SERVICE";
if ($xtuService.Status -ne 'Running') {
    Write-Host "XTU3SERVICE Initializing..."
    start-service -name "XTU3SERVICE"
} else {
    Write-Host "XTU3SERVICE Already initialized."
}

$xtuCmd = "C:\Program Files (x86)\Intel\Intel(R) Extreme Tuning Utility\Client\XTUCli.exe"

$xtuCmdGetArgs = @('-t', '-id', 34)
$cmdOutput = & $xtuCmd $xtuCmdGetArgs 2>&1 | Out-String
$regexFound = $cmdOutput -match 'Core Voltage Offset\s+(\S+)mV'
$coreVoltageOffset = ''
if ($regexFound) { 
    $coreVoltageOffset = [int] $matches[1]
    Write-Host "Core Voltage Offset was found with value of [$coreVoltageOffset] mV"
} else {
    Write-Host "The Core Voltage Offset was not found. Action aborted."
    Countdown-And-Quit
}

if ($coreVoltageOffset -EQ $DESIRED_OFFSET_MILLIVOLTS) {
    $DESIRED_OFFSET_MILLIVOLTS++
    Write-Host "If we try to apply the same [$coreVoltageOffset] mV Offset again, XTU will reset to ZERO, so we're changing it a bit [$DESIRED_OFFSET_MILLIVOLTS] in order to re-apply"
}

Write-Host "About to apply [$DESIRED_OFFSET_MILLIVOLTS] mV of Core Voltage Offset in 3 Seconds"; Sleep 3
$xtuCmdSetArgs = @('-t', '-id', 34, '-v', $DESIRED_OFFSET_MILLIVOLTS)
$cmdOutput = & $xtuCmd $xtuCmdSetArgs 2>&1 | Out-String # SET THE DESIRED CORE VOLTAGE OFFSET
$regexFound = $cmdOutput -match 'Core Voltage Offset\s+(\S+)mV'
if ($regexFound) { 
    $coreVoltageOffset = [int] $matches[1]
    Write-Host -ForegroundColor Green "The Core Voltage Offset has been successfully set to [$coreVoltageOffset] mV"
} else {
    $xtuCmdResetArgs = @('-t', '-id', 34, '-v', 0)
    $cmdOutput = & $xtuCmd $xtuCmdResetArgs
    Write-Host -ForegroundColor Red "THERE WAS AN ERROR DURING CORE VOLTAGE OFFSET VALUE. THE VALUE HAS BEEN SET TO ZERO AS A PROTECTIVE MEASURE"
}
Countdown-And-Quit

# END

 

Colocando o script na inicialização do computador

Abra o Agendador de tarefas > Criar Tarefa > Chame de “UNDERVOLT CPU” (ou qualquer outro a sua escolha)

Na aba Geral: Sete: “Executar estando o usuário conectado ou nao” e “Executar com privilegios mais altos” e Configurar para “Windows 10”

Na aba Disparadores (Triggers). Iniciar a tarefa “Ao fazer logon”, “Qualquer usuário” e atrase a tarefa em “1 minuto” para ter uma margem de segurança para bloquea-la caso deseje.

Na aba Ações, criar uma nova ação “%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe” em Adicionar Argumentos, insira: “-ExecutionPolicy Bypass C:\Windows\XTUvoltage.ps1”

Na aba Condições: Limpar todas as opções

Na aba Configurações: Ativar “Permitir execução por demanda” e limpar as demais opções

Salve sua tarefa agendada.

A sua tarefa agendada ficará em Agendador de Tarefas (Local) > Microsoft > Windows > Task Scheduler

Reinicie o computador e aguarde a execução do script.

 

 

Deixe seu comentário



kenji

4 meses atrás

Achei uma excelente dica, mas tenho mais uma pergunta.

Eu aplico offset negativo tanto na tensão dos cores como na tensão da igpu, sem qualquer prejuízo de desempenho nem de confiabilidade, Quais seriam as modificações a fazer no script para ele dar offset nestes dois valores?

margenn

4 meses atrás

O script se aplica apenas para a CPU. Atualmente esse é o mais completo que voce vai encontrar pra essa finalidade.

Fale conosco

Utilize o formulário ao lado ou se preferir, um os contatos logo abaixo.


  marcelo.gennari@gren.com.br

Gren 2020