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