KVM技术简单介绍(一)
KVM :内核级虚拟化技术 (Kernel-based Virtual Machine)
KVM的核心作用是启动硬件配置并切换到虚拟化工作模式;接着将虚拟客户机设置为处于虚拟机运行状态,并进行必要的配置和支持。
从功能上看KVM 实际就包含2个部分:
支持内核态实现的KVM驱动其主要职责包括创建虚拟机实例为虚拟机分配物理内存空间处理VCPU寄存器的数据读写操作以及管理VCPU的实际运行过程
guest kernel QEMU is designed to emulate the user space of a virtual machine, providing device models that enable means accessing peripheral devices.
结构形态如下图所示 :

【CPU 虚拟化】
在内核加载的过程中,在线程切换发生时(或者说是当切换发生时),KVM模块自身先初始化必要的数据结构;随后KVM模块初始化必要的数据结构;随后通过检查当前CPU的状态并激活虚拟化功能开关;同时通过执行VMXON命令完成这一操作
宿主机操作系统处于虚拟化运行状态下的根模式;随后KVM模块生成专用设备文件/dev/kvm,并等待用户空间发出相应的操作指令。
实则就是说所生成的结果其实就是一个位于内核空间中的类驱动模块,在释放完接口后便得以与用户态进行交互。
【用户态交互】
虚拟机的创建是一个用户空间的应用程序(QEMU)建立的过程;而运行过程则涉及该程序与KVM模块之间的交互。
由此可见, 由于CPU文件被视为一个内核模块文件, 因此其调用即Linux常规的IOCTL调用方式
QEMU借助libkvm应用程序接口与设备驱动交互。这些操作通过fd ioctl指令向设备驱动传递创建虚拟机命令的指令。设备驱动层中的kvm_dev_ioctl函数负责接收并执行这些ioxlnto指令(该函数位于源文件kvm_main.c中)。如图所示:

kvm_dev_ioctl函数
===========================================================================================================
提及的是一个著名的开源虚拟机软件。事实上,QEMU 也即通过 KVM 模块提供的系统调用进入内核;同样可以选择其他技术如 Xen 或 KQEMU 进行加速,这两个方面比较独立,QEMU 会选择 KVM 而 KVM 则会选择 QEMU。
至此为止,你可以通过QEMU工具轻松创建虚拟机。然而,在某些情况下,该工具在效率方面存在不足,并且操作相对繁琐。因此,在Redhat及其相关系统中,默认配置通常会自带libvirt和VMM等虚拟化管理工具。
其中 libvirt 作为一套 C 语言 API 的存在 其主要功能便是消除各类虚拟化工具之间的技术差异 从而实现了统一的操作界面与功能配置。以 Xen 为例 其管理相关操作通常使用 xm 命令 而 KVM 则采用 qemu-kvm 这样的实现方式进行配置与操作。一旦连接到 Xen 或 KVM 的宿主机上 使用 libvirt 提供的一系列函数或接口 就能够通过相同的指令集对不同的虚拟机进行统一管理和控制 不用分别针对每种工具进行特殊配置 这大大提升了工作效率与便利性 同时也简化了开发与运维流程。除了提供标准 API 外 libvert 还内置了 virsh 这一用于管理虚拟机的一整套功能模块 通过 virsh 命令可深入探索 libvert 的功能 并完成一系列复杂的操作任务 如启动停止监控等日常维护工作 等等 最终用户更希望通过图形化操作界面 来直观地管理和监控这些抽象的资源 这才是 VMM 所追求的目标
VMM是一套基于Python语言开发的虚拟机管理图形界面系统;该系统允许用户通过其直观的操作界面方便地进行不同虚拟机的操作;同时该系统是基于libvirt API参数实现的。
