如何一次为所有内核设置CPU频率缩放调节器?


37

我想一次为所有内核设置CPU频率缩放调节器,而不是为每个内核单独设置。有没有办法做到这一点?

(我知道将州长回显到会很容易/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor,但是我不是在寻找自定义解决方案。)


2
使用“自定义解决方案”意味着外壳脚本是不可接受的,它需要是内置的GUI按钮吗?
jg-faustus

我只是想知道标准安装中是否已经存在解决方案(不需要GUI)。
htorque 2011年

检查此页:idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux在“ debian实现”下:显然可以更改引导默认值,并且有一个名为powernowd的用户空间工具。(这是评论而不是回复,因为该帖子来自2008年,并且我还没有测试它是否仍然有效...)
jg-faustus

Answers:


25

我仍然是Linux菜鸟,但是您不认为cpufrequtils可以让您通过使用它来实现(它没有捆绑在Ubuntu OS中,但是在存储库中)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • -r标志用于设置所有(“与硬件相关的所有”)内核的更改

6
与-r相关的选项不能在所有内核上使用。我们必须使用选项-c <number>指定cpu编号,但是此脚本将一次性完成所有cpus的操作:for((i = 0; i <$(nproc); i ++)); 做cpufreq-set -c $ i -r -g性能; 完成
斯里兰卡

6
确实,@ Sri是正确的。cpufreq-set实际上缺少最终的简单但需要的功能。投票计数器清楚地表明,很多人只是不知道它,因为它的描述只是在误导它。
poige

2
谁不经过测试就给这些+1?这根本不起作用。我发布了我能找到的最简单的工作解决方案。
switch87'1

20

我在Google上搜索了很多,但我认为这是不可能的,所以我在我的代码中添加了以下内容.bashrc

function setgov ()
{
    echo "$1" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}

现在,我可以运行类似的命令,setgov ondemand并且所有内核都将切换到按需调控器。


2
此操作不起作用,因为scale_governor文件由root拥有并具有受限权限。并非总是建议更改权限。
斯里兰卡

请在对user49449的答案的评论中查看替代脚本。
斯里兰卡

6

更改所有内核的调节器的最短命令如下:

sudo bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'

您可以像提到的htorque一样将其添加到.bashrc中,您将必须以root身份运行它sudo setgov performance

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}

2

我们还可以添加bash代码完成功能:

function setgovernor () {
    echo "$1" | sudo tee 
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}
complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor

2

自从Ubuntu 16.04或更早版本开始,调速器默认在30秒钟后默认返回节能状态,我将其设置为固定状态(我使用Ubuntu Mate);

  1. 放入此代码(一行)(谢谢,感谢上一个答案中的switch87)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. 进入目录中的文件

    /etc/rc.local
    

我的是“ exit 0”上方的一行,未注释,在注释的下方。

对于那些不知道的人,“ rc.local”以sudo的身份运行命令。似乎要更改调速器的任何命令都需要以sudo运行。

它使调速器重置为省电模式,并在60秒后以sudo的身份运行代码以将其恢复为性能。

将“ 60”(在您复制的代码中)更改为所需的任何时间(以秒为单位。60 = 60秒= 1分钟),您需要将命令延迟,并将“性能”(在命令部分中)延迟到所需的调控器改成。

经过数小时的搜索,我没有找到比这更永久的解决方案。我认为如果这是我找到的最佳解决方案,那么节电大约需要几分钟,对吗?对。

这不是最好的解决方案,但是它使它在永久保存后变得有点永久性。如果您想直接启动并跳入游戏或需要等待一分钟的代码,则只需输入一小段时间即可将其从省电模式切换回去,或缩短其时间(取决于所需的时间)一切都可以启动,因此它将正确切换回性能)。

而且,像往常一样,要恢复为默认设置(我已经看到人们的PC过热存在一些问题,这就是为什么他们可能默认将其默认设置为省电的原因),只需从rc.local中删除代码,然后重新启动或将其切换回使用cpu图标指示器切换器手动运行或运行;

 sudo /etc/init.d/cpufrequtils restart

在终端或重启。


1

您可以通过运行一次对所有内核执行此操作

sudo cpupower frequency-set --governor performance

0

根据switch87的答案,我做了一个简单的脚本cpufreq-set-all,该脚本可以对cpufreq-set所有CPU 进行其他操作:

   #!/bin/bash
   MAX_CPU=$((`nproc --all` - 1))
   for i in $(seq 0 $MAX_CPU); do
       echo "Changing CPU " $i " with parameter "$@;
       cpufreq-set -c $i $@ ;
   done

现在可以chmod +x像这样调用(当然在after之后):

cpufreq-set-all -g powersave

要么

cpufreq-set-all -f 800Mhz
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.