服务器 频道

为什么会更节能 Win7/2008 R2改进解析

  【IT168评测中心】在上一篇文章到底改进了什么?Win7/2008 R2核心剖析当中,我们看到了Windows NT 6.1内核的多种改进,必须得讲,Windows NT 6.1的内核改进大部分是基于性能方面的,还有另一个大方面的改进是基于提升能源效率。其它如可靠性等的改进并不是主要目的。


Windows 7,2009年10月22日


Windows Server 2008 R2,2009年10月22日,和Windows 7基于相同的内核

  在性能方面,NT 6.1内核去掉了线程调度器以及内存管理器上的大锁(Lock),从而提升了并性运行效率并可以支持更多的逻辑处理器数量——最多到256个,还有如DPC、线程模型的一些改进,这些改进能发挥到什么程度再过段时间将会有相应的评测报告,接下来我们要看的是能源效率方面的改进,也就是说,这些改进可以降低同样配置下的系统的整体能耗。

到底改进了什么?Win7/2008 R2核心剖析

二十六年历程 20个版本Windows完全解析

企业专用操作系统 Windows 7企业版测试

比Vista更完善 Windows 7图形架构解析

性能提升10% Vista/7系统性能对比测试

  对于软件来说,如何能节约能耗呢?最终就是在满足任务需求的情况下,尽可能地让设备处于节能状态,大部分的硬件设备都有低功耗的闲置状态。操作系统需要的就是尽量将处于低功耗状态。

  以处理器为例,处理器、电源、存储系统是主要的能耗来源。要尽量将处理器处于闲置状态,最主要的方法是三个:
最小化运行的服务和任务
避免后台进程动作
让处理器保持闲置从而可以进入深层睡眠

  如下图所示:
 

对于移动设备来说,降低处理器功耗效果明显
  整个Windows 7/Windows Server 2008 R2内核的改进都是基于上述的目标而定制的,为了实现这个目标,内核作了两个改进:Core Parking以及Timer Coalescing,下面先介绍Core Parking技术,它被翻译为内核停车:

  Core Parking是基于这样的理由:尽可能将负载集中在某些处理器上,而另一些处理器尽可能地处于闲置状态,这些闲置的处理器将会更多地处于节能状态。在之前的设计中,系统的负载被分配在不同的处理器上,尽管这些处理器的负载都不高,但是它们都维持在活动状态,只能达到较浅的C States。

  Core Parking内核停车机制每50毫秒由定时器触发,开始计算负载、启动电源管理和进行内核停车。内核停车机制根据任务负载提升/降低的幅度来决定一个逻辑处理器将要停车还是开车(……),对于将要停车的逻辑处理器,线程调度器将尽量不将任务分配到上面。如下图所示:
 

传统的负载情况,所有处理器都具有负载,无法进入更深的节能状态

经过Core Parking之后,负载集中在一个集成多个CPU内核的处理器插槽上,另一个插槽因为没有负载而进入深度睡眠状态,从而达到节能

  为了实现按照插槽来进行内核停车,系统必须了解CPU的拓扑结构,而NUMA架构也被内核认知(每一个NUMA结点都有一个处理器保持在非停车状态)。实际上,Core Parking表现了系统内核更好地适应、利用现代硬件的能力。
 
  看过了理论,现在来看看它如何表现出来,通过的就是系统自带的资源监视器,可以通过任务管理器中的性能标签给出的快捷方式进入:


资源管理器给出了系统的多种重要资源的使用情况,其中一个重要的标签页就是:CPU

最右侧的CPU利用率图像当中就指出了哪些处理器处于内核停车状态,在图上,Parking被翻译成“归位”而不是“停车”,老实说……笔者觉得都不好听,但是也没有更好的想法

 

笔者的Core i7机器具有超线程技术,因此内核停车机制按照超线程每两个逻辑处理器共用一个CPU内核的原则,每个CPU内核停车其中一个逻辑处理器;CPU内核只有一个逻辑处理器活动可以提升负载的性能表现
 
  内核停车技术对中等负载的服务器最有效果,因为服务器的处理器最高能耗通常较高,并且通常具有多个物理CPU,通过内核停车机制,将可能让多个CPU处于深度睡眠状态。在桌面机上,由于通常只具有一个CPU,因此内核停车效果就没那么好了。实际上,Core Parking内核停车机制只在服务器版本,或者在支持超线程技术的机器上激活,使用Windows 7的非超线程机器享受不到内核停车的好处。  Core Parking内核停车技术虽然是一个处于内核的、重要的改动,不过不少的桌面平台无法享用。

  来说对于所有版本都工作的一个机制是UBPM,统一后台进程管理器,它实现了一个基于事件的服务管理机制,它增加了一个新的Taskhost的任务调度进程,以及一个新的“触发式任务”机制。UBPM有点像Unix的超级守护进程。

  触发式服务机制避免了以往的机制中不管需不需要,服务都在后台始终活动的情况。如,Bthserv蓝光设备服务只会在插入蓝光设备的时候触发,lmhost IP地址维护服务只在系统获得IP的时候触发,而W32Time时钟同步服务只在需要同步的时候触发,这个机制降低了系统同时存在的进程/线程数目,降低了无必要的处理器调度以及让Core Parking更好的工作。还有一个副反应就是系统占用的内存更小了

