360SDN.COM

Kvm or Xen,谁更胜一筹?

来源:神秘的陈老师 Cloud云说  2019-04-23 18:07:55    评论:0点击:

陈老师是华为全球培训中心一名云计算培训讲师,近期在给培训过程中发现不少人对KVM 和 Xen 了解甚少,也收到了不少 KVM 和 XEN 的问题。因此,陈老师将借这篇文章和大家讲讲 KVM 和 XEN 的相关知识点。

 

发展史

虚拟化技术最早出现在大型机时代。上世纪 60 年代,IBM 开始在其 CP-40 大型机系统中尝试虚拟化的实现,后来在 System/360-67 中采用,并衍生出 VM/CMS 到后来的 z/VM 等产品线。大型机上的虚拟化技术在之后 20 多年的发展中愈发成熟,但随着小型机以及 x86 的流行,大型机在新兴的服务器市场中已经失去了影响力

 

由于处理器架构的不同,在大型机上已经成熟的虚拟化技术却并不能为小型机及 x86 所用。直到 2001 年,VMware 发布了第一个针对 x86 服务器的虚拟化产品。之后的几年间,英国剑桥大学的一位讲师发布了同样针对 x86 虚拟化的开源虚拟化项目 Xen,并成立 XenSource 公司(07 年 Citrix 将其收购);惠普发布了针对 HP-UX 的 Integrity 虚拟机;Sun 跟 Solaris 10 一同发布了同时支持 x86/x64 和 SPARC 架构的 Solaris Zone;而微软也终于在 2008 年发布的 Windows Server 2008 R2 中加入了 Hyper-V。期间,VMware 被 EMC 收购,XenSource 则被 Citrix 收购。

 

之后的几年间,VMware 逐渐在企业级市场中被广泛的接受,Xen 也逐渐在互联网领域崭露头角。在成熟的服务器操作系统当中,Novell SUSE Linux Enterprise 10 是第一个采用 Xen 技术的。当时的 Xen 还很不成熟,乃至于红帽还为此取笑了 Novell 一番;不过几个月后,到了 RHEL 5.0 发布的时候,红帽决定也将 Xen 加入到自己的默认特性当中——那是 2006 年。

 

一时之间,在 Linux 服务器领域,Xen 似乎成为了 VMware 之外的最佳虚拟化选择(事实上也没多少其他可选的)。但是,作为一项 Linux 平台上的虚拟化技术,Xen 在很长一段时间内一直没有被接受到 Linux 内核的代码当中,这对于 Xen 的维护者而言,不仅意味着要多做很多工作,还意味着用户在废了半天劲装好 Xen 之后可能遇到意想不到的问题(注:2011 年 6 月发布的 Linux 内核 3.0 中已经加入了对 Xen 的支持——Xen 的工程师们表示这是清理了 7 年遗留代码、提交了 600 多个补丁的成果)。

 

而红帽方面,也许是因为当时对这种脱离内核的维护方式很不爽,也许是因为采用 Xen 的 RHEL 在企业级虚拟化方面没有赢得太多的市场,也许是因为 Citrix 跟微软走的太近了,种种原因,导致其萌生了放弃 Xen 的心思。2008 年 9 月,红帽收购了一家名叫 Qumranet 的以色列小公司,由此入手了一个叫做 KVM 的虚拟化技术(KVM,全称 Kernel-based Virtual Machine,意为基于内核的虚拟机)。

 

事实上,当时整个 Xen 的市场表现的确一般,2008 年 Hyper-V 推出的时候,甚至有评论猜测 Citrix 自己都会抛弃 Xen 而投奔 Hyper-V(当然,Citrix 后来在官方博客上否认了这个猜测,表示自己和微软只是合作的比较亲密而已)。

 

总之红帽决定选择了一个新兴的基于内核的虚拟化技术:KVM。而在正式采用 KVM 一年后,就宣布在新的产品线中彻底放弃 Xen,集中资源和精力进行 KVM 的工作。至此各大虚拟化技术 VMware,Xen,KVM 等均出现,并找到自己位置。

 

 

架构对比

 

KVM 是一个独特的管理程序,其让 Linux 内核自身变成一个管理程序,通过 KVM 作为一个内核模块实现,在虚拟环境下 Linux 内核集成管理程序将其作为一个可加载的模块,可以简化管理以及提升性能。KVM 使用标准 Linux 调度程序、内存管理器和其他服务。将虚拟技术建立在内核上而不是去替换内核。

 

 

Xen 作为最优秀的半虚拟化引擎,被设计成一个独立的内核,它只需要 Linux 执行 I/O,这样使得它非常的大,并且它有自己的调度程序、内存管理器、计时器和机器初始化程序。Domain 0(特权虚拟机)是其他虚拟机的管理者和控制者,可以构建其他更多 Domain,并管理虚拟设备。它还能执行管理任务,比如虚拟机的休眠、唤醒和迁移其他虚拟机。此外,还有个 Domain U,这个是指除了 Domain 0 之外的普通虚拟机。

 

 

功能对比(虚拟化的实现方式)

 

 

 

KVM 内核模块本身只能提供 CPU 和内存的虚拟化,所以它必须结合 QEMU 才能构成一个完整的虚拟化技术,这就是 qemu-kvm。

 

作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。IO 的虚拟化,比如存储和网络设备就交给 Linux 内核和 Qemu 来实现。Qemu 将 KVM 整合进来,通过 ioctl 调用/dev/kvm 接口,将有关 CPU 指令的部分交由内核模块来做。kvm 负责 cpu 虚拟化+内存虚拟化,实现了 cpu 和内存的虚拟化,但 kvm 不能模拟其他设备。qemu 模拟 IO 设备(网卡,磁盘等),kvm 加上 qemu 之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为 qemu-kvm。Qemu 是一个模拟器,它向 Guest OS 模拟 CPU 和其他硬件,Guest OS 认为自己和硬件直接打交道,其实是同 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。由于所有的指令都要从 Qemu 里面过一手,因而性能较差。

 

而 XEN 架构就不一样,在 XEN 架构当中,CPU 和内存的虚拟化是由 Hypervisor 实现的,相对应的,IO 虚拟化是由 Domain0 去实现的。关于 KVM 和 XEN 的知识,今天就简单介绍到这。最后是 KVM 和 XEN 的对比总结:

 


 (点击查看大图)

 

从以上介绍可以看到,Xen 和 KVM 各有千秋,都随着技术的发展在革新中。目前性能、成熟度 等方面 Xen 优于 KVM,在一些较大较重要项目、性能要求较高的项目中建议优先考虑使用 Xen。

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权