虚拟化技术

摘录转自: http://blog.csdn.net/babyfacer/article/details/8577333

虚拟化

未虚拟化的计算机


这是一个基本的电脑结构示意图,比如我们一般用的台式机或者笔记本电脑。最下面一层显示了系统的硬件资源:CPU,内存,存储和网卡。

操作系统直接运行在硬件层之上,操作系统层又分为两个部分:

  • 核心层(kernel):在系统众多资源和程序(运行在用户级)之间管理这些系统资源和通信
  • 用户层(userland):运行用户应用程序和软件库的软件层

需要指出的是,尽管这个图显示所有的应用程序都是同样的“尺寸”,但是某些应用程序会比其他程序需要更多的资源,而且一个应用程序所使用资源也会根据运行情况而变化。操作系统会根据系统的资源情况来管理(调度)程序们的需求。

客户机-服务器环境中的虚拟化

数据中心通常是一个服务器上运行一个应用程序,主要是有以下原因:

  • 专用应用程序的需求:很多应用程序被认证只能在某一特定版本的操作系统下,加一些特定的补丁版本才能运行。它们也许还需要一个专有的软件栈(某一版本和某一补丁等)或特定的配置。这需要此程序不能和其他程序共享系统环境。
  • 应用程序冲突:原因类似,某些程序之间相互不兼容。
  • 资源竞争:如果共享同一台机器的话,某些对资源利用率很高的应用程序会“排挤”其他应用程序。
  • 安全性:隔离可以阻止因程序相互之间的妥协而产生对系统的攻击。
  • 灾难恢复:某个应用程序的崩溃不会影响到其他程序的正常运行。
  • 可维护性:你可以升级或重启系统,而不会影响到其他程序或系统。
  • 业务需要:很多企业的IT项目都会包括某一专用的程序。因预算和管理等缘故,每个项目都需要有它们自己的服务器和应用程序。

这种一个程序一个服务器的模式在20世纪80年代到90年代都运行得不错,特别是当某个程序对服务器的资源利用率很高的时候。但是,莫尔定律意味着更多的高性能服务器很快就会利用率很低,一般来说在8%到15%之间。显然,这是对设备,设施、电力和IT管理资源等低效率的使用。虚拟化正是为此而来的解决方案。

主机虚拟化(Hosted Virtualization)


在主机虚拟化模式中,hypervisor(管理程序)运行在操作系统层之上,用于仿真模拟(emulate)真正的硬件资源,来创建和管理一或多个虚拟机。
(其实,硬件虚拟化可以分为:全虚拟化和基于主机的虚拟化。全虚拟化不需要修改主机操作系统。它依赖于二进制翻译来陷入和虚拟化一些敏感、不可虚拟化的指令的执行。客户操作系统和它们的应用由非临界和临界指令构成。在基于主机的系统中,主机操作系统和客户操作系统同时存在,虚拟化软件层处于两者之间。)

因为hypervisor在宿主OS(Host OS)之上,而hypervisor之上是客户OS(Guest OS),所以这种叫做“主机虚拟化(hosted virtualization)”。(注:注意英文单词便能理解,中文的翻译不太准确)这种也被认为是“应用程序级虚拟化(application-level virtualization)”,因为hypervisor在Host OS上运行应用程序。

主机虚拟化用来整合服务器资源,使得多台服务器能在一台物理机上实现,并能保持相互的独立性(isolation)。任何运行在虚拟机上的Guest OS会认为它自己就是运行在独立的,真的计算机,但实际上它是在访问一组有限的硬件资源(由系统管理员设定)。

操作系统也会被认为是个管家(“supervisor”),所以我们用术语“hypervisor”来表示管理这些管家的管理人。Hypervisor 在运行时(runtime)通过“二进制翻译”(binary translation)来修改操作系统,操作系统调用硬件时就被陷入(intercepted / “trapped”)或重定向(redirected)。由于引入了非常耗时的二进制翻译,主机虚拟化的性能可能并不理想。特别对I/O密集型应用更是一个大的挑战。二进制翻译通过利用代码缓存存储已经翻译过的热指令来改进性能,但却增加了内存的消耗。

主机虚拟化引入了一些其他基础设施管理的优点:

  • 负载均衡(Load balancing)
  • 备份,迁移,克隆(Backups, migration, cloning)
  • 灾难恢复(Disaster recovery)

