计算虚拟化的硬件扩展话题
针对不同的资源,虚拟化主要包含三个方面的内容:计算虚拟化、存储虚拟化和网络虚拟化,接下来咱们就分别详细介绍这三类资源的虚拟化手段和技术。今天主要聊虚拟化中的“计算虚拟化”,也就是主要针对 CPU 的虚拟化。CPU 虚拟化可以说是计算虚拟化最关键的核心,弄清楚了 VM Exit 和 VM Entry。后续的I/O 虚拟化,内存虚拟化都是建立在这个基础上。下面就由创新互联建站小编和大家讲一讲什么是计算虚拟化。
创新互联建站是专业的伽师网站建设公司,伽师接单;提供成都网站设计、成都做网站、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行伽师网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!一、计算虚拟化计算虚拟化通常包括三方面的内容
1、CPU虚拟化:由于多个 VM 共享 CPU 资源,需要对 VM 中的敏感指令进行截获并模拟执行。
2、内存虚拟化:由于多个 VM 共享同一物理内存,需要相互隔离
3、I/O虚拟化:由于多个 VM 共享一个物理设备,如磁盘、网卡,一般借用 TDMA 的思想,通过分时多路技术进行复用。
二、CPU虚拟化简介
对于 X86 处理器来说,CPU 虚拟化的基础是因为其保护模式下一共有 4 个不同优先级,分别从 Ring 0 直到 Ring3。这些 Ring 的优先级随其所执行功能的不同也有所不同。其中Ring 0 用于操作系统内核和驱动,优先级高,拥有高的“特权”,Ring 1 和 Ring 2 用于操作系统服务,优先级次之,Ring 3 用于应用程序,优先级最低。一般应用程序都放在 Ring 3 等级,至于 Ring 1 和 2 则很少被使用。对于应用程序与 OS 发出的命令要求,CPU 一律采取 Direct ExecuTIon,如下图所示:
如果要进行虚拟化,Ring 0 这一层就必须交给 VMM来掌控,进行硬件资源的分配处理。
那么问题来了,由于 OS 一定要在 Ring 0 进行访问,直接控制硬件,而现在 Ring 0 的部分已经交给 VMM,操作系统则被调降到 Ring 1,但是由于 X86 CPU 最初定位为单个用户使用,当时并没有考虑到将计算资源分配给不同 OS 的问题;而且 X86 的指令集架构(即ISA,是处理器的一个抽象描述,即设计规范,定义处理器能够做什么。其本质就是一系列的指令集综合。当前主流的 ISA 有 X86、ARM、MIPS、Power 等,这里我们仅讲 X86 ISA)中有 19 条敏感指令不是特权指令,这些指令必须要在 Ring 0 这个层级才能作用,否则操作系统将会产生警告、终止掉应用程序甚至导致系统崩溃。
于是,经过研究,我们的攻城狮们提出以下三种方法来解决这个问题。
(1)全虚拟化(Full VirtualizaTIon)
这一方法最初由 VMware 在 1999 年提出,这是一种叫做二进制翻译(Binary TranslaTIon)的技术,原理是通过 VMM 来预先拦截这些 OS 当中原本不能被虚拟化的命令(nonvirtualizable instrucTIons),并将其进行二进制转译的替换操作,什么叫软文营销?使操作系统认为自己可以直接掌控硬件,并不知道实际上已经被虚拟化成为虚拟机了。如下图所示:
而应用程序一般性的命令则还是直接向硬件请求,以维持良好的性能。全虚拟化的好处是 OS 不必做任何修改,直接安装即可使用。而且所支持的 OS 种类也最多,但若不靠硬件辅助(Hardware Assisted Virtualization),全虚拟化的实现难度是非常大。
(2)半虚拟化( ParaVirtualization)
半虚拟化的原理是修改 Guest OS 核心中部分代码,植入了 Hypercall(超级调用),从而使 Guest OS 会将和特权指令相关的操作都转换为发给 VMM 的 Hypercall(超级调用),由 VMM 继续进行处理。而 Hypercall 支持的批处理和异步这两种优化方式,使得通过Hypercall 能得到近似于物理机的速度。
这样就能让原本不能被虚拟化的命令(nonvirtualizable instructions)可以经过 Hypercall interfaces 直接向硬件提出请求,Guest OS 的部分还是一样在Ring 0,不用被调降到 Ring 1。如下图所示:
半虚拟化的优点是 CPU、I/O 损耗减到最低,理论上性能胜过全虚拟化技术,缺点则是必须要修改 OS 内核才行,只有 SuSE、Ubuntu 等少数 Linux 版本才支持,OS 兼容性不佳,因为微软不肯修改自家的操作系统内核,因此如果是 Windows 系统,就无法使用半虚拟化了。
VMware 在 2005 年发表了透明半虚拟化(Transparent Paravirtualization),针对支持半虚拟化的 OS 可以在 VMware 的平台通过 VMI(Virtual Machine Interface)打开半虚拟化来增加 I/O 性能,降低CPU 的使用率。
其原理是在支持半虚拟化的 Guest OS 上面由 VMware tools 开一道后门,与 VMM 进行沟通,然后在 OS 上安装半虚拟优化驱动程序,以提高 I/O 性能,降低 CPU 使用率。这是一种在 VMware 平台上可以支持半虚拟化 OS 的最佳方式,但是必须要注意的是,底层 CPU Virtualization 仍然是使用二进制转换(Binary Translation)的全虚拟化技术(Full Virtualization),而不是半虚拟化技术。
(3)CPU 硬件辅助虚拟化( Hardware Assisted Virtualization)
2005 年后,虚拟化渐渐成为潮流,势不可挡。Intel 与 AMD 决定从 CPU 根本架构着手,更改原来的特权等级 Ring 0、1、2、3,将之归类为 Non-Root mode,又新增了一个 Root Mode 特权等级(有人称为Ring -1),这样一来,OS 便可以在原来Ring 0 的等级,而VMM 则调整到更底层的 Root Mode 等级。如下图所示:
目前主要有 Intel 的 VT-x 和 AMD 的 AMD-V 这两种技术。其核心思想都是通过引入新的指令和运行模式,使 VMM 和 Guest OS 分别运行在不同模式(ROOT 模式和非 ROOT 模式)下,且 Guest OS 运行在 Ring 0 下。通常情况下,Guest OS 的核心指令可以直接下达到计算机系统硬件执行,而不需要经过 VMM。当 Guest OS 执行到特殊指令的时候,系统会切换到 VMM,让 VMM 来处理特殊指令。
VMM 和 Guest OS 共享底层的处理器资源,因此硬件需要一个物理内存区域来自动保存或恢复彼此执行的上下文。这个区域称为虚拟机控制块(VMCS),包括客户机状态区(Guest State Area),主机状态区(Host State Area)和执行控制区。小伙伴们要想获得更多计算虚拟化的内容,请关注创新互联!
当前文章:计算虚拟化的硬件扩展话题
URL链接:http://scyanting.com/article/sogdsd.html