WEB开发网
开发学院服务器虚拟化 VMware ESX Server 3.0简介(二) 阅读

VMware ESX Server 3.0简介(二)

 2007-11-09 23:46:18 来源:WEB开发网   
核心提示:文档内容: (二)NUMA、双核和超线程与VMwareVMware ESX Server 3.0将支持的最大逻辑CPU数量增大到了32个,下表对比了ESX 2.5.x和3.0在单核、双核和超线程的不同情况下对x460服务器多节点配置的支持,VMware ESX Server 3.0简介(二),0) this.style
文档内容:
(二)NUMA、双核和超线程与VMware
VMware ESX Server 3.0将支持的最大逻辑CPU数量增大到了32个,下表对比了ESX 2.5.x和3.0在单核、双核和超线程的不同情况下对x460服务器多节点配置的支持。

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719910.jpg>

虽然2节点、8个双核cpu在开启Hyper-Threading(2节点x4CPUx2核x2超线程=32)和8节点、32个单核CPU这两种配置在ESX 3.0支持32个逻辑cpu的情况下都是可用的,但是后者将会有更好的运行效率。
下面我们需要了解一下关于处理器的三个不同的概念
·The socket(cpu插座)
·The core(cpu内核)
·The Hyper-Threading(超线程)
下图描述了上述三个概念的关系

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719109.jpg>


注意一个单节点配置实际就是一个单NUMA节点,因此在多节点ESX配置中NUMA节点的数量和x460机器的数量是相等的。示例见下图


0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719393.jpg>

一.NUMA与ESX Server
VMware ESX Server智能的、自动适应的NUMA时序安排和内存内存分配策略可以管理所有的虚拟机,使管理员不需要手动处理虚拟机之间复杂的平衡关系。如果系统管理员有很好的技术水平也可以手动调整系统以获得最好的运行效率。忽略用户的操作系统类型进行优化工作是十分重要的。ESX Server提供了有力的、清晰的NUMA支持即使用户的操作系统不支持NUMA硬件,比如Windows NT 4.0。这个特性使得VMware ESX Server可以使用最新的,最尖端的硬件设备,即使需要运行一些旧的操作系统。

1.下面介绍几种VMware NUMA优化算法
·Home nodes and initial placement
VMware ESX Server为每个虚拟机开始运行时分配一个主节点,虚拟机只使用它的主节点上的CPU,同时也分配使用主节点上的内存。因此,如果虚拟机的主节点不改变,虚拟机就会仅使用本地内存,避免了使用其他NUMA节点的远程内存所造成的对系统性能的影响。新虚拟机安装顺序分配主目录,第一个虚拟机分别在第一个节点,第二个虚拟机分配在第二个节点,依此类推。这个策略保证了内存将被所以节点平均的使用。
一些常用的操作系统比如windows2003,提供了对这个级别的NUMA支持,也被叫做initial placement方式。这种方式对单一的并且在系统运行中负载不发生改变的应用已经足够了,例如benchmark测试。但它无法保证一个数据中心级别的、并且负载需要随时间经常变化的应用的顺畅和高效的运行。为了更好的理解一个仅仅使用initial placement方式系统的缺点,请参考下面的例子:一个系统管理员建立了4个虚拟机,前两个运行在节点1上,后两个运行在节点2上。如果节点1上的两个虚拟机关闭或者处于空闲状态。那么系统将处于不平衡的运行状态,因为所有的负载都加在了节点1上。即使允许剩下的虚拟机远程运行在节点2上,运行效率仍然是很低的,因为它仍然只能使用原来节点上的内存。
为了克服initial placement方式的缺点,VMware ESX Server结合了传统的VMware ESX Server和一个动态的负载均衡的算法。周期性的(系统默认为2秒)系统检查不同节点上的负载情况来决定是否通过在节点间移动虚拟机来使负载平衡。计算需要考虑每个虚拟机的相对优先权以确保调整负载工作的公平。负载均衡选择一个适当的虚拟机改变它的主节点到一个负载最少的节点。当可能的情况下,系统移动虚拟机到一个它已经有内存使用的目标节点。移动后,虚拟机在新的主节点上分配内存,除非它再次移动。它仅仅运行在新主节点的CPU上。
负载均衡是一个维护平衡并且保证所以节点资源都充分利用的有力工具。然而,负载均衡可能会移动虚拟机到一个它分配内存很少或者根本没有分配内存的节点上。在这种情况下,虚拟机将因为大量的对远程内存的访问而影响运行效率。ESX Server可以通过从虚拟机的原始节点到新主节点迁移内存来消除这种影响,系统在原始节点上选择一个4KB的页面并且拷贝它的数据到目标节点的一个页面。系统使用VMmonitor层和CPU的内存管理硬件去正确的映射内存,以便在将来在目标节点上进行内存调用不会存在问题。这样就消除了调用远程内存对系统运行效率的影响。当虚拟机移动到一个新的节点,ESX Server将立刻开始内存迁移,通常以大约每秒种100KB、25页面的速度进行。当虚拟机只有非常少的内存仍然在远程节点或者目标节点上只有很少的内存可用的情况下,系统会调整这个速度以避免负载过重。内存迁移算法不会进行一些不必要的内存迁移操作,比如虚拟机只是移动到新的节点很短的时间。
将initial placement、动态的负载均衡和智能的内存迁移相结合起来,它们将确保NUMA系统中内存的运行效率,即使在运行中负载发生变化。当运行过程中负载发生变化,例如新的虚拟机开始运行,系统开始进行负载调整、内存和虚拟机的迁移以达到一个最佳的配置。经过一段很短的时间,系统调整完毕进入一个稳定运行的状态。

