Defina o governador da CPU para desempenho em 18.04

24

Estou tentando definir o governador da CPU para desempenho em 18.04, o problema é que ele nunca sobrevive às reinicializações.

Eu tentei seguir estas etapas em uma resposta a esta pergunta Como definir "Desempenho" em vez de "Economia de energia" como padrão? mas quando eu reinicio o computador, o governador da CPU volta para o PowerShield.

Eu também tentei criar um arquivo chamado /etc/rc.localcom a linha:

cpupower frequency-set --governor performance

Isso também não sobrevive às reinicializações.

Como posso fazer isso?

Falc
fonte
3
Qual procedimento exatamente você seguiu? O erro de digitação está no nome do arquivo /etc/rc.localapenas nesta pergunta ou você fez o mesmo erro ao criá-lo? Esta questão pode não ser específica para 18.04 e provavelmente não deve ser um relatório de erro, e sim uma pergunta aqui. Acho que a questão pode ser considerada para reabertura se você a editar para adicionar mais detalhes.
Zanna
O parâmetro --governor powersavedeve ser --governor performance...
WinEunuuchs2Unix 04/04
Eu segui essa lista de comandos, mas, quando reinicializo o computador, o governador da CPU volta para o PowerShield. Eu não sabia que havia um erro de digitação no comando /etc/rc.local, obtive isso em outra postagem do askubuntu aqui quando tentei criar um script para que o comando 'cpupower frequency-set --governor performance' fosse executado em comece.
Falc 04/04
Sim, eu tentei seguir esse segmento, recebo esta mensagem: j @ j-ncase: ~ $ sudo update-rc.d ondemand desativar update-rc.d: erro: não é possível encontrar um script LSB para ondemand
Falc

Respostas:

18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
O gerente noturno
fonte
4
Na verdade, apenas o último comando é suficiente. Depois sudo systemctl disable ondemande reinicie: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorshows performance.
Yalok Iy
6

Resposta curta

Em /etc/rc.localcolocar estes comandos:

sleep 120
cpupower frequency-set --governor performance

1 minuto após a inicialização da troca automática para Powersave

Por qualquer motivo, minha CPU Skylake Intel sempre inicia no modo Desempenho e depois muda para o modo Economia de energia na marca de 1 minuto automaticamente.

Se você definir o modo como Desempenho na inicialização, ele será substituído em torno da marca de 1 minuto de tempo de atividade no modo Economia de energia.

No GIF abaixo, a velocidade da CPU de mais de 3000 MHz na inicialização é exibida na parte superior. O tempo de atividade aparece próximo à parte inferior. Quando o tempo de atividade atinge cerca de 1 minuto, você vê a CPU MHz cair. :

CPU economiza 1 minuto 2.gif


Programa para monitorar exatamente o segundo Powersave invocado

Crie este script em /usr/local/bin/watch-gov.sh:

#! /bin/bash

# NAME: watch-gov.sh
# PATH: /usr/local/bin
# DESC: Set governnor to performance and watch for change
#       Ask Ubuntu question: /ubuntu/1021748/set-cpu-governor-to-performance-in-18-04/1084727#1084727
# CALL: called from `/etc/rc.local`
# DATE: Created Oct 18, 2018.

echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
last_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
Uptime=$(uptime)
echo "watch-gov.sh: Set to performance at $Uptime " > /tmp/watch-gov.log

for ((i=0; i<300; i++)) ; do
    curr_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
    if [ $last_gov != $curr_gov ] ; then
        last_gov=$curr_gov
        Uptime=$(uptime)
        echo "watch-gov.sh: Current governor: $last_gov Uptime: $Uptime" >> \
            /tmp/watch-gov.log
    fi
    sleep 1
done

Chame o script /etc/rc.localantes doexit 0 comando (explicado em detalhes abaixo).

Um minuto após o login, observe a saída:

$ cat /tmp/watch-gov.log
watch-gov.sh: Set to performance at  17:50:09 up 0 min,  0 users,  load average: 0.00, 0.00, 0.00 
watch-gov.sh: Current governor: powersave Uptime:  17:51:09 up 1 min,  1 user,  load average: 1.89, 0.62, 0.22

A confirmação desta resposta indica que essa força de 1 minuto no powersavegovernador é controlada por /etc/init.d/ondemand.


Durma 120 segundos antes de definir o Modo Performance

A maneira mais simples de permanecer no modo Desempenho é editar /etc/rc.locale inserir essas linhas antes da última linha que contém exit 0:

sleep 120 # Give CPU startup routines time to settle.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Salve o arquivo e reinicie.

Se você inserir as novas linhas exit 0, elas nunca serão executadas.


Ressalvas

Sua máquina provavelmente funcionará 10 a 15 graus C mais quente.

Pode ser necessário remover outros programas que alteram a frequência da CPU se eles substituirem as configurações de desempenho em /etc/rc.local

