开源虚拟化项目

简介: 一、XEN介绍二、VT-X介绍三、KVM 介绍四、相关对比

开源虚拟化项目

 

目录:

一、XEN介绍

二、VT-X介绍

三、KVM 介绍

四、相关对比

 

 

一、XEN

image.png

1、最早是由剑桥大学发明,在2003-2004发布出来。

20032004年的时候发布了第一个公开版本,也就是Dan2.0,在2.0里面只包含了para Liz Asian


一个公开版本2.0是完全开源的,性能是非常非常好的。但是power to Liz Asian,必须要修改该词的操作性的内核,所以说它的适用范围是受到限制的,没办法用到像这种闭源的Windows操作系统上面去。

 

2、第三个版本在2006年,因特尔公司发明,开发了开源项目。

2006年的时候,英特尔公司已经发布了新的cpu规范,从硬件层面可以支持虚拟化技术,那英特尔公司就在2.0基础上开发了。支持硬件辅助虚拟化的三个版本,也就是后来发布到的3.0版本。

 

3、花费五亿美金被收购

 

4、当前在开发的是4.6版本

 

 

二、VT-X

它的整个的所有的该智能操作系统都是需要经过修改的,并且,在这样一个架构里边,所有的io架构、中断架构都完全是自定义的,和标准的X86架构是完全不一样的。

         

这点是要通过修改该词的操作系统内核,以及需要在hap weather里边做相应的实现。


操作系统和应用程序都不需要修改,可以直接运行在虚拟机里边,这就要借助于英特尔公司发布的新的cpu规范,引入了VTX技术的cpu虚拟化,后来也引入VTX技术,之后在这种情况下也就不需要修改操作系统,让该死的内核直接运行在guest moderaining er had weather直接运行在host moderaining

image.png

 

引入了VT-x技术

相关机制:

1、XEN Bus

Xen的总线

 

2、XEN Store

进行信息交互、可以存储信息

 

3、所有的P的驱动都可以挂在这个总线上面,但是到账机制可以像Windows里面的注册表一样,它是一个database,可以把各种各样的信息存在里面,各个VM之间,或者vm help weather之间,然后进行信息交互。

 

在最新的叫NBA虚拟化已经使用了扩展列表的机制来加速性能相over to the Asian,但其实支持三种,一种是所谓的设备的全模拟方式,另外一种power plus的方式,还有一种就是设备直通,这些都是支持的。

 

三、KVM


是基于Linux的一个APP软件,通过在Linux内核里边增加一个内核模块,把hyper bol ix内核扩展成high pressure


最早是由以色列的一家公司在2007年发布到Linux内核里的。

它有一个强依赖,也就是说,要依赖于最新的cpu提供love it技术。

 

12007年由以色列公司创建

2、依赖VT技术

4、只支持X86架构

5、KVM的公司被Redhat收购,大多数都被商业公司收购,此技术可以营造极大的利益。

6、应用于Google、阿里云

7、系统架构

image.png

 

上图是KVM的系统架构,从系统架构上我们可以看到,2004内核儿通过KPM扩展之后,它不但Linux内核,不但可以运行一般的应用程序,在这个Linux内核上面,通过像VT这种技术的支持,也可以运行虚拟机。

 

Linux内核通过KPM扩展之后,Linux内核,不但可以运行一般的应用程序,在这个Linux内核上面,通过向VT这种技术的支持,也可以运行虚拟机,真正的是把进程和虚拟机放在了一个同样的位置上。

 

KVM的整个架构。其实KBMLinux内核的一个模块,通过修改过的QQbattery,他们结合实现一个虚拟机的功能,它非常依赖于像Intel vtAMDSVM技术。当然cayenne在实现的时候也考虑到了,比如像资源的隔离,通过这种资源隔离的机制,可以降低该死的操作系统之间的互相的影响,通过向schedulecap或者guarantee这样的模式来确保虚拟机的s Le


那么从实际上来说,Kpi模块的实现,在Linux内核里边,这是一个独立的一个模块,独立的一个内核模块,它主要是负责cpu和内存的虚拟化。当然,他也会负责一些平台设备的虚拟化来加速比如像虚拟的iopiclookapic和 虚拟的ARtipit这些平台设备这个模块本身会通过一个用户的接口,然后KMU交互。

 

(1)Linux内核模块

通过一个模块进行修改,然后才能实现一个虚拟机的功能

(2)依赖Intel VMXAMD SVM

(3)考虑资源隔离

实际上考虑到,比如像资源的隔离,通过这种资源隔离的机制,可以降低S操作系统之间的互相的影响,通过像schedulepad或者根这样的模式来确保虚拟机的SLV

 

8、Qemu


当然,KVM虚拟机另外一个重要的模块就是Qemu模块,ErerkUA本身是一个himalittle


那么它是如何和KBM之间协同工作?在QQ里边它模拟了真正的cpu、内存、io设备,那么,在KL里边QQ的功能就发生了变化,在QQ里边cpu的虚拟化。不再由软件模拟来完成,而是交个VT技术来完成,这种情况下就大大加速了整个cpu虚拟化的效率。当然,内存的虚拟化也交给了硬件来完成。


io面,KVM引入了像wow这样的power virtual eyesio虚拟化方式,

(1)模拟CPU、内存、I\O...

(2)CPU交由VT完成

(3)内存交由硬件完成

(4)I\Owhat I\o完成

 

9、其他性能增强

VM还有其他方面的一些PV的性能增强,自旋锁在虚拟化里边会有很大的开销,这主要是因为当一个获得自旋锁的CVCPU被调度出去之后,其他的VCPU等到这个VCPU再被调度回来的时候,才有机会把锁释放掉,这个性能的损失比较大。

 

KTV里边也引入了像PPspock去解决spin lock的性能损失问题,当然还有增强,比如像时间的虚拟化,在KL里边也采用了power to last timing的机制来解决时间虚拟化的问题。为了增加内存方面虚拟化的性能,也引入了像transparent huge page,也就是透明大业的模式,来解决内存方面的一些虚拟化的开销。

 

Para-virtualized spinlocks     解决性能损失问题

Para-virtualized Timing 解决时间虚拟化的问题

Para-virtualized Huge page 解决内存方面的虚拟化开销

 

 

四、对比

XenKVM做一个整体对比来说,他们比较靠比较相同的部分,比如cpu和内存,他们现在的虚拟化方式都是通过硬件虚拟化的方式实现,比如像Intel vt X vt X技术和AMDFDM技术来实现。他们还有一个共同特点,就是都使用QQ,也就是qi moo作为设备设备模型去模拟一些非关键的设备。

 

IO方面,Then he k vm都引入了power to last I o虚拟化模式来增强系统的性能,当然也有很多的不同点,比如than,它是一个。Type weather所谓top line就是happ weather,直接运行在物理机上面,Erkvm是一个type to help weather,也就是说还所有的虚拟机都运行在一个Host的操作系统上面。

 

当然从软件复杂度方面,也可以看两个项目的不同,项目光hap weather就有30万行代码,Er k vm只有3万行代码。从这个层面上来看的话,复杂度是远远高于KVM的。

 

共同点:硬件虚拟化实现

       使用Qemu模拟非关键设备

       I\O:使用Para-virtualized模式

 

不同点:Xen :Type-1 Hypervisor 直接运行在物理机上

KVM:Type-2 Hyperviso  运行在其他软件上

 

代码不同:

Xen:300K(Hypervisor)+>

300K(management foolS)    

KVM:~30K

相关文章
|
存储 Linux 虚拟化
开源虚拟化平台oVirt4.3简单搭建实践(下)
开源虚拟化平台oVirt4.3简单搭建实践(下)
898 0
开源虚拟化平台oVirt4.3简单搭建实践(下)
|
虚拟化
开源的虚拟化私有云及云管平台
免费开源的私有云及云管平台来了,除虚拟化外,还支持纳管主流的 9 大公有云及私有云平台,欢迎大家安装体验!
|
数据可视化 关系型数据库 Linux
开源虚拟化平台oVirt4.3简单搭建实践(上)
开源虚拟化平台oVirt4.3简单搭建实践
1213 0
开源虚拟化平台oVirt4.3简单搭建实践(上)
|
机器学习/深度学习 存储 Linux
开源虚拟化项目| 学习笔记
快速学习开源虚拟化项目。
141 0
开源虚拟化项目| 学习笔记
|
SDN 虚拟化
开源创新、软件定义网络和网络功能虚拟化特性
开源创新、软件定义网络和网络功能虚拟化特性
304 0
开源创新、软件定义网络和网络功能虚拟化特性
|
Shell 虚拟化 Python
python中的venv 模块 -- 创建虚拟化的项目环境
前言 在使用 python 制作网页的过程中,我们往往需要先将站点的目录“虚拟化”。虚拟化其实就是将当前文件下程序的运行环境与整个系统的环境隔离。那么为什么我们要将一个项目虚拟化呢? 1.不进行虚拟化会产生的问题 在平时使用 python 时,有可能会遇到这几个常见的问题: 1.当运行的项目处于不同版本时(如 python 2.7/3.7 ),要通过切换 python 解释器的版本来运行程序(或要使用 python2/3 pip/pip3 等指令来对应不同的版本)。
1486 0