服务器虚拟化技术简介

更新时间:2023-06-05 10:57:35 阅读: 评论:0

服务器虚拟化技术简介
中提到云计算最重要的就是服务器虚拟化和调度(Scheduler),本⽂将简单介绍服务器虚拟化原理。
服务器虚拟化是指将⼀台计算机(称为物理机、物理服务器)通过hypervisor虚拟为多台逻辑计算机的技术,这些逻辑计算机⼜被称为虚拟机(VM,Virtual Machine),每台虚拟机都拥有独⽴的“硬件”。虽然你可以在虚拟机的操作系统中看到这些“硬件”,不过它们并不是真实存在的,⽽是通过hypervisor将物理机的硬件虚拟⽽来。虚拟机运⾏时,虚拟机硬件的⼯作实际是由物理机的硬件完成的。
hypervisor⼜被称为虚拟机监视器(VMM,Virtual Machine Monitor),是实现物理机虚拟为虚拟机的操作系统或者软件,它为虚拟机提供虚拟的硬件资源,负责管理和分配这些资源,并确保上层虚拟机之间的相互隔离。hypervisor有两种类型:⼀种是操作系统,直接安装在物理机上;另⼀种是应⽤程序,需要先在物理机上安装操作系统,再在操作系统中安装hypervisor。
服务器虚拟化的分类
服务器虚拟化的有多种划分⽅式,可以根据虚拟化架构划分为裸⾦属/寄居,根据虚拟化层次硬件辅助虚拟化/软件辅助虚拟化,根据虚拟化平台划分为全虚拟化/半虚拟化。
裸⾦属/寄居
未虚拟化的x86服务器架构,⾃下⽽上是物理硬件(Hardware)、操作系统(OS),应⽤程序(APP)。这和我们个⼈计算机⼀样,就是在计算机上装操作系统,再在操作系统⾥⾯安装应⽤程序。
未虚拟化的x86服务器
裸⾦属
裸⾦属(bare-metal)架构也叫bare-metal hypervisor、Ⅰ型,最有代表性就是VMware ESX(i)。
VMware ESXi
ESXi是VMware的企业级服务器虚拟化技术,本⾝是⼀个操作系统,直接安装的物理服务器上。使⽤ESXi需要先在物理服务器上安装ESXi,然后在ESXi中创建各种虚拟硬件(相应虚拟硬件的集合,不包括操作系统,也可以称为虚拟机),再在虚拟机上安装操作系统,最后才能在这些操作系统中安装应⽤程序。
Tips:早期VMware的企业级服务器虚拟化版本称为ESX,后来升级版本称为ESXi。
寄居
寄居(hosted)架构也叫hosted hypervisors、Ⅱ型,代表产品VMware workstation和VirtualBox。
分解因式Windows中使⽤VMware workstation实现服务器虚拟化
黄连阿胶鸡子黄汤VMware workstation和VirtualBox通常⽤作个⼈学习、测试,与寄居架构的VMware ESXi最明显的区别在于,ESXi是操作系统,直接安装在物理硬件之上,⽽VMware workstation则是软件,需要安装在操作系统(⼀般是Windows,也⽀持Linux)中。
以Windows中安装VMware workstation为例,先在计算机上安装Windows,再在Windows上安装workstations,再在workstations中创建虚拟机,最后在虚拟机中安装操作系统,在操作系统中安装软件。
判断虚拟化类型是裸⾦属还是寄居架构,取决于虚拟化层,也就是hypervisor所处的位置。寄居架构将虚拟化层(hypervisor)以⼀个应⽤程序的⽅式安装运⾏于操作系统之上,⽀持最为⼴泛的各种硬件配置(只要HOST OS⽀持该硬件即可)。裸⾦属架构将虚拟化层(hypervisor)直接安装到⼲净的x86服务器上,裸⾦属架构相对于寄居架构效率更⾼(少了Host OS这⼀层),且具有更好的可扩展性、健壮性和性能。
企业级服务器虚拟化都是裸⾦属架构(效率更⾼),像主流的企业级服务器虚拟化ESXi、KVM、Xen、Hyper-v都是裸⾦属架构。
*有点特殊的裸⾦属KVM
KVM关于裸⾦属/寄居的划分有点模糊。
KVM
部署KVM,⾸先需要在物理服务器上安装Linux系统,再在Linux中“安装KVM”。通常所说的KVM实际上是KVM和qemu两种技术的结
合,qemu本⾝是⼀种完整的寄居架构软件,采⽤⼆进制翻译的⽅式虚拟化CPU,KVM则采⽤效率更⾼的硬件辅助虚拟化CPU。由于KVM只能虚拟化CPU、内存,其它硬件(⽹卡、硬盘)的虚拟化则是由qemu来负责。
qemu是寄居架构,通俗来讲就是qemu是个⼯作在Linux上的软件。⽽KVM则相当于“给Linux内核打了⼀个补丁”,将Linux部分内核转换为hypervisor,Linux内核⾃然属于操作系统,这样看来KVM的hypervisor既有寄居(qemu)⼜有裸⾦属(kvm),是⼀种⽐较特殊的裸⾦属。Tips:以CentOS系统部署KVM为例,仅简单体验KVM可以通过yum安装。因为我们习惯了yum安装各种软件,这样看起来KVM是yum安装的“软件”,应该属于寄居架构,实际上多把KVM划为裸⾦属架构。因为像升级操作系统,可以通过yum(yum install kernel),但升级操作系统不能认为是通过yum安装kernel这个软件,同理也不应该认为部署KVM是在操作系统中安装了KVM这个软件。
*有点特殊的裸⾦属的Hyper-v和Xen
把他们放在⼀起是因为他们都有⼀个⾮常相似的概念,Hyper-v叫做⽗分区、Xen叫做Domain 0 。Hyper-v是Windows Server的⼀个功
能,Xen则是在原Linux上安装新的Linux内核。没有开启Hyper-v的Windows Server和没有部署Xen的Linux,就是普通的x86服务器结构。部署虚拟化之后,两者⾮常相似。同样是物理硬件位于最底层,hypervisor则分别是Xen和Hyper-v。对于Xen来说原来的Linux将以新的Linux内核运⾏在Domain 0,对于Hyper-v来说,Windows Server运⾏在⽗分区,他们都相当各⾃的于第⼀台虚拟机。
hypervisor为虚拟机提供虚拟的硬件资源,负责管理和分配这些资源,但是并不⼀定能够直接控制物理硬件。例如Xen和hyper-v,⼀般结构图将hypervisor位于最底层,但是最终直接控制物理硬件的驱动程序还是安装在Domain 0、⽗分区中的操作系统上。
Tips:KVM虽然和Xen⼀样是安装在Linux中,但是KVM没有Domain 0的概念,在Linux部署KVM后,其hypervisor相当于Linux的⼀部分,可以说hypervisor和Linux是在同⼀层,⽽Xen则是hypervisor位于最底层,原来的Linux相当于⼀台虚拟机,原来的Linux(Domain0)和其它虚拟化(Domain U)位于同⼀层。
硬件辅助虚拟化/软件辅助虚拟化
通常根据CPU虚拟化的⽅式将服务器虚拟化技术划分为硬件辅助虚拟化和软件辅助虚拟化,软件辅助虚拟化是通过hypervisor实现CPU虚拟化,硬件辅助虚拟化则是借助硬件(需要CPU、芯⽚组、BIOS、hypervisor都⽀持)实现CPU虚拟化。常见的硬件辅助虚拟化技术:intel vt-x、AMD-v,它们和各⾃⽣产的CPU绑定,intel CPU只能⽤intel vt-x,AMD CPU只能⽤AMD-v。
因为硬件辅助虚拟化效率更⾼,现在主流的企业级服务器虚拟化都是采⽤硬件辅助虚拟化技术(intel vt-x或AMD-v),KVM和Hyper-v仅⽀持硬件辅助虚拟化(不⽀持软件辅助虚拟化),ESXi、Xen和VMware workstation是两者都⽀持。
Tips:现在不单是CPU有硬件辅助虚拟化,⽹卡和芯⽚组也有硬件辅助虚拟化。⽐如以Intel VT虚拟化技术就包括分别针对处理器、芯⽚组、⽹络的IntelVT-x、IntelVT-d和IntelVT-c技术,以及显卡虚拟化GVT,不过服务器虚拟化划分标准还是根据CPU虚拟化的⽅式决定的。全虚拟化/半(准)虚拟化
全虚拟化和半虚拟化,直观的体现就是半虚拟化使⽤定制的Gust OS,全虚拟化则不必,使⽤普通适⽤于x86的的操作系统即可,具体原因见下⽂。
Tips:在主流的4种服务器虚拟化技术中,Xen全半虚拟化都⽀持。半虚拟化使⽤定制的Gust OS,这给维护带来极⼤不便,但是性能⽐较好。全虚拟化,最开始是使⽤软件辅助虚拟化,虚拟化的损耗较⼤,性能较低。随着技术发展,通过硬件辅助虚拟化实现的全虚拟化性能已经极佳了。
虚拟化原理简介
⽤户/内核空间
Windows和Linux都将内存分为内核空间和⽤户空间,操作系统内核代码运⾏在内核空间,应⽤程序代码运⾏在⽤户空间。
特权级
特权级是⼀种⽤来保护数据和阻⽌恶意⾏为的机制,x86计算机的CPU提供4个特权级:ring0~3,ring0权限最⾼,ring3权限最低。
ring0提供给操作系统内核(内核空间代码)使⽤,可以使⽤所有CPU指令,可以直接操作硬件(如CPU、内存)。
ring3提供给应⽤程序(⽤户空间代码)使⽤的,只可以调⽤基本的CPU指令。
ring1、ring2被设计为运⾏驱动程序,但Windows、Linux将驱动程序运⾏在ring0,未使⽤这两个特权级。
我国古代四大发明是什么Tips:CPU清除内存数据、设置时钟等指令是⾮常危险的,如果⽤错了会导致系统崩溃。通过特权级这⼀机制,区分内核代码和应⽤程序代码权限,保证操作系统正常运⾏。
指令类型
未虚拟化时,可以将CPU的指令分为特权指令和⾮特权指令。
特权指令
在多⽤户、多任务的计算机系统中特权指令必不可少,它主要⽤于系统资源的分配和管理,包括改变系统⼯作⽅式,检测⽤户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。
常见的特权指令有以下⼏种:水质监测方案
(1)有关对I/O设备使⽤的指令如启动I/O设备指令、测试I/O设备⼯作状态和控制I/O设备动作的指令等。
(2)有关访问程序状态的指令如对程序状态字(PSW)的指令等。
(3)存取特殊寄存器指令如存取中断寄存器、时钟寄存器等指令。
(4)其他指令
⾮特权指令
⾮特权指令有的需要以ring0运⾏,有的可以任意ring运⾏。操作系统内核以ring0运⾏,可以使⽤所有指令;应⽤程序以ring3运⾏,所以不能使⽤特权指令和部分⾮特权指令。
糖醋虾仁Tips:特权指令必须以ring0运⾏,否则会产⽣异常,将控制权交还ring0,⾮特权指令有的需要以ring0运⾏,有的不需要。
虚拟化后,CPU的指令分为特权指令,敏感指令,普通指令。
Tips:敏感指令=特权指令+部分⾮特权指令,也就是说特权指令⼀定是敏感指令。
敏感指令
敏感指令是指操作特权资源的指令。
1.企图访问或修改虚拟机模式或机器状态的指令。
2.企图访问或修改敏感寄存器或存储单元,如时钟寄存器、中断寄存器等的指令。
3.企图访问存储保护系统或内存、地址分配系统的指令。寡助之至亲戚畔之
4.所有I/O指令。
第一位老师Tips:特权指令只有ring0才能执⾏,当⾮ring0执⾏时会产⽣异常,⾮特权指令有的也需要ring0才能运⾏,但是它们⾮ring0运⾏不会产⽣异常。
服务器虚拟化的关键技术
优先级压缩
x86服务器虚拟化借鉴了其他平台的虚拟化技术,将hypervisor(也叫做VMM)运⾏在ring0,Gust OS运⾏在ring1(也有的运⾏在ring3),应⽤程序运⾏在ring3。
陷⼊和仿真(trap-and-emulate)
由于Gust OS运⾏在ring1,不能执⾏特权指令,当执⾏特权指令的时候会产⽣异常,将异常⾃动交给hypervisor(ring 0)来处理,此时hypervisor会将这些特权指令模拟运⾏后,返回Gust OS。
Tips:但是x86服务器⽐较特殊,部分敏感指令是⾮特权指令,在ring 1运⾏不会产⽣异常,便不会被hypervisor捕获。有两种处理⽅案,⼆进制翻译和hypercall,也是现在主流的软件辅助虚拟化技术。
鸭蛋怎么腌制*⼆进制翻译
属于⾮特权指令的敏感指令也需要在ring 0运⾏,但是Gust OS运⾏在ring1,这部分指令就⽆法通过陷⼊和仿真实现,VMware后来提供了⼀种⼆进制翻译技术来解决这个问题。
⼆进制翻译(Binary Translation)是⼀种直接翻译可执⾏⼆进制程序的技术,能够把⼀种处理器上的⼆进制程序翻译到另外⼀种处理器上执⾏。具体在服务器虚拟化中就是将需要运⽤⾮特权指令的敏感指令的⼆进制程序代码翻译成“虚拟特权指令”的⼆进制代码或者是翻译成运⾏在核⼼态(ring 0)中的特权指令⼆进制代码,从⽽强制触发异常。
*hypercall
对于这部分需要ring0运⾏的⾮特权指令,还有⼀种处理⽅式就是使⽤hypercall(超级调⽤)。通过修改Gust OS内核,将Gust OS内核中需要使⽤敏感指令的代码修改为主动调⽤hypervisor模拟执⾏,然后hypervisor将运⾏结果返回Gust OS。
这种⽅式⽐陷⼊模拟+⼆进制翻译效率⾼,但是由于需要修改Gust OS内核,所以⼀般都是使⽤定制的Gust  OS,维护不太⽅便。
Tips:陷⼊和模拟,⼆进制翻译这种不需要修改Gust OS的⽅式,称为全虚拟化,hypercall需要修改G
ust OS(或使⽤定制的OS),称为半虚拟化。主流服务器虚拟化中,Xen两种都⽀持,kvm、hyper-v、esxi均为全虚拟化。
硬件辅助虚拟化
⼆进制翻译、hypercall处理敏感指令的⽅式都是依靠软件来实现(所以叫做软件虚拟化),各有局限性,intel在2005年开始提供硬件辅助虚拟化(intel VT-x)解决敏感指令虚拟化这⼀难题。
intel VT-x提供了2 个运⾏环境:根(Root)环境和⾮根(Non-root)环境。根环境专门为VMM准备,很像原来没有VT-x 的x86,只是多了对VT-x ⽀持的⼏条指令。⾮根环境作为⼀个受限环境⽤来运⾏多个虚拟机。
如上图所⽰,根操作模式与⾮根操作模式都有相应的ring 0⾄ring 3。VMM运⾏在根模式的ring 0,GuestOS的内核运⾏在⾮根模式的ring 0,GuestOS的应⽤程序运⾏在⾮根模式的ring 3。运⾏环境之间相互转化,从根环境到⾮根环境叫VMEntry;从⾮根环境到根环境叫VMExit。VT-x定义了VMEntry操作,使CPU由根模式切换到⾮根模式,运⾏客户机操作系统指令。若在⾮根模式执⾏了敏感指令或发⽣了中断等,会执⾏VMExit操作,切换回根模式运⾏VMM。
根模式与⾮根模式之问的相互转换是通过VMX操作实现的。VMM 可以通过VMXON 和VMXOFF打开或关闭VT-x。如下图所⽰:
VMX操作模式流程:
1)、VMM执⾏VMXON指令进⼊VMX操作模式。
2)、VMM可执⾏VMLAUNCH指令或VMRESUME指令产⽣VM Entry操作,进⼊到Guest OS,此时CPU处于⾮根模式。
3)、Guest OS执⾏特权指令等情况导致VMExit的发⽣,此时将陷⼊VMM,CPU切换为根模式。VMM根据VMExit的原因作出相应处理,处理完成后将转到2),继续运⾏GuestOS。
4)、VMM可决定是否退出VMX操作模式,通过执⾏VMXOFF指令来完成。
内存、I/O、⽹络虚拟化
⼩结
当前(2018)服务器虚拟化类型的概念已经很淡了,主流的企业级服务器虚拟化技术(ESXi、KVM、Hyper-v、Xen)都是裸⾦属架构,虽然Xen和ESXi⽀持软件辅助虚拟化,但⼀般情况下都会使⽤硬件虚拟化,⾄于KVM和Hyper-v更是只⽀持硬件虚拟化。仅有Xen还⽀持半虚拟化,但是Xen是使⽤率现在已经很低了。
各⼚商服务器虚拟化类型已经趋于⼀致(裸⾦属、硬件辅助、全虚拟化),所以在类型⽅⾯也不必过多纠结,所以在选择服务器虚拟化技术的时候应该更多关注各种服务器虚拟化技术的性能、稳定性、成熟性等等。
附⼀张2017年5⽉企业级服务器虚拟化市场占有率的图⽚,VMware使⽤的肯定是ESXi,微软则是Hyper-v,华为、新华三都是基于开源的KVM⼆次开发的产品。

本文发布于:2023-06-05 10:57:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/871334.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:虚拟化   指令   特权
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图