KVM原理与架构系列之五 IO虚拟化篇

IO虚拟化

1. 基本原理

KVM虚拟化环境中,有两种IO虚拟化方式(纯软件方式(Qemu模拟)和基于硬件虚拟化特性的方式)


■ 纯软件方式是通过Qemu-kvm来模拟相应IO指令的方式,大致流程为:

      

    1. Guest OS执行IO相关指令时(敏感指令),触发VM-Exit

    2. VMM捕获VM-Exit,并从VMCS结构中获取相关信息;

    3. 然后判断该指令模拟是否可在内核态处理;

    4. 如果可以则在内核态完成处理;

    5. 如果不行,则返回用户态,由Qemu-kvm模拟相关的IO请求

    6. 完成后返回内核态;

    7. 最后VM-Entry返回Guest OS继续执行。


■ 基于硬件虚拟化特性的方式,主要是依赖硬件的IO虚拟化特性,如Intel VT-dAMD IOMMU,通过硬件提供的虚拟化特性,可以实现IO设备的透传,使Guest可以共享或独占物理设备,由于相关功能主要在硬件层面实现,所以相比软件模拟的方式来说,有更好的性能。这里不做详细描述。


2 Virtio

VirtioKVM中的一套半虚拟化驱动,最初是从别的虚拟化方案(Rusty Russelllguest)中移植过来的。通过Guest OSKVM内核的配合,提供高效的通信方式,性能出众。在传统的KVM虚拟化解决方案中,需要对虚拟机提供一个完整的虚拟设备,Guest OS通过标准的IO接口对虚拟设备进行操作,由于IO操作是敏感指令,会导致VM-Exit,此时需要使用较多的指令去捕获IO请求,当IO繁忙时,VMX模式切换会非常频繁,效率很低;而virtio在设备模拟层引入了半虚拟化的方法,即在虚拟机和KVM中分别实现相应前后端virtio驱动,通过该驱动接口进行通信,效率更高。两种方式的对比如下图所示。

    


Virtio充分利用了全虚拟化和半虚拟化各自的优势,这种场景下,VM仍为全虚拟化虚拟机,这样可以充分利用硬件提供的虚拟化特性(VT-x),提供更好的虚拟化性能(比如CPU和内存的虚拟化),且Guest OS不需任何修改即可运行于虚拟化环境中;与此同时,virtio以半虚拟化驱动的形式,使前后端(VMVMM)的通信更加高效,在全虚拟化环境中提供更高效的IO方式,提升IO性能。

基于virtio的驱动程序架构如下图所示。

    


KVM虚拟化环境中,每个虚拟机都是以系统进程方式运行的,virtio通信方式的实质是通过共享内存实现。

大致通信过程如下:

1. Virtio通过提供一个virt queue,将Guest OS的各种IO请求保存在其对应的缓冲区中;

2. 然后kickVMM处理(一次可提交多个请求)

3. 最终会调用到Qemu-kvmnotify函数,通知Qemu-kvm;

    Qemu-kvm在收到相应通知后,执行相应的操作。


      本文非原创,尊重他人劳动成果,转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=14528823&id=4362390

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
KVM虚拟化技术是一种基于Linux内核的全虚拟化解决方案,它能够将一台物理服务器分成多个虚拟机,每个虚拟机都可以运行独立的操作系统和应用程序。KVM原理是通过在宿主机上加载KVM模块,将宿主机的CPU转变为虚拟机监控程序(VMM),然后在虚拟机监控程序的控制下运行多个虚拟机KVM虚拟化技术的实战应用可以达到以下几个方面的目的: 1. 资源利用率提升:通过使用KVM虚拟化技术,一台物理服务器可以被虚拟化成多个虚拟机。这样可以充分利用服务器的硬件资源,提高服务器的资源利用率。 2. 简化管理:KVM提供了强大的管理工具,可以方便地创建、配置、监控和管理虚拟机。管理员可以通过图形界面或命令行方式管理虚拟机,大大简化了虚拟机的管理工作。 3. 提供高可用性:KVM虚拟化技术支持虚拟机的迁移和故障转移。当一台宿主机发生故障时,可以将其上的虚拟机迁移到其他正常运行的宿主机上,保证虚拟化环境的高可用性。 KVM虚拟化技术的原理主要包括以下几个方面: 1. 虚拟化扩展:KVM利用Intel VT或AMD-V等硬件虚拟化扩展技术,将宿主机的CPU转化为虚拟机监控程序,实现对虚拟机的管理和控制。 2. 虚拟设备模拟:KVM借助QEMU模拟各种虚拟设备,包括虚拟硬盘、虚拟网卡等,为虚拟机提供标准的硬件接口。虚拟设备通过插件的方式与宿主机系统进行交互。 3. 内存管理:KVM使用了一种叫做KSM(Kernel Same-page Merging)的技术,可以将虚拟机中相同的页合并为一个物理页,从而节省内存资源。 4. I/O虚拟化KVM通过使用virtio接口,将虚拟机的I/O操作转发到宿主机上,实现了高效的I/O虚拟化。 总的来说,KVM虚拟化技术实战与原理解析是非常重要的,能够帮助管理员更好地理解和应用KVM虚拟化技术,从而提高服务器的资源利用率和管理效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值