免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1807 | 回复: 0
打印 上一主题 下一主题

Solaris系统在哪些X86平台上支持变频技术 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-30 16:48 |只看该作者 |倒序浏览

                                这里说到的X86平台上的变频技术是指Enhanced Intel SpeedStep Technology(EIST),在现在的很多笔记本的BIOS里面可以找到SpeedStep或者EIST的选项,这就是SpeedStep。SpeedStep是Intel在CPU上加入的一种节能技术,通过降低CPU的频率来达到降低CPU的功耗的。这种技术在ACPI的规范里面被定义为P-state, 即Processor Performance State, 当系统在运行中,操作系统的电源管理模块(OSPM)应当根据系统的负载来调节CPU的频率,也就是说,当系统很忙的时候,OSPM应该让CPU工作在最高的频率上来达到最好的性能;而当系统空闲的时候,OSPM应该让CPU工作在最低的频率上来节省更多的能源。
到底SpeedStep能节省多少能源呢,下面是我的一台笔记本上的数据:
Frequency
Power
2400MHz
35W
1600Mhz
15W
800Mhz
12W
这里,2400Mhz是CPU的marked frequency,也就是默认的频率;而800Mhz是支持了SpeedStep后,CPU可以达到的最低频率,可以看出,SpeedStep技术让CPU在空闲的时候节省(35-12)=23W的电能。当然,不同的平台这些数据完全不同。
Intel的CPU早在PentiumⅢ的时候就加入了对SpeedStep技术的支持。但是,硬件的支持,不代表我们的系统就可以享受这一节能特性,这显然和操作系统是否支持有关。
这里只说OpenSolaris(本人对Solaris 10不感兴趣),大概在2007年7月份的时候,OpenSolaris在Build70里面加入了对SpeedStep技术的支持,也就是从那以后的版本都有SpeedStep技术的支持。但是这一支持是有平台的局限性的,确切的说,是对支持的CPU有局限性。需要解释一下,也就是我常被问到的问题,为什么windows和Linux上支持SpeedStep,但是Solaris上不支持呢?为什么CPU支持SpeedStep但是Solaris操作系统不支持呢?
让我们来看看频率的变化给Solaris的内核带来了怎样的影响。
首先,看过Solaris内核源码的应该知道,Solaris喜欢给事件打上时间戳,即调用gethrtime()函数来记住当前状态的时间,或者drv_usecwait的实现来等待一段时间,这个函数也依赖于gethrtime()。
在X86上,gethrtime就是读CPU里面的一个counter,然后转换为纳秒为单位来提供给用户。问题就出在了这个counter身上。这个计数器在Intel的CPU上称为Time-Stamp Counter(TSC),是一个64位的计数器,每一个处理器内部的时钟cycle,这个计数器就会加一。如果是1Ghz的处理器,这个counter每加1次就代表1纳秒过去了,那么如果是2Ghz的处理器,这个counter需要加2才是1纳秒。而counter加多少算1纳秒的校准机制是在系统启动的时候决定的。在运行的过程中每次校准非常昂贵而且也不符合实际。
可以看出,SpeedStep肯定是会改变频率的,那么处理器内部频率的变化会不会影响TSC呢?如果影响了,那么gethrtime()提供的纳秒级的时间戳就变得不准确,从而有可能给Solaris内核带来灾难性的后果;如果不影响,那么Solaris对SpeedStep的支持就毫无问题。
答案是部分CPU上的SpeedStep会影响TSC:
  • Varietal TSC, TSC基于当前的处理器时钟,也就是如果处理器因为SpeedStep变慢了,那么TSC的数值代表的时间也随之加长了。Pentium M处理器 (family [06H], models [09H, 0DH]); Pentium 4以及志强处理器中(family [0FH], models [00H, 01H, or 02H]);和P6家族的处理器,TSC增加的频率都是会随着处理器的时钟变化而变化的
  • Invarient TSC, TSC基于Marked frequency, 也就是默认的处理器时钟。在Pentium 4和志强处理器(family [0FH], models [03H and higher]); Core Solo and Core Duo处理器 (family [06H], model[0EH]); 志强处理器5100系列和Core 2 Duo处理器(family [06H], model [0FH]),TSC都不会随着SpeedStep的频率变化而变化。
所以,我们Solaris上SpeedStep的驱动里面也有这样的判断:
        /*
         * We only support family/model combinations which
         * are P-state TSC invariant.
         */
        if (!((family == 0xf && model >= 0x3) ||
            (family == 0x6 && model >= 0xe))) {
                return (B_FALSE);
        }
也就是说,只有CPU的family和model型号不符合上面这个判断,Solaris才支持SpeedStep技术。
下面是几个FAQ:
1) Q:怎样确定Solaris是否支持SpeedStep技术?
   A:答案如下
[aubrey-lab@~]kstat | grep supported_frequencies_Hz
        supported_frequencies_Hz        2000000000:2333000000:2667000000
        supported_frequencies_Hz        2000000000:2333000000:2667000000
        supported_frequencies_Hz        2000000000:2333000000:2667000000
        supported_frequencies_Hz        2000000000:2333000000:26670000002) Q:我的系统支持了SpeedStep,如何知道CPU当前是运行在那个频率上呢?
   A:答案如下
[aubrey-lab@~]kstat | grep current_clock_Hz
        current_clock_Hz                2667000000
        current_clock_Hz                2667000000
        current_clock_Hz                2667000000
        current_clock_Hz                2667000000
3) Q:我的系统支持了SpeedStep,但是为什么即使是在空闲的时候,当前的处理器频率还是工作在最高的频率上呢:
   A:这是因为CPU的电源管理模块在系统默认的配置下没有打开,在fix了很多bug以后,这一配置终于在Build94里面默认被打开,如果运行的是B94以前的版本,需要做如下配置
  • 在系统文件"/etc/power.conf"里面加入或者修改如下内容

cpupm            enable
cpu-threshold    15s
  • 修改完后,在超级用户下运行,"/usr/sbin/pmconfig",这个命令通知内核读取
"/etc/power.conf"里面的配置来更新操作系统的电源管理模块。4) Q: 我的系统不支持SpeedStep, kstat的supported_frequencies_Hz只有一个频率,为什么?
   A: 首先检查CPU型号
[aubrey-lab@~]kstat | grep family | grep model
        implementation                  x86 (chipid 0x0 GenuineIntel 6F4 family 6 model 15 step 4 clock 2667 MHz)
        implementation                  x86 (chipid 0x3 GenuineIntel 6F4 family 6 model 15 step 4 clock 2667 MHz)
        implementation                  x86 (chipid 0x0 GenuineIntel 6F4 family 6 model 15 step 4 clock 2667 MHz)
        implementation                  x86 (chipid 0x3 GenuineIntel 6F4 family 6 model 15 step 4 clock 2667 MHz)      如果型号不支持,那就没辙;
      如果型号支持,那么就去看看BIOS里面的SpeedStep或者EIST选项是否没有打开。
      如果BIOS里面没有这些选项,那可能需要升级BIOS,注意,有风险,郑行!!
      如果BIOS里面有这些选项,而且是enable的,那么就给我们报bug吧, 我们的网址是:
http://www.opensolaris.org/os/project/tesla/
最后需要说明的是,Intel以后的CPU都支持Invarient TSC,所以Solaris对今后的Intel平台的SpeedStep支持都没有问题;Solaris要想支持以前的平台,需要decouple内核以及驱动里面对TSC的依赖,这是个不小的工程,我们目前没有计划做这件事情。
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/41699/showart_1160160.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP