V1-01-04 xen和kvm

1、开源虚拟化

1.1、 XEN

在这里插入图片描述

Dom0接管所有DomU,因此Dom0的资源要预留充足,类似VMM
使用XEN还需要编译更新所有驱动
在这里插入图片描述

system-config-packages

在这里插入图片描述

virt-manager

在这里插入图片描述

1.2、 KVM (Kernel-based Virtual Machine)

KVM可以直接在内核进行管理
无需XEN的domain0

  • 开源全虚拟化方案

    • 支持体系结构
      x86(32位,64位)、IA64、PowerPC、S390
    • 依赖x86硬件支持:Intel VT-x / AMD-V
    • 内核模块,是的linux内核成为Hypervisor
  • 云平台对KVM支持

    • OpenStack,Eucalyptus,AbiCloud等
      同时支持KVM和Xen
  • KVM历史

    • 2006年10月 以色列公司Qumranet发布KVM
    • 2006年12月 KVM合入内核(linux 2.6.20rc)
      • 2007年2月Linux2.6.20正式版发布
    • 2008年9月 Redhat以1.07亿美元收购Qumranet
    • 2009年9月 RHEL5.4开始支持KVM (同时支持Xen)
    • 2010年11月 RHEL6.0之后仅支持KVM

KVM全称是Kernel-Based Virtual Machine。也就是说KVM是嵌入Linux操作系统标准内核中的一个虚拟化模块,是基于Linux内核实现的。KVM有一个内核模块叫做kvm.ko,只用于管理虚拟CPU和内存。
在这里插入图片描述

每台虚拟机都是一个进程

在这里插入图片描述

1.2.1、 KVM体系结构

在这里插入图片描述

virsh命令行管理工具 virsh list
virt-manager图形化界面管理工具
virt-viewer 屏幕管理工具
virt-install 虚拟机安装工具

1.2.2、KVM与Libvirt

在这里插入图片描述

  • libvirt是目前使用最为广泛的多平台虚拟机管理工具和API(提供多种语言的API)
  • KVM场景下,Libvirtd调用qemu-kvm管理虚拟机
  • qemu和libvirtd均通过伪字符设备/dev/kvm来触发内核模块。
  • virsh等虚拟机管理进程通过libvirt来对虚拟机进行查询等操作。

在这里插入图片描述

1.2.3 KVM IO虚拟化

KVM I/O虚拟化 - 全模拟

  • 用软件完全模拟一个特定的设备
    • 保持一样的软件蛋壳,如:PIO、MMIO、DMA、中断等
    • 可以模拟出跟系统中的物理设备不一样的虚拟设备
  • 每次I/O操作需要多次上下文切换
    • VM <–> Hypervisor
    • Qemu <–> Hypervisor
  • 软件模拟的设备不影响虚拟机中的软件栈
    • 原生驱动
      在这里插入图片描述在这里插入图片描述

这种全模拟存在大量数据拷贝,针对磁盘,网络这种大量IO操作的设备,模拟的设备性能较差。

KVM I/O操作流程 - 默认

KVM I/O虚拟化改进 - virtio

  • 虚拟出特殊的设备
    • 特殊的设备驱动,包括VM中的Front-end驱动和主机上的Back-end驱动
    • Front-end和Back-end驱动之间的高效同行
  • 减少VM和主机的数据参数开销
    • 共享内存 – (Virt RING)
    • Batched I/O
    • 异步事件通知Eventfd轻量级进程间 “等待、通知” 机制
  • 高效的标准化pv driver
    • 兼容PCI:设备发现,配置,IRQ
    • 支持多种虚拟化平台:KVM,Iguest
    • 设备种类
      • Virtio-blk,virtio-net,virtio-balloon,virtio-console,virtio-scsi,virtio-9p

KVM IO虚拟化对比

图1
图2
图1默认流程效率没有图2高

如图1,Guest OS需要把数据拷贝到kvm module的I/O共享页,kvm在通知qemu来读取数据,qemu在把数据交给硬件处理,kvm参与了数据和指令的过程。

而图2中Guest OS直接把数据放到队列vring中,然后通知kvm有数据生成了,kvm通知qemu去读取数据,kvm参与了指令过程。两者的区别在于图1反复拷贝数据,而图二省略掉kvm拷贝数据这一步骤,直接让Guest OS和QEMU通讯,减少了kvm参与的粒度,提高了I/O性能。

KVM I/O虚拟化再次改进 - vhost

  • vhost-block、vhost-net、vhost-scsi
  • 从VM来的IO请求会被直接map成host上的bio,可以有效减少虚拟机中的I/O的执行,性能更好,全端完全兼容vhost。
    在这里插入图片描述

Linux操作系统默认携带VirtIO驱动
Windows操作系统默认不携带VirtIO驱动

现在虚拟化敏感指令不在由VMM调度,而是硬件直接支持。
Intel:VT-X
AMD:AMD-V

VT-d
SR-IOV

1.4、QEMU (Quick Emulator)

  • Qemu(quickemulator)是一件模拟器,它可以模拟出VM所需要的任何资源,甚至是不同CPU类型。这些模拟出来硬件指令转译给真正的硬件。由于所有的指令- 都要从Qemu里面过一手,因而性能较差。
  • KVM负责cpu虚拟化,内存虚拟化管理。
  • QEMU和KVM整合,涌过IOCTL调用/dev/kvm接口,qemu模拟IO设备(网卡,磁盘等),实IO虚拟化
  • 所以现在的虚拟化是qemu-kvm,虚机是qemu-kvm虚机
    在这里插入图片描述
xen vs kvm
Xen的硬件驱动程序放到了dom0中

xen转为半虚拟化而生,而kvm为硬件辅助虚拟化而生。由于现在硬件都逐渐支持硬件辅助虚拟化,故kvm性能占据优势

Xen和KVM等四大虚拟化架构对比分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值