Configurar el regulador de CPU al rendimiento en 18.04

25

Estoy tratando de configurar el rendimiento del regulador de CPU en 18.04, el problema es que nunca sobrevive a los reinicios.

He intentado seguir estos pasos en una respuesta a esta pregunta ¿Cómo configurar "Rendimiento" en lugar de "Powersave" como predeterminado? pero cuando reinicio la computadora, el regulador de la CPU vuelve al modo de ahorro de energía.

También intenté crear un archivo llamado /etc/rc.localcon la línea:

cpupower frequency-set --governor performance

Eso tampoco sobrevive a los reinicios.

¿Cómo puedo hacer esto?

Falc
fuente
3
¿Qué procedimiento seguiste exactamente? ¿Está el error tipográfico en el nombre de archivo /etc/rc.localsolo en esta pregunta, o cometiste el mismo error al crearlo? Esta pregunta puede no ser específica de 18.04 y probablemente no debería ser un informe de error en lugar de una pregunta aquí. Creo que la pregunta podría considerarse para reabrirla si la edita para agregar más detalles.
Zanna
El parámetro --governor powersavedebería ser --governor performance...
WinEunuuchs2Unix
Seguí esta lista de comandos, pero cuando reinicio la computadora, el gobernador de la CPU regresa a Power Saver. No me di cuenta de que hay un error tipográfico en el comando /etc/rc.local, lo obtuve de otra publicación de askubuntu aquí cuando intenté hacer un script para ejecutar el comando 'cpupower frequency-set --governor performance' en puesta en marcha.
Falc
Sí, he intentado seguir ese hilo, recibo este mensaje: j @ j-ncase: ~ $ sudo update-rc.d ondemand deshabilitar update-rc.d: error: no se puede encontrar un script LSB para ondemand
Falc

Respuestas:

18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
El gerente nocturno
fuente
44
En realidad, solo el último comando es suficiente. Después sudo systemctl disable ondemandy reiniciar: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governormuestra performance.
Yalok Iy
6

Respuesta corta

En /etc/rc.localponer en estos comandos:

sleep 120
cpupower frequency-set --governor performance

1 minuto después del arranque, cambio automático a Powersave

Por alguna razón, mi CPU Intel Skylake siempre se inicia en modo Performance y luego cambia al modo Powersave en la marca de 1 minuto automáticamente.

Si establece el modo en Rendimiento al inicio, se anulará alrededor de la marca de tiempo de actividad de 1 minuto en modo Ahorro de energía .

En el GIF a continuación, la velocidad de CPU de 3000+ MHz al inicio aparece cerca de la parte superior. El tiempo de actividad aparece cerca de la parte inferior. Cuando el tiempo de actividad alcanza aproximadamente 1 minuto, ve que la CPU MHz se cae. :

La CPU se ahorra 1 minuto 2.gif


Programa para monitorear exactamente el segundo Powersave invocado

Crea este script en /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

Llame al script /etc/rc.localantes del exit 0comando (explicado en detalle a continuación).

Un minuto después de iniciar sesión, mire la salida:

$ 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

La confirmación de esta respuesta indica que esta fuerza de 1 minuto para powersavegobernador está controlada por /etc/init.d/ondemand.


Dormir 120 segundos antes de configurar el modo de rendimiento

La forma más sencilla de permanecer en el modo Rendimiento es editar /etc/rc.locale insertar estas líneas antes de la última línea que contiene exit 0:

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

Guarde el archivo y reinicie.

Si inserta las nuevas líneas después exit 0, nunca se ejecutará.


Advertencias

Su máquina probablemente funcionará entre 10 y 15 grados C más caliente.

Es posible que deba eliminar otros programas que cambian la frecuencia de la CPU si anulan la configuración de rendimiento en /etc/rc.local

WinEunuuchs2Unix
fuente
¿Qué paquete tiene cpupowery de qué GUI tiene ese animgif? Estoy tratando de sintonizar un Ryzen 7, cpufreq-utilspero se siente lento incluso con el gobernador de rendimiento
Csaba Toth
@CsabaToth Utilizo Conky para mostrar CPU, RAM, HDD, SDD, red y otros detalles del sistema. No necesita cpupower pero es parte del cpufrequtilspaquete. Si el sistema es lento, intente con el escritorio Unity en lugar del escritorio Gnome predeterminado .
WinEunuuchs2Unix
@ WinEunuchs2Unix gracias, nunca he oído hablar de Conky, y se instaló en mi sistema. Estoy ejecutando Devuan BTW con Xfce4. Entonces Conky dice que la frecuencia de mi CPU es de 550 MHz (0.55 GHz), lo que explica la lentitud y es lo que esperaba, pero cpufreq-infole dice a 3.2 GHz y estoy forzando al performancegobernador. Necesito abrir una pregunta para esto.
Csaba Toth
4

