Linux下CPU的手动频率设定

在Linux中,内核的开发者定义了一套框架模型来完成CPU频率动态调整这一目的,它就是CPU Freq系统。如下为CPU的几种模式(governor参数):
  
ondemand:    系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核默认的方式都是ondemand。 interactive:  交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般。 conservative:  保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。 smartass:    聪明模式,是I和C模式的升级,该模式在比interactive 模式不差的响应的前提下会做到了更加省电。 performance:  性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量。 powersave    省电模式,通常以最低频率运行。 userspace:   用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置 Hotplug:    类似于ondemand, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电。

 

  众所周知的是,CPU的频率和它的实际性能特别是整数运算能力上有着相当强的关联性。但同时CPU的频率也跟它的功耗成正比,而功耗是有一个TDP的热功耗上限。根据当下多核CPU、多任务的趋势我们很容易就联想到在一个系统上如果存在多个任务,我们是否可以通过为不同任务设置不同的CPU频率的方法区分优先级?也就说CPU的频率是否可以作为一种可用资源来任意分配?
  答案是肯定的!
  不过由于CPU频率的设定是基于CPU不同的核心而言,在这个层级上来说并没有系统或者任务的概念,所以要想达到我们之前说的任务级别的频率分配需要通过任务-核心的绑定来实现。具体的手段其实非常丰富,从taskset命令,cgroup,vm,container技术都有CPU-set的设定,在这里我就不多赘述,主要还是讲如何为每个CPU核心设定不同的频率。
 
  首先要讲的是几个CPU频率相关的技术
  · Speedstep: 似乎最早出现在“迅驰”笔记本CPU上,现在已经在所有Intel CPU上实现。它允许CPU在空载的情况下自动降低频率以节约宝贵的电力。
  · Turbo:奔4时代的技术,turbo技术允许CPU在较高负载且热功耗允许的情况下主动升频
  · PCPS: Xeon v4之后的技术,继承了前面两个技术的特点允许系统为每一个物理核心(core)设定不同的频率。
  以上3种技术中最重要的PCPS需要Linux kernel 4.7以后的版本,比如我这里用的4.13.
[root@localhost cpu]# cd /sys/devices/system/cpu/cpufreq
[root@localhost cpufreq]# ls
boost policy10 policy13 policy16 policy19 policy21 policy24 policy27 policy5 policy8
policy0 policy11 policy14 policy17 policy2 policy22 policy25 policy3 policy6 policy9
policy1 policy12 policy15 policy18 policy20 policy23 policy26 policy4 policy7

 

  /sys/devices/system/cpu/cpufreq 是具体的CPU 频率管理入口,每一个policy*子文件夹都对应了系统的一个core。比如我们需要设定core0的频率,则直接进入policy0目录即可。
[root@localhost cpufreq]# cd policy0
[root@localhost policy0]# ls -l
total 0
-r--r--r--. 1 root root 4096 Jan 17 02:49 affected_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 bios_limit
-r--------. 1 root root 4096 Jan 17 02:49 cpuinfo_cur_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_max_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_min_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_transition_latency
-r--r--r--. 1 root root 4096 Jan 17 02:49 freqdomain_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 related_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_available_frequencies
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_available_governors
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_cur_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_driver
-rw-r--r--. 1 root root 4096 Jan 17 03:00 scaling_governor
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_max_freq
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_min_freq
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_setspeed

 

  路径下有多个文件,首先需要确定该CPU是否支持PCPS
[root@localhost policy0]# cat scaling_available_governors
conservative userspace powersave ondemand performance

 

  scaling_available_governors保存了系统支持的电源策略,如果你曾经在桌面版本的Linux配置过电源的话应该很熟悉这几个模式。不过这里除了传统的conservative (保守),powersave(节能) ondemand(请求) performance(性能)4种模式之外,还特别的多了一个userspace模式,这说明系统可以支持PCPS.
  我们看一下这颗CPU究竟支持哪些频率设定,scaling_available_frequencies文件保存了对应的内容。
[root@localhost policy0]# cat scaling_available_frequencies
2501000 2500000 2400000 2300000 2200000 2100000 2000000 1900000 1700000 1600000 1500000 1400000 1300000 1200000 1100000 1000000
  
  没什么好多解释的,一看就能明白,这颗CPU可以在1G~2.5G之间做调整,每次最少调整0.1G。
  查看当前频率也很容易,scaling_cur_freq文件:
[root@localhost policy0]# cat scaling_cur_freq
1000000

 

  看了一圈了,开始设定CPU0的频率,其实也很容易的。
[root@localhost policy0]# echo userspace > scaling_governor
[root@localhost policy0]# echo 200000 > scaling_setspeed
[root@localhost policy0]# cat scaling_cur_freq
2000000
  
scaling_governor文件可以设定该CPU的电源模式,就像前面说的,这里需要将电源模式设定为“userspace”。而scaling_setspeed可以直接指定CPU的频率,这里就直接设定为2.0G。
  依次为每个core设定不同的频率即可。
  需要注意的是,你无法将所有的频率都设定到最大并保持住。这是由CPU的热功耗决定的,将一部分核心频率提升的同时,势必要降低某些core的频率。
 
 
 
 
 https://blog.csdn.net/zaf0516/article/details/95769589
http://www.51testing.com/html/20/n-3723920.html
   
posted @ 2021-11-08 17:00  迷人的危险~  阅读(5635)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css