Enhanced Intel SpeedStep® Technology on Linux

      访问: 3,342 次      评论    

1、Enhanced Intel SpeedStep® Technology

Enhanced Intel SpeedStep® Technology(EIST,增强型 Intel SpeedStep® 动态节能技术),是Intel公司专门为移动平台和服务器平台处理器开发的一种动态节能技术,在实现高性能的同时又能满足移动式系统的节能需求。到后来,新推出的桌面处理器也内置了该项技术,Intel CPU产品中频率在2.8G以上的Pentium 4 6xx系列、Pentium D以及CORE全系列处理器都已支持EIST技术。它能够根据不同的系统工作量自动调节处理器的电压和频率,以减少耗电量和发热量。

传统的英特尔 SpeedStep 动态节能技术,在处理器负载发生变化时,需要“捆绑式地”调高或调低CPU的电压与频率(即要想调节频率,必先调节电压)。增强型的 Intel SpeedStep 动态节能技术在该传统架构上构建,采用了如下更新的设计策略,包括:

  • 电压和频率变化的分离。通过向上和向下以小幅增量独立调节电压,处理器能够减少系统不可用的时间(在频率变化时CPU所处理的指令是需要暂停的)。因此,系统就可以更频繁在不同的电压和频率状态之间转换,提供更好的功率/性能平衡。

  • 时钟分区和恢复(Clock partitioning and recovery)。总线时钟在状态转换期间持续运转(甚至当核心时钟和锁相环路(phase-locked loop)均停止时),从而允许逻辑电路保持活动状态。在增强型 Intel SpeedStep 动态节能技术下内核时钟还能比传统架构下更快地重新启动。

增强型 Intel SpeedStep 动态节能技术降低了与更改电压/频率对 (称为p-state) 相关的等待时间,因此状态转换可以更频繁的进行,从而实现更细粒度的依需求切换和按需的功率/性能平衡优化。

BIOS中对应的设置为:

2、Kernel Cpufreq Infrastructure

CPUfreq,也即CPU speed scaling,是 Linux 内核用来支持在移动处理器上显式调节CPU主频的子系统。Linux内核做了大量工作用来加强其模块化架构,下图显示下2.6.8内核下的cpufreq框架:


图:Cpufreq 基础框架概览

该基础框架的重要组件如下所示:

  • Cpufreq 模块:Cpufreq 模块为底层CPU频率控制技术和高层 CPU 频率控制策略提供了一个通用界面/接口。cpufreq 解耦了 CPU 频率控制机制和策略,有助于它们独立进行开发。它还给用户提供一些标准接口,用来选择调度策略,并为该策略设定参数。

  • CPU 驱动程序:各种底层的CPU 驱动程序用来实现和支持不同的 CPU 调频技术,如英特尔 SpeedStep 技术、 增强型英特尔 SpeedStep 技术、 和奔腾® 4 处理器时钟调节技术。在一个给定平台上,为了支持一个或多个CPU调频技术,需要加载适当的驱动程序。Cpufreq 基础框架支持用户在每个平台上使用一种CPU 驱动程序。其中acpi和speedstep-centrino驱动程序支持EIST技术的处理器。

  • In-kernel 调节器:即governors,Cpufreq 基础框架支持不同的CPU频率调节策略,可以基于不同的条件(如 CPU 使用率)来对 CPU进行调频。Cpufreq 基础框架可以显示系统上所有可用的的多种调节策略,用户可以选择其中一种策略来控制 CPU 频率。

有5种不同的调频策略,即CPUfreq governors 调节器:

  • cpufreq_performance:让CPU始终运行在指定范围的最高频率下(如Intel(R) Xeon(R) CPU   E5620  @ 2.40GHz,即可运行在TDP基本频率2.40GHz下)

  • cpufreq_powersave:让CPU始终运行在指定范围内的最低频率下(但并不是一定比运行在高频率下节能,因为低频意味着低效)

  • cpufreq_ondemand:默认值,在最大频率和最小频率 两个值之中切换,简单粗暴(频率切换的代价是时延)

  • cpufreq_conservative:类似ondemand,但更平滑,在最大和最小之间的多个值 之中切换,依据负载选择合适的频率

  • cpufreq_userspace:该调节器(通过/sys文件系统)向用户级导出可用的调频信息,并允许用户空间控制 CPU 频率。用户空间的程序(或以root运行的进程)可以自定义CPU频率(通过向 /sys/devices/system/cpu/cpuX/cpufreq/scaling_setspeed 中读取和写入频率值来实现,广为应用的用户级进程为powersaved和cpuspeed)。 

3、Cpufreq Kernel Interface

Cpufreq 在 /sys 文件系统内提供了大量的标准接口,用户可使用其对 CPU 频率和策略调节器等进行特征更改。

路径为/sys/devices/system/cpu/cpuX/cpufreq/ ,如:

