虚拟化介绍及KVM,XEM虚拟化的区别

虚拟化技术KVM和XEN概述 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 虚拟化核心思想是提高硬件资源的利用率,通过在系统中加入一个虚拟化层,将下层资源池化后,向上层操作系统提供一个预期一致的服务器硬件环境,并允许不同操作系统的虚拟机互相隔离且并发运行在一台物理机上。 现在主流的虚拟化技术主要是XEN和KVM,而且这两种虚拟化技术都是开源免费的。 阅读详情

目录

第一部分:虚拟化的定义及阅读本文所需要了解的某些概念

第二部分:虚拟化的分类

第三部分:虚拟化的期望及面临的挑战

第四部分:虚拟化的实现

第五部分:Intel Vt硬件辅助虚拟化

第六部分:XEN介绍

第七部分:KVM介绍

第一部分:虚拟化的定义及阅读本文章的知识储备

一.虚拟化的定义
虚拟化是一种资源管理技术,是将计算机的各种资源(CPU,内存,磁盘空间,网络适配器)予以抽象,转换后呈现出来并可供分隔,组合为一个或多个新的环境。由此打破实体结构间不可切割的障碍,使用户可以比原来更加高效的利用计算机硬件资源

二.知识储备
1.中断与异常
程序的执行往往不只是按顺序执行那么简单,一些异常和中断则会打断顺序执行的程序流,转而进入一条完全不同的执行路径
(1)中断**(中断由外部设备产生)**
从某种意义上讲,现代计算机架构是由大量的中断事件驱动的,中断机制使外部硬件设备可以打断CPU当前的执行任务,使CPU为自己提供服务
(2)异常**(异常由CPU内部产生,与指令有关)**
中断由外部设备产生,和CPU当前执行的指令无关。异常由CPU内部产生,其原因使CPU当前执行的指令出现了问题
异常根据产生的原因和严重性可以分为如下三类
·错误(Fault):由某种错误情况引起,一般可以被错误处理程序纠正
·陷阱(Trap):指在执行了一条特殊指令后引起的异常。陷阱是有意的异常,陷阱最重要的用途是在用户和内核之间提供一个像过程一样的接口(即系统调用)
·终止(Abort):指严重的不可恢复的错误,将导致程序终止

2.I/O
计算机所处理的任务其实只有两种:CPU计算和I/O操作
I/O是CPU访问外部设备的方法,设备通常通过寄存器和设备RAM将自身功能展现给CPU,CPU通过读/写这些寄存器和RAM完成对设备的访问及其他操作

3.DMA(直接内存访问)
DMA允许设备绕开CPU直接向内存中复制或读取数据。如果设备向内存复制数据都经过CPU,则CPU会有大量中断负载,中断过程中,CPU对其他任务来讲无法使用,不利于系统性能的提高

4.上下文
上下文是从CPU的角度引出的,简单来说,上下文就是程序(主要是进程或中断)运行时所需要的最小寄存器集合(以允许任务被中断,并且稍后可以从同一点继续)。这些寄存器一般代表着程序运行的一类资源

上下文切换指的是程序从一种状态切换到另一种状态(例如用户态切换到内核态),或从一个程序切换到另一个程序(进程的切换),导致上下文相关寄存器值的变化行为,简单讲,上下文切换就是讲旧程序上下文相关寄存器的值保存到内存,同时将新程序上下文相关寄存器的值加载到寄存器中

在操作系统中会发生上下文切换的场合列举如下
·用户态与内核态的切换:进程的用户态和内核态运行在不同的Ring级别,对资源的访问权限不同,因而在用户态和内核态相互转换的时候需要切换部分上下文
·进程切换:一个CPU在一个时刻只能处理一个进程,进程切换的实质就是将被终止运行的进程的上下文相关寄存器的值存储在该进程的私有栈中。进程切换通常是全上下文的切换
·切换到中断上下文:中断的处理函数运行在中断上下文的环境下。CPU在处理一个中断时,需要由当前环境切换到该中断的上下文环境下

5.特权指令和敏感指令
·特权指令:系统中操作和管理关键系统资源的指令。现代计算机体系结构一般都有两个或者两个以上的特权级,进而使系统软件和应用软件能够彼此分离,特权指令只能在最高特权级上正确运行,如果在非最高特权级上运行,则会引发异常使处理器陷入到最高特权级,进而将特权指令交由系统软件处理

·敏感指令**:敏感指令是虚拟化技术中的概念,它指的是操作特权资源的指令**。敏感指令包括修改虚拟机的运行模式或下面物理机的状态,读/写敏感的寄存器或内存;访问系统或是地址重定位系统以及所有的I/O指令

所有的特权指令都是敏感指令,但并不是所有的敏感指令都是特权指令

在物理机中,特权指令只能在CPU运行级别最高的情况下去执行
在虚拟机中,敏感指令只能由VMM去执行

6.VMM(虚拟机监控器)
VMM是一个可以直接运行在硬件或现有操作系统之上的一个软件
作用:
·可以维护多个高效且隔离的程序环境
·管理计算机系统的真实资源,为虚拟机提供接口
·截获虚拟机对硬件的访问,由VMM去实现访问
·对下管理真实的物理硬件,对上层软件程序出虚拟的硬件平台

7.进程的运行级别
运行级别可以看作,一个进程访问底层硬件时,所携带的标记,只有级别到了一定的程度,才可以执行某些指令,默认普通应用程序工作在Ring 3级别,而操作系统工作在Ring 0 ,所以当上层的应用程序要访问底层硬件时,CPU会发现它级别不够,操作系统感知到之后,触发异常。整个进程由用户态转为内核态,由内核态去完成刚才想做的事

8.用户态和内核态
用户态和内核态的解释

第二部分:虚拟化的分类(服务器虚拟化)

一.服务器虚拟化
将服务器的物理资源抽象成逻辑资源,让一台服务器变成几台,甚至上百台相互隔离的虚拟服务器,从而不在受于物理上的界限,而是让CPU,内存磁盘和I/O等硬件变成可以动态管理的资源池,随时将物理机上的资源分配到需要这些资源的虚拟机或者应用程序中

二.从虚拟化程度上来份(指令的执行方式)
从虚拟化程度来分可以分为三类
·硬件仿真的虚拟化(Qemu)
·完全虚拟化(kvm,Vmware WorkStation)
·半虚拟化(Xen)

1.硬件仿真
实例:QEMU
特征:软件模拟硬件,Guest OS不需要做任何修改
实现方法:在物理机的操作系统上创建一个模拟硬件的程序,来仿真所想要的硬件,并在虚拟出来的这些硬件上运行虚拟机,而且虚拟机内部的客户操作系统无需进行修改
优点:Guest OS无需修改,实现起来比较简单
缺点:速度非常慢,因为模拟硬件这一行为,就会消耗大量的资源,造成运行在模拟硬件之上的操作系统的性能就非常的有限

2.完全虚拟化
实例:kvm,Vmware Workstation
特征:客户机操作系统不需要做任何修改,客户机操作系统察觉不到自己运行在一个虚拟平台上,他会像操作正常的处理器,内存,I/O设备一样来操作虚拟处理器,虚拟内存,和虚拟I/O设备。对资源的访问大都是通过VMM(虚拟机监控器)来实现的,即操作系统和硬件之间通过VMM来进行交互,相比较于硬件仿真,他不是模拟出一整套硬件,而是对虚拟机做出的指令通过VMM进行操作或修改

虚拟机的下层不是模拟出来的硬件,而是所有的虚拟机共同使用的一个虚拟化平台-----VMM,通过VMM来实现对底层资源的访问,但此时的问题是Guest OS操作系统内核不再直接控制硬件,要使得VMM对底层资源进行访问,就需要对Guest OS内核的权限进行操作,使其不再拥有那么多的权限

实现方法:VMM捕捉和处理对虚拟化敏感的特权指令,主要是实现不修改用户的操作系统就实现虚拟化

完全虚拟化又可以分为以下两种类型(后面进行详细的讲解)
(1)硬件辅助的虚拟化
(2)软件辅助的虚拟化

3.半虚拟化
实例:XEN
特征:对Guest OS的内核进行一定程度的操作,使操作系统内核完全避免难以虚拟化的指令

实现方法:修改操作系统的处理器相关的代码,让操作系统主动让出特权级别,而运行在次一级的特权上,这样当操作系统试图去执行特权指令时,保护异常被触发,进而提供截获点供VMM来模拟

三.从VMM技术架构来分
主流的VMM技术框架可以分为三类:Hypervisor模型,宿主(Hosted)模型,和混合模型

1.Hypervisor模型(裸金属模型)
实例:Vmware的ESXI

VMM的职责:同时具备物理资源的管理功能和虚拟化功能,因而物理资源虚拟化的效率比较高。在安全方面,虚拟机的安全只依赖于VMM的安全

在Hypervisor模型中,我们可以将VMM看作是一个完备的操作系统,但相比于传统的操作系统,VMM还具备虚拟化功能,VMM承担着管理物理资源的责任,所有的物理资源都归VMM所有,VMM还负责虚拟环境的创建和管理,向上提供虚拟机用于客户机操作系统

优点:安全性高,效率也高,因为不需要经过宿主操作系统的二次调用
不足:VMM的实现比较复杂

Hypervisor模型中VMM完全拥有物理资源VMM需要负责对物理资源的管理,包括进行设备驱动。而设备驱动的工作量相当大,这对Hypervisor模型的VMM是一个巨大的挑战

2.Host模型(宿主机)
实例:Vmware Workstation
VMM的职责:提供传统操作系统不具备的虚拟化功能,调用宿主机操作系统的服务来获得资源,实现处理器,内存和I/O设备的虚拟化

VMM通常是宿主操作系统独立的内核模块,有些还包括用户态进程(如负责I/O虚拟化,用户态设备模型)。VMM通过调用宿主机操作系统的服务来获得资源,实现处理器,内存和I/O设备的虚拟化,VMM将其创建的虚拟机作为宿主机操作系统的一个进程参与调度

优点:可以充分利用现有操作系统的设备驱动程序,VMM无须为I/O设备实现驱动程序,只需专注于物理资源的虚拟化

缺点:因为要使用宿主操作系统的驱动去调用资源,性能上会比较差一点,安全性也会受宿主操作系统的影响

3.混合模型
实例:XEN,KVM
VMM职责:虚拟化的一部分由特权操作系统(运行在特权虚拟机中)分担,VMM负责上层操作系统一部分对硬件的访问(CPU,内存,中断),I/O部分则交由特权主机,即是特权主机和VMM共同实现虚拟化

混合模型,集合Hypervisor模型的高性能和Host模型的简洁性,将上层的操作系统对硬件的基本服务,如内存和CPU的访问直接交给VMM处理,而将比较复杂的I/O访问转发给Host Os,这样就兼顾了VMM对硬件访问的性能,也降低了VMM开发的复杂度

优点:VMM可以利用现有操作系统的I/O设备驱动程序,也可以直接处理控制器(CPU),内存等物理资源,这样VMM的开发工作量就小了,虚拟化的效率也能保证在较高的水平,安全方面,可以通过对操作系统的限制,使虚拟机的安全性只依赖于VMM

缺点:由于特权操作系统运行在虚拟机上,而需要特权操作系统提供服务时,VMM需要切换到特权操作系统,进而产生上下文切换的开销,当上下文切换频繁时,上下文切换的开销会造成虚拟化性能的明显下降

第三部分:虚拟化的期望及面临的挑战

一.虚拟机应具有的三大特征
·一致性:一个运行在虚拟机上的程序,其行为应与直接运行于物理机上的行为基本一致,只允许有细微的差异,比如在系统时间方面
·可控性:VMM对系统资源有完全的控制能力和管理权限,包括资源的分配,监控和回收
·高效性:绝大多数的客户机指令应该由硬件直接执行,无须VMM的参与

二.与上述要求对应的四个条件
为了满足上述条件,因为系统的指令集结构(ISA)需要相应地满足以下四个条件
·CPU能支持多个特权级,并且VM上面运行的指令能在低特权级下正确执行
·非特权指令(允许用户直接使用的指令)的执行效果不依赖于CPU的特权级
·敏感指令(对系统资源配置有影响的指令)都是特权指令(不允许用户直接使用的命令)
·必须支持一种内存保护机制来保证多个虚拟机之间存在内存方面的隔离

三.解决方法
经典的CPU虚拟化模型中,CPU虚拟化采用的**“特权解除”和“陷入模拟”**技术

“特权解除”:通过降低客户机操作系统的级别,并将VMM运行在最高特权级别上,而实现VMM对虚拟机的控制。在解除了虚拟机的特权之后,客户机操作系统的大部分指令仍可以在硬件上直接执行,只有当客户机操作系统执行某些特权指令时,才会“陷入”到最高特权级别的VMM模拟其执行,实现“陷入-模拟”

依据上述条件,可以让客户机操作系统工作在非特权模式下, 当客户机操作系统执行特权指令时,也会出现一般性错误,只要出现此类错误时,VMM便可以捕获到该指令,从而模拟客户机操作系统的相应操作

但是Intel的X86架构设计之初,没有考虑到虚拟化的问题,导致没有满足条件的第三条(敏感指令(对系统资源配置有影响的指令)都是特权指令(不允许用户直接使用的命令)),X86的ISA,有17条敏感指令不属于特权指令,由于X86架构的CPU中并非所有的敏感指令都是特权指令,当这些指令在较低特权级别上运行时,VMM不能捕获到这些指令,而或成为漏网之鱼

综上所述,特权解除和陷入模拟技术不能解决X86架构CPU中的虚拟化要求,所以X86架构下CPU虚拟化的重点是解决敏感指令的处理问题

敏感指令的处理方法
软件处理:BT(二进制代码转换)。对虚拟机的指令进行拦截并进行二进制的转换,使其变成不是敏感指令而在CPU上执行,这样做会消耗大量的性能

硬件处理:后续进行介绍

第四部分:虚拟化的实现

一.虚拟化实现的几个部分
·CPU虚拟化:一个CPU模拟成多个CPU并行,允许一台物理机同时运行多个操作系统
·内存虚拟化
·I/O虚拟化

二.实现服务器虚拟化所使用的技术
·硬件仿真
·完全虚拟化(软件辅助的完全虚拟化,硬件辅助的完全虚拟化)
·半虚拟化

三.完全虚拟化的实现方式
1.实现思路
VMM捕捉和处理对虚拟化敏感的特权指令,主要是实现不修改用户的操作系统就实现虚拟化

2.软件辅助虚拟化的实现
X86体系最初是存在虚拟化漏洞的,完全虚拟化只能通过软件来实现,这时一般采用的方法是**优先级压缩(Ring Compression)和二进制代码翻译(Binary Translation)**相结合的方式来实现完全虚拟化

