vCPU
CPU是计算机系统中最重要的一部分,负责计算机指令的执行,在KVM/QEMU中,QEMU提供了对CPU的模拟,向客户机展示了一定的CPU数目和CPU特性;在KVM打开的情况下,客户机中CPU指令的执行则是由硬件处理器的虚拟化功能(intel的vt-x或者AMF的AMD-v)来辅助执行,效率非常高
在QEMU/KVM环境下,客户机是作为一个标准的Linux进程运行的,客户机所拥有的vCPU在在宿主机中则是QEMU进程派生的一个普通线程。普通的Linux中,进程一般有两种执行模式:内核态和用户态。在KVM中,增加了第三中模式:客户模式。
vCPU的三种执行模式下具有不同分工:
(1)在用户模式下(User Mode)
主要处理I/O的模拟以及管理,由QEMU的代码实现
(2)内核模式(Kernel Mode)
主要处理特别需要高性能和安全相关的指令,比如处理客户模式到内核模式的转换,处理客户模式下I/O指令或其他 特权指令引起的退出(VM-Exit),处理shadowm MMU
(3)客户模式(Guest Mode)
主要执行Guest中的大部分指令,I/O和一些特权指令除外(它们会引起VMM-Exit,被hypersior截获并模拟)
vcpu在KVM中这三种模式的切换如下所示
在KVM的整体系统架构中,系统底层的CPU硬件需要开启硬件辅助虚拟化支持,宿主机就运行在硬件之上,KVM则作为内核的可动态加载模块运行在宿主机之中,其中kvm模块和硬件平台无关,负责实现需要你话核心基础架构,而kvm_Intel则与硬件平台有关。客户机则是作为用户空间中的一个进程(qemu-kvm)来运行的,他和Linux其他用户空间中的进程(比如firefox,gnome等)一样由内核来调度使其在物理CPU上运行,并由KVM模块控制在用户态,内核态以及客户态习运行。多个客户机就是宿主机上的多个QEMU进程,而一个客户机中的多个vCPU则是一个QEMU进程的多个线程。在客户机中,同样也有内核空间和用户空间的程序。
下图为KVM整体架构图