如何在虚拟化环境下进行数据存储管理
理解虚拟机存储需求
规划部署方案可以节约时间和资金,并避免在将来出现令人头疼的问题。部署物理存储环境前,因当了解当前环境的具体情况。我们开始研究如何在虚拟化环境下解决存储的需求分配问题。每个环境都不尽相同,尽管如此,还是有一些简单问题可以帮助我们理清数据存储管理规划:
1、工程师需要理解环境中虚拟化的程度。环境中是否大多数服务器都已虚拟化,还是仅仅运行了少量的虚拟机。
2、需要超前规划将来用户、服务与应用增长所需的计算资源。环境会不断演变,既要满足当前应用,也要规划未来发展。
一旦开始规划,工程小组需要对自己即将部署的存储解决方案类型有深入认识。某些虚拟机需要为其存储设置许多固定参数,而其他虚拟机则可以更为灵活的调整。根据大多虚拟机监控(VMM)实现方案,可以大致分为两个主要部分:
1、在创建虚拟磁盘时预先分配所需的整个存储空间。此方案中,虚拟磁盘既可以被拆分为许多水平文件(默认情况下为每文件2GB大小)所组成的文件集,被称做"分割水平文件",也可以采用单一的水平文件。预分配存储机制也被成为"厚配置"
2、按需动态增长存储。若采用此机制,虚拟磁盘可以分割或单一文件保存,但其有一个重要特性--存储可以根据需求进行分配。此种类型的动态增长存储同样被称为"自动精简配置",VMware Inc和Citrix System都支持此种磁盘配置。
一旦负载评估确定以及相关可行性调查完成,就可着手研究如何将存储添加至环境中。但比这更重要的一环是明确工作负载究竟需要多少存储空间,因为此时已进入存储资源分配过程了。
动态存储分布
管理员现在可以通过虚拟化平台接口进行监控,分配和管理所有虚拟机的存储需求。Vsphere、XenServer和Hyper-V目前都提供了非 常复杂的图形用户接口(GUI),这些管理工具可以提供关于虚拟机的详细信息。例如,管理员可以查看系统所连接的存储仓库,了解其是如何被利用的,也可以 查看每个虚拟机(VM)的磁盘使用状况。虚拟化管理平台的每次更新都加强了针对存储设备的连接能力,包括支持更多厂商的产品,新功能以及通过GUI界面所 能实现的存储设备管理。
在部署自动精简配置(或动态存储分配)作为虚拟磁盘特性时,需要留意存储资源池或数据存储中那些还未被使用的空间。通过跟踪未使用资源,工程师可以 调整最佳实践并决定下一步操作是回收现有未使用资源,或者在应用中断与宕机发生之前往资源池中加入新的可用空间。为避免系统宕机,建议对磁盘使用情况进行 追踪并设置告警等通知,保证在空间不足时能通知到管理员。动态空间分配并不是什么新技术,该功能在现今大部分主流虚拟化软件中都可以实现。尽管如此,关于 这种数据存储机制还是有一些管理技巧的:
1、设置磁盘空间需求告警。添加额外磁盘空间并不困难。现实中,实现空间添加可能只需要大约3次鼠标点击。挑战在于了解有多少资源可以分配,以及数 据存储是否将要用尽。要解决这个问题,工程师应该为虚拟化平台管理工具设置告警策略,以及准确管理自动精简配置。对某些管理平台来说,告警是项新功能,但 十分重要。这些告警可以通
2、过自定义触发规则实现,这样管理员们就可以对“磁盘空间耗尽”这项事故进行预防并才去行动。告警可设置为当数据存储使用率到 达某一百分数值或超额比率达到一定数值时触发相关通知。
3、文档与环境监控。每款主流虚拟化管理平台的GUI工具都很实用,任何IT工程师都应该能够检索存储仓库并对存储使用状况与规划有明确的认识。尽 管如此,在处理存储需求时,数据存储管理是一项永无止境的过程,需要无时无刻关注。空间资源耗尽并不是一个好应对的问题,而且通常情况下,可以通过审计与 对存储环境的维护来避免事故发生。
确保存储和虚拟化管理平台及时更新。经常检查负载状况是件十分重要的例行公事,留意存储硬件和虚拟化软件平台运行情况也十分重要。新硬件和软件更新可提供更好的支持与功能及,提升IT工程师管理环境的能力。微小变更,诸如告警与警示,可以用来增强存储空间管理能力。
VDI桌面虚拟化的优势在于运算集中在服务器端,因此在以下两种环境中特别合适:1、在极小的广域网带宽环境下,例如低于500Kbs的线路下,可以采用VMware等VDI产品进行部署,用户可以使用平板电脑或者手机接入,访问自己的桌面环境,实现随时随地办公;2、在新建的全千兆网络环境下,同时业务应用比较简单的环境中,用户部署VDI桌面虚拟化后可以购买100元左右的云终端作为客户机,大大减少客户机的硬件投入,拉平在服务器上的硬件投入,使得总投资更加合理。
VDI虚拟桌面基础架构
虚拟桌面基础架构(Virtual Desktop Infrastructure,简称VDI)是许多机构目前正在评估的全新模式,它是基于早期的RDP协议和瘦客户机逐步演变而来的,也是国外VMware等国外虚拟化厂家长期鼓吹的模式。VDI旨在为智能分布式计算带来出色的响应能力和定制化的用户体验,并通过基于服务器的模式提供管理和安全优势。它能够为整个桌面映像提供集中化的管理,但这一模式也存在着其固有的问题。主要表现为:因其利用硬件仿真及瘦协议,使得视频、Adobe Flash、IP 语音(VoIP)以及其它计算或图形密集型应用不适用于该模式,而且VDI 需要持久的网络连接,因此不适于要求离线移动性的场合。此外,其基于服务器的模式对服务器的配置有极高的要求,这些问题的存在不能不让众多的用户重新考虑部署VDI的实际意义及成本。
从实际应用方面来分析,VDI模式还存在诸多需要解决的问题,而与之相关的虚拟化桌面,如远程托管桌面、远程虚拟应用程序、远程托管专用虚拟桌面、本地虚拟应用程序及本地虚拟操作系统等虚拟化桌面也都存在着各种问题;另外还有对终端硬件的支持问题、对网络及服务器硬件过度依赖的问题、以及数据安全性问题等。
VOI虚拟桌面基础架构
从广义上讲Desktop并仅是Windows系统的桌面,而是终端客户机的代名词。同理对桌面的交付不仅限于感观可视的软件运行窗口,更可以是整个操作系统的数据流, VOI 即Virtual OS Infrastructure 构架的实现,从桌面应用交付提升到了OS(操作系统)的标准化与即时分发,与传统的VDI 设计不同之处在于终端对本机系统资源的充分利用不再依靠于GPU 虚拟化与CPU 虚拟化技术,而是直接在I/O 层实现对物理存储介质的数据重定向,以达到虚拟化的操作系统完全工作于本机物理硬件之上,从驱动程序、应用程序到各种设备均不存在远程端口映射关系,而是直接的内部址。
VDI虚拟桌面呈现在我们眼前的是一个图形化系统运行的显示结果,基于VDI 架构时是将远端的这个显示结果的视频帧压缩后传输到客户端后进行还原显示,这个过程会大量占用服务器的资源与网络带宽,而且在非全屏模式,用户实际面对是两个桌面,一个是自己本机的桌面,一个是远端推送过来的虚拟桌面,虚拟桌面上的运算如果需要调用本机资源与外设,都需要通过本机的底层系统进行转发和映射,降低了效率牺牲了资源可用性。 VOI 则可以让虚拟系统从引导阶段就开始接管计算机硬件平台,直接工作在本机的硬件平台之上,不再需要下层系统的支撑。要想实现这一点就必须为客户机提供一个虚拟的磁盘存储空间,将操作系统放置这个虚拟存储空间里,让客户机从这个设备完成启动。
基于VOI的虚拟终端管理系统采用了虚拟容器概念,将终端客户机的存储介质由物理转为虚拟,从分散转为集中;通过IVDP技术将操作系统内核从客户机硬件驱动依赖中分离出来,实现系统应用的跨平台交付。无论本机采用什么样的硬件平台与本地系统,都可以由信息中心按需分发、统一部署。
OSV虚拟桌面基础架构
OSV(Operating System Virtualization)智能桌面虚拟化,是基于X86标准计算机系统下实现PC桌面的集中管理、控制、存储、维护的PC桌面虚拟化技术。OSV与VDI方案最大的区别在于前者使用集中管理、分布运算机制,而后者采用的是集中管理、集中计算,显然后者对于服务器的依赖要远远超过前者。OSV不仅实现了计算机的的集中化管理,在保证本身运算速度和特性不变的前提下做到了计算环境OS&AP和PC硬件的完全脱离。桌面计算环境可以在OSV控制台随需派发并且用户可以开机自行选择桌面环境。用户桌面数据与应用数据均集中存储于OSV Server 上,实现了用户桌面数据的统一管理,统一派发,与计算机硬件分离。OSV Server 通过同步派发或者异步派发模式将桌面流数据,派发至本地计算机进行计算并显示桌面。这样可以让IT管理更加灵活,IT架构更加安全和可靠。达到了客户端随需选择应用环境(OS&AP On-Demand)的IT管理理想境界,使得客户端具备了在任何时间、任何地点都有安全稳定的计算环境,同时实现了以PC为标准的IT基础架构的完全虚拟化,IT基础架构更加的弹性和灵活,极大的增强了企业的竞争力,做到了PC应用的随需应变。 随着桌面虚拟化市场的竞争,一些用户对于各种选择的支持意见和反对意见感到困惑。下面是一些主要的桌面虚拟化方法和这些方法可能适应的各种情况。
远程托管的桌面
当人们考虑“终端服务”的时候大多数人都想到远程托管的桌面。一台服务器运行一个操作系统的镜像或者应用程序,许多客户机使用连接代理软件登录这台服务器。这个软件是客户机上的软件的一部分。客户机操作仅在显示器上显示这个用户共享的应用程序的镜像,来回传送键盘和鼠标输入的信息。
优点:成本低,对数据和应用程序有高水平的控制。
缺点:性能取决于网络连接质量;显示协议经常不能处理复杂的图形;一些为桌面设计的应用程序在共享的模式下不能在服务器上运行;对于不能本地存储数据的用户、使用大多数外设的用户或者使用优盘携带数据到处走的用户来说缺少灵活性。当断开连接的时候不能工作。
远程虚拟桌面应用程序
这是你在曾经使用过的每一个Web应用程序中得到的东西。与共享的桌面不同,这里需要的唯一的东西是一个网络浏览器和标准的Web协议(HTTP、HTTPS、SSL等等)以便创建保密的连接和传输图像和数据。根据应用程序的设计(考虑Flash下载),最终用户的机器可以处理一些应用程序的逻辑或者图形,或者仅仅点亮显示器和向服务器发送鼠标点击信息。
优点:不需要IT部门控制最终用户的硬件或者软件环境。
缺点:不允许IT部门控制最终用户的硬件或者软件环境可能会影响性能。当断开连接的时候不能工作。
远程托管的专用虚拟桌面
增加用户能力以及减少成本和保护IT的Web应用程序或者终端服务的资源。这个服务器不允许很多用户共享同一个应用程序或者操作系统的一个实例,而是托管仅允许那个用户访问的一个虚拟机中的一个完整的操作系统和一套应用程序。这个虚拟机能够在一台服务器上运行,与其它专用的虚拟机共享资源或者自己在一台刀片式PC上运行。能够远程托管或者传送。在传送的情况下,应用程序和操作系统都可以传送到客户机,根据用户的需求下载部分软件,在客户机上执行这些程序,使用其处理能力但是不使用本地存储。
远程托管:
优点:能够运行在共享模式下不能运行的应用程序;隔离每一个用户的活动以防止资源的限制。
缺点:比贡献的桌面使用更多的带宽,使用更多的服务器上的硬件。性能取决于网络连接的质量和显示协议处理图形的能力。当断开连接的时候不能工作。
传送方式:
优点:经常为用户提供更好的性能,因为需要图形或者其它操作在本地执行。
缺点:需要更强大的客户机硬件,减少了虚拟桌面成本的好处。在断开连接的时候不能工作。 考虑一些“Java”。从服务器向客户机下载应用程序并且在客户机上运行,使用本地内存和处理能力。但是,这些虚拟应用程序在一个“沙箱”中运行。这个沙箱强制执行一套规则,规定本地机器能够做什么和与什么设备进行连接。
优点:比远程托管有更多的计算资源并且有时候有更好的性能;消耗较少的带宽;能够离线使用。
虚拟机。这个虚拟机能够像一个完全独立的设备那样发挥作用,使自己与虚拟机外部的客户机上的硬件和软件隔离开来。选择2:一个管理程序在这台机器上的BIOS上运行,允许用户运行多个操作系统,完全没有“主机”操作系统。
优点:一个系统上有多个操作系统;不用担心操作系统的兼容性;能够在智能手机或者掌上电脑等非传统的虚拟机客户机上运行。
缺点:潜在的资源冲突;客户端管理程序相对不成熟没有证明安全性。
VDI并不是降低IT成本的特效药
如果您采用VDI的主要目的仅仅是为了降低成本,那么有可能进入一个误区。很多人忽视了VDI在企业应用中的真实情况,该装的本地操作系统还是得装(这还意味着IT部门要搭理本机和VDI两套系统),实现完善的VDI环境还意味着企业需要在核心基础设施上增加投入包括面向VDI的高可靠性存储、服务器和新的终端设备,VDI软件授权也是一笔费用,全部下来比传统的IT基础架构的成本只会高不会低。(一个更有价值的IT系统永远不会更便宜),企业实施VDI如果不是为了增值而是降低成本,那么很可能会失望。
存储是VDI的阿喀琉斯之踵
在传统的服务器虚拟化环境,存储系统扮演着关键角色,但内存的消耗是头号问题。在VDI环境,内存也很重要,但是存储资源的消耗成了头号问题,但需要注意的是VDI的存储问题有其特殊性。VDI的存储问题通常与存储性能表现有关,因为这会直接影响到终端用户的用户体验。
很多VDI存储性能计算器在预测用户工作时的存储性能方面表现不俗,但遗憾的是,Windows在启动和登录方面并不是一个特别有效率的操作系统。大量Windows系统的同时启动和登录对VDI系统来说将会产生所谓的“启动风暴”或“登录风暴”。
在最糟糕的情况下,虚拟桌面从启动到加载完成往往需要十几分钟甚至数小时,这对于终端用户和CIO的职业来说都是灾难性的。(这也是为什么部署VDI往往会保留终端上的本地操作系统,而IT部门不得不同时维护本地和VDI虚拟桌面两套系统)企业如果准备部署VDI,一定要确保存储系统的写入吞吐速度能经受“启动风暴”和“登录风暴”。这意味着企业需要将传统存储技术与高IOPS的固态硬盘SSD系统进行整合。另外一个解决办法是选择模块化的专业VDI解决方案,这些解决方案在每个模块中都整合了传统硬盘和固态硬盘,同时企业还能分阶段逐步替换传统桌面环境,将项目投资分散到VDI方案的整个生命周期中,而不是一次趸付。
留神VDI可能涉及的软件授权陷阱
导致VDI项目搁浅的因素很多,其中软件厂商对VDI应用的软件授权规定往往是其中之一。即使你已经拿到了软件产品的网站使用授权或者并发用户授权,在实施VDI之前也要务必搞清楚软件厂商是否提供了产品的VDI授权。很多软件授权都明文禁止在虚拟环境中使用,或者会要求你另外购买专门的虚拟化授权供VDI环境使用。
VDI软件授权方面需要格外小心的是微软公司的产品。微软有一种“虚拟桌面访问授权”(Virtual Desktop Access,VDA),可以被用来授权非Windows操作系统设备(所谓的BYOD,例如iPad等平板电脑和智能手机)通过虚拟桌面访问Windows应用。但CIO需要警惕的是:这个授权要求企业为每个移动设备都购买一份,如果企业实施VDI的目的主要是满足移动设备应用(例如医院、证券和教育等行业应用),这VDA授权可能会是一笔不菲的费用。
闲置客户机硬件性能
主流虚拟桌面软件都采用了VDI 架构,受原始设计初衷的影响虚拟桌面系统对客户机的硬件配置几乎没有限制,普通的智能手机、平板电脑、甚至十多年前的老旧PC 机都可以顺利接入的桌面流畅使用各种超出本机软硬件平台所支持的桌面与应用,各种外部接口的使用(如USB 、串口等)以及内部数据处理(CPU、GPU 等)都采用映射流完成,因此虚拟桌面的使用对本机资源的占用相当少,反之也是一种很多闲置。对于一些企业新近购入的PC 机往往拥有着强大的本机数据与图形运算能力,当某时因为工作需要在这些PC 机上接入虚拟桌面使用有关应用时,会发现自身明明备配了大容量的内存与高性能的CPU及显示卡,但是在使用图形渲染、仿真运算等应用时表现却并不好,而服务器此刻却为你背负了巨大的压力。本机大量的硬件资源未能得到充分的发挥。
另外有些企业的窗口单位的PC 上往往会使用很多的外部设备,如各种型号的打印机、扫码器、身份验证设备等数据采集设备,这些设备原本是接驳在本机接口并驱动的,在接入虚拟桌面后并无法保证全部接口都能完成映射且正常的工作,这个问题也会影响到业务的开展。
业务瘫痪风险
主流的几款VDI 产品(包括VMware View 在内)需要基本配备为:一台服务器、根据发布需要而准备N台模板机。为了方便管理有些企业会将其全部转移到虚拟服务器上工作,虚拟服务器统一管理与维护都相当方便,特别是虚拟服务器出现宕机等问题后可以快速的迁移。但是承载这些虚拟服务器或虚拟机的物理服务器一旦出现宕机,即使事前物理服务器有热备(或负载均衡)在宕机之后的重新恢复也需要较长时间,并且无法保证间隔期数据的完好。在这个过程中企业的很多业务将有可能受到影响。在全部采用物理服务器的情况下又会回到采购成本与管理成本的话题上。
1、远程托管桌面
即所谓的终端服务器模式。多台终端使用客户端软件登录到服务器,而用户在终端的显示器上获得服务器端用户的桌面图像,以及来回传送键盘和鼠标的输入信号。多用户之间共享应用程序和操作系统实例,以及磁盘空间等资源。此种方式优点在于成本低,对数据和应用程序拥有很大的控制程度。缺点则主要有:某些应用程序无法在服务器上以共享的方式运行;显示协议不能处理复杂图形;性能取决于网络连接的质量;对网络性能有依赖,网络连接情况较差或中断则无法正常工作。
远程托管桌面的主要软件产品有:思杰XenDesktop、Wyse ThinOS、微软远程桌面服务。
2、远程虚拟应用程序
你曾经使用过的每个Web应用程序就是一种远程虚拟应用。与共享桌面不同的地方是,它只需要浏览器和标准的Web协议(HTTP、HTTPS和SSL)来创建安全连接、传输图像和数据。最终用户的机器可能处理应用程序的一些逻辑或图形,也可能只打开显示器、向服务器发送鼠标点击,具体取决于应用程序的设计。这种方式的优点在于IT部门无需控制最终用户的硬件或软件环境,然而这也可以算是缺点,正因为IT部门无法控制用户的硬件或软件环境有时会影响使用性能和效果。当然,离线状态下也无法工作。
此种模式的软件产品主要有:思杰XenApps、微软远程桌面服务、VMware View和VMware ThinApps,云端软件平台,瑞友天翼,极通EWEBS等等。
3、远程托管专用虚拟桌面
与网络应用或终端服务相比,这种模式为最终用户增强了功能。用户在服务器上使用的虚拟桌面并不与其他的用户共享文件目录或应用程序,而是在该用户才能访问的虚拟桌面里面有一套独立的系统。虚拟机可以在服务器上运行,与其他专用的虚拟机共享资源;也可以在刀片PC上独自运行。既可以远程托管,也可以流式传送。
远程托管专用虚拟桌面的模式优点在于能够运行共享模式下无法顺利运行的应用程序;可以把每个用户的活动、存储全部分离开来,安全性和实用性更好;缺点在于耗用的资源要比共享桌面的方式多,同时性能仍然取决于网络连接的质量和显示协议处理图形的功能。要是连接中断,无法正常工作。
此种模式的软件产品主要有:思杰XenDesktop、Wyse ThinOS、VMware View、微软企业桌面虚拟化(MED-V),达龙业务安全桌面系统。
流式传送模式:在此模式下,应用程序和操作系统都可以传送到客户机――根据用户需求,下载部分软件,然后在客户机上执行;使用的是客户机的处理功能,而不是本地存储功能。优点是可以利用本地客户机资源,所以常常为用户提供更好的性能。缺点则是需要功能更强大的客户机硬件,减弱了虚拟桌面的成本优势。要是连接中断,无法正常工作。
流式传送模式的软件产品主要有:思杰XenDesktop/XenApp/XenProvisioning、Wyse TCX、VMware View Manager/ThinApps/Composer和微软虚拟桌面基础架构(VDI)套件。
4、本地虚拟应用程序
此种模式与JAVA的工作模式类似。应用程序从服务器下载到客户机,然后在客户机上运行,使用本地内存和处理功能。但应用程序在沙箱(sandbox)里面运行,而沙箱为本地机器可以进行什么操作、可连接至什么设备制定了一套规则。优点在于拥有比远程托管应用程序更多的计算资源,有时候性能更好;耗用的带宽比较少;可以在离线状下使用。缺点则是缺乏统一的有效的管控,桌面虚拟化在维护方面的优势没有体现出来。软件产品主要有思杰XenApp、Wyse TCX、VMware ThinApp和微软应用程序虚拟化。
5、本地虚拟操作系统
目前有两个主要版本。第一个选择:客户机端的虚拟机管理程序可以在笔记本电脑或台式机上创建一个虚拟机,虚拟机可充当一个完全独立的单元,与虚拟机之外的客户机上的软硬件隔离开来。第二个选择:虚拟机管理程序在机器的BIOS上运行,允许用户运行多个操作系统,根本没有什么主机操作系统。本地虚拟机的优点显而易见,一个系统上可以有多个操作系统;不用担心操作系统的兼容性以及潜在的资源冲突;但缺点也很明显,占用本地资源较大,无法由IT部门集中管控,客户机端的虚拟机管理程序相对不够成熟,其安全性有待验证等等。
主要软件产品有思杰Dazzle/Receiver、WysePocketCloud、TCX、VMware View Client Virtualization /Offline Desktop(测试版)和微软虚拟桌面基础架构(VDI)套件。
企业引进虚拟化几点评估建议
1、使用习惯、感受:企业大量的分散的PC采用集中式运算进行集中式的管理确实为我们企业提供了很好的解决方案。不过我们知道计算资源是不可缺少的,不过是存在的位置不同而已,我们放在终端上还是服务器上都是无法减少的。假设我们每个人桌面的计算资源相当于(cpu双核20 内存2G)在这种环境下我们已经习惯了的用户体验转移到服务器上,100个用户的并发那就要求服务器提供100X2X2等于400的CPU运算能力和200G的内存才可以满足用户习惯了的体验环境(冗余未计算内)。那么我们计算如果我们的企业有500个用户呢,如果是1000个用户呢。实际上我们不可能为我们的用户提供如此的计算能力的,那么也就从这个单方面就必须牺牲用户的体验了。其二在每个用户都要去服务器端下载它所用的操作系统对带宽压力是巨大的,用户越多这个因素就越明显,所以这个因素也需要企管人员重点考虑。用户的体验没以前好了,会不会对IT人员的工作推进造成影响呢?
2、设备和软件兼容性:我们习惯了即插即用的外设设备,新的系统会不会对日常的工作习惯造成影响呢,如果有了影响是如何避免的呢?我们的IT管理人员的工作量是增加了还是降低了,效率是提高了还是降低了需要我们企管人员具体考量。
3、成本:企业花费的每一分钱都会具体考虑投入产出比,一个好的管理工具要推广,最起码它能够给企业在一个时间内带来成倍以上的收益才给与考虑的。集中式的虚拟化方案带来的投入成本主要是虚拟化软件授权费用,正版操作系统的授权,正版办公软件的授权,瘦客户机的采购费用,网络设备的换代费用,新的存储设备增加费用,服务器集群的硬件和软件采购费用,甚至有一些网络改造的费用。由于新的技术对管理人员的技术要求的提高相应的就会有技术人员的培训学习费用,新增管理人员费用。由于设备的成倍增加带来的还有机房改造电力消耗的各种费用。 考虑到各种费用的总和,计算出的单点改造成本,还要考虑到日后虚拟化平台升级费用和兼容性是否能匹配企业内部的系统升级。然后才可以制定一个完整的财务规划来应对整个项目的开支和升级。这个计划就需要整个集团公司所有部门一起参与协调。
4、多媒体和大型程序体验:在一些设计部门和跟设计关联部门,需要大型的设计程序由于显卡虚拟化的技术尚未成熟,所以在这个场景中是无法应用的。
5、软硬件架构改变:新的系统和新的应用,我们有做好准备吗来应对管理架构的改变,来应对团队组织的改变吗最后建议我们的企管人员对于集中式计算模式的方案问一句:我们准备好了吗?
好的,假如您觉得您的企业可以承受以上提到的问题,并经过讨论打算上这个项目了,我们祝愿您项目实施成功并提供下面几点建议仅供参考:
我们依照着所有最佳策略、做了恰当的分析和设计并打算开始将用户迁移到他们全新的虚拟桌面上。但不要这么快。我们需要确保已经做好的恰当的规划,否则最终我们可能要面临应用出现缺陷、用户感到困惑、或者丢失文件,必须有一个制定好的迁移计划让用户来遵循它。
个性化同步:一个用户的传统桌面可能已经安装了大量的应用程序、升级和补丁。盲目地将这些设置搬到新环境中可能会出现无法预料的结果。有一种可选的方法是,从一个面向终端用户的“干净”环境开始,只迁移有要求的设置( 例如:outlook签名、浏览器收藏夹等) 。通过提前设置可以验证迁移流程并测试设置以确保能够兼容新系统。
数据同步:除了用户的设置之外,任何本地桌面上保存的数据都必须转移到一个可以被虚拟桌面访问的地方,这就是一个网络共享。因为用户可能会将这些数据保存在他们桌面上的任何位置,因此通过分析应该快速决定两个可能点:“我的文件”或者在本地驱动器上的文件夹。当用户准本迁移到虚拟桌面的时候,数据就被转移到网络共享中。一旦迁移完成,用户应该利基从虚拟桌面开始工作。尽管传统桌面通常是可以访问这些位置的,但是这么做往往会导致性能降低、文件访问缓慢以及潜在的保留问题。
终端用户支持:迁移过程对用户有着很大的影响,因此提前应该搭建一个恰当的支持结构。支持团队应该考虑到迁移过程中常见的一些问题,记录下常见问题并与将要进行迁移的所有用户进行交流。这些资料将有助于轻松地定位。但仅仅这些步骤是不够的。在迁移的第一个星期内将会出现大量用户问题。如果有一个完善的用户验收测试(User Acceptance Test) ,那么提前就会预期到其中一些挑战,并准备一些有价值的FAQ 材料。支持团队需要相关的工具和培训来帮助用户即时地解决问题。如果他们能够看到用户的端点设备和虚拟桌面的话,他们的效率可能会更高。这为支持团队提供了对用户挑战的完全可见性。
记住一点,迁移计划一定不能是改观。这个过程必须是灵活的,可以应对后续的不可预见的挑战。部署团队必须就这个流程的挑战进行交流和沟通。最后,一旦用户的数据/ 设置迁移了,那么他们就必须也迁移到虚拟桌面,否则物理桌面和虚拟桌面环境可能就会出现数据/ 个性化的冲突。
目前在桌面虚拟化上,主要是三家:思杰、VMware和微软。
思杰是比较早做这块业务的,相对来说技术储备较好,解决方案的整体性好。价格方面也还可以接受。缺点是只有桌面虚拟化,如果公司需要同时使用其他虚拟化技术,则无法提供。
VMware的优势不在桌面虚拟化,而是在服务器虚拟化。桌面虚拟化方面做的并不是很好,尤其是对Windows的部署上偶尔会有兼容性的问题。但如果你打算用Linux桌面,则它的方案,尤其是PCoIP协议会非常实用。另,如果公司里面已经有vSphere环境,或者打算使用VMware企业服务器云技术,那整体成本会低很多。
微软的桌面虚拟化从低到高的线路最全,从低端的RD Host(虚拟桌面,其实严格意义不算虚拟机式的虚拟化)到高端Hyper-V+SCVMM,都是可以平滑过渡。使用同一个管理工具,同一套访问接口就可以使用,而且价格方面非常低。如果企业这边的办公环境要求复杂(例如部分是文员、部分是设计人员),则使用微软的RD+VM的混合方案会很经济也更好管理。
1、整合资源完成资源整合是服务器虚拟化的主要工作,在信息时代,各行各业在发展过程中,产生的数据呈现爆炸式增长,如何实现对这些数据和资源的综合利用,是各大行业亟需解决的问题。计算机服务器虚拟化技术的研发和应用,为实现资源整合提供技术支持和应用平台。尤其是近年来,云计算技术的不断普及,集中化资源管理愈发先进,为云技术的发展和推广提供了条件,目前各大企业对计算机硬件资源的利用率不足20%,资源浪费现象依然非常严重,通过服务器虚拟化技术可在原应用保持不变的基础上,集中在某一计算机服务器中,可促使企业的物力资源调利用率大大提升,从而降低了各项硬件的投入,节约了成本。
2、低能耗在信息时代,技术革新的重中之重,也是降低资源消耗的主要途径,云计算技术备受推广,在IT界大量推广云计算技术。计算机服务器虚拟化是提升资源利用率的主要途径,也可以对能耗进行合理的管理。虚拟化技术则可以模拟出不同场景,从而实现对计算机系统中各种硬件及软件进行全面系统的检查,发现问题立即显示在界面上,提醒相关人员及时处理,从而达到降低能耗,实现绿色发展的目的。
3、降低运营成本在信息化服务商不断经营转型的背景下,集约化对成本控制提出了更高的要求,投资愈发精细化,而企业实现IT化运行的关键自傲与集中对数据中心的投资,此项内容主要涉及到两方面内容;①计算机硬件和许可服务支持的投资。②计算机系统运维承的成本投资,通过计算机服务器虚拟化技术,能充分发挥服务器应的性能。
4、应用更加平坦化通过服务器虚拟化技术可促使计算机服务器应用平台更加平坦化和透明化,在信息时代,数据中心平台逐年增加,计算机服务器的应用愈发复杂,不同平台在具体运行过程中,需要充分考虑不同操作系统和中间件的层面问题。通过服务器虚拟化技术可有效解决此类问题,将应用和硬件平台相互隔离,实现了跨越平台的限制。
如需了解更多,请访问蛙云官网wayuncn
专业领域十余载,倾情奉献
一次沟通,终生陪伴
虚拟化技术简介
什么是虚拟化
虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
虚拟化技术的分类
虚拟化技术主要分为以下几个大类 [1]:
平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化。
资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。
平台虚拟化技术又可以细分为如下几个子类:
全虚拟化(Full Virtualization)
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。举例而言,x86 体系结构中,对于操作系统切换进程页表的操作,真实硬件通过提供一个特权 CR3 寄存器来实现该接口,操作系统只需执行 "mov pgtable,%%cr3" 汇编指令即可。全虚拟化 VMM 必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂:一般而言,VMM 必须运行在最高优先级来完全控制主机系统,而 Guest OS 需要降级运行,从而不能执行特权操作。当 Guest OS 执行前面的特权汇编指令时,主机系统产生异常(General Protection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。VMM 事先分配一个变量作为影子 CR3 寄存器给 Guest OS,将 pgtable 代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器,然后 VMM 还需要 pgtable 翻译成主机物理地址(Host Physical Address)并填入物理 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。比较著名的全虚拟化 VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac 和 QEMU。
超虚拟化(Paravirtualization)
这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。
硬件辅助虚拟化(Hardware-Assisted Virtualization)
硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。
部分虚拟化(Partial Virtualization)
VMM 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中。
操作系统级虚拟化(Operating System Level Virtualization)
在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。比较著名的有 Solaris Container [2],FreeBSD Jail 和 OpenVZ 等。
这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap-And-Emulate 的处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。对于超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
本文讨论的虚拟化技术只针对 x86 平台(含 AMD 64),并假定虚拟机中运行的 Guest OS 也是为 x86 平台设计的。
--------------------------------------------------------------------------------
回页首
纯软件虚拟化技术的原理及面临的挑战
虚拟机监控器应当具备的条件
1974 年,Popek 和 Goldberg 在《Formal Requirements for Virtualizable Third Generation Architectures》[3] 论文中提出了一组称为虚拟化准则的充分条件,满足这些条件的控制程序可以被称为虚拟机监控器(Virtual Machine Monitor,简称 VMM):
资源控制。控制程序必须能够管理所有的系统资源。
等价性。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
效率性。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。
尽管基于简化的假设,但上述条件仍为评判一个计算机体系结构是否能够有效支持虚拟化提供了一个便利方法,也为设计可虚拟化计算机架构给出了指导原则。
原理简介
我们知道,传统的 x86 体系结构缺乏必要的硬件支持,任何虚拟机监控器都无法直接满足上述条件,所以不是一个可虚拟化架构,但是我们可以使用纯软件实现的方式构造虚拟机监控器。
虚拟机是对真实计算环境的抽象和模拟,VMM 需要为每个虚拟机分配一套数据结构来管理它们状态,包括虚拟处理器的全套寄存器,物理内存的使用情况,虚拟设备的状态等等。VMM 调度虚拟机时,将其部分状态恢复到主机系统中。并非所有的状态都需要恢复,例如主机 CR3 寄存器中存放的是 VMM 设置的页表物理地址,而不是 Guest OS 设置的值。主机处理器直接运行 Guest OS 的机器指令,由于 Guest OS运行在低特权级别,当访问主机系统的特权状态(如写 GDT 寄存器)时,权限不足导致主机处理器产生异常,将运行权自动交还给 VMM。此外,外部中断的到来也会导致 VMM 的运行。VMM 可能需要先将 该虚拟机的当前状态写回到状态数据结构中,分析虚拟机被挂起的原因,然后代表 Guest OS 执行相应的特权操作。最简单的情况,如Guest OS 对 CR3 寄存器的修改,只需要更新虚拟机的状态数据结构即可。一般而言,大部分情况下,VMM 需要经过复杂的流程才能完成原本简单的操作。最后 VMM 将运行权还给 Guest OS,Guest OS 从上次被中断的地方继续执行,或处理 VMM “塞”入的虚拟中断和异常。这种经典的虚拟机运行方式被称为 Trap-And-Emulate,虚拟机对于 Guest OS 完全透明,Guest OS 不需要任何修改,但是 VMM 的设计会比较复杂,系统整体性能受到明显的损害。
面临的挑战
在设计纯软件 VMM 的时候,需要解决如下挑战 [4]:
确保 VMM 控制所有的系统资源。
x86 处理器有 4 个特权级别,Ring 0 ~ Ring 3,只有运行在 Ring 0 ~ 2 级时,处理器才可以访问特权资源或执行特权指令;运行在 Ring 0 级时,处理器可以访问所有的特权状态。x86 平台上的操作系统一般只使用 Ring 0 和 Ring 3 这两个级别,操作系统运行在 Ring 0 级,用户进程运行在 Ring 3 级。为了满足上面的第一个充分条件-资源控制,VMM 自己必须运行在 Ring 0 级,同时为了避免 Guest OS 控制系统资源,Guest OS 不得不降低自身的运行级别,运行在 Ring 1 或 Ring 3 级(Ring 2 不使用)。
特权级压缩(Ring Compression)。
VMM 使用分页或段限制的方式保护物理内存的访问,但是 64 位模式下段限制不起作用,而分页又不区分 Ring 0, 1, 2。为了统一和简化 VMM的设计,Guest OS 只能和 Guest 进程一样运行在 Ring 3 级。VMM 必须监视 Guest OS 对 GDT、IDT 等特权资源的设置,防止 Guest OS 运行在 Ring 0级,同时又要保护降级后的 Guest OS 不受 Guest 进程的主动攻击或无意破坏。
特权级别名(Ring Alias)。
特权级别名是指 Guest OS 在虚拟机中运行的级别并不是它所期望的。VMM 必须保证 Guest OS 不能获知正在虚拟机中运行这一事实,否则可能打破等价性条件。例如,x86 处理器的特权级别存放在 CS 代码段寄存器内,Guest OS 可以使用非特权 push 指令将 CS 寄存器压栈,然后 pop 出来检查该值。又如,Guest OS 在低特权级别时读取特权寄存器 GDT、LDT、IDT 和 TR,并不发生异常,从而可能发现这些值与自己期望的不一样。为了解决这个挑战,VMM 可以使用动态二进制翻译的技术,例如预先把 “push %%cs” 指令替换,在栈上存放一个影子 CS 寄存器值;又如,可以把读取 GDT 寄存器的操作“sgdt dest”改为“movl fake_gdt, dest”。
地址空间压缩(Address Space Compression)。
地址空间压缩是指 VMM 必须在Guest OS 的地址空间中保留一部分供其使用。例如,中断描述表寄存器(IDT Register)中存放的是中断描述表的线性地址,如果 Guest OS 运行过程中来了外部中断或触发处理器异常,必须保证运行权马上转移到 VMM 中,因此 VMM 需要将 Guest OS 的一部分线性地址空间映射成自己的中断描述表的主机物理地址。VMM 可以完全运行在 Guest OS 的地址空间中,也可以拥有独立的地址空间,后者的话,VMM 只占用 Guest OS 很少的地址空间,用于存放中断描述表和全局描述符表(GDT)等重要的特权状态。无论如何哪种情况,VMM 应该防止 Guest OS 直接读取和修改这部分地址空间。
处理 Guest OS 的缺页异常。
内存是一种非常重要的系统资源,VMM 必须全权管理,Guest OS 理解的物理地址只是客户机物理地址(Guest Physical Address),并不是最终的主机物理地址(Host Physical Address)。当 Guest OS 发生缺页异常时,VMM 需要知道缺页异常的原因,是 Guest 进程试图访问没有权限的地址,或是客户机线性地址(Guest Linear Address)尚未翻译成 Guest Physical Address,还是客户机物理地址尚未翻译成主机物理地址。一种可行的解决方法是 VMM 为 Guest OS 的每个进程的页表构造一个影子页表,维护 Guest Linear Address 到 Host Physical Address 的映射,主机 CR3 寄存器存放这个影子页表的物理内存地址。VMM 同时维护一个 Guest OS 全局的 Guest Physical Address 到 Host Physical Address 的映射表。发生缺页异常的地址总是Guest Linear Address,VMM 先去 Guest OS 中的页表检查原因,如果页表项已经建立,即对应的Guest Physical Address 存在,说明尚未建立到 Host Physical Address的映射,那么 VMM 分配一页物理内存,将影子页表和映射表更新;否则,VMM 返回到 Guest OS,由 Guest OS 自己处理该异常。
处理 Guest OS 中的系统调用。
系统调用是操作系统提供给用户的服务例程,使用非常频繁。最新的操作系统一般使用 SYSENTER/SYSEXIT 指令对来实现快速系统调用。SYSENTER 指令通过IA32_SYSENTER_CS,IA32_SYSENTER_EIP 和 IA32_SYSENTER_ESP 这 3 个 MSR(Model Specific Register)寄存器直接转到 Ring 0级;而 SYSEXIT 指令不在 Ring 0 级执行的话将触发异常。因此,如果 VMM 只能采取 Trap-And-Emulate 的方式处理这 2 条指令的话,整体性能将会受到极大损害。
转发虚拟的中断和异常。
所有的外部中断和主机处理器的异常直接由 VMM 接管,VMM 构造必需的虚拟中断和异常,然后转发给 Guest OS。VMM 需要模拟硬件和操作系统对中断和异常的完整处理流程,例如 VMM 先要在 Guest OS 当前的内核栈上压入一些信息,然后找到 Guest OS 相应处理例程的地址,并跳转过去。VMM 必须对不同的 Guest OS 的内部工作流程比较清楚,这增加了 VMM 的实现难度。同时,Guest OS 可能频繁地屏蔽中断和启用中断,这两个操作访问特权寄存器 EFLAGS,必须由 VMM 模拟完成,性能因此会受到损害。 Guest OS 重新启用中断时,VMM 需要及时地获知这一情况,并将积累的虚拟中断转发。
Guest OS 频繁访问特权资源。
Guest OS对特权资源的每次访问都会触发处理器异常,然后由 VMM 模拟执行,如果访问过于频繁,则系统整体性能将会受到极大损害。比如对中断的屏蔽和启用,cli(Clear Interrupts)指令在 Pentium 4 处理器上需要花费 60 个时钟周期(cycle)。又如,处理器本地高级可编程中断处理器(Local APIC)上有一个操作系统可修改的任务优先级寄存器(Task-Priority Register),IO-APIC 将外部中断转发到 TPR 值最低的处理器上(期望该处理器正在执行低优先级的线程),从而优化中断的处理。TPR 是一个特权寄存器,某些操作系统会频繁设置(Linux Kernel只在初始化阶段为每个处理器的 TPR 设置相同的值)。
软件 VMM 所遇到的以上挑战从本质上来说是因为 Guest OS 无法运行在它所期望的最高特权级,传统的 Trap-And-Emulate 处理方式虽然以透明的方式基本解决上述挑战,但是带来极大的设计复杂性和性能下降。当前比较先进的虚拟化软件结合使用二进制翻译和超虚拟化的技术,核心思想是动态或静态地改变 Guest OS 对特权状态访问的操作,尽量减少产生不必要的硬件异常,同时简化 VMM 的设计。
--------------------------------------------------------------------------------
回页首
Intel-VT 硬件辅助虚拟化技术详解
2005 年冬天,英特尔带来了业内首个面向台式机的硬件辅助虚拟化技术 Intel-VT 及相关的处理器产品,从而拉开了 IA 架构虚拟化技术应用的新时代大幕。支持虚拟化技术的处理器带有特别优化过的指令集来自动控制虚拟化过程,从而极大简化 VMM 的设计,VMM 的性能也能得到很大提高。其中 IA-32 处理器的虚拟化技术称为 VT-x,安腾处理器的虚拟化技术称为 VT-i。AMD 公司也推出了自己的虚拟化解决方案,称为 AMD-V。尽管 Intel-VT 和 AMD-V 并不完全相同,但是基本思想和数据结构却是相似的,本文只讨论 Intel-VT-x 技术。
新增的两种操作模式
VT-x 为 IA 32 处理器增加了两种操作模式:VMX root operation 和 VMX non-root operation。VMM 自己运行在 VMX root operation 模式,VMX non-root operation 模式则由 Guest OS 使用。两种操作模式都支持 Ring 0 ~ Ring 3 这 4 个特权级,因此 VMM 和 Guest OS 都可以自由选择它们所期望的运行级别。
这两种操作模式可以互相转换。运行在 VMX root operation 模式下的 VMM 通过显式调用 VMLAUNCH 或 VMRESUME 指令切换到 VMX non-root operation 模式,硬件自动加载 Guest OS的上下文,于是 Guest OS 获得运行,这种转换称为 VM entry。Guest OS 运行过程中遇到需要 VMM 处理的事件,例如外部中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 的服务的时候(与系统调用类似),硬件自动挂起 Guest OS,切换到 VMX root operation 模式,恢复 VMM 的运行,这种转换称为 VM exit。VMX root operation 模式下软件的行为与在没有 VT-x 技术的处理器上的行为基本一致;而VMX non-root operation 模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生 VM exit。
虚拟机控制块
VMM 和 Guest OS 共享底层的处理器资源,因此硬件需要一个物理内存区域来自动保存或恢复彼此执行的上下文。这个区域称为虚拟机控制块(VMCS),包括客户机状态区(Guest State Area),主机状态区(Host State Area)和执行控制区。VM entry 时,硬件自动从客户机状态区加载 Guest OS 的上下文。并不需要保存 VMM 的上下文,原因与中断处理程序类似,因为 VMM 如果开始运行,就不会受到 Guest OS的干扰,只有 VMM 将工作彻底处理完毕才可能自行切换到 Guest OS。而 VMM 的下次运行必然是处理一个新的事件,因此每次 VMM entry 时, VMM 都从一个通用事件处理函数开始执行;VM exit 时,硬件自动将 Guest OS 的上下文保存在客户机状态区,从主机状态区中加载 VMM 的通用事件处理函数的地址,VMM 开始执行。而执行控制区存放的则是可以操控 VM entry 和 exit 的标志位,例如标记哪些事件可以导致 VM exit,VM entry 时准备自动给 Guest OS “塞”入哪种中断等等。
客户机状态区和主机状态区都应该包含部分物理寄存器的信息,例如控制寄存器 CR0,CR3,CR4;ESP 和 EIP(如果处理器支持 64 位扩展,则为 RSP,RIP);CS,SS,DS,ES,FS,GS 等段寄存器及其描述项;TR,GDTR,IDTR 寄存器;IA32_SYSENTER_CS,IA32_SYSENTER_ESP,IA32_SYSENTER_EIP 和 IA32_PERF_GLOBAL_CTRL 等 MSR 寄存器。客户机状态区并不包括通用寄存器的内容,VMM 自行决定是否在 VM exit 的时候保存它们,从而提高了系统性能。客户机状态区还包括非物理寄存器的内容,比如一个 32 位的 Active State 值表明 Guest OS 执行时处理器所处的活跃状态,如果正常执行指令就是处于 Active 状态,如果触发了三重故障(Triple Fault)或其它严重错误就处于 Shutdown 状态,等等。
前文已经提过,执行控制区用于存放可以操控 VM entry 和 VM exit 的标志位,包括:
External-interrupt exiting:用于设置是否外部中断可以触发 VM exit,而不论 Guest OS 是否屏蔽了中断。
Interrupt-window exiting:如果设置,当 Guest OS 解除中断屏蔽时,触发 VM exit。
Use TPR shadow:通过 CR8 访问 Task Priority Register(TPR)的时候,使用 VMCS 中的影子 TPR,可以避免触发 VM exit。同时执行控制区还有一个 TPR 阈值的设置,只有当 Guest OS 设置的 TR 值小于该阈值时,才触发 VM exit。
CR masks and shadows:每个控制寄存器的每一位都有对应的掩码,控制 Guest OS 是否可以直接写相应的位,或是触发 VM exit。同时 VMCS 中包括影子控制寄存器,Guest OS 读取控制寄存器时,硬件将影子控制寄存器的值返回给 Guest OS。
VMCS 还包括一组位图以提供更好的适应性:
Exception bitmap:选择哪些异常可以触发 VM exit,
I/O bitmap:对哪些 16 位的 I/O 端口的访问触发 VM exit。
MSR bitmaps:与控制寄存器掩码相似,每个 MSR 寄存器都有一组“读”的位图掩码和一组“写”的位图掩码。
每次发生 VM exit时,硬件自动在 VMCS 中存入丰富的信息,方便 VMM 甄别事件的种类和原因。VM entry 时,VMM 可以方便地为 Guest OS 注入事件(中断和异常),因为 VMCS 中存有 Guest OS 的中断描述表(IDT)的地址,因此硬件能够自动地调用 Guest OS 的处理程序。
更详细的信息请参阅 Intel 开发手册 [5]。
解决纯软件虚拟化技术面临的挑战
首先,由于新的操作模式的引入,VMM 和 Guest OS 的执行由硬件自动隔离开来,任何关键的事件都可以将系统控制权自动转移到 VMM,因此 VMM 能够完全控制系统的全部资源。
其次,Guest OS 可以运行在它所期望的最高特权级别,因此特权级压缩和特权级别名的问题迎刃而解,而且 Guest OS 中的系统调用也不会触发 VM exit。
硬件使用物理地址访问虚拟机控制块(VMCS),而 VMCS 保存了 VMM 和 Guest OS 各自的 IDTR 和 CR3 寄存器,因此 VMM 可以拥有独立的地址空间,Guest OS 能够完全控制自己的地址空间,地址空间压缩的问题也不存在了。
中断和异常虚拟化的问题也得到了很好的解决。VMM 只用简单地设置需要转发的虚拟中断或异常,在 VM entry 时,硬件自动调用 Guest OS 的中断和异常处理程序,大大简化 VMM 的设计。同时,Guest OS 对中断的屏蔽及解除可以不触发 VM exit,从而提高了性能。而且 VMM 还可以设置当 Guest OS 解除中断屏蔽时触发 VM exit,因此能够及时地转发积累的虚拟中断和异常。
--------------------------------------------------------------------------------
回页首
未来虚拟化技术的发展
我们可以看到,硬件辅助虚拟化技术必然是未来的方向。Intel-VT目前还处在处理器级虚拟化技术的初级阶段,尚需在如下方面进行发展:
提高操作模式间的转换速度。
两种操作模式间的转换发生之如此频繁,如果不能有效减少其转换速度,即使充分利用硬件特性,虚拟机的整体性能也会大打折扣。早期的支持硬件辅助虚拟化技术的 Pentium 4 处理器需要花费 2409 个时钟周期处理 VM entry,花费 508 个时钟周期处理由缺页异常触发的 VM exit,代价相当高。随着 Intel 技术的不断完善,在新的 Core 架构上,相应时间已经减少到 937 和 446 个时钟周期。未来硬件厂商还需要进一步提高模式的转换速度,并提供更多的硬件特性来减少不必要的转换。
优化翻译后援缓冲器(TLB)的性能。
每次 VM entry 和 VM exit 发生时,由于需要重新加载 CR3 寄存器,因此 TLB(Translation Lookaside Buffer)被完全清空。虚拟化系统中操作模式的转换发生频率相当高,因此系统的整体性能受到明显损害。一种可行的方案是为 VMM 和每个虚拟机分配一个全局唯一 ID,TLB 的每一项附加该 ID 信息来索引线性地址的翻译。
提供内存管理单元(MMU)虚拟化的硬件支持。
即使使用 Intel-VT 技术,VMM 还是得用老办法来处理 Guest OS 中发生的缺页异常以及Guest OS 的客户机物理地址到主机物理地址的翻译,本质原因是 VMM 完全控制主机物理内存,因此 Guest OS 中的线性地址的翻译同时牵涉到 VMM 和 Guest OS 的地址空间,而硬件只能看到其中的一个。Intel 和 AMD 提出了各自的解决方案,分别叫做 EPT(Extended Page Table)和 Nested Paging。这两种技术的基本思想是,无论何时遇到客户机物理地址,硬件自动搜索 VMM 提供的关于该 Guest OS 的一个页表,翻译成主机物理地址,或产生缺页异常来触发 VM exit。
支持高效的 I/O 虚拟化。
I/O 虚拟化需要考虑性能、可用性、可扩展性、可靠性和成本等多种因素。最简单的方式是 VMM为虚拟机模拟一个常见的 I/O 设备,该设备的功能由 VMM 用软件或复用主机 I/O 设备的方法实现。例如 Virtual PC 虚拟机提供的是一种比较古老的 S3 Trio64显卡。这种方式提高了兼容性,并充分利用 Guest OS 自带的设备驱动程序,但是虚拟的 I/O 设备功能有限且性能低下。为了提高性能,VMM 可以直接将主机 I/O 设备分配给虚拟机,这会带来两个主要挑战:1 如果多个虚拟机可以复用同一个设备,VMM 必须保证它们对设备的访问不会互相干扰。2 如果 Guest OS 使用 DMA 的方式访问 I/O 设备,由于 Guest OS 给出的地址并不是主机物理地址,VMM 必须保证在启动 DMA 操作前将该地址正确转换。Intel 和 AMD 分别提出了各自的解决方案,分别称为 Direct I/O(VT-d)和 IOMMU,希望用硬件的手段解决这些问题,降低 VMM 实现的难度。
0条评论