http://article.ednchina.com/CPUDSP/20081229110448.htm
稳定耐用的代码用一种语言,而新型CPU却用另一种。必须重写软件才能消除这个表面上的矛盾吗?或者,虚拟化可以暂时甚至永久缓解这种转换?
要点
* 虚拟化有望消除看似不兼容的代码和CPU之间的差异。
* 无关紧要的故障无法抹杀VMware Fusion凭借OS X上的虚拟化Windows XP带来的功能兼容性方面的显著成就。
* CPU、存储器、联网速度几乎不受虚拟机管理器中介的影响。
* 始终在运行的系统风扇响声明显,暗示着功耗较高。
* 虚拟化方式包含多种选项。
想象一下:您已经为某种CPU体系结构或包含它的某个系统积攒了一个很大的成熟软件库,但芯片制造商突然破产了,并且根本没有可用的第二货源。或者想象另一种情景:出于性能、功耗、价格或其它原因,您希望把下一代平台设计从一种微处理器或嵌入式控制器家族转向另一种,但缺乏时间、人力、工具和教育预算,无法把现有代码迁移到新的芯片。您如何才能使自己的开发计划不断取得进展呢?
硬件虚拟化提供了可能途径。很多芯片供应商渴望实现一些新应用,它们将充分利用摩尔定律逐步推动的 IC 能力,而硬件虚拟化对这些供应商具有同样的吸引力。您可以把这一概念应用于任何设计,这是因为所有处理器体系结构都将迟早表现出同样的时钟速度提升、片上核心数量的增加,以及目前PC市场上极其明显的专用硬件的进步。但是,业界目前对虚拟化的大部分注意力都集中在电脑上,因此使得这种虚拟化对于基于x86 CPU的嵌入式系统也同样恰当。与其它应用相比,注意力的集中反映了笔记本电脑、台式电脑、工作站、服务器硬件应用的巨大市场。
苹果公司Macintosh电脑产品线的虚拟化先于该公司从PowerPC向x86微处理器的转移。但是,这一概念是在该公司改换CPU之后变得更有吸引力并且引人注目的,原因有如下几点(参考文献1)。一方面,由此得到的主机操作系统与Linux或Windows等被仿真的软件之间在底层指令集方面的兼容性,以及核心逻辑芯片组、图形处理器和海量存储设备等其它系统构件的共同性,意味着虚拟化比以前更快,并且功能更耐用。对于那些有可能改用Macintosh但仍需运行几种Windows应用软件的消费者而言,由此得到的性能和功耗方面的改善以及价格的下降还使苹果公司的硬件比以前更具有吸引力。
曾有将近两年时间,笔者试图利用苹果公司Boot Camp分区软件和驱动程序套件,在第一代MacBook上运行Windows XP Professional,结果故障连连,因此在数月前决定以虚拟方式运行Windows(图1)。笔者以前实验了Parallel公司的Desktop for Mac,它是“OS-X上的虚拟化”类别中的最初产品,不过目前在使用老牌虚拟化先锋VMware公司(目前是EMC公司的独立子公司)的Fusion。与Parallels公司的Workstation(截至发稿时,它只能使用一颗CPU核心)不同的是,VMware Fusion V1.0能利用两颗核心的资源。
笔者已经拥有了可能需要的额外处理能力,对此感到很开心,尽管迄今在很大程度上还不需要它。Fusion不仅拥有一套耐用的特性,而且还具有惊人的速度,甚至在一颗CPU核心上也是如此。在这种配置中,它使用的电池功率也小于它在双核方式中的用量。笔者已就自己对虚拟化的印象做了定性和定量说明,希望您在为自己即将开展的设计以及可能的个人用途来对虚拟化做评估时,它们会引起您的兴趣。各种虚拟化途径的具体情况有所不同,因此无法保证您得到的结果将与笔者一样,特别是如果您使用不相似的主机操作系统或者其它备选的主机和虚拟化CPU体系结构的话。但是笔者认为:在详细阅读了以下内容之后,您将同意笔者的观点:对于消除硬件与软件之间的鸿沟而言,虚拟化大有希望。
测试台统计数据
笔者的Apple MacBook的硬件核心是一颗双核2GHz Yonah代CPU。虽然英特尔公司把它称作“酷睿”微处理器,但是由于该公司把较早的Pentium M微体系结构作为它的基础,因此这个营销用名称并不能使之成为酷睿微体系结构产品。因此它实际上是一颗晶粒上的两颗单核Pentium M CPU,每颗均带有专用1MB L2缓存,通过共享的前端总线与对方以及系统其它部分通信。不妨把这种安排与后来的65nm Merom或45nm Penryn CPU(它们晶粒上的所有核心共享统一的L2缓存)以及即将上市的45nm Nehalem产品(拥有各核心专用的L2缓存,但拥有共同的L3缓存)对比一下。笔者的Yonah处理器是 T2500,实施了英特尔公司Virtualization Technology的硬件钩(hardware hook),它们虽然并非完全必要,但很有用。在英特尔公司公布该技术之前的很多年,VMware公司在业界的实力证明了这一点。
当以虚拟方式运行于VMware Fusion上时,Windows XP和SiSoftware公司的Sandra Lite XII.SP2c(一直是笔者的首选基准测试程序)报告的系统硬件套件在几个关键部分不同于Boot Camp派生的本机系统的对应构件(表1)。一方面,基准测试程序错误地报告:虚拟化CPU的前端总线运行于4 MHz,这是因为虚拟化核心逻辑芯片组是英特尔公司陈旧的440BX。该芯片组通过接口连至EDO(扩展数据输出)异步DRAM。另外,虚拟化图形与音频子系统具有的特性在数量和耐用性上均不如各自的真实情况。而且以虚拟化方式工作时,与硬盘和光驱有关的板上RAM缓存大小报告值也明显小于实际RAM缓存大小。另外,尽管VMware Fusion V1.0的确实施了耐用的USB 2支持,但它不支持IEEE-1394虚拟化。最后,Fusion充分利用了NAT(网络地址转换)、桥接、单纯主机配对方式,它们通往主机操作系统的LAN、WAN、蓝牙PAN(个人局域网)连接,因此它唯一的虚拟化联网子系统是1GbE收发器。
对虚拟化系统的DRAM分配需要做额外说明。MacBook最多仅支持2GB主存。还应注意:Yonah CPU不具备64比特能力。VMware Fusion建议笔者把512MB存储器分配给虚拟化OS。笔者未理会默认设置,把1GB分配给了虚拟机,以便尽可能缓解分页引发的Windows性能的退化。但是,如果笔者在OS X主机操作系统上同时运行若干存储器密集型应用软件,则笔者也许本不该增加虚拟存储器的分配量。在这种情形下,笔者大概本不该选择“为虚拟机磁盘性能优化”选项,而选择“为Mac OS应用软件性能优化”选项。
笔者后来使用了Fusion建议的最大20GB虚拟硬盘驱动器大小,这是因为当时笔者已经限制了160GB硬驱上的可用空间。笔者很惊喜地看到:这个虚拟分区大小对于Windows XP、Office 2000和其它多种程序已经足够了,尽管将需要把静止图像、视频剪辑、音乐曲目等等比特密集型数据文件存储于别处。并且如果笔者希望提高这种峰值容量设置,那么笔者将无法直接做到;VMware公司官员们表示:笔者将需要创建预定大小的新虚拟分区,然后把Windows映像文件镜像到该分区。
使用印象
在从本机运行Windows XP迁移到虚拟化Windows XP的过程中,笔者曾预计自己会感觉到性能显著下降,并且会遇到许多功能故障。令人高兴的是,虽然虚拟化中介在某种程度上影响了处理密集型应用软件和电池寿命,但笔者预测的两种现象均未出现。笔者还应指出的是,至少到目前为止,笔者尚未运行任何基于三维图形的应用,因此尚未启用Fusion V1.0的实验性Direct3D “v9”特性。截至发稿时,Fusion V2.0仍处于Beta测试阶段,号称具有改进的图形API虚拟化能力、硬件加速的视频解码支持,并且虚拟机管理器对CPU和其它系统资源的消耗量更加普遍地降低了。
笔者尝试在虚拟化Windows XP中使用的每种USB外设在工作时均未出现故障。例如,笔者分别利用微软公司的Zune软件和ActiveSync工具程序来使数种微软便携式音乐播放器和T-Mobile Dash Windows Mobile Smartphone同步。(请注意:即便是借助真正的USB收发器,这些任务有时也不管用!)笔者利用5类电缆、Wi-Fi无线、蓝牙无线PAN(连至充当蜂窝调制解调器的手机)在OS X中建立了网络连接。在建立了上述任何一条连接后,Fusion的虚拟网络适配器也始终如一地接进该连接中。到目前为止,笔者在Fusion实验中遇到的最严重障碍是一直无法“看到”分配给Windows工作组的其它网络资源,直到笔者把虚拟化联网模式从默认的NAT设置切换至桥接模式。使MacBook的内置摄像头在Windows中工作也不太直观,尽管笔者最终还是成功了,从OS 10.5 CD上的Boot Camp V2.0套件中提取了必要的驱动程序。驻留于Windows的蓝牙和红外线支持目前需要经受类似的考验,不过VMware公司承诺在Fusion V2.0中对所有三种外设提供更直截了当的支持。
在Fusion中安装Windows XP Professional不费吹灰之力,这要感谢捆绑的虚拟机助理工具程序。该工具程序首先轮询笔者的系统,并推荐了面向最大虚拟硬驱大小的设置。它还使笔者可选择输入Windows产品密钥以及笔者期望的用户账户登录和口令。然后它提示笔者插入Windows安装CD。Fusion此时接管了所有工作,包括安装VMware虚拟化子系统驱动程序和VMware Tools附件。由于虚拟化Windows是笔者机器使用的首要OS,因此笔者调整了OS X键盘的一些设置,使它们更像Windows,并且还安装了一种名为AutoHotKey的开放源代码程序,以便提供专用删除键。
在用Boot Camp做实验的过程中,笔者遭遇的最头疼问题之一就是它的电源管理不可靠,待机模式与其它模式之间的转换不牢靠,有时会产生灾难性后果。与此相反的是,Fusion以及在其中运行的虚拟化Windows工作起来就像其它任何Mac OS X应用软件,因此能充分利用苹果公司刻板的电源管理。换言之,在Windows中播放音乐时,笔者关闭了系统面板,使MacBook处于待机模式,并且当笔者后来重新唤醒系统时,曲调很连贯,没有出现间断。但还是不可避免地出现了系统崩溃。为了使自己不被其后果波及,笔者可在任何时候制作虚拟机的“快照”,以便日后根据需要恢复。并且备份整个虚拟机映像,或者就此事而言,把它迁移到另一套包含VMware的系统,就像复制一个文件那样简单。
笔者可以用操作系统的“剪贴板”在OS X和Windows之间复制和粘贴文本和其它信息,这是因为Fusion把它们链接了起来,并且可用类似方式交换文件,或者是在OS桌面之间拖放这些文件,或者是通过共享文件夹特性,后者巧妙地在HFS+ 和NTFS之间转换。虚拟机显示选项包括窗口式、全屏,以及Unity,后者把Windows桌面与OS X 合并于一体。使用Fusion V1.0时,笔者既不能在主机OS X中分配所有HTTP链接以便进入Firefox,也不能在虚拟化Windows中分配所有mail-to链接以便进入Outlook。Parallels Desktop的确拥有上述特性,并且VMware公司计划把它们和OS间文件至应用分配特性包含在Fusion V2.0中。
为了定量说明笔者较早关于Fusion即便在一颗CPU核心上速度也很惊人的评论,笔者在Windows XP上运行了Sandra的各种以微处理器为中心的基准测试,本机带有Boot Camp,并且同时启用了两颗CPU核心,即笔者没有实施BOOT.INI中的/onecpu标记。笔者还在用Fusion虚拟化的Windows XP上运行了基准测试,是在启用了双核的基础上运行,即没有利用OS X的CHUD(电脑硬件理解开发)工具包来禁用某颗核心,并且Fusion的双虚拟处理器设置处于启用状态。然后笔者利用Fusion在虚拟化Windows XP上运行了基准测试,同样是在启用双核的OS X上运行,但这次启用了单虚拟处理器默认设置。
相关结果清楚表明了主机与虚拟化操作系统之间的微处理器指令集兼容性所带来的实实在在的性能好处(图2)。在运行处理密集度更高的基准测试时,双核虚拟化Windows XP明显(尽管不严重)慢于它对应的本机系统。该结果反映了基于OS X的虚拟机管理器导致的渐增的CPU使用量,并且单核虚拟化Windows XP的速度也按比例下降。其它更加系统性的基准测试表明虚拟化配置与本机双核配置之间几乎势均力敌。并且在某几种情形中,虚拟化Windows XP甚至领先于本机系统。
接下来看看Fusion在处理缓存和主存的虚拟化时表现有多出色(图3)。只有彻头彻尾的悲观主义者才会对Sandra提供的虚拟化配置与本机配置的基准分数对比情况无动于衷。在上述两项测试以及更早的测试中, SiSoftware公司的工具程序还输出了比例式的性能与时钟速率对比数据以及性能与功耗对比数据,但图3没有描绘它们,这是因为该工具程序在虚拟化配置中不可靠。请回想前文所述:虚拟化CPU以及核心逻辑是通过4GHz前端总线连接的,而虚拟化DRAM是陈旧的同步EDO类型。所有这些因素严重扭曲了虚拟化的每兆赫性能结果和每瓦性能结果。SiSoftware公司首席技术官C Adrian Silasi说:“TPD(热功耗)是估算出来的,不是计算出来的,只有那些报告了CID(CPU标识)和VID(电压标识)的CPU例外,只有AMD公司的Phenom/Barcelona符合这一点。其它情况下,TPD是以处理器型号/类型为基础。它是数据库查询结果,基于已出版的英特尔公司规格,它们为报告的频率和电压做了调整:功率约等于频率与电压平方的乘积。”
MacBook的海量存储子系统也渴望Sandra的检验,并且此情形的结果乍一看可能更加令人困惑(图4)。光驱读取测试足够直截了当,并且证明了Fusion对这种外设所做虚拟化的耐用性。但是,请看看在许多情形中,虚拟化硬驱比它对应的本机设备快了多少。物理盘测试绕过了文件系统测试采用的操作系统专用API调用。因此,物理盘测试是与物理硬件或虚拟化硬件直接通信。笔者也对文件系统测试做了相关配置,以便绕过Windows缓冲。
但是,Sandra仅能回避它感知到的基于系统存储器的缓存方案,并且正如笔者过去的存储测试情况那样,笔者猜测它在上述情形中没有取得成功 (参考文献2)。SiSoftware公司的Silasi说:“在这两项基准测试中,读写了数量合适的数据,来‘冲洗’或‘淹没’任何无法被禁用的缓存。但是,这些测试只是禁用了软件缓存,没有禁用硬件缓存,比如RAID控制器缓存或硬盘缓存自身。VMware很可能把盘读写缓存于主存中,并且由于是‘硬件’,这些缓存未被禁用,同时速度和运行于系统存储器中的正常软件缓存一样快。”请注意:笔者没有运行物理盘写测试,这是因为它们需要空白驱动器。
虚拟化驱动器与“真实”驱动器相比,性能有所改善,这在部分程度上也可能是归功于VMware以及其它虚拟化技术独特的文件存储方式。当您更新或删除文件时,NTFS、HFS+或FAT分区会把文件版本标记为旧版本,而其它数据最终会填充这些旧文件在驱动器上占用的空间。另一方面,虚拟化驱动器采用类似数据库的链接式列表结构。这类方式交付了比较快的存取。但是,正如数据库的情况那样,虚拟化驱动器需要定期压缩,以便剔除当前不再有效的文件条目。VMware公司把该功能称作收缩,它通过VMware Tools接口与虚拟化Windows OS协同工作。在收缩期间,虚拟化操作系统是无法存取的,但是该功能变得更快了。
在测试虚拟化与本机联网性能对比情况方面,笔者利用Sandra的各种基准测试工具程序所做的评估缺乏一致性,因此并不相信自己获得的结果。于是笔者选择了一种更基本的方式,即宽带速度测试,它产生了几乎相同的主机与虚拟化对比结果,连续运行之间的变化余量处于合理范围内。对各种LAN外设和WAN服务器所做的“Ping”操作也产生了相同的结果,无论它们是来自主机OS X,还是虚拟化Windows XP。
功率负担
在Fusion中使用Windows XP及其应用软件时,笔者的MacBook的系统风扇比单独用OS X时更有规律、更稳健。笔者决定搜寻发热量逐渐增加的起因,不久就有了结果(图5)。请注意:Activity Monitor依然假设系统中存在单核CPU,例如双核虚拟化Windows XP上的vmware-vmx数值为56.5%时,转换所得的CPU总负担为28.25%。还请注意:即便Fusion处于单核模式,控制它的CPU和EFI(可扩展固件接口)代码仍然把vmware-vmx负载分散在两颗核心上(当两者可用时)。但请记住:笔者利用闲置状态(即根据Windows的任务管理器的数据来看,CPU使用量可忽略不计)时的虚拟化Windows XP捕获了这些Activity Monitor截图。当虚拟化Windows XP在正常使用时,vmware-vmx的系统负担显著加大。
很难把CPU使用量转换成电池寿命,并且转换结果并不准确,就像一个活动目标。随着VMware公司及其竞争对手的虚拟化能力的提高,它们将能更好地利用系统的各种功率效率较高的硬件加速能力。例如,目前在虚拟化Windows中播放DVD时,会导致显著的CPU负担,这是因为必要的任务是在软件中实施的。但是,即将上市的Fusion V2.0有望提高视频播放性能,这多半是由于它将接进MacBook的英特尔图形核心的内置MPEG-2解码电路。目前,笔者将仍然在OS X的DVD播放器上看电影。在可能的时候,相同的本机与虚拟化对比偏好对其它苛刻的应用也将同样有效。
参考文献
1. Dipert, Brian, “Mac (under) the knife: piecing together the PowerPC puzzle,” EDN, Sept 15, 2005, pg 44, www.edn.com/article/CA6255047.
2. Dipert, Brian, “InteRFace overkill? Is eSATA necessary for your next system design?” EDN, May 10, 2007, pg 48, www.edn.com/article/CA6437950.
文章评论(0条评论)
登录后参与讨论