这种虚拟化方式提高了资源利用率,但是还是有很大的不足:

  • 为了能在物理硬件上工作,一个应用程序需要穿过两个操作系统和两套硬件
  • 其中一套硬件是“被模拟的硬件”:软件程序表现得像硬件,实际却大大慢过真正的硬件。

裸金属硬件虚拟化(Bare-Metal Hardware Virtualization)


裸金属虚拟化解决了一部分 hypervisor 和 Host OS 带来的问题。Host OS 被剥离,剩下VMM(Virtual Machine Monitor)来运行hypervisor。为了此目的,VMM经过优化,hypervisor嵌入其中(最开始说到的操作系统中的userland级也被剥离,只剩虚拟化厂商的一些工具软件)。当然裸金属虚拟化也有缺点:

  • 仍然使用的是硬件仿真(hardware emulation),即性能还是比较低。
  • hypervisor也许有它自己的硬件驱动,你不能确定这些是否和标准的操作系统一样容易获得。

半虚拟化(Paravirtualization)


半虚拟化类似于裸金属虚拟化,但它移除了虚拟机硬件仿真(对比上面两图即能发现区别)

hypervisor直接与“特权Guest OS”(privileged guest OS)沟通,来访问下层的硬件。hypervisor管理操作系统们就像操作系统管理应用程序们那样:允许一个操作系统访问下层的硬件资源,同时阻止其他操作系统在同一时间访问同一资源。但是,为了达到此目的,操作系统必须经过修改以让它运行在一个“为操作系统们服务的操作系统”(OS for OSes)上面。这种情形的硬件虚拟化,操作系统是被“愚弄”(在runtime经过binary translation)以以致于它认为它是直接运行在硬件之上,就象最初设计操作系统时那样。

特权Guest OS与硬件资源(驱动)沟通访问:

  • 硬件驱动驻留在privileged guest OS中
  • privileged guest OS直接访问硬件驱动,而Guest OS通过privileged guest OS来访问硬件驱动。Guest OS是使用共享内存(即内存可被两个不同的应用程序访问)来做到,从而可提高性能。

好处在于:

  • 非常高效——没有Host OS,没有硬件仿真(即没有 runtime binary translation of OS calls)
  • 类似主机虚拟化和裸金属虚拟化,可用privileged guest OS上安装的任何设备驱动,hypervisor不包括任何设备驱动。

缺点在于:

  • 需要修改Guest OS,让它意识到是运行在一个半虚拟化的环境中。
  • 如果能访问源代码,这些修改是在kernel核心层,或者在操作系统上安装系统工具。

此外,随着2006年发布了支持虚拟化的CPU(Intel VT 和 AMD-V),相比其他形式的虚拟化技术,半虚拟化技术失去了它的一些优势:

  • 支持虚拟化的CPU去掉了一些虚拟机必须执行的二进制翻译工作。更多的指令是直接在硬件上运行,而不需要仿真。
  • 硅晶片快过硬件,所以将某些虚拟化功能搬到芯片上可以获得更好的性能。

操作系统虚拟化(Operating System Virtualization)


解决虚拟化最高效的方式是在操作系统层。好处在于:

  • 非常高效——没有资源的重复。
  • 一个服务器上只有一份核心层(所有其他形式的虚拟化技术,包括半虚拟化,需要每个应用程序经过多个操作系统的核心层才能运行)
  • 每个区域(zone)拥有自己的用户层/userland(包括文件系统,系统类库,网络配置,单个应用程序的进程表),和自己许可的用户人数。
  • 没有硬件仿真
  • 利用操作系统的调度器(OS scheduler):应用程序可以在需要时进行“爆发(burst)”,使用更多的系统资源,如同应用程序在单个(而非多个)操作系统上使用那样。应用程序并没有被虚拟机的设定给简单地限制住(即使使用半虚拟化,操作系统们也会被指派一定数量的资源,无法做到爆发,超过其指定数量)。
  • 补丁和升级程序自动传播到所有的容器中,不需要管理和升级每个不同操作系统。

不足之处在于:

  • 所有的操作系统环境是统一的,你无法在不同的操作系统上安装不同版本的补丁程序。不过,对于web应用程序,这并不是一个问题,因为Apache,MySQL和PHP都可以运行在Windows,Linux和SmartOS上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值