《KVM虚拟化技术 实战与原理解析》读书笔记---第二章

第2章 KVM原理简介

  • 虚拟化模型

    处于底层是整个物理系统(系统硬件),主要包括处理器,内存,和输入输出设备。
    在物理系统之上运行的是虚拟机监控器(缩写为VMM或Hypervisor)。虚拟机监控器主要职能是:管理真实的物理硬件平台,并为每个虚拟机客户机提供对应的虚拟硬件平台。

  • KVM架构
    从虚拟机的基本架构来分可分为类型一和类型二
    类型一:
    系统上电之后首先加载运行虚拟机监控程序,而传统的操作系统则是运行在其创建的虚拟机中。
    类型一的虚拟机监控程序,可以视为一个特别为虚拟机而优化裁剪的操作系统内核。
    著名的开源虚拟化软件Xen、商业软件VMware ESX/ESXi 和微软的Hyper-V就是类型一的代表。
    类型二:
    系统上电之后仍然运行一般意义上的操作系统(宿主机操作系统),虚拟机监控程序作为特殊的应用程序,可以视作操作系统功能的扩展。
    最大的优势是可以充分利用现有的操作系统,因为虚拟机监控程序通常不必自己实现物理资源的管理和调度算法。

  • KVM模块

KVM模块的主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
KVM仅支持硬件虚拟化。

以KVM在Intel公司的CPU上运行为例:

  1. 在内核被加载的时候,KVM模块会先初始化内部的数据结构;
  2. 做好准备之后,KVM模块检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关;
  3. 通过执行VMXON指令将宿主操作系统(包括KVM模块本身)置于虚拟化模式的根模式;
  4. 最后,KVM模块创建特殊设备文件 /dev/kvm 并等待来自用户空间的命令;
  5. 接下来,虚拟机的创建和运行将是一个用户空间应用程序(QEMU)和KVM模块相互配合的过程。

KVM模块和用户空间QEMU的通信接口主要是一系列针对特殊设备文件的IOCTL调用。
KVM模块加载之初,只存在 /dev/kvm 文件,而针对该文件的最重要的IOCTL调用就是“创建虚拟机”,其可以被理解为KVM为了某个特定的虚拟客户机(用户空间程序创建并初始化)创建对应的内核数据结构。同时,KVM还会返回一个文件句柄来代表所创建的虚拟机。

针对虚拟处理器最重要的IOCTL调用就是“执行虚拟处理器”。通过它,用户空间准备好的虚拟机在KVM模块的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。在非根模式下,所有敏感的二进制指令都会被处理器捕捉到,处理器在保存现场之后,自动切换到根模式,由KVM决定如何进一步处理(要么由KVM模块直接处理,要么返回用户空间交由用户空间程序处理)。

除了处理器的虚拟化,内存虚拟化也是由KVM模块实现的。实际上,这一部分是一个虚拟机实现代码中代码量最大、实现最复杂的部分(至少在硬件支持二维地址翻译之前是这样的)。

处理器对设备的访问主要是通过IO指令和MMIO,其中IO指令会被处理器直接截获,MMIO会通过配置内存虚拟化来捕捉。但是,外设的模拟一般并不由KVM模块负责。一般来说,只有对性能要求比较高的虚拟设备才会由KVM内核模块来直接负责,比如虚拟中断控制器和虚拟时钟。大部分输入输出设备还是会交给用户态程序QEMU负责。

  • QEMU设备模型

QEMU本身并不是KVM的一部分,其自身就是一个著名的开源虚拟机软件。它是一个纯软件的实现,所以性能低下。

为了简化开发和代码重用,KVM在QEMU的基础上进行了修改。在虚拟机运行期间,QEMU会通过KVM模块提供的系统调用计入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,KVM模块会从上次的系统调用出口处返回QEMU,有QEMU来负责解析和模拟这些设备。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值