简述KVM架构和Xen架构
以下均为个人理解,如果有不对的地方还望各位dalao不吝赐教。
虚拟化
虚拟化是通过Hypervisor程序实现的,Hypervisor的作用是将硬件虚拟化提供给多个操作系统使用,是虚拟化技术的核心。
虚拟化分为两种:1型虚拟化
和2型虚拟化
。
1型虚拟化
是将Hypervisor直接安装在物理机上,然后虚拟机直接运行在Hypervisor上,Xen
就是属于1型虚拟化
。2型虚拟化
是先在硬件上安装操作系统,然后将Hypervisor作为系统的一个程序运行在系统上从而实现对虚拟机的管理,KVM
就是属于2型虚拟化
。
KVM架构
先来看一下KVM
,KVM是基于Linux
内核实现的,KVM
的内核模块叫做kvm.ko
,实现对Linux
的CPU和内存虚拟化,是Linux
的一个进程,负责VCPU
和内存
的分配,而其他设备的虚拟就交给了qemu
。
qemu
运行在用户空间,KVM
运行在内核,两者通过/dev/kvm
进行交互。
KVM
仅支持全局虚拟化。
Xen架构
再来看一下Xen
,Xen
支持全虚拟化和半虚拟化,(全虚拟化
就是运行在虚拟环境的虚拟机无法感知到自己是运行在虚拟环境之上,只会觉得自己是运行在硬件之上,半虚拟化
是运行在虚拟环境的虚拟机可以感知到自己不是直接运行在硬件环境之上)这一点不同于KVM
的仅支持全局虚拟化。Xen
是直接运行在硬件上的,也就是上面提到的1型虚拟化
,直接对硬件进行虚拟化,然后在硬件之上直接跑虚拟机,在Xen
架构中的虚拟机分为两种:Domain0
和DoaminU
.Domain0
又叫做特权虚拟机
,具有直接访问硬件和管理其他操作系统的权限,而DoaminU
就是普通的虚拟机,DoaminU
不能直接访问硬件,所有的操作都是通过驱动发送到特权虚拟机Domain0
,由Domain0
去和硬件交互再返回给普通用户,所以,Xen
架构的虚拟化需要先运行Domain0
。
Xen
架构也是对CPU
和内存
进行虚拟化,提供给虚拟机用,其余硬件访问是通过特权虚拟机
直接与硬件进行交互再返回的。
默认Domain0
VCPU和内存的大小是这样计算的:
Domain0的VCPU = 物理设备线程数 % 10
然后向上取最小的一个偶数,就是Domain0
的VCPU数。
Domain0的内存:如果物理设备的内存小于96G,那么就默认为8G,如果物理机的内存大于96G,那么Domain0的内存 = 物理机内存 *0.05 + 8G
。