·Manual NUMA controls
一些有很高技术水平的系统管理员通过手动配置可以更好的调整内存分配和CPU使用。这是十分有用的,例如,如果一个虚拟机运行着一个对内存敏感的应用,比如一个运行在内存中的数据库或者大数据量的科学计算。如果将虚拟机内存100%分配在本地,这些应用的运行效率可以有很大提高,但是应用虚拟机的NUMA自动优化通常会有少部分内存(5-15%)被分配在远程节点。系统管理员也可能希望手动分配NUMA资源,因为有时系统的应用很简单并且不会发出变化。例如一个8个CPU的系统运行8个应用简单的虚拟机就很容易手动进行优化配置。
VMware ESX Server提供了对NUMA配置的控制,以便系统管理员可以控制所有虚拟机的内存和CPU分配。ESX Server web管理界面提供了配置的接口,用户可以通过Only Use Processors选项为虚拟机指定使用一个特定节点的CPU,通过Memory Affinity选项指定分配特定节点的内存。如果在进行这些设定之前启动虚拟机,它将仅运行在目前节点上并且使用本地内存。系统管理员可以手动移动虚拟机到另一个节点在虚拟机启动之后。在虚拟机的内存从先前的节点迁移到新节点的过程中,页面迁移速度也是可以手动调整的。VMware ESX Server的官方文档包括对各种选项的更完整和详细的说明。
注意手动的调整NUMA资源分配可能干涉ESX Server资源管理分配算法,它试图使每个虚拟机平均分配系统的资源。例如,如果10个运行着CPU敏感应用的虚拟机手动指定在一个节点上,仅有2个虚拟机指定分配在另一个节点上,那么这样的系统就不可能使所有虚拟机平均的分配系统资源了。在手动配置时应该注意这些问题。

2.结论
VMware ESX Server提供了丰富的手动和自动的NUMA优化手段,允许用户充分的利用自己的硬件平台。通过一个动态的、自动优化的NUMA负载平衡机制结合内存迁移技术,在应用发生变化的情况下仍然可以维持高效的内存运行效率。如果需要更多关于NUMA系统配置的细节信息,请参考ESX Server官方手册或者numa(8)手册在一个ESX Server系统上。

3.实例
我们举一个简单的例子说明上面的算法,在例子中我们创建一个4路的虚拟机在一个2节点8路的单核开启超线程的服务器上。然后我们在4路虚拟机上模拟重负载观察结果。下面是命令esxtop的输出结果:

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719899.jpg>

在这个例子里我们看到4路虚拟机产生的负载是运行在单NUMA节点上(本例中是节点1)。

