🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 什么是系统虚拟化 系统虚拟化是将底层物理设备与上层操作系统、软件分离的一种去耦合技术,在一台物理机器上逻辑的划分出多台机器。虚拟化的目标是实现IT资源利用效率和灵活性的最大化 ![1.1](http://oxysobnip.bkt.clouddn.com/1.1.png) 多个系统融合在一台服务器上——资源利用率高 资源利用率高 应用系统不再依赖特定的硬件——系统维护灵活 ## 虚拟化基础架构 ![1.2](http://oxysobnip.bkt.clouddn.com/1.2.png) ## 虚拟化 在一台物理主机上虚拟出多个虚拟计算机(虚拟机,Virtual Machine,VM),其上能同时运行多个独立的操作系统,这些客户操作系统(Guest OS)通过虚拟机管理器(Virtual Machine Monitor,VMM,也称作Hypervisor)访问实际的物理资源。 ![1.3](http://oxysobnip.bkt.clouddn.com/1.3.png) ## 为什么需要使用虚拟化 公司服务器越来越多 – 充分利用是个问题 – 统一运维管理是个问题 * 浪费时间 * 操作繁琐 * 机器闲置时间较多 计算系统利用率不高! “多数用户承认,计算系统平均利用率只有25%~30%” ## 为什么客户要选择服务器虚拟化? ![1.4](http://oxysobnip.bkt.clouddn.com/1.4.png) 1. 打破“一台服务器对应一套应用”的模式,将物理服务器进行整合,提升利用率 2. 服务器和相关IT硬件更少,节省了机房空间,也减少了散热和电力需求 3. 具备灵活数据备份和应用迁移机制,保障服务永不中断 4. 资源动态调配和模板化部署,应用系统快速上线,及时响应业务变化 ## 虚拟化技术分类 ![1.5](http://oxysobnip.bkt.clouddn.com/1.5.png) ## 什么是桌面虚拟化? 桌面虚拟化(MS:Remote Desktop、Citrix:XenDesktop、Vmware:View) − 将原本在本地电脑安装的桌面系统统一在后端数据中心进行部署和管理; − 用户可以通过任何设备,在任何地点,任何时间访问属于自己的桌面系统环境。 ![1.6](http://oxysobnip.bkt.clouddn.com/1.6.png) ## 服务器虚拟化 ![1.7](http://oxysobnip.bkt.clouddn.com/1.7.png) ## cpu 【1】无虚拟化 – CPU一般设为四个Ring – Kernel Mode一般跑在Ring 0上 – User Mode一般跑在Ring 3上 – 对于一个普通的传统的Linux系统没有问题 ![1.8](http://oxysobnip.bkt.clouddn.com/1.8.png) 【2】虚拟化 – 在Guest机器和Host机器中间加一层Hypervisor – Host机器看它像跑在自己上面的程序 – Guest机器看它像自己所运行的硬件 – 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0,可怎么办? ![1.9](http://oxysobnip.bkt.clouddn.com/1.9.png) 【3】传统cpu工作模式 -- X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。 Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之…… 就 Linux+x86 来说, -- 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。 -- 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。 【4】为什么需要 为什么需要 CPU 虚拟化 ![1.10](http://oxysobnip.bkt.clouddn.com/1.10.png) ## 虚拟化分类 虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在 ring0 的,客户操作系统就不能也在 ring0 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。 虚机怎么通过 VMM 实现 Guest CPU 对硬件的访问,根据其原理不同有三种实现技术: 【1】基于二进制翻译的全虚拟化(Full Virtualization with Binary Translation) 客户操作系统运行在 Ring 1,它在执行特权指令时,会触发异常(CPU的机制,没权限的指令会触发异常),然后 VMM捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大, 简单的一条指令,执行完,了事,现在却要通过复杂的异常处理过程 ![1.11](http://oxysobnip.bkt.clouddn.com/1.11.png) 异常 “捕获(trap)-翻译(handle)-模拟(emulate)” 过程: ![1.12](http://oxysobnip.bkt.clouddn.com/1.12.png) 【2】 超虚拟化(或者半虚拟化/操作系统辅助虚拟化 Paravirtualization) 半虚拟化的思想就是,修改操作系统内核,替换掉不能虚拟化的指令,通过超级调用(hypercall)直接和底层的虚拟化层hypervisor来通讯,hypervisor 同时也提供了超级调用接口来满足其他关键内核操作,比如内存管理、中断和时间保持。这种做法省去了全虚拟化中的捕获和模拟,大大提高了效率。所以像XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本等价。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么XEN只支持虚拟化Linux,无法虚拟化windows原因,微软不改代码啊。 ![1.13](http://oxysobnip.bkt.clouddn.com/1.13.png) 【3】硬件辅助的全虚拟化 2005年后,CPU厂商Intel 和 AMD 开始支持虚拟化了。Intel 引入了 Intel-VT (Virtualization Technology)技术。这种 CPU,有 VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 共 4个运行级别。这样,VMM 可以运行在 VMX root operation模式下,客户 OS 运行在VMX non-root operation模式下。也就说,硬件这层就做了些区分,这样全虚拟化下,那些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势 ![1.14](http://oxysobnip.bkt.clouddn.com/1.14.png) ## 三种虚拟化技术的比较 ![1.15](http://oxysobnip.bkt.clouddn.com/1.15.png) ## 全虚拟化 vs 半虚拟化 ![1.16](http://oxysobnip.bkt.clouddn.com/1.16.png) ## 服务器虚拟化方法 【1】全虚拟化(Full-Virtulization):无需修改操作系统, VM ESXi、Linux KVM ![1.17](http://oxysobnip.bkt.clouddn.com/1.17.png) 【2】半虚拟化(Para-Virtulization):集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作系统,MS Hyper-V、 Ctrix Xen、IBM PowerVM ![1.18](http://oxysobnip.bkt.clouddn.com/1.18.png) 【3】操作系统层虚拟化:开发、测试环境,VM Workstation、VM Server、Oracle VitrualBox ![1.19](http://oxysobnip.bkt.clouddn.com/1.19.png)