KVM 虚拟化介绍及原理

kvm : Kernel-based Virtual Machine

虚拟化的目的:将底层硬件虚拟化,形成一个将既有的可用资源整合起来的大平台,方便在大平台上分隔出多个具有一部分资源的、独立的子空间,在子空间中建立实例,有些类似于磁盘管理的中逻辑卷的功能。

虚拟化技术的分类、主流技术及实现其技术的应用

1.模拟:Emulation ,硬件被模拟后的结果可以和上一层宿主机的硬件在架构上完全不同

Qemu, PearPC, Bochs, …

2.完全虚拟化:Full Virtualization,Native Virtualization

完全虚拟化的特性:

  1. 为了避免在不同虚拟机之间或虚拟机与宿主机之间的特权指令发生冲突,需要将特权指令隔离开,将 CPU “环零(特级权限)” 中的指令以完全软件模拟或者以提供 “环负一” 的方式来执行,如果宿主机CPU等硬件支持 “环负一” 技术,宿主机的特权指令在 “环负一” 执行,虚拟机的特权指令在 “环零” 中执行;如果宿主机不支持 “环负一” 技术,则虚拟机的特权指令依靠纯软件虚拟出的CPU中执行。
  2. 对于完全虚拟化,虚拟机不知道自己运行在其他操作系统之上。

完全虚拟化技术及其实现

  • BT/hvm
  • VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

3.半虚拟化:Para-Virutalization

特点:

  1. GuestOS明确知道自己运行在其他操作系统或虚拟机之上
  2. 半虚拟化的性能较为接近真实性能,性能损耗较少。

半虚拟化技术的实现 :xen, UML(user-mode linux)

4.容器级虚拟化

特点:抛弃GuestOS的虚拟化内核空间,将宿主机的用户空间切割分离为多个彼此隔离的空间,实现资源分割的目的

主流技术及其实现 :LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, …

5.库级别虚拟化

如:wine

6.程序级虚拟化

为某程序的运行而实现的虚拟化,如:jvm, pvm, …

主机虚拟化

Emulation, Full Virtualization, Para-Virutalization

  • Type-I:Hypervisor直接运行于硬件;
  • Type-II:Hypervisor运行主机OS之上;

云栈的类别

IaaS, PaaS, SaaS, FWaaS, DBaaS, LBaaS, …

KVM的组件

  • (kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能
  • qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例

KVM 架构

KVM模块load进内存之后,系统的运行模式:

  1. 内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式
  2. 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求
  3. 来宾模式:GuestOS的用户模式;所有的非IO类请求

KVM 的工具栈

KVM 两套工具栈

1.原生的工具栈 :Qemu-KVM

其他任何工具栈需要依赖此原生的工具栈才能工作

  • 组件:
  1. qemu-kvm
  2. qemu-img
  3. qemu-io

2. libvirt 工具栈

需要安装 libvirt 程序并启动 libvirtd 服务

  • 组件:
  1. virsh :CLI 接口的管理工具
  2. virt-viewer :virt查看器
  3. virt-manager :GUI 接口的管理工具
  4. virtinst :创建实例的命令行工具

virtinst 包含 virt-install , virt-image , virt-convert , virt-clone 几个子组件