如何用Windows中虚拟主机服务器的内核暂停?
2010-8-12
【TechTarget中国原创】由于虚拟化技术可以通过整合服务器更好地利用底层硬件资源而深受很多公司的青睐。只要给虚拟机分配足够的硬件资源,这些虚拟机可以承载和硬件平台一样的工作。但是也有一些IT管理员不明白在主机服务器升级到Windows Server 2008 R2之后虚拟服务器性能下降的原因,这可能是因为内核暂停(Core Parking)导致的,所谓的内核暂停即Windows Server 2008 R2和Windows 7中的一个节能属性。
操作系统通过使用内核暂停功能关闭未充分利用的CPU内核来有效地辅助降低多核CPU的能量消耗,原来使用暂停内核的工作负载转向使用仍然保留的内核。用户可以通过使用资源监控(Resource Monitor)查看暂停的CPU内核和处于活动状态的CPU内核,如图1所示……
【TechTarget中国原创】由于虚拟化技术可以通过整合服务器更好地利用底层硬件资源而深受很多公司的青睐。只要给虚拟机分配足够的硬件资源,这些虚拟机可以承载和硬件平台一样的工作。但是也有一些IT管理员不明白在主机服务器升级到Windows Server 2008 R2之后虚拟服务器性能下降的原因,这可能是因为内核暂停(Core Parking)导致的,所谓的内核暂停即Windows Server 2008 R2和Windows 7中的一个节能属性。
操作系统通过使用内核暂停功能关闭未充分利用的CPU内核来有效地辅助降低多核CPU的能量消耗,原来使用暂停内核的工作负载转向使用仍然保留的内核。用户可以通过使用资源监控(Resource Monitor)查看暂停的CPU内核和处于活动状态的CPU内核,如图1所示:
图1:通过资源监控器查看暂停的CPU内核

点击放大
虽然Microsoft没有提供内核暂停功能的GUI,但是可以通过命令行或者注册表控制该功能。
剖析Windows电力管理功能:系统崩溃教程
Windows具有多个内置的电力模式,每个模式都有一个全局的唯一标识符(GUID:Global Unique Identifier)。通过如下命令可以查看该模式及其GUID:
Powercfg --list
如图2所示,活动状态的模式以星号标识。
图2:Windows拥有多个电力模式

点击放大
如果以前曾经使用过Windows电力管理功能,就会知道不能够使用电力规划的默认设置。每一电力管理设置都有其固有的GUID,可以使用如下命令查看各种设置及其GUID:
Powercfg /q
图3所示的是Windows的配置设置,最小处理器状态和最大处理器状态,但是这里看到的是设置上的技巧——处理器状态设置为百分比。
图3:处理器状态设置为百分比

点击放大
例如,假定对能源消耗比较重视,并且计划防止服务器使用CPU内核的一半以上,就可以使用如下命令完成该需求:
Powercfg --setacvalueindex scheme_current sub_processor bc5038f7-23e0-4960-96da-33abaf5935ec 50
在该命令中,第一个参数是setacvalueindex。这个参数可以告诉Windows这个设置应该只在服务器以AC电力模式(即在不使用电池的情况)的情况下使用。从上图中可以看到Windows为AC电力模式和DC电力模式提供各自不同的设置。
第二个参数是scheme_current:该参数的作用是告诉Windows所作出的更改只能应用在系统的当前电力状态,这个参数也能够用特定的电力模式代替。
接下来的一个参数的名称是sub_processor bc5038f7-23e0-4960-96da-33abaf5935ec 50。如果回头查看图2,就会看到bc5038f7-23e0-4960-96da-33abaf5935ec是最大处理器状态的GUID。该参数以50结尾,该数字表示预期的可用CPU内核最大使用率为50%。
需要注意的是最大处理器状态下所显示的电力设置范围是从0到64。最小的可能设置是0,即可以告诉Windows使用0%的CPU内核(但是千万不用这样做!);最大的可能设置是64,64表示可以100%的CPU内核。
查看下图4可以更好的了解该模式的工作原理。我们告诉Windows最多使用可用内核的50%。注意图4中最大处理状态的当前AC电力索引(Current AC Power Index)设置为32,32是64的50%,即可用内核最多可以使用50%。
图4:Windows将会只占用一半的CPU内核

点击放大
现在就知道如何减少所使用的内核数量,但是如果希望增加该数字或者禁用所有的内核暂停功能的话。使用的其实是相同的概念,但是将会需要把最大处理状态和最小处理器状态都设置为100%。
通过上文提到的相同的命令行就可以把最大处理器状态设置为100%,只是把50用100代替就可以。实际将会用到的命令是:
Powercfg --setacvalueindex scheme_current sub_processor bc5038f7-23e0-4960-96da-33abaf5935ec 100
使用我刚刚提到的命令可以把最小处理器状态设置为100%,但是需要换成最小处理器状态的GUID。实际中将会用到的命令如下:
Powercfg --setacvalueindex scheme_current sub_processor 893dee8e-2bef-41e0-89c6-b55d0929964c 100
只要需要对电力配置做出改变,就应该通过使用powercfg /q命令对更改做出验证。如果对该改变满意的话,就能够通过下面的命令执行:
Powercfg --setactive scheme_current
图5所示是该设置的一个例子:
图5:使用“Powercfg --setactive scheme_current”命令完成设置

点击放大