Our Blog

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