QEMU与KVM基本概述

一些术语

汇总在虚拟化世界里经常会涉及到的术语或缩写等。

术语 含义
VM Virtual Machine,虚拟机
VMM 在系统虚拟化中,管理全局物理资源的软件叫作虚拟机监控器(Virtual MachineMonitor,VMM),VMM之于虚拟机就如同操作系统之于进程,VMM利用时分复用或者空分复用的办法将硬件资源在各个虚拟机之间进行分配
Xen 2001年剑桥大学开发了Xen,早期的开源虚拟化方案,出现在各种硬件虚拟化技术之前。现在远不如KVM
KVM 2006年,以色列的初创公司Qumranet利用Intel的硬件虚拟化技术在Linux内核上开发了KVM(Kernel Virtual Machine),是一款非常成功的虚拟化VMM,称为云计算的基石
QEMU Quick Emulator,模拟器
VMX Virtual Machine eXtensions. intel在x86 cpu架构基础上增加VMX架构来实现CPU的硬件虚拟化
VMX架构下有:VMM(虚机监控器) 和 VM(虚机)
CPU支持VT-x技术的标志为vmx,Linux中/proc/cpuinfo可查看
VT-x Intel virtualization,intel虚拟化技术。可在BIOS中设置是否启用VT-x技术
所以可以认为 VMX = VT-x,都是指 intel 硬件虚拟化技术

虚拟化解决方案

虚拟化解决方案
VMware Workstation VMware最早的产品,至今仍有大量用户使用。VMware Workstation能够很方便地在PC上构建一个虚拟机,用户可以在其上安装各种操作系统,能够非常方便地完成多种任务,比如跨平台的开发测试
VirtualBox 最早由一个德国公司开发,后来被甲骨文收购。它的优点是性能不错并且开源,能够很方便地用来实现一些定制需求
HyperV 微软提供的虚拟化解决方案,微软用它来构建自己的云计算平台
Xen Xen作为早期的开源VMM,其诸多思想直到今天也在影响着虚拟化社区

QEMU/KVM架构

VMX operation

VMX架构中,每个VM都是一个虚拟机实例,能够支持操作系统以及各种软件栈和应用程序,VM本身不会意识到其处在虚拟化环境中。每一个VM都相互独立,有自己独立的CPU、内核、中断和设备等,这些资源都是VMM提供的。

VMM需要对各个VM进行管理,包括创建、配置、删除VM实例、为其分配资源、确保各个VM之间的隔离与独立,还需要处理VM对资源的访问、确保公平,所有这些都需要VMM运行的权限高于VM,只有这样,VMM才能够实现对整个系统资源和对VM的管理。但是传统上,操作系统内核已经运行在ring0最高级了,所以为了让CPU支持VMM和VM两种软件,Intel为CPU引入了一种新的模式,叫作VMX operation。

VMM执行的模式叫作VMX root operation模式,VM执行的模式叫作VMX non-root operation模式,这两种模式之间的转换叫作VMX转换。从VMX root转换到VMXnon-root叫作VM Entry,而从VMX non-root转换到VMX root则叫作VM Exit。

在这里插入图片描述

每种模式都有自己的ring0和ring3结构。VMX operation与CPU特权级是正交的。在普通的QEMU/KVM架构中,QEMU等用户态软件以及KVM等宿主机的内核都运行在VMX root模式下,在虚拟机也有自己的ring0和ring3。当然,VM中执行指令的行为肯定不能完全与VMM中相同,否则也用不着VMX架构了。在VMX non-root模式中,各种指令是严格受到限制的,执行一些特殊的指令(如之前所说的影响系统全局的指令)或者发生一些特殊的事件都会导致VM Exit,使VM退出到VMM。

QEMU/KVM架构图

在这里插入图片描述

CPU在运行包括QEMU在内的普通进程和宿主机的操作系统内核时,CPU处在VMX root模式。CPU在运行虚拟机中的用户程序和操作系统代码的时候处于VMX non-root模式。需要注意的是,CPU的运行模式与CPU运行时的特权等级是相互正交的,虚拟机在VMXroot模式和VMX non-root模式下都有ring 0到ring 3四个特权级别。

可以按上图中的色框线来理解QEMU/KVM架构,整体可以分为3大部分:

  • VMX root 应用层:宿主机的qemu等普通进程
  • VMX non-root 虚拟机层:虚拟机guest
  • VMX root 内核层:宿主机的内核
VMX root 应用层

从图中可以看出,QEMU的主要任务是模拟芯片组,创建CPU线程来表示虚拟机的CPU执行流,在QEMU虚拟地址空间中分配空间作为虚拟机的物理地址,创建用户指定的虚拟设备等,QEMU通过监听事件的方式来响应KVM转过来的虚拟机请求。

VMX non-root 虚拟机层

虚拟机中本身也有自己的操作系统内核和应用层,虚拟机的一个CPU对应QEMU进程中的一个vCPU线程,可以被host主机正常调度。

虚拟机中的物理内存对应QEMU进程的虚拟内存,VM通过guest os的页表管理系统完成VM虚拟地址到VM物理地址的转换,最终经由KVM的页表完成VM物理地址到host物理地址的转换

VMX root 内核层

Linux内核中的KVM驱动,主要做两件事:

  1. KVM通过 “/dev/kvm” 设备提供ioctl的API接口,QEMU通过该接口可控制虚拟机,比如设定CPU个数、内存布局等;
  2. KVM需要截获虚拟机产生的 VM Exit 事件并响应处理;

QEMU与KVM配合起来共同完成了虚拟机各个组件的虚拟化,比如CPU虚拟化、内存虚拟化、设备虚拟化、中断虚拟化等。

CPU虚拟化

QEMU创建vCPU线程,初始化时就设置好vCPU寄存器的值,然后通过KVM API,运行虚拟机。

KVM需要截获虚拟机中的敏感指令,当虚拟机的代码是敏感指令或者满足一定的退出条件时,CPU从VMX non-root模式退出到KVM(VMX root模式),这叫 VM Exit(类似于用户态陷入内核态)。VMX Exit后首先在KVM中处理,如果KVM无法处理,再转给QEMU处理。当QEMU或KVM处理好VM Exit事件后,又将CPU置于VMX non-root模式,这叫VM Entry。虚拟机就这样不停的VM Exit和VM Entry。

KVM中用一个结构来记录虚拟机的VM Exit和VM Entry状态,叫VMCS

VM Exit 保存VM状态 加载host状态
VM Entry 保存host状态 加载VM状态
虚拟机代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值