Las configuraciones predeterminadas del kernel de Ubuntu son tales que el regulador de escala de frecuencia de CPU de rendimiento se utilizará durante el arranque. La sección relevante del archivo de configuración del núcleo ( /boot/config-4.15.0-36-generic, en este ejemplo) es:

#
# 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

Pero también de forma predeterminada durante el arranque ondemandse ejecuta el servicio. Tiene capacidad para 1 minuto y luego cambia el gobernador de escala para cualquiera interactive, ondemando powersave, dependiendo de la disponibilidad. A su vez, la disponibilidad depende del controlador de escala de frecuencia de CPU que esté utilizando. El código es (en varias ubicaciones, busque 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 qué se llama "ondemand", pero establece otros gobernadores (por ejemplo, con el controlador intel_pstate establecerá el gobernador de ahorro de energía)? Debido a que esta herramienta es anterior al controlador intel_pstate, en una época en la que, con diferencia, el controlador de escala de frecuencia dominante era el controlador acpi-cpufreq, y "ondemand" era el gobernador predeterminado de Ubuntu preferido.

Entonces, una forma de arrancar y permanecer usando el regulador de escala de frecuencia de CPU de rendimiento es deshabilitar el servicio que se aleja de él (que también se mencionó en otra respuesta):

Antes de:

~$ 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

Deshabilitar el servicio:

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

reinicie, luego verifique nuevamente (asegúrese de esperar un minuto después del reinicio):

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: los ejemplos en esta respuesta son de una computadora que usa el controlador de escala de frecuencia de CPU acpi-cpufreq. Si está utilizando el controlador intel_pstate, sin gobernador bajo demanda, el gobernador de ahorro de energía se utilizará de forma predeterminada.

Pregunta anticipada: ¿Por qué se escalan las frecuencias de mi CPU, incluso cuando uso el regulador de rendimiento?

Respuesta: Los procesadores modernos escalan la frecuencia de la CPU, incluso en modo de rendimiento y en función de la profundidad del estado inactivo en el que se encuentran. Si realmente desea bloquear la frecuencia de la CPU, desactive todos los estados inactivos más profundos que 0. Sin embargo, tenga en cuenta que le costará una gran cantidad de energía.

Personalmente, y como se menciona en otra respuesta, uso el gobernador de rendimiento o el gobernador de ahorro de energía en función de cualquier trabajo que esté haciendo. Mis guiones son un poco 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

y:

$ 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

ejemplo de uso (en una computadora que usa el controlador intel_pstate):

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

Lo que hice fue usar el archivo /etc/rc.local

Para ayudarlo a encontrar sus caminos, use:

find / -name scaling_governor
find / -name scaling_max_freq

Esto funciona para mi configuración, pero solo necesita editarlo para su configuración

Agregué a /etc/rc.local usando 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

directamente debajo de la línea shebang. Cierre nano con Ctrl-X e Y para guardar

Luego, para 18.04 (puede que no funcione en 16.04) en la línea de comando ejecute:

systemctl disable ondemand

Luego, en la línea de comando, lea /etc/rc.local y luego reinicie:

/etc/rc.local
reboot

si /etc/rc.local se atraganta y comete errores, asegúrese de que sea chmod + x /etc/rc.local

WesZ
fuente
Otra cosa que hago es editar /etc/init.d/ondemand o ondemand necesita ser movido a ondemandzzz para deshabilitarlo. Hay un sueño 60 en /etc/init.d/ondemand antes de configurar el gobernador. A pesar de que rc.local lo cambiará a rendimiento en el momento del arranque, 60 segundos después se cambia por /etc/init.d/ondemand. En /etc/init.d/ondemand cambie la línea: echo -n $ GOVERNOR> $ CPUFREQ a: echo -n "performance"> $ CPUFREQ si decide mantener /etc/init.d/ondemand funcionando ...
WesZ
1

Estoy usando este script bash para configurar el performancegobernador:

#!/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

Make es ejecutable chmod +x cpu.shy se ejecuta en cualquier momento que lo necesite (siempre justo después de cada inicio / reinicio de la computadora).

Michal Przybylowicz
fuente
0

Tuve un problema similar. En mi caso, quería establecer el gobernador en 'schedutil', pero después de un reinicio siempre encontraría que el gobernador estaba 'bajo demanda'. Leí y probé la mayoría de las soluciones presentadas aquí en vano.

Lo que me funcionó, y estoy usando Ubuntu Mate 18.04.2 fue encontrar el archivo:

/ lib / systemd / set-cpufreq

editándolo para insertar las líneas:

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

así que ahora el archivo dice:

    #! /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.

¡y ahora cuando inicio mi computadora comienza con el gobernador 'schedutil'!

Vulto
fuente