首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

服务器虚拟化之道(三)

上一期我们介绍了下虚拟化本质,分类,相关术语解释。说起虚拟化,通过虚拟化资源的类型,我们可以分为:计算虚拟化、存储虚拟化和网络虚拟化。其中计算虚拟化又分为CPU虚拟化、内存虚拟化和I/O虚拟化。本期重点学习计算虚拟化技术。

一、CPU虚拟化

CPU虚拟化指多个虚拟机共享共用CPU资源。如果要对CPU虚拟化进行详细的了解,首先要了解传统的x86架构下的处理器的保护模式。

在传统物理x86架构中,保护模式下一共有四个不同的优先级,分别为Ring 0到Ring 3(Ring指的是CPU的运行级别)。不同的优先级有不同的作用。Ring 0用于操作系统内核(物理x86架构中,操作系统内核只有一个),对物理资源拥有绝对的控制权,拥有最高的特权。其他程序运行在Ring1~Ring3状态,Ring 1和Ring 2用于操作系统的服务,Ring 3用于应用程序。但是在虚拟化技术中,我们知道有宿主机和虚拟机,所以虚拟化环境中,也会拥有两个操作系统内核:宿主机的操作系统内核和虚拟机操作系统内核,它们都会执行Ring0级别的指令。但是Hypervisor需要对系统资源进行统一管理调度,所以Hypervisor 必须运行在最高的特权等级Ring 0,为了避免Guest OS 控制系统资源,对其他Guest OS的资源造成影响,必须降低Guest OS 的运行级别,这就是经典的虚拟化方法:特权等级解除技术(Privilege deprivileging)。当解除了 Guest OS 的特权后,Guest OS 的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入到Hypervisor模拟执行(陷入-模拟)。

但是这个时候又出现了一个问题:由于x86 中有19条敏感指令不是特权指令,无法通过经典的虚拟化技术完全虚拟化,所以这里我们有三种解决方法:全虚拟化、半虚拟化和硬件辅助虚拟化。

1、全虚拟化(Full Virtualization) :基于二进制翻译

全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。

2、半虚拟化/超虚拟化(Paravirtualization)

半虚拟化是通过修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 直接交互。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供,所以也被称为超虚拟化。比较著名的 VMM 有 Xen等。

3、硬件辅助虚拟化(Hardware-Assisted Virtualization)

硬件辅助虚拟化是指借助硬件的支持来实现高效的全虚拟化。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。硬件这层就做了些区分,这样全虚拟化下,那些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势。

4、三种技术性能对比

二、内存虚拟化

内存虚拟化指多个虚拟机共享同一物理内存,需要相互隔离。把物理机的真实物理内存统一管理,包装成多份虚拟的内存给若干虚拟机使用。但是在虚拟化中有一个明显的问题:物理地址0只有一个,无法同时满足所有虚拟机都从0开始的要求。那么内存虚拟化的核心就是引入一层新的地址空间-虚拟机物理地址空间,让虚拟机以为自己运行在真实的物理地址空间中,实际上它是通过VMM访问真实的物理地址的。在VMM中保存客户机地址空间和物理机地址空间之间的映射表。

VMM 内存虚拟化的实现方式:

①软件方式:通过软件实现内存地址的翻译,比如Shadow page table(影子页表)技术。

②硬件实现:基于CPU的辅助虚拟化功能,比如AMD的NPT和Intel的EPT技术

三、I/O虚拟化

模拟(完全虚拟):完全使用软件来模拟真实硬件。模拟硬件例如键盘鼠标等。性能差。

半虚拟化:对硬件驱动由前端(IO frontend)直接转到后端(IO backend)调用;通常仅适用于硬盘和网卡。性能高。

IO-through:IO透传,直接分配给虚拟机物理设备。例如直接分配一个硬盘或网卡给虚拟机,需要硬件具备IO透传技术。比如在Xen下由Dom0分配;但是访问使用直接使用;不经过Dom0。此技术需要硬件支持。

四、参考

虚拟化技术(一)之基础概念

http://blog.51cto.com/cuchadanfan/1718996

理解全虚拟、半虚拟以及硬件辅助的虚拟化

https://blog.csdn.net/flyforfreedom2008/article/details/45113635

社群交流

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181218G0SWP000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券