优先级压缩:VMM和客户机运行在不同的特权级上,对应到X86架构上往往是VMM运行在RING0上,客户机操作系统运行在RING1上,客户机操作系统应用程序运行在RING3上,当客户机操作系统内核执行相关特权指令时,由于其处在非特权的RING1上,通常会引发异常,VMM截获该特权指令并进行虚拟化

优先级压缩能正常处理大部分特权指令,但是X86体系存在虚拟化漏洞,有些敏感指令不能通过优先级压缩正常处理,即该指令不是特权指令,但是敏感指令,这种指令就不能触发异常被VMM截获并处理,于是引入二进制代码翻译的方式来处理这些虚拟化漏洞

二进制翻译:即通过扫描并修改客户的二进制代码,将难以虚拟化的指令转换为支持虚拟化的指令,VMM对操作系统的二进制代码进行扫描,一旦发现需要处理的指令,就将其翻译成支持虚拟化的指令块。这些指令块可以与VMM合作访问受限的虚拟资源,或显式地触发异常,让VMM进一步处理

优先级压缩和二进制代码翻译相结合的方式实现了完全虚拟化,但是这种打补丁的方式很难在架构上保证其完整性

3.硬件辅助虚拟化的实现
随着虚拟化技术的日益发展壮大,X86厂商在硬件上加入了对虚拟化的支持,从而在硬件架构上实现了虚拟化

硬件辅助完全虚拟化的思想是对硬件本身加入足够的虚拟化功能,进而截获操作系统对敏感指令的执行及对敏感资源的访问,再通过异常的方式报告给VMM

intel的VT-X技术是硬件辅助完全虚拟化的代表,VT-X技术在处理器上引入了一个新的执行模式用于运行运行虚拟机(root模式和non-root模式)当虚拟机运行在这个特殊执行模式(non-root)中时,它面对的仍是一套完整的处理器寄存器集合和执行环境,只是所有的特权指令都会被处理器截获报告给VMM。VMM模式本身运行在正常模式下(root模式)在收到处理器的报告后,通过对目标指令解码,找到对应的虚拟化模块进行模拟,并把最终的结果反映到特殊模式下(non-root)的环境中

硬件辅助虚拟化是一种完备的虚拟化方案,由于内存和外设的访问本身也是由指令来承载的,对处理器指令级别的截获就意味着VMM可以模拟一个与真实主机完全一样的环境

优点:完全虚拟化比硬件仿真的速度要快,完全隔离每台虚拟机和VMM,操作简单
缺点:实现复杂,有些特权指令无法被捕捉到,性能也不是特别好,尤其是在I/O方面

CPU两种运行模式,一种root模式,另一种non-root模式,non-root模式无法访问到底层的硬件资源,还是要借助root模式来进行访问

四.半虚拟化实现的方法
实现方法:修改操作系统的处理器相关的代码,让操作系统主动让出特权级别,而运行在次一级的特权上,这样,当操作系统试图去执行特权指令时,保护异常被触发,进而提供截获点供VMM来模拟

第五部分:Intel VT虚拟化技术

一.Intel VT架构
Intel VT是Intel平台上硬件虚拟化技术的总称,包含对CPU,内存和I/O设备等各个方面的虚拟化的支持
在这里插入图片描述
使用Intel VT实现的VMM典型结构分为两层
上层是通用功能:如资源管理系统调度等
下层是平台相关部分:使用Interl VT技术实现的处理器虚拟化,内存虚拟化,和I/O虚拟化
处理器:VT-x(Intel Virtualization Technology for x86)
内存:EPT(Extended Page Table)
I/O设备虚拟化方面:VT-d(Intel Virtualizaiton Technology for Directory I/O)

二.处理器虚拟化(CPU虚拟化)
处理器虚拟化是VMM中最核心的部分,由于访问内存或I/O的指令不慎就是敏感指令,内存虚拟化与I/O虚拟化都依赖于处理器虚拟化的实现
处理器虚拟化要实现的是让虚拟机里执行的敏感指令能够陷入异常,并被VMM模拟,而不要直接作用于真实的硬件上

(1)陷入
陷入:客户机操作系统执行时如何通知VMM,VMM的陷入是通过处理器的保护机制,利用中断来完成的
陷入的方式

<1>基于处理器保护机制触发的异常。处理器会在执行敏感指令之前,检查其执行条件是否满足(执行条件主要包括当前特权级别,运行模式,内存映射关系等),一旦任一条件不满足,就会陷入VMM进行处理

<2>虚拟机主动触发异常,也就是通常所说的陷阱。虚拟机可以通过陷阱指令主动请求陷入到VMM

<3>异步中断,包括处理器内部的中断源和外部的设备中断源

(2)CPU的硬件辅助虚拟化 VT-x
在硬件设计没有对虚拟化漏洞做出改进之前,一般是通过软件模拟实现CPU完全虚拟化。模拟的强大之处在于VMM可以控制虚拟机的整个执行过程,因而不会漏过需要模拟的敏感指令
硬件辅助虚拟化,intel VT为CPU虚拟化提供了VT-x技术

<1>根操作模式(VMX Root Operation):VMM运行时所处的模式,以下简称为根模式,在根模式下,所有指令的行为和传统的IA32一样,因此原来的软件都可以正常运行

