计算机 · 2021年12月14日 0

Intel Turbo Boost

Intel Turbo Boost介绍

Intel Turbo Boost翻译过来就是经常听到的英特尔睿频加速技术。就是在不超过cpu总功耗限制(TDP,Thermal Design Power)的情况下(当然也不超过其他各种电压、功率、电流、温度的限制),自动提升部分核心的运行频率,也就暂时提升了这些核心的性能。

因为有不超过TDP这个限制条件,所以自然就是需要提升频率的核心越多,频率提升的幅度就越少了。比如可以看下这个i7 6700的介绍,搜索”turbo frequency”,那么就会看到:

turbo frequency (1 core)	4,000 MHz (4 GHz, 4,000,000 kHz) +
turbo frequency (2 cores)	3,900 MHz (3.9 GHz, 3,900,000 kHz) +
turbo frequency (3 cores)	3,800 MHz (3.8 GHz, 3,800,000 kHz) +
turbo frequency (4 cores)	3,700 MHz (3.7 GHz, 3,700,000 kHz) +

这个turbo frequency是随着睿频的核心数目的增加而递减的。

确认是否支持Turbo Boost技术

  • Turbo Boost技术是处理器的技术。去Intel官网查询处理器关于Turbo Boost技术相关的指标,如果有相关指标、说明,那么cpu就是支持的。
  • 注意确认下BIOS里有没有Turbo Boost相关的设置

确认是否已经启用Turbo Boost

执行以下命令检查是否已经启用Turbo Boost:

cat /sys/devices/system/cpu/intel_pstate/no_turbo

如果上述命令输出是0,那么就启用了turbo boost,否则没有。

执行以下命令检查:

cpupower frequency-info

查看输出中的hardware limits的最高频率是否和处理器指标中的max turbo frequency相吻合。当然想要让处理器真的能够达到这个max turbo frequency,cpu speed governor也要选允许cpu运行到最高频率的类型。

如何开启、关闭Turbo Boost

一个关于启用、验证turbo boost的讨论。

在已经是使用intel_state驱动的情况下,可以在root帐号里通过

echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo

来启用或关闭(改成echo 1就好)turbo boost。

如果是使用acpi_cpufreq驱动,貌似需要通过读写下面这个值来启用、关闭turbo boost:

cat /sys/devices/system/cpu/cpufreq/boost

貌似想要获得turbo boost支持,最好使用intel_pstate这个驱动,acpi_cpufreq可能出现各种问题(个人感觉,没有找到明确的证据支持,只是遇到过用acpi_cpufreq驱动而没有成功启用turbo boost的情况)。

我一般使用/proc/cpuinfo里的频率信息来看当前cpu工作在哪个频率,不过据说用这个来验证是否启用turbo boost可能会出错(即/proc/cpuinfo里显示的频率不是cpu核心turbo boost后的实际运行频率),最好的办法是写个简单的耗cpu的小程序,看开启、关闭turbo boost后,程序耗时是否相同。

Intel Bay Trail CPU problem

对于部分处理器,ubuntu 14.04,16.04,16.10系统不支持比C1更深的idle状态,于是在这部分处理器上,当处理器尝试进入比C1更深的idle状态时,就会导致系统卡死。而一种直接的解决方案就是linux kernel arguments里添加上processor.max_cstate=1 intel_idle.max_cstate=1这样的设置,让处理器最多只能进入C1的空闲状态。而睿频的效果是和active cores(即处于C0,C1状态的core)的数量相关的,active cores越少,获得睿频加速的核提升的运行频率越大。如果你的操作系统在linux kernel arguments里添加上了processor.max_cstate=1 intel_idle.max_cstate=1这样的设置,那么就是说所有的核都是active的,在这种情况下,每个核只能获得最小程度的睿频加速。

Available monitor Nehalem needs root access
Available monitor Mperf needs root access
sleep took 10.00307 seconds and exited with status 0
    |Idle_Stats                                      
CPU | POLL | C1   | C1E  | C3   | C6   | C7s  | C8   
   0|  0.07|  2.27|  6.60|  0.17|  3.01|  0.00| 83.13
   4|  0.00|  3.53|  3.85|  0.40|  3.57|  0.00| 84.73
   1|  0.00|  1.41| 19.29|  0.27|  2.77|  0.00| 71.74
   5|  0.00|  1.53|  7.27|  0.26|  5.83|  0.00| 80.77
   2|  0.00|  0.68|  2.66|  0.31|  3.67|  0.00| 88.66
   6|  0.00|  2.57| 13.09|  0.40|  4.62|  0.00| 73.66
   3|  0.00|  1.72|  6.22|  0.78|  6.08|  0.01| 80.50
   7|  0.00|  4.03|  5.18|  0.67|  5.89|  0.95| 77.93