# ls -l /sys/devices/system/cpu/cpu0/cpufreq/
total 0
-r--r--r-- 1 root root 4096 Mar 19 10:38 affected_cpus
-r-------- 1 root root 4096 Mar 19 10:38 cpuinfo_cur_freq
-r--r--r-- 1 root root 4096 Mar 19 10:38 cpuinfo_max_freq
-r--r--r-- 1 root root 4096 Mar 19 10:38 cpuinfo_min_freq
-r--r--r-- 1 root root 4096 Mar 19 10:38 cpuinfo_transition_latency
drwxr-xr-x 2 root root    0 Mar 19 10:38 ondemand
-r--r--r-- 1 root root 4096 Mar 19 10:38 related_cpus
-r--r--r-- 1 root root 4096 Mar 19 10:38 scaling_available_frequencies
-r--r--r-- 1 root root 4096 Mar 19 10:38 scaling_available_governors
-r--r--r-- 1 root root 4096 Mar 19 10:38 scaling_cur_freq
-r--r--r-- 1 root root 4096 Mar 19 10:38 scaling_driver
-rw-r--r-- 1 root root 4096 Mar  6 20:07 scaling_governor
-rw-r--r-- 1 root root 4096 Mar 19 10:38 scaling_max_freq
-rw-r--r-- 1 root root 4096 Mar 19 10:38 scaling_min_freq
-rw-r--r-- 1 root root 4096 Mar  6 20:07 scaling_setspeed

这些文件都可读(cat {filename}),部分文件可写(echo {value} > {filename})入特定的值实现动态修改。

4、Linux系统实践操作

测试环境:CentOS release 6.2 with Intel(R) Xeon(R) CPU E5620 @2.40GHz

1)查看cpuspeed服务是否启动

# service cpuspeed status
Frequency scaling enabled using ondemand governor

(依赖BIOS中的Intel SpeedStep tech,否则cpuspeed服务无法启动)

2)查看系统加载的相关模块

# lsmod
Module                  Size  Used by
cpufreq_ondemand       10544  16 
acpi_cpufreq            7763  1 
freq_table              4936  2 cpufreq_ondemand,acpi_cpufreq
mperf                   1557  1 acpi_cpufreq

3)如果模块没有加载,检查系统中是否存在可用驱动

# ls -l /lib/modules/`uname -r`/kernel/arch/x86/kernel/cpu/cpufreq/
total 128
-rwxr--r--. 1 root root 23304 Mar 13  2013 acpi-cpufreq.ko
-rwxr--r--. 1 root root  5824 Mar 13  2013 mperf.ko
-rwxr--r--. 1 root root 12296 Mar 13  2013 p4-clockmod.ko
-rwxr--r--. 1 root root 18552 Mar 13  2013 pcc-cpufreq.ko
-rwxr--r--. 1 root root 41584 Mar 13  2013 powernow-k8.ko
-rwxr--r--. 1 root root 13120 Mar 13  2013 speedstep-lib.ko

4)安装和使用cpufreq-utils工具

安装:

# yum install cpupowerutils  (或cpufreq-utils)

查看当前调频策略与调频频率:

# cpupower frequency-info --policy
analyzing CPU 0:
1600000 2401000 ondemand

查看当前CPU运行情况信息:

# cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0 2 3 4 5 6 7 8
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.60 GHz - 2.40 GHz
  available frequency steps: 2.40 GHz, 2.40 GHz, 2.27 GHz, 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz
  available cpufreq governors: ondemand, userspace, performance
  current policy: frequency should be within 1.60 GHz and 2.40 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.60 GHz (asserted by call to hardware).
  boost state support:
    Supported: yes
    Active: yes
    1900 MHz max turbo 4 active cores
    1900 MHz max turbo 3 active cores
    2000 MHz max turbo 2 active cores
    2000 MHz max turbo 1 active cores

或查看所有CPU核心的当前频率:

# cpupower -c "$(seq -s',' 0 7)" frequency-info |grep "current CPU frequency"
  current CPU frequency is 1.60 GHz (asserted by call to hardware).
  current CPU frequency is 1.60 GHz (asserted by call to hardware).
  current CPU frequency is 2.00 GHz (asserted by call to hardware).
  current CPU frequency is 1.87 GHz (asserted by call to hardware).
  current CPU frequency is 1.60 GHz (asserted by call to hardware).
  current CPU frequency is 2.40 GHz (asserted by call to hardware).
  current CPU frequency is 1.60 GHz (asserted by call to hardware).
  current CPU frequency is 1.60 GHz (asserted by call to hardware).

改变调度策略(比如改成最大性能performance):

# cpupower frequency-set --governor performance
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7

其他命令参数读者可自行查阅帮助信息。


参考链接:

Enhanced Intel SpeedStep® Technology and Demand-Based Switching on Linux*

Redhat Documentation: Core Infrastructure and Mechanics


添加新评论