<2>非根操作模式(VMX Non-Root Operation):客户机运行时所处的模式,非根模式下,所有的敏感指令的行为都被重新定义,使得他们能不经过虚拟化就直接运行或者通过“陷入再模拟”的方式来处理

在这里插入图片描述
根模式和非根模式都有相应的特权级0~3.所有在使用VT-x时,描述程序运行在某个特权级别时,必须指明当前是处于何种模式(根模式还是非根模式)

VT-x中,在非根模式下,敏感指令引起的“陷入”称为VM-Exit,VM-Exit发生时,CPU自动从非根模式切换到根模式,与VM-Exit相对应的是VM-Entry,该操作由VMM发起,通常是VMM调度某个客户机时CPU由根模式切换成非根模式

VMCS,虚拟机控制结构,可以更好地支持CPU虚拟化,VMCS保存虚拟CPU需要的相关状态,(如CPU在根模式和非根模式下的特权寄存器的值)。VMCS主要供CPU使用,CPU在发生VM-Exit和VM-Entry时会自动查询和更新VMCS。VMM可以通过指令配置VMCS,进而影响CPU的行为

vCPU
硬件虚拟化使用vCPU(Virtual CPU)描述符来描述CPU。vCPU描述符类似于操作系统中的进程描述符(或进程控制块),其本质是一个结构体

第六部分:XEN虚拟化的介绍

一.XEN的体系结构
整个的XEN由XEN Hypervisor和虚拟域组成,虚拟域(Domain)又称XEN虚拟机,由特权虚拟域(Domain 0,IDD)和非特权虚拟域(Domain U和HVM组成)
在这里插入图片描述

二.XEN Hypervisor也称为VMM,是位于虚拟域和底层硬件之间的虚拟话软件模块,管理多个虚拟域的资源并监控虚拟域中操作系统的运行
功能:
·加载所有域的操作系统
·为操作系统提供虚拟化的硬件资源(只提供CPU,内存和中断的虚拟化,网络,存储I/O由Domain0控制)
·保证各虚拟机之前的相互隔离

三.特权虚拟域
特权虚拟域又称为Domain 0,是运行在Xen Hypervisor之上的,可以直接访问底层的物理资源,并可以与其他虚拟域Domain U进行交互,Domain 0需要先于Domain U启动,其他虚拟域访问I/O设备都需要经过Domain 0

Domain0上的一系列域管理工具和控制工具(Linux守护进程)这些工具运行在Domian0上,支持对虚拟域的管理和控制

四.非特权域U (Domain U)
Domain U是除Domain 0以外的虚拟域,由于Domain U不能像Domain 0一样直接访问物理设备,因此称为非特权区域。

Domain U是除Domain 0以外的虚拟域,由于Domain U不能像Domain 0一样直接访问物理设备,因此称为非特权区域。
通常情况下,Domain U中的操作系统通过分离驱动模型的前端驱动来访问硬件设备。客户机操作系统通过前端设备驱动向位于Domain 0或IDD中的后端驱动发送I/O请求,再由后端设备驱动将请求转交给原设备驱动里,并将处理结果返回给Domain U

六.硬件虚拟域(HVM)
Xen在设计之初为了追求高性能,采用了半虚拟化技术,需要少量修改客户机操作系统的内核与Xen Hypervisor进行协同工作。后再在得到Intel和AMD的硬件支持后,XEN能够实现全虚拟化

七.XEN CPU虚拟化的工作原理
XEN分别通过半虚拟化技术和硬件虚拟化技术HVM来实现CPU的虚拟化

1.半虚拟化技术
Xen虚拟化系统按照CPU的4个特权结构对软件模块进行了部署,将Xen Hypervisor安排在最高特权级Ring 0 上,将客户机操作系统安排在RING 1 上,将应用程序放在Ring 3上
在这里插入图片描述
为了解决敏感指令的捕捉问题,半虚拟化技术需要对客户机操作系统的代码进行修改,对有缺陷的指令(不能捕获的敏感指令)进行替换,并将与特权指令相关的操作都转换成Xen Hypervisor 的Hypercall(超级调用),交给XEN Hypervisor软件模块进行处理

所以半虚拟化的性能要好于完全虚拟化

由于Hypercall支持Batch(批处理)和异步这两种优化方式,使得通过Hypercall能得到近似与物理机的速度。但是由于半虚拟化需要修改客户机操作系统的代码,使得虚拟域上使用的操作系统类似受到了限制

2.硬件虚拟化技术支持的全虚拟化
半虚拟化采用软件的方式来解决X86架构下CPU虚拟化的问题,但需要修改少量操作系统的代码,使得Xen运行Windows等流行却非开源的操作系统变得不可行,在市场的驱动下,Intel和AMD在其CPU中增加了辅助虚拟化技术,使得Xen可以实现全虚拟化,即不用修改客户机操作系统也可以实现虚拟化

VT-x还是要陷入,VM entry 和VM exit,只是 BT 翻译消耗比较大

第七部分:KVM

