红联Linux门户
Linux帮助

Linux下变更CPU频率管理策略

发布时间:2016-06-09 11:15:59来源:linux网站作者:peterliu1218

现在的CPU可以藉由改变输入的电压,改变CPU的工作频率。作业系统也可藉由这种方式控制CPU的节能或效率。在ubuntu图形界面下,indicator-cpufreq可以让你随时切换,但是这个程序在背后是如何运作的?或者在文字界面下,如何去变更?


在Linux的内核,基本上可以分为五种管理策略:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand userspace powersave performance

userspace是由使用者自己定义,需要安装其他软件管理,先不说明。其他四种策略,各代表意义如下:
1.performance:CPU维持最高时脉运行。
2.ondemand:程序运行时,直接调高时脉运行。(但不一定是调到最高,而是依程式需求)。没有运行时,调低时脉。
3.conservative:同上,但调整的方式,是一阶一阶地调整,而非直接调整。
4.powersave:CPU维持最低时脉运行
正常状况下,这四种的效能越前面越高;节能效果越后面愈高。Linux系统大多数默认ondemand管理策略。

想知道CPU最高与最低时脉,可输入:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_frep
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_frep

这个目录下,有哪些档案可以修改,可以先 ls -l 看看。(Linux很重要的概念,不给你w属性,就是不要你去修改。不要以为拿著root权限,就什麼文件都可以改 ...)


管理策略可以藉由修改scaling_governor改变,例如我想要使用powersave管理策略:
$ sudo echo 'powersave' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

但是现在的电脑,多是多核的CPU,所以不能只改一个,不然就只有这一核改变而已。请检查一下有几个核心。
$ ls /sys/devices/system/cpu/
我的电脑有四核心,所以我会看到有cpu0, cpu1, cpu2, cpu3四个目录。
因此,我应该执行以下四个:
$ sudo echo 'powersave' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
$ sudo echo 'powersave' > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
$ sudo echo 'powersave' > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
$ sudo echo 'powersave' > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
但每次要更动,需要输入四个长串指令,太累了!所以可以把他写成一个scripts(暂名为 cpu_powersave.sh):

#!/bin/bash
# set cpu scaling governor to 'powersave'

echo 'powersave' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 'powersave' > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo 'powersave' > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo 'powersave' > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor

加上x属性,以后执行时加上sudo就可以设置完成:
sudo ./cpu_powersave.sh
其他管理策略,你也可依此方法写成scripts,以便随时切换。

注:userspace需要安装powernowd与cpufreqd两个安装包去管理。但个人能力有限,暂时还想不到这四种管理策略无法涵盖的范围。


本文永久更新地址:http://www.linuxdiyf.com/linux/21371.html