KVM 介绍
KVM( Kernel-based Virtual Machine)是一个完整的虚拟化解决方案,适用于包含虚拟化扩展(IntelVT或AMD-V)的x86硬件上的Linux。目前也支持ARM等其它硬件平台. 它由可加载的内核模块kvm.ko组成,它提供核心虚拟化基础架构和处理器特定模块,kvm-intel.ko或kvm-amd.ko,KVM的用户空间组件包含在QEMU1.3后续版本中,KVM目前已成为学术界的主流 VMM (virtual machine monitor,虚拟机监视器,也称为 hypervisor)之一
KVM是开源软件,可运行多个运行未修改的Linux或Windows映像的虚拟机
依赖于HVM;Intel VT-x, AMD AMD-V
红帽 kvm 介绍
https://www.redhat.com/zh/topics/virtualization/what-is-KVM
RedHat虚拟化指南
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/virtualization_getting_started_guide/index
RedHat创建虚拟机数量限制:
https://access.redhat.com/articles/rhel-kvm-limits
KVM架构
KVM 体系结构
-
KVM: 初始化CPU硬件,打开虚拟机模式,负责CPU,内存,中断控制器,时钟. 由内核模块kvm_xxx.ko实现,工作于hypervisor,设备/dev/kvm,是一个字符设备,在用户空间可通过ioctl()系统调用来完成VM创建、启动,为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、时钟等管理功能
-
QEMU进程:工作于用户空间,主要用于实现模拟IO设备,如显卡,网卡,硬盘等, qemu-kvm进程:工作于用户空间,用于实现一个虚拟机实例
-
Libvirt:提供统一API,守护进程libvirtd和相关工具,如:virsh,virt-manager等
KVM 模块载入后的系统的运行模式
内核模式:GuestOS执行I/O类操作,或其它的特殊指令的操作;称作“来宾-内核”模式 用户模式:代表GuestOS请求I/O类操作 来宾模式:GuestOS的非I/O类操作;它被称作“来宾-用户”模式,称作虚拟机的用户模式更贴切.
KVM 的组件
KVM:运行在内核空间,提供 CPU 和内存的虚级化,以及客户机的 I/O拦截,Guest的部分I/O被KVM拦截后,交给QEMU处理。
两类组件:
-
(kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能,可虚拟CPU和内存
-
qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;也用于实现一个虚拟机实例
KVM 功能
KVM 所支持的功能包括:
-
支持CPU 和 memory 超分(Overcommit)
-
支持半虚拟化I/O (virtio)
-
支持热插拔 (cpu,块设备、网络设备等)
-
支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
-
支持实时迁移(Live Migration)
-
支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
-
支持内核同页合并 (KSM )
-
支持NUMA (Non-Uniform Memory Access,非一致存储访问结构 )
QEMU
QEMU是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可在一种架构(如PC机)下运行另一种架构(如ARM)下的操作系统和程序。而通过动态转化,其可以获得很高的运行效率。当作为一个虚拟机时,qemu可以通过直接使用物理机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时,qemu可以虚拟x86、服务器和嵌入式powerpc,以及s390的系统
QEMU 当运行与主机架构相同的目标架构时可以使用 KVM。例如,当在一个x86兼容处理器上运行qemu-system-x86 时,可以利用 KVM 加速——为宿主机和客户机提供更好的性能
Qemu是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件,正因为 Qemu 是纯软件实现的,所有的指令都要经Qemu,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,KVM完成复杂及要求比较高的设备虚拟化,而Qemu完成像鼠标、键盘等设备的虚拟化。
QEMU有如下几个部分组成:
-
处理器模拟器(x86、PowerPC和Sparc)
-
仿真设备(显卡、网卡、硬盘、鼠标等)
-
用于将仿真设备连接至主机设备(真实设备)的通用设备,实现透传
-
模拟机的描述信息
-
调试器
-
与模拟器交互的用户接口
KVM 局限性
-
CPU overcommit:过载使用,性能下降
-
时间记录难以精确,依赖于时间同步机制,如NTP
-
VM量特别大时,MAC地址存在冲突的可能性
-
实时迁移:共享存储,CPU架构,版本等
-
性能局限性
比较 KVM 和 XEN
KVM与XEN对比
| XEN | KVM | |
|---|---|---|
| 问世时间 | 2003年 | 2007年 |
| 支持企业 | Citrix、Novell、Oracle、Sun、Ret Hat(RHEL5)和 Virtual Iron | Redhat、Ubuntu等 |
| 支持的虚拟化技术 | 全虚拟化、半虚拟化 | 全虚拟化 |
| 支持架构 | x86、IA64和AMD、Fujitsu、IBM、Sun等公司的ARM,以及 x86/64 CPU商家和Intel嵌入式的支持 | 支持虚拟化的CPU |
| 支持操作系统 | UNIX、Linux和Microsoft Windows | UNIX、Linux和 Microsoft Windows |
| 动态迁移 | 支持 | 支持(以前不支持) |
| 内核支持 | 需要对内核打补丁 | 内置在内核中 |
IBM文档
http://www.ibm.com/developerworks/cn/linux/l-using-kvm/



文章评论