大家好,欢迎来到IT知识分享网。
服务器虚拟化技术
1.历史发展
萌芽期–上世纪60年代
1959年6月,Christopher Strachey在国际信息处理大会上发表了一篇名为《大型高速计算机的 时间共享》的学术报告,第一次提出了“虚拟化”的概念
1965年8月,IBM推出System/360 Model 67和TSS分时共享系统,允 许多个远程用户共享同一高性能计算设备的使用时间,这是最原始的虚拟机技术
发展期–上世纪70~90年代
1972年,IBM发布了用于创建灵活大型主机的虚拟机技术,IBM 360/40、IBM 360/67等大型机通过 VMM(Virtual Machine Monitor, 虚拟机监控器)的技术,在物理硬件之上生成很多可以运行操作系统的独立虚拟机
造价昂贵的大型机服务在虚拟化技术的帮助下,用户可以对硬件进行逻辑分区,实现“多任务处理”,以充分利用大型机的昂贵资源
爆发期–现在
在大型机和UNIX平台的虚拟化技术不断发展的同时,x86平台却由于 架构和性能上的缺陷,而与虚拟化绝缘
随着x86架构的普及,人们开始考虑把虚拟化技术引入应用更广泛的 x86平台Intel、AMD修改了x86处理器的指令集,再加上多核处理器 的出现,使得虚拟化技术在x86平台快速发展起来
1999年,VMware针对x86平X台推出了 第 一 款商业虚拟化软件 VMware Workstation,从此,虚拟化技术终于走下了大型机的神坛, 开启了虚拟化技术的x86时代
X86 架构最初不适合与虚拟化
x86架构存在17条敏感的非特权指令,这些指令在虚拟化环境中执行时可能会导致系统异常
1.什么叫敏感指令?
以x86架构为例,x86架构最开始一共有4个特级层次。从0~3,越小特权越大。操作系统运行在Ring0上,Ring1和Ring2支持驱动设备,应用程序运行在Ring3上。其中一些关键操作指令只能由Ring0完成。称为特权指令。在VMM模型中,客户机操作系统运行在非特权模式下,即非Ring0模式下。所以一部分原来需要由Ring0处理的指令需要由VMM捕获然后处理。这些指令称为敏感指令。即所有敏感指令都是特权指令。
2.为什么x86架构最开始不能支持系统虚拟化?
经过上面的铺垫,我们来说下关键问题。
x86架构有个缺陷。x86架构有一部分敏感指令并不是特权指令,变成了非特权指令。这就出现问题了。非特权指令在Ring1~Ring3上是可以执行。VMM不会处理这些指令。这就导致了问题。系统本想让VMM执行的指令却被非特权级别执行了。一个不受虚拟软件控制的指令执行在虚拟层。就好象一个学医学的和你坐在一起敲代码,你是什么感受呢?这就是问题所在了。
但是后来inter和AMD都加强了自己的很多技术,比如inter的VT(Virtualization Technology)和AMD的SVM(Secure Virtual Machine)技术,弥补了x86架构的不足。
3.解决办法
办法一
解决方法1:BT(Binary Translation,二进制翻译)
BT和直接执行技术的结合实现了全虚拟化,此时客户操作系统可以通过虚拟化层从物理硬件上完全抽取出来,客户操作系统感知不到是否发生了虚拟化,完全不需要进行修改。
全虚拟化是迄今为止唯一不需要硬件或操作系统协助来进行敏感和特权指令虚拟化的技术,
Hypervisor(管理程序)可以翻译所有的操作系统特权指令,并保存在缓存里备用,而用户级的指令完全可以全速直接执行。
全虚拟化提供了最好的虚拟机隔离和安全性,简化了客户操作系统迁移和移植能力。
VMware ESX Server就是通过全虚拟化技术来实现的最好案例。
工作原理
1.Guest OS指令段在执行前进行整段翻译,将其中的敏感非特权指令替换为Ring0中
2.执行对应特权指令
3.非特权指令直接执行
4.特权指令首先被陷入到VMM,VMM通过一系列的模拟操作来实现此特权指令,然后返回给Guest OS,Guest OS从上次被中断的地方继续执行
优缺点
优点:
Guest OS无需修改,Guest OS感知不到是否发生了虚拟化优点
缺点:
当负载较大、敏感指令频繁被执行时性能低下
办法二
解决方法2:半虚拟化(Para—Virtualization)
如图所示,半虚拟化需要修改操作系统内核,替换掉不
能虚拟化的指令,通过超级调用(hypercall)直接和底层的虚拟化层hypervisor来通讯,hypervisor同时也提供了超级调用接口来满足其他关键内核操作,比如内存管理、中断和时间保持。
工作原理
1.在Hypervisor上运行的Guest OS已经集成了与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hypervisor来实现虚拟化
2.Hypervisor提供Hypercall接口来满足Guest OS的关键内核操作,如内存管理、中断和时间同步等
优缺点
优点:
性能非常接近物理机
缺点:
不支持未修改的操作系统,兼容性和可移植性差
详细介绍
半虚拟化和全虚拟化不同,全虚拟化不需要修改上面的操作系统,敏感的操作系统指令直接通过BT进行处理。半虚拟化的价值在于降低了虚拟化的损耗,但是半虚拟化的性能优势很大程度上依赖于运行的负载。
由于半虚拟化不支持未修改的操作系统(例如: Windows
2000/XP),它的兼容性和可移植性差。在实际的生产环境中,半虚拟化也会导致操作系统支持和维护的艰难,因为半虚拟化往往要深入修改操作系统内核。
开源的Xen项目是半虚拟化的代表,它可以通过修改Linux的内核来实现CPU和内存的虚拟化,通过定制的操作系统驱动来实现I/O的虚拟化。
为了实现全虚拟化,需要构建复杂的BT技术,这往往比直接修改客户操作系统来启用半虚拟化更艰难。VMware实际上已经在产品中使用了半虚拟化的一些技术,来构建VMware Tools和优化虚拟设备驱动。
VMware tools服务为VMM Hypervisor提供了 一个后门服务,用来同步时间、记录日志和客户操作系统关机等。Vmxnet是半虚拟化的I/O设备驱动程序,它可以和hypervisor共享数据结构。这些半虚拟化技术的应用改善了设备的兼容能力,提高了数据吞吐速率,降低了CPU利用率。
需要重点澄清的是:VMware tools 服务和vmxnet设备驱动并不是CPU半虚拟化解决方案,它们紧紧对客户操作系统进行了微小的、非关键的修改,并不需要修改客户操作系统内核。
办法三
硬件辅助虚拟化解决非特权敏感指令无法陷入问题的解决思路:引入VMX模式(Virtual Machine eXtension)
VMX模式
如图所示,特权和敏感指令自动在hypervisor上执行,从而无需BT或半虚拟化技术。客户操作系统的状态保存在VT-x(Virtual Machine Control Structure,虚拟机控制结构)中或AMD-v(Virtual Machine Control Block,虚拟机控制块)。支持Intel VT和AMD-V的CPU从2006年开始推向市场,因此只有新的系统包含了这些硬件辅助的虚拟化功能。
图为硬件辅助的x86架构虚拟化
由于hypervisor到客户操作系统转换的损耗和严格的编程模式要求,第一代的硬件辅助虚拟化性能并不理想,VMware的BT技术很多时候性能更好。
第一代硬件辅助虚拟化为编程留了很小的空间,降低了软件的灵活性,增加了hypervisor到客户操作系统转换的损耗,正式基于此,VMware仅仅在很少的情况下利用了第一代的硬件辅助虚拟化,比如,在Intel平台上支持64位操作系统的时候,VMware使用了Intel的VT-x。
主流的Hypervisor产品
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11825.html