在18.04中将CPU调速器设置为性能


24

我正在尝试在18.04中将CPU调速器设置为性能,问题是它在重启后永远无法幸免。

我已尝试按照以下步骤回答此问题。 如何将“性能”而不是“省电”设置为默认值?但是当我重新启动计算机时,CPU调速器会切换回省电模式。

我也尝试过创建带有以下内容的文件/etc/rc.local

cpupower frequency-set --governor performance

重启后也无法幸免。

我怎样才能做到这一点?


3
您究竟遵循什么程序?是/etc/rc.local仅在此问题中输入文件名中的错字,还是在创建文件时输入了相同的错字?这个问题可能不特定于18.04,可能不应该是一个错误报告,而不是这里的问题。我认为,如果您对其进行编辑以添加更多详细信息,则可以考虑重新考虑该问题。
Zanna

该参数--governor powersave应为--governor performance...
WinEunuuchs2Unix

我遵循了命令列表,但是当我重新引导计算机时,cpu调节器将切换回powersaver。我不知道有在/etc/rc.local中的命令一个错字,我从另一个askubuntu后这里时,我试图让一个脚本有命令“cpupower频率设定--governor性能”在运行启动。
Falc


是的,我尝试过该线程,但收到以下消息:j @ j-ncase:〜$ sudo update-rc.d ondemand disable update-rc.d:错误:找不到ondemand的LSB脚本
Falc

Answers:


18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand

4
实际上,仅使用最后一条命令就足够了。之后sudo systemctl disable ondemand并重启:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor节目performance
Yalok Iy

6

简短答案

/etc/rc.local这些命令中输入:

sleep 120
cpupower frequency-set --governor performance

开机1分钟后自动切换到Powersave

无论出于何种原因,我的Skylake Intel CPU始终在性能模式下启动,然后在1分钟标记处自动切换到节能模式。

如果将模式设置为“启动时的性能”,它将在1分钟的“ 启动时间”标记附近被覆盖为“ 节能”模式。

在下面的GIF中,启动时3000+ MHz的CPU速度显示在顶部附近。上升时间显示在底部附近。当正常运行时间达到大约1分钟时,您会看到CPU MHz下降。:

CPU节能1分钟2.gif


监视确切的第二次Powersave调用的程序

/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

/etc/rc.localexit 0命令前调用脚本(下面有详细说明)。

登录一分钟后,查看输出:

$ 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

从该答案的确认表明,这1分钟对powersave调速器的力由来控制/etc/init.d/ondemand


在设置性能模式之前睡眠120秒

停留在“性能”模式下的最简单方法是/etc/rc.local在包含以下内容的最后一行之前编辑并插入这些行exit 0

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

保存文件并重新启动。

如果您在之后插入新exit 0行将永远不会执行。


注意事项

您的机器可能会在10至15摄氏度的高温下运行。

如果其他程序更改了CPU频率,则可能需要删除这些程序来覆盖CPU频率, /etc/rc.local


cpupower该animgif来自哪个包和哪个GUI?我正在尝试调整Ryzen 7 cpufreq-utils的性能,但即使使用性能调节器也感觉迟钝
Csaba Toth

@CsabaToth我使用Conky显示CPU,RAM,HDD,SDD,网络和其他系统详细信息。您不需要cpupower,但它是cpufrequtils软件包的一部分。如果系统缓慢,请尝试使用Unity桌面,而不是默认的Gnome桌面。
WinEunuuchs2Unix

@ WinEunuchs2Unix谢谢,我从未听说过Conky,它已安装在我的系统上。我正在使用Xfce4运行Devuan BTW。因此Conky说我的CPU频率为550 MHz(0.55 GHz),这可以解释它的缓慢程度,这是我所期望的,但是却cpufreq-info告诉我3.2 GHz,我正在强制performance调速器。我需要为此打开一个问题。
Csaba Toth

4

默认的Ubuntu内核配置是在引导过程中使用性能CPU频率缩放调节器。内核配置文件(/boot/config-4.15.0-36-generic在此示例中)的相关部分是:

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

但默认情况下,在启动过程中ondemand也会执行该服务。它睡觉包1分钟,然后或者改变缩放调速器interactiveondemandpowersave,视情况而定。反过来,可用性取决于您使用的CPU频率缩放驱动程序。代码是(在多个位置搜索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

为什么将其称为“ ondemand”,但却设置了其他控制器(例如,使用intel_pstate驱动程序将设置省电控制器)?因为此工具的日期早于intel_pstate驱动程序,所以可以追溯到到目前为止主要的频率缩放驱动程序是acpi-cpufreq驱动程序,而“ ondemand”是首选的Ubuntu默认调控器。

因此,一种引导并保持使用性能CPU频率缩放调节器的方法是禁用与其发生变化的服务(在另一个答案中也提到):

之前:

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

禁用服务:

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

重新启动,然后再次检查(请务必在重新启动后等待一分钟):

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

注意:此答案中的示例来自使用acpi-cpufreq CPU频率缩放驱动程序的计算机。如果您使用的intel_pstate驱动程序没有按需调控器,则默认情况下将使用节电调控器。

预期的问题:即使使用性能调节器,为什么我的CPU频率也会缩放?

答:现代处理器可以扩展CPU频率,即使在性能模式下,也取决于它们进入空闲状态的深度。如果您确实想锁定CPU频率,则禁用比0更深的所有空闲状态。但是,请注意,这将消耗大量的电源。

就个人而言,如另一个答复中所述,我将性能调节器或节电调节器用作我所做工作的函数。我的脚本有些不同:

$ 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

和:

$ 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

用法示例(在使用intel_pstate驱动程序的计算机上):

$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance

2

我所做的是使用文件/etc/rc.local

为了帮助您找到路径,请使用:

find / -name scaling_governor
find / -name scaling_max_freq

这适用于我的设置,但您只需要对其进行编辑即可

我使用nano添加到/etc/rc.local:

# 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

在射帮线的正下方。用Ctrl-X和Y关闭nano以保存

然后对于18.04(可能不适用于16.04)在命令行上运行:

systemctl disable ondemand

然后在命令行上-读取/etc/rc.local,然后重新启动:

/etc/rc.local
reboot

如果/etc/rc.local遇到了麻烦和错误,请确保它是chmod + x /etc/rc.local


我要做的另一件事是编辑/etc/init.d/ondemand或ondemand,需要将其移至ondemandzzz以禁用它。在设置调控器之前,/ etc / init.d / ondemand中有一个sleep 60。即使rc.local会在启动时将其更改为性能,但60秒后仍会被/etc/init.d/ondemand更改。在/etc/init.d/ondemand中,将以下行更改:echo -n $ GOVERNOR> $ CPUFREQ更改为:echo -n“ performance”> $ CPUFREQ,如果您决定保持/etc/init.d/ondemand的工作状态
WesZ18年

1

我正在使用此bash脚本设置调控performance器:

#!/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是可执行文件chmod +x cpu.sh,可在您需要的任何时间运行(在每台计算机启动/重启后立即执行)。


0

我有一个类似的问题。就我而言,我想将调控器设置为“ schedutil”,但是在重新启动后,我总会发现调控器为“按需”。我阅读并尝试了此处提出的大多数解决方案,但都没有成功。

什么使我成功了,我正在使用Ubuntu Mate 18.04.2查找文件:

/ lib / systemd / set-cpufreq

编辑它以插入行:

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

所以现在文件显示为:

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

现在,当我启动计算机时,它以“ schedutil”调节器启动!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.