KVM虚拟化基础原理

KVM是一种基于内核的虚拟机,结合QEMU提供CPU虚拟化和设备模拟。虚拟机在宿主机上以Linux进程形式存在,运行在用户、内核和客户模式之间切换。Libvirt作为管理工具,统一管理不同虚拟化平台,如KVM、Xen等。
摘要由CSDN通过智能技术生成

KVM虚拟化

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)
KVM属于完全虚拟化,功能组件上由两部分组成,KVM Driver(内核态)和Qemu(用户态)。KVM Driver负责模拟虚拟机的CPU运行,内存管理,设备管理等;Qemu则模拟虚拟机的IO设备接口以及用户态控制接口。
Qemu在最上层,将虚拟机的整体呈现到host用户上,可以理解成客户模式;Qemu通过中间层libkvm或者ioctl等控制/dev/kvm设备接口,从而掌握内核态中kvm驱动进行的资源分配,即用户态模式;
kvm驱动接收用户态操作指令,控制虚拟机在内核态的资源分配,称之为内核模式。在HOST里面,客户模式的体现就是一个虚拟机内部环境,用户态则是虚拟机进程。
KVM工作原理:用户模式的QEMU通过ioctl进入内核模式,kvm模块为虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS发生外部中断或者影子页表却也之类的情况,会暂停Guest OS的执行,退出客户模式进行异常处理,执行客户代码。如果发生I/O事件或者信号队列有信号到达,就会进入用户模式处理。
在这里插入图片描述
KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、 IO 虚拟化和网络虚拟化等。单个虚拟机是宿主机上的一个普通 QEMU 进程,虚拟机中的 CPU 核(vCPU)是 QEMU 的一个线程,VM 的物理地址空间是 QEMU 的虚拟地址空间
因此在虚拟机运行时,有三种模式:
客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下。
用户模式:代表用户执行I/O指令,QEMU运行在这个模式下。
内核模式:实现客户模式的切换,处理因为I/O或者其他指令引起的从客户模式退出(VM_EXIT)。kvm模块运行在这个模式下。
kvm模型中,每一个Guest OS都是作为一个标准的Linux进程,都可以使用Linux进程管理命令管理。

在这里插入图片描述

虚拟机

虚拟机是运行在物理服务器上的一个完整的系统,它包含 有自己的虚拟CPU、内存、磁盘和网卡等虚拟硬件资源。
虚拟硬件信息在虚拟机的配置文件中定义。
操作系统和应用程序在虚拟机中的运行方式与它们在普通 物理机上的运行方式没有任何区别。
虚拟机的xml描述文件存储在物理机**/etc/libvirt/qemu**中, xml文件描述了此虚拟机中的硬件配置信息。

kvm

KVM的全称是Kernel-based Virtual Machine
KVM充分利用CPU的硬件辅助虚拟化能力,并重用了Linux内核的诸多功能,使得KVM本身是非常瘦小的,从严格意义来说,KVM本身并不是 Hypervisor,它仅是Linux内核中的一个可装载模块,其功能是将Linux内核转换成一个裸金属的Hypervisor。
通过KVM模块的加载将Linux内核转变成Hypervisor,KVM在Linux内核的用户(User)模式和内核(Kernel)模式基础上 增加了客户(Guest)模式。Linux本身运行于内核模式,主机进程运行于用户模式,虚拟机则运行于客户模式,使得转变后的Linux内核可以将主机 进程和虚拟机进行统一的管理和调度,这也是KVM名称的由来。
KVM利用修改的QEMU提供BIOS、显卡、网络、磁盘控制器等的仿真。KVM和QEMU通常一起使用。
KVM(Kernel-based Virtual Machine)包含一个为处理器提供底层虚拟化、可加载的核心 模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层 控制工具。KVM无需改变Linux或Windows系统就能运行。
KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理。

qemu

通用的开源计算机仿真器和虚拟器。
具体来说,当作为机器仿真器使用时,QEMU可以通过动态代码翻译机制(dynamic
translation)在不同的机器上仿真任意一台机器(例如ARM板),并执行不同于主机架构的
代码。同时由于动态代码翻译机制,它也能够实现不错的性能。
QEMU本身并不是KVM的一部分,其本身是一个著名的开源虚拟机软件,与KVM不同, QEMU是一个纯软件的实现,所以性能低下。但是,其优点是可以模拟很多硬件。
以盖房子为例,KVM可以理解为开发商,房子盖的很好,但是不会装修;QEMU可以理解为 装修公司,房子盖的不好,但是装修做的很好;所以我们采用KVM盖房子(硬件虚拟化,实 现CPU和内存计算资源的模拟),使用QEMU装修(软件模拟,实现网卡、显卡、存储控制器 和硬盘等)。
KVM只是一个内核的模块,没有用户控件的管理工具,KVM虚拟机可以借助QEMU的管理工 具来管理,QEMU也可以借助KVM来加速,提升虚拟机的性能。
而当QEMU用作虚拟器时,QEMU的优点在于其实纯软件实现的虚拟化模拟器,几乎可以 模拟任何硬件设备,但是也正因为QEMU是纯软件实现的,因此所有指令都需要QEMU转 手,因此会严重的降低性能。而可行的办法是通过配合KVM或者Xen来进行加速,目前肯 定是以KVM为主。KVM 是硬件辅助的虚拟化技术,主要负责比较繁琐的 CPU 和内存虚拟化,而 QEMU 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰。

Libvirt

Libvirt是一套开源的虚拟化的管理工具,Libvirt的设计目标是通过相同的方式管理不同的虚拟 化引擎,比如KVM、Xen、Hyper-V、VMware ESXi等。目前大多数场景使用Libvirt管理 KVM。
Libvirt主要由3部分组成:
①一套API的lib库,支持主流的编程语言,包括C、Python等。
②Libvirtd服务。
③命令行工具virsh。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值