二.Hyper-Threading与ESX Server
超线程技术是Intel NetBurst架构CPU的一个特性,它允许并行的处理一些线程当执行CPU指令的时候。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。采用超线程及时可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
VMware ESX Server从2.1版本开始支持超线程,VMkernel可以考虑超线程技术的特点和局限去计划系统的工作负载。ESX Server采用先进的算法和选项来适当的处理和集成超线程技术。这些算法可以被应用到虚拟机级别。超线程的功能在虚拟机中可以被启用或者完全的禁用,为了启用超线程必须在服务器的系统BIOS和ESX Server的软件配置中同时进行启用超线程的配置。在ESX 2.5.2中可以在web管理界面中配置超线程,在ESX 3.0中需要在相应的处理器配
置界面中选择。
如果超线程在服务器上已经启用,ESX在每个虚拟机基础上可以有三种方式选择:
·Any(默认)
·Internal
·None
Any是默认的配置,它允许VMkernel最灵活的计划虚拟机的工作。如果虚拟机的配置文件没有被修改这就是所有负载的默认的级别。
Internal仅应用在SMP虚拟机上,它使VMkernel分配虚拟机的虚拟CPU在同一个物理CPU上。在某些情况下这个设置是很有用的,例如有些应用在运行所有线程在一个缓存一致的物理CPU上时运行效率最好。实际上Intel Xeon CPU在和超线程启用的逻辑cpu共享缓存时有不同的级别。在某些情况下分配所有负载在一个一致的缓存里对运行效率更有利。
None是另一种情况,如果一个虚拟机的CPU已经在使用了,那么将强制VMkernel停用相应cpu的超线程逻辑cpu。在某些情况下这个设置是很有用的,例如一个应用当在给定的虚拟机上运行时如果启用超线程会对性能产生负面的影响,这类应用如果禁用超线程的逻辑cpu将使这个虚拟机cpu获得2倍的可用资源因而对性能会有帮助。更多关于VMware处理超线程方面的技术信息请到下面VMware官方网站链接查看
http://www.vmware.com/pdf/esx21_Hyper-Threading.pdf

三.dual core与ESX Server
VMware ESX中的单核cpu涉及物理cpu(pCPUs)和逻辑cpu(lCPUs),第一个是标准的物理cpu,第二个是启用超线程后的逻辑cpu。新的双核的cpu在技术上做了改进,在一个socket上实现了更多个cpu核心。
双核cpu和ESX调度算法的关系是很容易理解的,一个物理cpu超线程的两个逻辑cpu共享cpu的运算器等资源,双核cpu的每个核做为一个物理cpu。下面的图示说明了上述关系

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719936.jpg>

因而一个4路的双核x460服务器在关闭超线程的情况下,在ESX Server中将看到8个物理的cpu而不是4个,cpu状态信息如下图所示

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719782.jpg>

图形接口中的cpu信息可能会造成一些混乱,因为它只提供了cpu封装核逻辑cpu的数量。下面是一个4路x460服务器双核开启超线程的例子:
0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719643.jpg>

这可能会造成一些混乱,因为在某些情况下,你没办法从界面的信息中判断确切的系统配置。下面是一个例子:

0) this.style.zoom=zoom+'%';return false;" title="按此在新窗口浏览图片" src=/tech/UploadPic/2010108/201010815719332.jpg>

根据上图我们可以看到16个逻辑cpu,但我们没有办法判断这是八个禁用cpu的双核服务器还是八个启用超线程的单核服务器。
当将来出现多核cpu的情况下,VMware需要考虑下面2个因素去调整它的调度机制:
·如果将来引入多核cpu,将会改变现在的超线程形成的逻辑cpu在共享缓存核其他部件的一些问题。
·今天的双核核将来的多和cpu都是连接到一个系统总线上的,这在内存带宽上有可能形成瓶颈。但是x460服务器的每2个socket1个独立的前端总线的设计,使得一些运行在虚拟机上的企业级应用可以获得更多的独立的内存通路。

Tags:VMware ESX Server

编辑录入:coldstar [复制链接] [打 印]
赞助商链接