当您谈论服务器的性能时,有几种不同的查看方式。有明显的响应时间(类似于网络延迟)和吞吐量(类似于网络带宽)。
某些版本的Windows Server附带默认情况下启用了“平衡电源”设置。正如Jeff指出的那样。Windows 2008 R2是其中之一。目前,很少有CPU是单核的,因此,这种解释几乎适用于您将要运行的每台Windows服务器,单核VM除外。(稍后会详细介绍)。
平衡电源计划处于活动状态时,CPU会尝试调低其使用的电量。这样做的方法是在称为“停放”的过程中禁用一半的CPU内核。一次只能使用一半的CPU,因此在流量较低时它会消耗较少的功率。这本身不是问题。
问题是这样的事实,即当不停放CPU时,您将系统可用的可用CPU周期增加了一倍,并突然使系统上的负载不平衡,从而将其利用率从(例如)70%降低到35%。系统会对此进行处理,并在处理了突发流量后,认为“嘿,我应该拨回一点以节省电量”。确实如此。
这是不好的部分。为了防止CPU内核中的热量和功率分布不均,有一种趋势是将最近未停放的CPU停放。为了使它正常运行,CPU需要将所有内容从CPU寄存器(L1,L2和L3缓存)刷新到其他位置(最可能是主存储器)。
作为一个假设示例,假设您有一个带有C1-C8的8核CPU。
- 活动:C1,C3,C5,C7
- 停放:C2,C4,C6,C8
发生这种情况时,它们都会在一段时间内变为活动状态,然后系统将它们停放如下:
- 活动:C2,C4,C6,C8
- 停放:C1,C3,C5,C7
但是这样做会使从L1-L3缓存中刷新所有数据产生大量开销,从而使这种情况发生,从而使从CPU管道中刷新的程序不会发生奇怪的错误。
它可能有一个正式名称,但我想将其解释为CPU抖动。基本上,处理器要花更多的时间在忙于内部移动数据的时间上,而不是处理工作请求。
如果您有任何需要低等待时间的应用程序,则需要禁用“平衡电源”设置。如果不确定这是否有问题,请执行以下操作:
- 打开“任务管理器”
- 单击“性能”选项卡。
- 点击“打开资源监控器”
- 选择“ CPU”选项卡
- 在各个CPU的窗口右侧查看。
如果您看到它们中的任何一个被停放,您会注意到其中有一半在任何给定时间停放,它们都会点火,然后另一半被停放。它来回交替。因此,系统CPU运转异常。
虚拟机:当您运行虚拟机时,此问题甚至更加严重,因为虚拟机管理程序会带来额外的开销。一般而言,为了使VM运行,硬件需要在每个时间片上为每个核提供一个可用的时间槽。
如果您拥有16个核心硬件,则可以使用总共16个以上的核心来运行VM,但是对于每个时间片,该时间片最多只能使用16个虚拟CPU,并且虚拟机管理程序必须适合VM的所有核心。进入那个时间片。它不能分散在多个时间片上。(时间片本质上是一组X个CPU周期。可能是1000个周期,也可能是100k个周期)
例如:16个核心硬件和8个虚拟机。6个具有4个虚拟CPU(4C),2个具有8个虚拟CPU(8C)。
时间片1:4x4C时间片2:2x8C时间片3:2x4C + 1x8C时间片4:1x8C + 2x4C
系统管理程序无法执行的操作是将时间片的一半分配分配给8个vCPU VM的前四个CPU,然后在下一个时间片上,将其余分配给该VM的其他4个vCPU。时间片内的全部或全部为空。
如果您使用的是Microsoft的Hyper-V,则可以在主机OS中启用电源控制设置,这意味着它将向下传播到客户端系统,从而也影响它们。
一旦了解了它的工作原理,就很容易看到使用“平衡电源控制”设置如何导致性能问题和服务器性能下降。根本问题之一是传入请求需要等待CPU驻留/解除驻留过程完成,然后服务器才能响应传入请求,无论是数据库查询,Web服务器请求还是其他任何东西。
有时,系统会在请求中间停放或取消停放CPU。在这些情况下,请求将开始进入CPU管道,从请求管道中转出,然后其他CPU内核将从那里接管该过程。如果请求量足够大,则在整个请求过程中可能会发生多次,将原来应由5秒的数据库查询更改为15秒的数据库查询。
使用Balanced Power所能看到的最大事情就是,系统几乎无法响应您提出的每个请求。