【虚拟化】KVM概念和架构

目录

一、什么是KVM?

二、KVM的功能

2.1 主要的功能

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_脚本之家

### KVM虚拟化技术概述 KVM(Kernel-based Virtual Machine)代表基于内核的虚拟机,这是一种开源的虚拟化解决方案[^3]。通过集成到Linux内核中,KVM允许一台物理计算机运行多个独立的操作系统实例作为客户机操作系统。 #### 虚拟化的定义与目的 虚拟化是指计算元件在虚拟的基础上而不是真实基础上运行的概念。采用这种技术的主要目的是为了提高效率并简化资源管理分配过程。借助于虚拟化,企业能够更高效地利用硬件资源,减少能源消耗以及降低维护成本。 #### KVM的工作原理 当提到具体工作方式时,KVM作为一个加载至标准Linux内核中的模块存在,该模块使得处理器上的特殊指令集得以执行从而支持完全虚拟化环境下的来宾OS操作[^1]。对于Intel CPU而言,这指的是VT-x特性;而对于AMD,则对应着SVM功能。要验证CPU是否具备这些必要的扩展能力,可以通过命令`egrep '(vmx|svm)' /proc/cpuinfo`来进行检测[^2]。 #### 组件构成 除了核心部分即KVM本身外,完整的虚拟化方案还需要额外工具的支持: - **QEMU-KVM**: 提供了一套丰富的API接口用于创建管理虚拟设备,并弥补了纯KVM环境下难以模拟特定硬件组件的问题。例如网络适配器或其他I/O装置等。 ```bash modprobe kvm_intel # 对于 Intel 处理器 modprobe kvm_amd # 对于 AMD 处理器 ``` 上述代码展示了如何根据不同的处理器架构加载相应的KVM模块以激活其虚拟化特性。 #### 应用场景优势 使用KVM进行虚拟化具有诸多优点,其中包括但不限于:增强的安全性、更高的稳定性可靠性、易于迁移的特点以及良好的兼容性表现。此外,由于它是免费且开放源码的产品,因此也受到了广泛社区的支持发展贡献。
评论 82
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙先生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值