一、KVM的概念
KVM全称是Kernel Viirtual Machine,也就是内核虚拟机。它是Linux中的一个内核模块而已,这个模块使得Linux操作系统具备了Hypervisor功能
KVM支持的功能:
1.支持CPU和内存的超分(overcommit)
2.支持半虚拟化IO(virtio)
3.支持热插拔(cpu,块设备,网络设备等)
4.支持对称多处理(symmetric multi-processing,SMP):即在一台计算机上汇集了多个CPU,个CPU之间共享内存子系统和总线结构
5.支持实时迁移
6.支持PCI设备的直接分配和单IO虚拟化(SR-IOV)
7.支持内核同页合并(KSM):通过合并内存页来增加开发虚拟机的数量,通过合并具有相同核心代码的guest,节省内存空间
8.支持NUMA(非一致性存储访问结构)
基于这些功能,咱们熟悉的openstack也是基于此基础上开发的
二、KVM原理
KVM本身不执行任何的模拟操作的,模拟这个艰巨的任务是需要交给用户空间的应用程序QEMU来处理的,Qemu会通过/dev/kvm这个接口设置一个客户机虚拟服务器的地址空间,来提供模拟的I/O的,具体是一个比较复杂的过程,大家可以上网查询,或者看看KVM实战这本书,KVM主要功能是初始化CPU硬件,然后打开虚拟化模式,虚拟客户机运行在虚拟机模式下,并对虚拟机的运行提供一定的支持。
KVM和QEMU是协同工作的关系。

三、KVM基础功能
-
CPU
QEMU提供对CPU的模拟,展现给客户机一定数目的CPU数目和CPU特性。在KVM打开情况下,客户机的CPU指令由硬件处理器虚拟化功能(intel VT-X)辅助执行.
KVM环境中,每个客户机都是标准的Linux进程(QEMU进程),而每个vCPU在宿主机中都是QEMU派生的普通线程。
linux中一般又两种执行模式,内核模式和用户模式,在KVM中增加了客户模式
用户模式:主要处理I/O的模拟和管理,由QEMU实现
内核模式:主要处理高性能和高安全相关的指令,如客户模式到内核模式的转换,处理客户模式下I/O指令或其他特权引起的VM-Exit,处理影子内存管理
客户模式:执行大部分guest的指令,除了I/O和一些特权指令
四、虚机的上网方式
-
NAT模式
-
Bridge方式

以上就是对KVM做了一些简单的介绍,实际上的工作原理比介绍的要更加的复杂