一.KVM介绍
KVM全称是(Kernel-based Virtual Machine),他是一个Linux的一个内核模块,该内核模块使得Linux变成了一个Hypervisor

二.KVM架构
KVM是基于虚拟化扩展(Inter VT或者AMD-V)的X86硬件开源的Linux原生的全虚拟化解决方案。KVM中,虚拟机被实现为常规的Linux进程,由标准Linux调度程序进行调度,虚拟机的每个虚拟CPU被实现为一个常规的Linux进程,这使得KVM能够使用Linux内核的已有功能

在这里插入图片描述

KVM架构中有三种状态模式
Guest :客户机系统,包括CPU(vCPU),内存,驱动(Console,网卡,I/O设备驱动等)
被KVM置于一种受限制的CPU模式下运行

KVM:运行在内核空间,提供CPU和内存的虚拟化,以及客户机的I/O拦截。Guest 的I/O被KVM拦截以后,交给QEMU处理

QEMU:修改过的KVM虚机使用的QEMU代码,运行在用户空间,提供硬件I/O虚拟化,通过IOCTL /dev/kvm设备和KVM交互

三.KVM实现拦截虚机I/O请求的原理
支持虚拟化技术的CPU带有特别优化过的指令集来控制虚拟化过程。通过这些指令集,VMM很容易将客户机置与一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。

四.QEMU-KVM
其实,QEMU原本不是KVM的一部分,他自己就是一个纯软件实现的虚拟化系统,所以其性能低下。但是,QEMU代码中包含整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及KVM使用到的虚拟设备模拟(网卡,显卡,存储控制器和硬盘等)

为了简化代码,KVM在QEMU的基础上做了修改,VM运行期间,QEMU会通过KVM模块提供的系统调用来进入内核,由KVM负责将虚拟机置于处理的特殊模式进行。遇到虚机进行I/O操作,KVM会从上次的系统调用出口处返回QEMU,由QEMU来负责解析和模拟这些设备

五.KVM虚机的创建过程
在这里插入图片描述
(1)qemu-kvm 通过对 /dev/kvm 的 一系列 ICOTL 命令控制虚机
(2)一个 KVM 虚机即一个 Linux qemu-kvm 进程,与其他 Linux 进程一样被Linux 进程调度器调度。
(3)KVM 虚机包括虚拟内存、虚拟CPU和虚机 I/O设备,其中,内存和 CPU 的虚拟化由 KVM 内核模块负责实现,I/O 设备的虚拟化由 QEMU 负责实现。
(3)KVM虚机系统的内存是 qumu-kvm 进程的地址空间的一部分。
(4)KVM 虚机的 vCPU 作为 线程运行在 qemu-kvm 进程的上下文中。

云计算虚拟化 VMware ESXi本身可以看做一个操作系统,采用Linux内核,安装方式为裸金属方式,可直接安装在物理服务器上,不需安装其他操作系统,它是专为运行虚拟机、最大限度降低配置要求和简化部署而设计,提供接近本机性能的祼机体系结构、各种旨在提高整合率的功能(例如取消内存复制),以及用于在共享存储上管理虚拟机文件的群集文件系统。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。 阅读详情

相关推荐

Linux虚拟化技术:从Xen到KVM

如果您需要灵活的管理工具和广泛的硬件支持,尤其是在云计算和开发测试环境中,KVM更为适合。KVM集成在Linux内核中,使用现有的Linux管理工具(如libvirt)进行管理,非常适合需要快速部署和灵活管理的场景。如果您的应用场景对性能和安全性要求极高,例如在高性能计算和一些对隔离性要求非常高的环境中,Xen是一个理想的选择。KVM广泛应用于云计算平台(如OpenStack)、开发和测试环境、企业虚拟化和桌面虚拟化,适合需要灵活管理和高可用性的场景。

lingllllove的博客 899

深入剖析Xen与KVM虚拟化技术及其架构特点

Xen和KVM各自在虚拟化技术领域展现出了鲜明的特点和优势。Xen在安全性和对硬件资源的精细化控制方面表现出色,尤其适合对性能和隔离性有较高要求的场景,而KVM则凭借与Linux内核的紧密集成和更简单的使用体验,在保证性能的同时,为用户提供了一种更为灵活和易于管理的虚拟化解决方案。选择何种技术取决于具体的应用场景、性能需求以及对操作系统兼容性的考量。

CloudJourney的博客 4631

VDesk虚拟桌面原理与实战:用Xephyr实现多会话隔离

虚拟桌面在Linux生态中常被误解为多工作区或远程桌面,但真正的本机虚拟桌面是通过在宿主图形栈上叠加独立X server实现的。其核心原理是利用Xephyr创建嵌套显示服务,配合Openbox窗口管理器构建互不干扰的桌面会话,实现进程级隔离。这种方案相比虚拟机资源开销极低,又比多工作区隔离性更强,特别适合自动化测试、多环境并行等场景。VDesk作为管理工具,封装了X server生命周期,让开发者能轻松创建、销毁和监控多个会话。从基础概念到调参避坑,本文演示了如何在Ubuntu上搭建VDesk虚拟桌面,并融

