【虚拟化】KVM概念和架构

目录

一、什么是KVM?

二、KVM的功能

[2.1 主要的功能](#2.1 主要的功能)

[2.2 其它功能](#2.2 其它功能)

三、KVM核心组件及作用

四、KVM与VMware的优势

五、KVM架构

六、qemu介绍

七、创建虚拟机流程


一、什么是KVM?


**Kernel-based Virtual Machine的简称,KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的 Linux 原生的全虚拟化解决方案。**KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。

**KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。**而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。


二、KVM的功能


2.1 主要的功能

基于kvm,可以执行热迁移,将一个运行的虚拟机从一个运行vm从一台物理机移动到另外一台物理主机,而vm里的运行不受影响(几台部署kvm虚拟化的物理机共享一个存储,存储内存放虚拟机的xml文件,这样在另外一台主机启一个虚拟机的进程是很快的,然后关联上待迁移主机的xml文件,就实现了热迁移);

可以保存当前虚拟机的运行状态到硬盘,然后可以重新启动虚拟机,这是虚拟机的运行状态和之前一样。

2.2 其它功能


  • 支持CPU 和 memory 超分(Overcommit)
  • 支持半虚拟化I/O (virtio)
  • 支持热插拔 (cpu,块设备、网络设备等)
  • 支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
  • 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
  • 支持 内核同页合并 (KSM )
  • 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )

三、KVM核心组件及作用


  • **Guest:**客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
  • **KVM:**运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
  • **QEMU:**修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

四、KVM与VMware的优势


ESXI的底层是VMkernel + linux,VMkernel启动后开始接管对硬件管理,然后启动第一个linux虚拟机,协助VMkernel一起来管理和调度硬件资源。

KVM是直接将linux kernel变成hypervisor,只需要从标准linux内核启动即可,linux kernel拥有的特性可以全部利用上。KVM架构上的优势使得它非常简洁,在开发出来仅三个多月就被合并到了标准内核。


五、KVM架构


虚拟化是云计算的基础。一种资源管理技术,是计算机将各种实体资源(CPU、内存、磁盘空间、网络适配器等)做虚拟化、将虚拟化后的整体做为一个可供分割且组合的操作系统。

② KVM全称是Kernel-Based Virtual Machine。 KVM基于Linux内核实现,属于半虚拟化的Hypervisor。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存,而Qemu则协助提供IO设备半虚拟化,用于虚拟磁盘IO和网络IO等。不过IO设备的虚拟化方向都是往直接透传到宿主机的方向走,比如vhost-net,直接在硬件或内核级别支持。

一个 KVM虚机在宿主机中其实是一个qemu-kvm进程。而每个虚机中的vCPU则为宿主机中的一个线程。

OpenStack底层也使用Libvirt,Libvirt是KVM的管理工具,还可以管理Xen,VirtualBox等Hypervisor。Libvirt包含3个东西:后台daemon服务libvirtd、API 库和命令行工具 virsh。

虚机的vCPU总数可以超过物理CPU数量,这个叫CPU overcommit(超配)。

总结如下:

vm就是一个普通的linux进程,由linux内核调度程序进行调度,vm因此可以使用linux内核已有的功能。vm的执行本质就是vm中cpu的执行,因此vm的每个cpu就是普通的linux进程。

**KVM有一个内核模块叫 kvm.ko ,**kvm.ko只提供 CPU 和内存的虚拟化,而针对于IO及其他硬件设备(网络及存储等)的虚拟化,则是交给qemu实现,qemu运行在用户态通过/dev/kvm接口设置一个客户机虚拟机服务器的地址空间,向kvm提供模拟的I/O,并且将它的视频显示映射回宿主的显示屏。


六、qemu介绍


qemu本身就是一种虚拟化技术,它与kvm的区别如下:

**(1)上图的左侧:**完全基于Qemu纯软件(不包含操作系统内核)实现的虚拟化

kqemu是通过kqemu模块实现内核态的加速,在用户态的qemu通过访问/dev/kqemu设备文件接口调用改进加速。不过,此类模式主要针对Guest os与Host os属于统一cpu架构(比如都是x86的架构),一个明显的缺点是性能低下。

(2)上图的右侧:qemu+kvm实现的虚拟化(即qemu-kvm)

kvm只是Linux标准内核加载了一个 模块kvm.ko。也就是说KVM仅可以在 VT技术的基础上,提供虚拟的处理器和虚拟内存,至于IO硬件的模仿都交给qemu去做。

七、创建虚拟机流程


(1)标准的Linux内核中加入KVM的模块kvm.ko变身成为一个VMM(VMM Virtual-Machine-Monitor)

(2)在原有的用户模式(工作在cpu-ring3)和内核模式(工作在cpu-ring0)两种模式的基础上增加了新的客户模式。客户模式存在的特权级别与ring0-3正交。(也就是说客户模式也存在4个特权级别)

(3)用户创建虚拟机,通过调用用户模式的qemu程序,qemu与kvm提供的libkvm库为接口,传递创建指令。

(4)打开/dev/kvm文件并获得文件描述符fd后,通过ioctl指令写入KVM_CREATE_KVM,即可创建一个虚拟机,并返回一个fd_vm的虚拟机文件描述符。、

(5)获得fd_vm后,通过ioctl调用KVM_CREATE_VCPU指令,可以对fd_vm所对应的虚拟机创建vCPU,并对vCPU做初始化操作。

(6)然后通过KVM_RUN指令对fd_vcpus操作,启动运行虚拟机。


KVM 虚拟化技术:实战与原理解析 kvm虚拟化管理系统

https://blog.51cto.com/u_14402/6420529

https://zhuanlan.zhihu.com/p/702712061

KVM 介绍及作用详解_Kvm_脚本之家

相关推荐
UsamaBinLaden3 天前
在 Alpine Linux 中创建虚拟机时 Cgroup 挂在失败的现象
linux·容器·虚拟化·incus·lxd·alpine
老马啸西风7 天前
windows wsl ubuntu 如何安装 open-jdk8
linux·windows·ubuntu·docker·容器·k8s·kvm
万能小锦鲤10 天前
《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
java·hadoop·eclipse·hbase·shell·vmware·实验报告
万能小锦鲤11 天前
《大数据技术原理与应用》实验报告七 熟悉 Spark 初级编程实践
hive·hadoop·ubuntu·flink·spark·vmware·实验报告
万能小锦鲤11 天前
《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
hive·hadoop·ubuntu·eclipse·vmware·实验报告·hiveql
万能小锦鲤12 天前
《大数据技术原理与应用》实验报告一 熟悉常用的Linux操作和Hadoop操作
大数据·linux·hadoop·ubuntu·vmware·实验报告·大数据技术原理与应用
七夜zippoe12 天前
破解 VMware 迁移难题:跨平台迁移常见问题及自动化解决方案
运维·自动化·vmware
qwfys20014 天前
How to install Centos 8.5 on vmware workstation pro 17.6
centos·vmware·install·17.6
九丝城主21 天前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware
野蛮人6号21 天前
虚拟机网络编译器还原默认设置后VMnet8和VMnet1消失了
网络·vmware·虚拟机网络编译器·vmnet8消失