【IT168 分析评论】上一篇文章破解了服务器虚拟化比较主要的挑战(点击),相信大家可能还感到不够详细,由于篇幅所限,我们可能无法去一一了解不同用户面临的虚拟化挑战再去一一给出解决方案,所幸我们又有机会摘录翻译了一些由国外媒体朋友提出的与服务器虚拟化相关的问题,而且其回答者是英特尔公司从事虚拟化技术研究的领军人物--现任英特尔实验室首席虚拟化架构师的Richard A.Uhlig先生,他拥有英特尔公司内部最高技术职称"英特尔院士",希望这些内容能够为大家提供一些有用的参考:
问题1:虚拟化技术在高吞吐量的设备,如网络和存储设备中的应用效果如何?
回答:目前有一个值得关注的趋势,就是使I/O设备能够"对虚拟化更为友好"的新标准正在制订中。例如, PCI-SIG(PCI和PCI-Express接口标准的制订和推进组织)已经开发了一种新的规范,使PCI-Express设备能够更加容易地在虚拟机上共享其资源。这种规范被称为"单根I/O虚拟化"(缩写为SR-IOV),它定义了一种方式,以提供多重"虚拟功能"(Virtual Function),这些功能可被独立地、直接地分配给在虚拟机上运行的客户操作系统,从而消除一些虚拟化过程中的开销。英特尔在其最新的网络适配器中就提供了对SR-IOV的支持。然而,对于这种I/O设备直接分配,还有一个很大的挑战,那就是它使其他重要的虚拟化功能变得更加复杂,例如虚拟机的迁移。因为将一个物理I/O接口直接分配给客户操作系统之后,当其虚拟机要迁移到另外一个平台时,会很难释放这一资源。对此,我们一直在与虚拟机监视器(VMM)的提供商协商,以解决这些问题,以便我们能通过SR-IOV,从直接I/O分配中获得优势和好处,而同时又可以保护虚拟机的迁移能力。
问题2:英特尔的虚拟化技术是怎样提供具有突破性的安全特性的,这些特性是如何运作的?
回答:回到早些年时我们对英特尔虚拟化技术的定义,实际上从这项技术处于起点时,我们就已经有了很强的安全意识,而今,安全问题更已被纳入了虚拟化技术的发展路线图。虚拟机提供了一个从基础上来说更强的、可使代码分离的形式,因为它运行的层级比运行操作系统内核和设备驱动程序的Ring 0更低一层。我们的目标就是帮助虚拟机监视器软件, 通过这种基于硬件层的支持而进一步增强安全防护。例如,英特尔虚拟化技术可通过硬件机制来重新映射和阻止设备对系统内存的直接存储器存取,所以甚至连拥有特权、运行在Ring 0级别的某个虚拟机中的设备驱动程序,也不能访问属于另一个虚拟机的内存空间,这些都是需要硬件支持才能实现的。英特尔虚拟化技术还能通过减少与虚拟化工作相关的代码来简化虚拟机的执行,最终减少可信计算的总体规模,从而减少其相对于恶意软件的"受攻击面"。
问题3:随着处理器内核数量的不断增加,服务器的整合比例也在增大。你能不能谈谈,我们应该如何在一台运行着数以百计虚拟机的服务器出现故障后最大程度限制其产生的不利影响?
回答:总的来说,有两个办法可以用于解决这类难题:第一种是在服务器发生错误时纠正其故障并恢复它的运行,或者包容错误以限制错误产生的效果。
众所周知的ECC内存,就采用了内存错误检测与校正功能,它是第一种办法的典型应用。相同的故障恢复原则也可以适用于其它的资源,比如在系统为一致性进行互连和I/O的情况下(例如,使用CRC来检测连接级别的错误和触发包重发)。
当错误不能被纠正时,包容它们也是有所帮助的,因为其可支持更高级别的恢复算法。这一过程可通过将无法修正的数据标注"Poison"位标签,然后在系统中跟踪这个数据来实现。如果有这个标签的数据在系统中后来被再次利用了,硬件会在操作系统或虚拟机监视器之外再进行机器检测,从而提供有关错误本质的信息。理想的情况就是,这种硬件在回应错误时,能够支持虚拟机监视器执行一个更有目的的行为,例如仅仅关闭有故障的虚拟机,而不是整个平台及其他正在正常运行的虚拟机。
就英特尔来说,我们还增添了丰富的全新特性,使我们的多路服务器产品线能够兼容更多种类的,可被纠正或被包容的错误,包括QPI链接恢复和标记有"Poison"数据的转发,还能支持PCI-E先进错误报告和内存镜像等等。这些特性都是我们追求的"RAS"能力中的一部分,我们的多路服务器平台会不断扩展和改善来实现这一目标。
上述特性,都是致力于提高某一特定的服务器的可靠性,但是有时,你可能会失去整个平台(比如在断电时)。在这种情况下,一种有趣的全新解决方法产生了,那就是利用虚拟化技术,在另一个平台上维持虚拟机状态的副本。
如果出现平台性的错误,工作负载的执行可以在其他平台上通过这种虚拟机复制得到恢复和继续。同时,虚拟化还可以和其它已有的提高可用性的方法很好地配合,如基于集群的故障解决方案。在这种情况下,出现故障的集群中,备用机器可以由虚拟机提供,而不需要动用物理设备。正如我们所见,服务器的整合比在不断增加,我期待看到硬件故障恢复和容错机制的更大发展,以实现单个物理平台之上的和跨平台的更高可用性和系统容错能力。
问题4:你会如何怎样服务器整合?特别是当很多节点被整合时会出现很多问题,比如处理器循环和莫名其妙的损耗,例如让资源紧张的屏幕保护?
回答:处理器循环通常是由不同的情况引发的,包括空闲循环和自旋锁。当客户操作系统已进入一个空闲状态,它通常也会发出一条指令,比如HLT(halt),或者发出命令到处理器,以进入到更具能效的状态(称为"C状态")。虚拟机监视器可以设置各种虚拟化技术执行程序,来引导虚拟机从该客户操作系统中退出,然后安排另一个虚拟机投入运行,从而保证物理的处理器资源不被浪费。
通过这种方式检测空闲状态,是一种标准的通过虚拟机监视器进行的处理器资源管理,但是有一种更有趣的情况,就是一个处理器反复循环地检查的锁的可用性,而该锁可能暂时是由另一个处理器所保持的。在一个没有采用虚拟化技术的系统中,这种自旋锁问题解决得非常快,因为持有锁的处理器一般在很短时间内就释放锁, 而请求锁的处理器就会获得它和退出自旋锁循环。
然而,在虚拟化后的系统中,名为"锁保持者抢先占有"的不利情况可能会发生,即正在运行某虚拟机、持有锁的处理器,可能不会听从虚拟机监视器的安排,而抢先占有锁,而其他虚拟处理器则一直在请求等待一个不能被释放的锁。最糟糕的情况是,要求获得锁的处理器不断自旋,这将非常明显地浪费CPU资源。这种情况下,虚拟机监视器也不知道这种浪费资源的情况正在发生。
为帮助解决这种情况,英特尔最近在虚拟化技术中增添了一种执行控制功能,它可在虚拟机上运行,对物理处理器进行监控。当一个数量过多的迭代在一个自旋锁中被检测到时,处理器就会把虚拟机退出控制权返还给监视器,这样它就可以安排另一个虚拟处理器运行。我们发现这种新的控制功能--"暂停循环退出"在较高的操作系统整合比下是非常有效的。
再来谈谈令资源紧张的屏幕保护程序,这是从虚拟机监视器和硬件角度很难解决的问题,因为用户怎么使用都是合法的。非常好的方案是不要在客户操作系统上使用屏幕保护程序,如果这些程序的计算是无用的。
问题5:随着Nehalem-EX在Westmere-EP之后发布,看起来我们现在可以构建更大规模的服务器虚拟化平台,并在其上运行更多的虚拟机了,可问题是,我们应该如何为其提供足够的SAN I/O带宽,以确保所有的虚拟机都正常运行?
回答:从千兆到万兆以太网的过渡还有很长的路要走,后者可以实现为每个虚拟机提供更好更平衡的I/O,即在提供更高带宽到平台的同时,减少连接到物理服务器的端口数。通过将存储协议汇聚到以太网上,例如iSCSI和FCoE也能带来更高的效率。
在这一过程中,关键的挑战,是要为客户提供优质的服务质量,要保证在不同的虚拟机上能够实现共享同样的实体网络连接,以及减轻通过虚拟机监视器进行包处理和交换的功能的负担。英特尔已经开始为万兆以太网适配器增添新的特性,来解决这些问题,包括VMDq,它提供了一个第二层包分类和发送/接收排序功能,可以与不同的客户操作系统协作。这种支持减少了在虚拟机监视器中的数据复制,并提高了不同虚拟机的服务质量。
另一个可见的进步,就是由PCI-SIG开发的PCI-Express设备虚拟化的全新标准,特别是SR-IOV(单根I/O虚拟化)规范。SR-IOV定义了一种方法,即每个PCI-E端点设备对应一个"虚拟功能",可以直接从虚拟机管理程序分配到客户操作系统,以此来进一步降低网络处理管理程序中的间接开销。正如前文所讲,它让我们既能获得分配直接I/O分配到虚拟机的好处,同时又要保留了虚拟机迁移的优势,这是很难兼得的,支持SR-IOV的产品将很快在市场上出现。
问题6:你对虚拟化在HPC领域的未来发展方向,以及改进开发并行计算集群上的举措,有什么看法呢?
回答:目前对这一问题普遍的认识是,虚拟化在高性能计算机(HPC)上的使用还很少,这是因为HPC的侧重点是要追求极致的性能。但我也听到越来越多的高性能计算用户对虚拟化技术表现出了一些兴趣,其原因有很多:
首先,HPC的工作负载通常是长时间运行,所以如果能在出现故障时获取检查点中间结果会很有帮助。但检查点往往需要特殊的操作系统或应用程序来支持。通过在高性能的虚拟机上运行HPC工作负载,就能在对操作系统和应用程序完全透明的情况下,实现对正在运行的负载的检查。
在有多个用户共享的HPC集群环境中,同时,虚拟化技术也有利用于实现跨集群的负载平衡。也许这在没有虚拟化技术参与的情况下也能实现,但需要修改应用程序和额外的管理工具。透明虚拟机检查点和虚拟机迁移可以成为强有力的工具,用于供应和管理跨越不同用户、不同优先级和不同时间敏感度工作负载的HPC集群硬件资源。
从另一个角度来看,HPC工作负载可以从OS特殊化中受益---通过提供一个拥有很小内核、并能榨取出硬件非常好的性能的虚拟机管理程序,例如通过加强调度和降低内存管理的开销。乍一看,似乎引进这种管理程序首先是增加了新一层的开销,违背了降低开销这一目标。但实际上,这个管理程序可以依靠一个很小的操作系统内核或者执行库,在同一个平台的不同虚拟机上运行更多的全功能的操作系统。这可以实现在一个HPC集群上,不同用户根据他们的工作量而选择不同的操作系统,而且同时他们又都能共享相同的群集硬件资源。
关于虚拟化的性能开销问题可能会永远存在于HPC上,但我在上面列出的一些优势和特点,或许会让用户们对在HPC上应用虚拟化技术的想法刮目相看。
Richard A.Uhlig先生对虚拟化相关问题的解答到此告一段落,而关于虚拟化具体问题的讨论未来还将在产业界讨论,也会在《IT号外》中呈现。在随后的内容里,我们将与大家一同通过一系列的案例故事,来更近距离地领略英特尔架构服务器虚拟化技术的魅力,敬请期待!