weixin_30231327的博客 306

KVM和Xen的区别

Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择: Xen和KVM。 KVM是一个轻量级的虚拟化管理程序模块,该模块主要来自于Linux内核。 KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。 Xen 也是Li...

mark's technic world 5287

模电学习笔记(十二)——跨阻放大器

模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻。 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15V 1.计算R1的值(增益电阻器) 2.计算C1的值满足电路带宽 ...

tang11081023的博客 2万+

【fNIRS可视化学习1】基于NIRS-SPM进行光极可视化并计算通道坐标

设头皮上的目标点为P₀(x₀, y₀, z₀),需要在大脑皮层点集S上找到最合适的投影点P'。

Rose9614的博客 2208

KVM连接虚拟机(3)

KVM常用连接虚拟机方法:1.virt-manager2.vnc3.virsh console1.使用virt-manager方式如下:首先KVM主机必须为图形界面,输入virt-manager打开虚拟系统管理器,就可以对你的虚拟机进行各种操作。虚拟系统管理器,也可以连接到其它KVM,对其它KVM的虚拟机进行管理。方法如下:输入账号密码就可以连接远程的KVM服务器,对它的虚拟...

weixin_33953384的博客 451

Milvus 向量数据库部署方案全景指南:从单机开发到生产级高可用集群

本文系统介绍了Milvus向量数据库的四大部署方案:嵌入式开发利器Milvus Lite、单机简易部署Standalone模式、生产级高可用Cluster模式以及全托管SaaS服务Zilliz Cloud。针对不同应用场景(开发测试、小型应用、大规模生产环境),详细分析了各模式的适用条件、资源配置要求和部署步骤,并提供了关键配置示例。文章强调正确选择部署方案对系统性能至关重要,帮助开发者根据向量规模、QPS和高可用需求,选择最优部署方式,实现资源优化与稳定运行。

reset2021的博客 385

virsh链接虚拟机_KVM连接虚拟机(3)

KVM常用连接虚拟机方法:1.virt-manager2.vnc3.virsh console1.使用virt-manager方式如下:首先KVM主机必须为图形界面,输入virt-manager打开虚拟系统管理器,就可以对你的虚拟机进行各种操作。虚拟系统管理器,也可以连接到其它KVM,对其它KVM的虚拟机进行管理。方法如下:输入账号密码就可以连接远程的KVM服务器,对它的虚拟机进行管理。2.使用V...

weixin_36012215的博客 1000

[QMT和ptrade量化交易小白入门]-122、基于聚类分析的动态股票池构建与ETF轮动策略,回测年化 132.09%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1026

基于XDMA 的PCIE读写DDR

基于XDMA 的PCIE读写DDR 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。 实现功能:PC通过PCIE读写DDR,同时用户通过逻辑代码可以读取被写入DDR内的数据(我是通过VIO实现DDR任意地址,任意数据大小的读取。)。 实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 P

Crazzy_M的博客 1万+

一块钱云电脑:低成本远程开发环境的技术原理与实战指南

云计算通过虚拟化技术将物理服务器资源池化,按需分配给用户,实现了资源的弹性伸缩与成本优化。其核心原理在于利用虚拟机或容器技术,在共享硬件上创建隔离的虚拟计算环境。这项技术的价值在于为开发者提供了灵活、可快速部署的测试与实验平台,尤其适用于学习、轻量级开发及临时测试等场景。本文聚焦于当前热门的“一块钱云电脑”服务,它本质上是基于网页SSH终端与轻量虚拟化技术的按需计费Linux实例,为个人开发者解决了环境配置繁琐和硬件资源临时需求等痛点,是极具性价比的“口袋实验室”。

weixin_33417488的博客 268

Python 爬虫进阶技巧:定时爬虫任务实现无人值守采集

常规爬虫多依赖手动触发脚本运行,单次采集完成后需人工二次启动,无法满足日常周期性数据监控、行情抓取、资讯同步、业务台账定时归档等常态化采集需求。搭建可自主调度、自动启停、周期循环的定时爬虫任务,脱离人工干预实现无人值守全自动采集,是爬虫从临时脚本走向工程化落地的关键一步。schedule 轻量定时库官方文档APScheduler 高级定时框架官方文档Python time 内置模块官方文档Linux crontab 定时任务官方手册。

2503_91057718的博客 1117

Nova几个简单的概念--有助于OpenStack的源码理解

这一篇博客,主要分为以下几个部分: 1、OpenStack API的类型,通过这一部分学习,使大家基本了解OpenStack API的各种类型,虽然粗陋,但是非常有助于大家对于代码的理解。 2、service、manager、driver之间的关系,通过这块,会让大家简单了解到OpenStack的一个设计思想,同样非常有助于大家对代码的理解。 3、组件之间(比如Scheduler和Nova)

虾悠悠的专栏 3万+

【转录调控网络】代谢组学与其他组学的联合分析经典模式简介