WinEunuuchs2Unix
fonte
De qual pacote cpupowere de qual GUI você tem esse animgif? Estou tentando ajustar um Ryzen 7, cpufreq-utilsmas parece lento, mesmo com o governador de desempenho
Csaba Toth
@CsabaToth Eu uso o Conky para exibir CPU, RAM, HDD, SDD, Rede e outros detalhes do sistema. Você não precisa do cpupower, mas faz parte do cpufrequtilspacote. Se o sistema estiver lento, tente a área de trabalho do Unity em vez da área de trabalho padrão do Gnome .
WinEunuuchs2Unix 01/03
@ WinEunuchs2Unix obrigado, eu nunca ouvi falar de Conky, e ele foi instalado no meu sistema. Estou executando o Devuan BTW com o Xfce4. Conky diz que minha frequência de CPU é de 550 MHz (0,55 GHz), o que explica a lentidão e é o que eu esperava, mas cpufreq-infoinforma 3,2 GHz e estou forçando o performancegovernador. Eu preciso abrir uma pergunta para isso.
Csaba Toth
4

As configurações padrão do kernel do Ubuntu são tais que o governador de escala de frequência da CPU de desempenho será usado durante a inicialização. A seção relevante do arquivo de configuração do kernel ( /boot/config-4.15.0-36-genericneste exemplo) é:

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y

#
# CPU frequency scaling drivers
#
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_CPB=y
CONFIG_X86_POWERNOW_K8=y
CONFIG_X86_AMD_FREQ_SENSITIVITY=m
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_P4_CLOCKMOD=m

Mas também por padrão, durante a inicialização, o ondemandserviço é executado. Ele dorme por 1 minutos e, em seguida, muda o governador de escala para tanto interactive, ondemandou powersave, dependendo da disponibilidade. Por sua vez, a disponibilidade depende do driver de dimensionamento de frequência da CPU que você está usando. O código é (em vários locais, procure ondemand):

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ondemand
# Required-Start:    $remote_fs $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Set the CPU Frequency Scaling governor to "ondemand"
### END INIT INFO

# Don't run if we're going to start an Android LXC container:
[ ! -f /etc/init/lxc-android-config.conf ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

AVAILABLE="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"
DOWN_FACTOR="/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor"

case "$1" in
    start)
        start-stop-daemon --start --background --exec /etc/init.d/ondemand -- background
        ;;
    background)
        sleep 60 # probably enough time for desktop login

        [ -f $AVAILABLE ] || exit 0
        read governors < $AVAILABLE
        case $governors in
                *interactive*)
                        GOVERNOR="interactive"
                        break
                        ;;
                *ondemand*)
                        GOVERNOR="ondemand"
                        case $(uname -m) in
                                ppc64*)
                                        SAMPLING=100
                                ;;
                        esac
                        break
                        ;;
                *powersave*)
                        GOVERNOR="powersave"
                        break
                        ;;
                *)
                        exit 0
                        ;;
        esac

        for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
        do
                [ -f $CPUFREQ ] || continue
                echo -n $GOVERNOR > $CPUFREQ
        done
        if [ -n "$SAMPLING" ] && [ -f $DOWN_FACTOR ]; then
                echo -n $SAMPLING > $DOWN_FACTOR
        fi
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Por que é chamado "ondemand", mas define outros governadores (por exemplo, com o driver intel_pstate, ele define o governador de economia de energia)? Como essa ferramenta pré-data o driver intel_pstate, remonta a uma época em que, de longe, o driver de escala de frequência dominante era o driver acpi-cpufreq, e "ondemand" era o governador padrão preferido do Ubuntu.

Portanto, uma maneira de inicializar e permanecer usando o governador de dimensionamento de frequência da CPU de desempenho é desativar o serviço que muda dele (que também foi mencionado em outra resposta):

Antes:

~$ systemctl list-units --all --type=service | grep ondemand
  ondemand.service                                      loaded    inactive dead    Set the CPU Frequency Scaling governor
~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand

Desative o serviço:

~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.

reinicie e verifique novamente (não se esqueça de esperar um minuto após a reinicialização):

doug@s17:~$ systemctl list-units --all --type=service | grep ondemand
doug@s17:~$
doug@s17:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance

Nota: os exemplos nesta resposta são de um computador que usa o driver de dimensionamento de frequência da CPU acpi-cpufreq. Se você estiver usando o driver intel_pstate, sem um governador ondemand, o governador de economia de energia será usado por padrão.

Pergunta antecipada: Por que minhas frequências de CPU aumentam, mesmo quando uso o regulador de desempenho?

Resposta: Os processadores modernos escalam a frequência da CPU, mesmo no modo de desempenho e em função da profundidade do estado inativo em que entram. Se você realmente deseja bloquear a frequência da CPU, desative todos os estados ociosos com profundidade maior que 0. No entanto, observe que isso custará uma enorme quantidade enorme de energia.

