Xen-VBD-VNIF-Overview-v4 _原创精品文档.pdfVIP

Xen-VBD-VNIF-Overview-v4 _原创精品文档.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

浅析Xen虚拟I/O设备的原理与实现

余珂杨晓伟

摘要

Xen是业界领先的开放源码虚拟机项目。对于I/O设备的虚拟,它主要采用的方法是:设计

一套简单通用并且高效的协议,实现虚拟机中I/O设备与本地物理I/O设备的高效交互,最

终获得很高的性能。VBD(virtualblockdevice)和VNIF(virtualnetworkinterface)是采用这种

方法实现的高性能虚拟磁盘I/O和网络I/O设备,性能接近物理设备。本文主要介绍了Xen

虚拟I/O设备的原理与实现,结构如下:首先介绍Xen虚拟机的纯虚拟机I/O模型,然后是

VBD/VNIF为代表的泛虚拟化I/O模型的原理和架构,最后分别详细介绍了VBD和VNIF

的实现。

1.Xen虚拟机I/O模型概述

在上一期的《剖析Xen虚拟机架构》中,我们介绍了Xen硬件虚拟化技术和泛虚拟化

技术以及基于该技术的Xen硬件虚拟机体系结构。在这一期中,我们再详细介绍一下该体

系结构中的I/O子系统。Xen虚拟机可以分为完全虚拟化和泛虚拟化,与此对应,I/O子系

统则可以分为泛虚拟化()、完全虚拟化()和本征系统(

Xen虚拟设备仿真设备直接分配设

备)。

1.1.完全虚拟化I/O模型概述

首先我们简要回顾一下Intel®VT的架构。它提供了2个运行环境:根(Root)环境和

非根(Non-root)环境。根环境专门用于运行虚拟机监控程序(Hypervisor),而非根环境作

为一个受限环境用来运行多个虚拟机。运行环境之间可以相互转化,从根环境到非根环境叫

VMEntry;从非根环境到根环境叫VMExit。每个虚拟机对应一个CPU维护的VMCS数据

结构,其中记录根环境配置、非根环境配置、VMExit执行控制、VMExit原因等信息。

在这个架构下,I/O设备可以如何虚拟化呢?从系统软件的角度来看,I/O设备其实就

是特定资源的集合:I/O端口,内存映射I/O,中断等。当操作系统按照硬件手册规定的方

式操作资源,如读写I/O端口,接收中断,I/O设备就会按照规定完成的操作(读写磁盘,

收发网络包等)。所以进行I/O设备虚拟化,一个很自然的想法就是:捕获操作系统对这些

网络设备资源的操作,然后根据硬件手册来模拟规定的操作。

图1给出了Xen的架构,上一期对这个架构有详细描述,我们不妨以此为例,了解I/O

设备虚拟化的流程。为了尽量把Hypervisor做的精简、可靠,Hypervisor中并没有外设驱动,

对外设硬件的I/O请求是由Hypervisor、Domain0和DM配合共同完成的。一个I/O请求的

处理流程如下:

(1)DomainN内核执行In/Out指令,触发VMExit,处理器调用Hypervisor设置的

VMExit的处理函数。

(2)Hypervisor将I/O指令的具体信息写入DomainN与DM共享的一页I/O共享页中,

并通过事件通道(Eventchannel)通知Domain0。接着Hypervisor阻塞该虚拟机,并且

调用调度算法。

(3)Hypervisor恢复Domain0的状态,并把执行控制交给Domain0。

(4)Domain0中首先被执行的是注册的回调函数hypervisor_callback,它再调用

evtchn_do_upcall。

(5)evtchn_do_upcall里收集有哪些虚拟机有多少I/O请求。

(6)执行控制从Domain0的内核态返回用户程序态。DM本来通过一条select系统调

用等待I/O请求,此时得到调度后的DM一旦等到请求到来就返回。

(7)通过读取I/O共享页,DM识别是对哪类外设访问,调用对应虚拟外设初始化时

注册的回调函数。

(8)根据不同请求,虚拟外设的回调函数或者只是把虚拟外设的状态写回I/O共享页

中,或者发生一次真正的数据拷贝。最后,DM仍然通过事件

文档评论(0)

150****1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档