多组学联合分析经典模式转录组学&代谢组学联合分析 转录组学&代谢组学联合分析 转录组是获得生物体内基因表达的重要方法,代谢组是生物体表型的基础和直接体现者。 转录组测序可以得到大量差异表达基因和调控代谢通路,但由于基因与表型之间很难之间关联,导致关键的信号通路难以确定,因此往往达不到预期的研究目的。代谢产物是生物体在内外调控下基因转录的最终结果,是生物体表型的物质基础。 在系统生物学研究时代,生物过程复杂多变,基因调控网络复杂。针对特定的生理、病理等表型进行研究,利用转录组的数据获得大量差异

小哲的博客 6194

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Docker系列教程一:入门知识点

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(百度百科)。对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。这里应用组件既可以是一个web应用,一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或者集群。Docker基于go语言实现的开源容器项目,诞生与2013年。

星哥玩云 339

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

将要改变IT世界的的docker技术是什么?

将要改变IT世界的的docker技术是什么? 责任编辑:editor007 作者:吴玉征 |来源:企业网D1Net  2015-12-23 21:16:28 本文摘自:百度百家 “很多时候,我们面临未来的预测和期望,其实很多答案已经存在在历史中。” “没有集装箱,就不会有全球化。”,《经济学家》这个评论可以说是对于这个普通的箱子的历史性地位的一个总结。 这只普通的箱子,技术含量不

周红伟讲AI 698

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

KVM和Xen虚拟化有什么区别?Xen和KVM优缺点对比

KVM和Xen是两大虚拟化技术,KVM和Xen又是免费开源的管理程序,新手站长网分享虚拟化技术KVM和Xen的区别优势对比: KVM和Xen的区别 KVM:KVM是轻量级的虚拟化管理程序模块,该模块主要来自Linux内核;KVM的虚拟化需要硬件支持,如具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU,KVM只能在具有虚拟化支持的CPU上运行。 Xen:Xen是Linux下的虚拟化解决方案,Xen的实现是基于支持Xen功能的kernel,在Xen控制下的kernel,称之为Domai

MyDriverC 1万+

kvm对比xen

KVM 是 Linux 内核的一部分,利用了硬件虚拟化扩展(如 Intel VT 或 AMD-V)来实现虚拟化。KVM 提供了一个基于内核的虚拟化解决方案,可以在 Linux 上创建和管理虚拟机。:Xen 是一个独立的虚拟化层,它引入了一个称为 hypervisor 的层,用于管理虚拟机和物理硬件资源。Xen 最初是裸机虚拟化的解决方案,但后来也支持了半虚拟化和硬件辅助虚拟化。

完颜振江 1351

虚拟化技术:Xen和KVM的对比

    Xen和KVM都是开源的虚拟化技术。Xen的实现方法是,运行支持Xen功能的kernel,这个kernel是工作在Xen的控制之下,叫做Domain0,使用这个kernel启动机器后,你可以在这个机器上使用qemu软件,虚拟出多个系统。Xen的缺点是,如果你需要更新Xen的版本,你需要重新编译整个内核,而且稍有设置不慎系统就无法启动。    相比较,KVM就比较简化。它不需要重新编译内核,...

u011389746的专栏 9245

XEN和KVM云计算虚拟化技术

一、虚拟化概论 VMM(VirtualMachineMonitor,虚拟机监控器)它包括规划、部署、管理和优化虚拟基础结构等端到端功能,传统的VMM建立在操作系统之上,但是操作系统本身除了作为VMM的承载之外并没有其他作用,所以,为了更加节约资源,去掉了操作系统由VMM来直接取代。就是我们看到了VMMhypervisor Hypervisor——一种运行在基础物理服务...

weixin_34160277的博客 570

【KVM】Xen,VMware ESXi,Hyper-V和KVM等虚拟化技术

KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施。 KVM:实现CPU和内存虚拟化,但不能模拟其它设备 QEMU:模拟IO设备(网卡、磁盘),与KVM共同实现真正意义上的服务器虚拟化 libvirt:调用KVM虚拟化技术的管理接口 virt-manager:管理虚拟机的图形化工具,用于启动、停止、创建、删除虚拟设备,以及查看资源占有率统计等 virt-viewer:连接虚拟机的图形化客户.

我的笔记本 3561

虚拟化架构KVM和XEN对比

在实际生产中KVM的虚拟化架构和XEN的虚拟化架构我都使用过。如果应用的不深入,看不出有什么性能上的差异,但是一旦大规模部署,他们之间的性能差异就比较明显了。下面是我找到和梳理的两种虚拟化架构的异同,供大家参考吧 计算虚拟化,目前业界主要有两大开源技术,KVM 和 XEN,关于KVM 和 XEN 架构的对比: 架构上的主要差异在于: 序号 KVM XEN 1 KVM 直接基于 Linux 内核 XEN 实现了一个完整的微内核系统 2 KVM 模块只完成对虚拟化硬件的操作 XEN 自己实

weixin_43311389的博客 4550
上一篇: 集群介绍,lvs原理解析及实验
下一篇: Linux启动流程分析及无法正常开机的解决办法
flat0809
博客等级 码龄9年 45粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值