Skip to content

CPU 性能设置

CPU 频率管理

在 linux 内核中,自带了 cpufreq 子系统用来控制 cpu 的频率和频率控制策略。

进入目录 /sys/devices/system/cpu/cpufreq/policy0,执行 ls ,会看到目录中有如下文件:

shell
affected_cpus						// 当前控制影响的CPU核(没有显示处于offline状态的cpu)
cpuinfo_cur_freq					// 当前CPU频率(单位: KHz) 
cpuinfo_max_freq					// 当前调频策略下CPU可用的最高频率(单位: KHz) 
cpuinfo_min_freq					// 当前调频策略下CPU可用的最低频率(单位: KHz) 
cpuinfo_transition_latency			// 处理器切换频率所需要的时间(单位:ns)
related_cpus						// 该控制策略影响到哪些CPU核(包括了online+offline的所有cpu)
scaling_available_frequencies		// CPU支持的主频率列表(单位: KHz) 
scaling_available_governors			// 当前内核中支持的所有 governor(调频)类型
scaling_boost_frequencies			// 在boost (超频) 模式下CPU支持的主频率列表(单位: KHz) 
scaling_cur_freq					// 保存着 cpufreq 模块缓存的当前 CPU 频率,不会对 CPU 硬件寄存器进行检查。
scaling_driver						// 当前使用的调频驱动
scaling_governor					// governor(调频)策略
scaling_max_freq					// 当前调频策略下CPU可用的最高频率 (从cpufreq模块缓存中读取) 
scaling_min_freq					// 当前调频策略下CPU可用的最低频率 (从cpufreq模块缓存中读取) 
scaling_setspeed					// 需将governor切换为userspace才能使用,往这个文件echo数值,会切换频率

系统使用的 linux 内核支持以下种类的调频策略:

  • 性能 (performance) :总是将 CPU 置于最高能耗也是最高性能的状态,即硬件所支持的最高频。
  • 节能 (powersave) :总是将 CPU 置于最低能耗也是最差性能的状态,即硬件所支持的最低频。
  • 按需 (ondemand) :定时检查负载,然后根据负载来调节频率。负载低的时候调节至一个刚好能够满足当前负载需求的最低频,当负载高时,立即提升到最高性能状态。
  • 保守 (conservative) :跟 ondemand 策略类似,定时检查负载,然后根据负载来调节频率。负载低的时候调节至一个刚好能够满足当前负载需求的最低频,但当负载高时,不是立即设置为最高性能状态,而是逐级升高主频。
  • 用户 (userspace) :将控制接口通过 sysfs 开放给用户,由用户进行自定义策略,可以在用户空间手动调节频率。
  • 调度信息 (schedutil) :这是从 Linux-4.7 版本开始才引入的策略,其原理是根据调度器所提供的 CPU 利用率信息进行频率调节,效果上类似于 ondemand 策略,但是更加精确和自然 (因为调度器掌握了最好的 CPU 使用情况) 。

用户可以通过控制目录 /sys/devices/system/cpu/cpufreq/policy0 下的对应设置来控制 CPU 的调频策略。

例如让 CPU 运行在性能模式:

shell
sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor"