Intel X86的turboboost 动态变频
turboboost是Intel在iCore平台引入的动态变频技术。
在这之前,或者说大约20+年前,在Intel奔腾处理器的时代,在那个CPU性能主要决定于主频的时代,各大院校的高年级学生非常热衷于购买Intel的赛扬处理器,因为它具有超强的超频能力,比如200MHz的CPU,通过主板跳线就可以超频到300MHz,甚至更高。在大家Hi的不亦乐乎的时候,也面临着CPU玩完的风险,因为超频太高,温度高,导致CPU的永久损坏。
到了iCore之后,Intel把变频技术design-inCPU,这样就不用在打开机箱,拨弄跳线了。这个变频技术就是turboboost。它不仅仅是超频,也包括了降频,为啥要降频?这就好像家里的空调,晚上睡觉了就希望空调吹的小一些,温柔一些,既省电,还能安静睡眠。所以,降频也是为了节约系统的功耗,在系统负载小的时候就把CPU的总频率降下来,节约用电,save the earth。
简单来说,Intel的turboboos就是根据目前CPU的功耗/温度特性,动态调整CPU核心频率的技术。
比如一个4核心的CPU,标称频率2.4GHz,当其中core1被一个任务占用而忙,其余三个core的负载很轻的情况下,CPU会把core1的频率提到到2.8GHz,甚至更高,只要总的温度/功耗特性仍然在CPU的设计范围之内就可以。如果很不幸,所有的4个core都很忙,CPU使用率都很高,那么这个时候大家都还是按照CPU出厂的标称频率2.4GHz进行工作。
具体的turboboost的描述,请参考Intel的文档。
还是用测试来形象地展示一下它的工作。
测试系统是在Intel Xeon E7-EX上测试的,系统一共72个核心,18*4,没有超线程,标称频率2.4GHz。
首先看缺省的情况,
Socket [0] - [physical cores=18, logical cores=18, max onlinecores ever=18]
CPU Multiplier 24x ||Bus clock frequency (BCLK) 100.00 MHz
TURBO ENABLED on 18Cores, Hyper Threading OFF
Max Frequency withoutconsidering Turbo 2500.00 MHz (100.00 x [25])
Max TURBO Multiplier (ifEnabled) with 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15 cores is 33x/33x/31x/30x/29x/28x/28x/28x/28x/28x/28x
Real Current Frequency2798.83 MHz (Max of below)
Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp
Core 1 [0]: 2798.83 (27.99x) 100 0 0 0 34
Core 2 [1]: 2798.80 (27.99x) 25 70.8 0 0 34
Core 3 [2]: 2798.80 (27.99x) 24.2 71.7 0 0 34
Core 4 [3]: 2798.83 (27.99x) 99.5 0 0 0 33
Core 5 [4]: 2798.83 (27.99x) 65.5 23.6 0 0 32
需要关注的是第5行,它显示了,如果一个或者两个core工作的情况下,它可以有3.3GHz(33x100MHz),如果有4个core工作的情况下,最高可以到3.0GHz(30x100MHz),以此类推。
而现在的工作频率是2.8GHz。
现在看关掉turboboost之后的情况(通过BIOS或者其他手段关闭)。
Socket [0] - [physical cores=18, logical cores=18, max onlinecores ever=18]
CPU Multiplier 24x ||Bus clock frequency (BCLK) 99.96 MHz
TURBO ENABLED on 18Cores, Hyper Threading OFF
Max Frequency withoutconsidering Turbo 2498.96 MHz (99.96 x [25])
Max TURBO Multiplier (ifEnabled) with 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15 cores is33x/33x/31x/30x/29x/28x/28x/28x/28x/28x/28x/28x/28x/28x/28x
Real Current Frequency2399.03 MHz (Max of below)
Core [core-id] :ActualFreq (Mult.) C0% Halt(C1)% C3 % C6 % Temp
Core 1 [0]: 2399.01(24.00x) 28.2 71.8 0 0 29
Core 2 [1]: 2399.01(24.00x) 27.6 72.4 0 0 28
Core 3 [2]: 2399.01(24.00x) 28.6 71.4 0 0 30
Core 4 [3]: 2399.00(24.00x) 42.9 57.1 0 0 30
Core 5 [4]: 2399.02(24.00x) 25.1 74.9 0 0 29
Core 6 [5]: 2399.01(24.00x) 43.1 56.9 0 0 29
可以看到,目前所有的core都工作在标称频率2.4GHz的情况下。
再来看一下,如果只使能了4个CPU core,在打开turboboost的情况下会怎么样。
Socket [0] - [physical cores=4, logical cores=4, max onlinecores ever=4]
CPU Multiplier 24x ||Bus clock frequency (BCLK) 99.96 MHz
TURBO ENABLED on 4Cores, Hyper Threading OFF
Max Frequency withoutconsidering Turbo 2498.96 MHz (99.96 x [25])
Max TURBO Multiplier (ifEnabled) with 1/2/3/4 cores is 33x/33x/31x/30x
Real Current Frequency3000.00 MHz (Max of below)
Core[core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp
Core 1 [0]: 3000.00 (30.01x) 100 0 0 0 32
Core 2 [1]: 3000.00 (30.01x) 100 0 0 0 27
Core 3 [2]: 3000.00 (30.01x) 99.4 0 0 0 31
Core 4 [3]: 2999.98 (30.01x) 42.5 46.9 0 0 29
这个时候,仅仅列出了4个CPU core,而且每个都工作在3.0GHz,和第5行描述的一样。
“Intel,诚不我欺也”。
Linux系统中引入了cpufreq机制来支持turboboost以及用户的配置。还有工具turbostat用来查看当前系统的CPU变频情况。
总的来说Linux里面会结合当前系统对于功耗,性能的要求(profile)以及CPU自身的特性为用户提供符合其业务特性的支持。
下一次讲讲Intel X86的SMP吧。