笔者的服务列表,每一个svchost.exe进程中实现了多个系统服务,这些服务都是按需启动的,例如:

其中一个svchost.exe进程负责了Windows Audio,同时还复则了DHCP客户端,默认情况下,当一段时间没有声音输出的的时候,这个进程下面是没有实际的服务进程的

当开始播放音乐的时候,audiodg.exe进程(Windows音频设备图形隔离进程,不过这个名字对一般人来说没什么有用的含义)出现了,它负责将第三方音频DSP以及处理DRM;顺便说下它加载的“第三方”指的是由声卡驱动厂商,这部分代码编制不好的话会造成很多问题。相信很多人都遇到过audiodg.exe进程cpu占用率奇高、内存占用奇大的情况,这就是编写不好的音频驱动导致的;触发式服务机制多少能缓解audiodg.exe进程内存泄露从而导致内存占用过大的情况
  还有一个处于核心的关于节能方面的改进是Timer Coalescing,Timer可以是时钟或定时器,Coalescing则是聚合的意思,Timer Coalescing就是时钟聚合。它基于这样的考虑:将激活处理器的时钟中断都集中起来,让处理器集中忙一段时间,然后其它的时间可以用来睡觉。在没有时钟聚合的时候,处理器不停地处理各种时钟,没有时间休息。


时钟中断可以在任意时候发生,因此可以随机中断当前的睡眠,时钟聚合功能可以让一些时钟发生的时间略微偏移、集中起来,当然,需要使用新的API,通过新API,程序或驱动可以指定可忍受的时钟延迟时间;一些程序或许不喜欢忍受那么一丁点延迟

关于时钟中断,还有一个改进就是刷新系统时间的主时钟不再打断所有的逻辑处理器,而只是打断不处于限制状态的逻辑处理器;主时钟中断用来刷新进程/线程的运行时间,以及用来计算它们使用的时间片

本页最开始的那张图的图示是错误的,这张图才正确表示了时钟聚合的工作方式:在指向未来的时间坐标轴上,上方是非聚合的时钟时间,下方则是时钟事件,可见,聚合的时钟保持了较长的间隔,在间隔内,处理器可以得到较多的休息

最终时钟聚合可以降低处理器占用率,对性能的影响倒是不大,主要是在节能方面:

非聚合时钟的休息时间片基本上都是1毫秒之内,而时钟聚合后,可以获得较多的4-8毫秒时间,从而可以让处理器进入更深层次的节能睡眠状态
  【IT168评测中心】看完解析,接下来我们直接看测试的结果:

数据来源:Win7全面胜利 Thinkpad T400s完全测试,测试对象是Lenovo T400S笔记本,处理器是Core 2 Duo SP9600,因此Core Parking对它没有效果
 

Windows 7系统的工作功耗低了近25%,也就是四分之一;闲置功耗倒是相差不大……Core Parking要发挥作用,须要Server 2008 R2或者,使用带超线程的Core i7/Mobile Core i7
 
DVD回放时间上Win7长了13%,而内容创作上续航长了21.6%,没有对应到上面功耗降低的幅度,因为机器不是只处于系统满载一个状态
 
  很清楚,Windows 7/Windows Server 2008 R2的主要两个内核的节能机制:Core Parking内核停车以及Timer Coalesing时钟聚合,以及系统级别的节能机制:触发式服务机制,这些都确实可以降低计算机的能耗,此外一些副反应是系统占用的内存更小、在多核/NUMA系统上性能更好。Windows 7/Windows Server 2008 R2确实是很不错的系统。

到底改进了什么?Win7/2008 R2核心剖析

二十六年历程 20个版本Windows完全解析

企业专用操作系统 Windows 7企业版测试

比Vista更完善 Windows 7图形架构解析

性能提升10% Vista/7系统性能对比测试

0
相关文章