Pessoalmente, e conforme mencionado em outra resposta, eu uso o governador de desempenho ou o governador de economia de energia como uma função de qualquer trabalho que esteja realizando. Meus scripts são um pouco diferentes:

$ cat set_cpu_performance
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "performance" > $file; done

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

e:

$ cat set_cpu_powersave
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "powersave" > $file; done

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

exemplo de uso (em um computador usando o driver intel_pstate):

$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance
Doug Smythies
fonte
2

O que eu fiz foi usar o arquivo /etc/rc.local

Para ajudá-lo a encontrar seus caminhos, use:

find / -name scaling_governor
find / -name scaling_max_freq

Isso funciona para a minha configuração, mas você só precisa editá-la

Eu adicionei ao /etc/rc.local usando o nano:

# Set CPU Governor and Freq at boot up
 echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 echo 1500000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
 echo 2000000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
 echo "performance" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor

diretamente sob a linha shebang. Feche o nano com Ctrl-X e Y para salvar

Em seguida, para 18.04 (pode não funcionar em 16.04) na linha de comando, execute:

systemctl disable ondemand

Em seguida, na linha de comando - leia /etc/rc.local e reinicie:

/etc/rc.local
reboot

se /etc/rc.local engasgar e erros, verifique se é chmod + x /etc/rc.local

WesZ
fonte
Outra coisa que faço é editar o /etc/init.d/ondemand ou ondemand precisa ser movido para ondemandzzz para desativá-lo. Há um sono 60 em /etc/init.d/ondemand antes de definir o governador. Mesmo que o rc.local mude para desempenho no momento da inicialização, 60 segundos depois ele é alterado por /etc/init.d/ondemand. Em /etc/init.d/ondemand, altere a linha: echo -n $ GOVERNOR> $ CPUFREQ para: echo -n "performance"> $ CPUFREQ se você decidir manter o /etc/init.d/ondemand funcionando ...
WesZ 08/11
1

Estou usando este script bash para definir o performancegovernador:

#!/bin/bash

sudo cpufreq-set --cpu 0 --governor performance
sudo cpufreq-set --cpu 1 --governor performance
sudo cpufreq-set --cpu 2 --governor performance
sudo cpufreq-set --cpu 3 --governor performance
sudo cpufreq-set --cpu 4 --governor performance
sudo cpufreq-set --cpu 5 --governor performance
sudo cpufreq-set --cpu 6 --governor performance
sudo cpufreq-set --cpu 7 --governor performance

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

O Make é executável chmod +x cpu.she executado a qualquer momento que você precisar (sempre logo após cada computador iniciar / reiniciar).

Michal Przybylowicz
fonte
0

Eu tive um problema parecido. No meu caso, eu queria definir o governador como 'schedutil', mas após uma reinicialização, sempre encontrava o governador como 'ondemand'. Eu li e tentei a maioria das soluções apresentadas aqui sem sucesso.

O que fez o truque para mim e estou usando o Ubuntu Mate 18.04.2 foi encontrar o arquivo:

/ lib / systemd / set-cpufreq

editando-o para inserir as linhas:

    *schedutil*)
            GOVERNOR="schedutil"
            break
            ;;

então agora o arquivo diz:

    #! /bin/sh
    # Set the CPU Frequency Scaling governor to "ondemand"/"powersave"      where available
    set -eu

    FIRSTCPU=`cut -f1 -d- /sys/devices/system/cpu/online`
    AVAILABLE="/sys/devices/system/cpu/cpu$FIRSTCPU/cpufreq/scaling_available_governors"
    DOWN_FACTOR="/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor"

    [ -f $AVAILABLE ] || exit 0

    read governors < $AVAILABLE
    case $governors in
            *interactive*)
                   GOVERNOR="interactive"
                   break
                   ;;
            *schedutil*)
                   GOVERNOR="schedutil"
                   break
                   ;;
            *ondemand*)
                   GOVERNOR="ondemand"
                   case $(uname -m) in
                           ppc64*)
                           SAMPLING=100
                   ;;
                   esac
                   break
                   ;;
            *powersave*)
                   GOVERNOR="powersave"
                   break
                   ;;
            *)
                   exit 0
                   ;;
    esac

    [ -n "${GOVERNOR:-}" ] || exit 0

    echo "Setting $GOVERNOR scheduler for all CPUs"

    for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    do
            [ -f $CPUFREQ ] || continue
            echo -n $GOVERNOR > $CPUFREQ
    done
    if [ -n "${SAMPLING:-}" ] && [ -f $DOWN_FACTOR ]; then
            echo -n $SAMPLING > $DOWN_FACTOR
    fi.

e agora, quando eu inicializo meu computador, ele começa com o governador 'schedutil'!

Vulto
fonte