Xen前后端分离设备驱动模型通信过程分析(包括事件通道、授权表、环缓冲区)

首先,在Xen分离设备驱动模型中,前端驱动通过事件通道环缓冲区授权表来和后端进行交互;

       “事件通道”是类似于中断的一种机制,用于通知虚拟机对事件进行处理。当有请求等待处理,或者请求已经完成需要查收时,前端或者后端使用事件通道来通知对方。

        “环缓冲区”,环状缓冲区,按页分配,里面放置请求和应答。环缓冲区采用生产者消费者模式,甲方首先放置请求,乙方获取并处理完请求后,将处理结果再次防置回环缓冲区中,甲方最后获取处理结果。甲乙方一次可以放置和处理多个请求,只要环状缓冲区还有空间。

       “授权表”是一种页面访问授权机制。DomainA通过授权表操作,授权DomainB可以读写A的指定页面,授权表主要作用于前端与后端的大块数据传输。

       “Xenstore”本质上是一个小的树状数据库,类似于windows中的注册表,主要用于存放各个虚拟机的配置数据。数据库存放在Domain0中,由一个守护进程负责对它操作(读、写、事件触发等等),前后端通信连接建立的过程中,使用Xenstore来传递授权表和事件通道。。

以网卡为例

一、前端网卡驱动建立通信连接步骤

       1、分配一个空闲页面作为设备IO环(环缓冲区)的共享页面

         2、初始化设备IO环请求端

         3、分配授权引用,授权后端驱动映射共享页面

         4、分配一个未绑定的事件通道允许后端进行连接

         5、将共享页对应的授权引用和事件通道写入Xenstore,传递给后端驱动(先在前端设备所在Xenstore中创建2个键,然后将授权引用和事件通道写入到2个键中,后端声卡驱动再读取Xenstore即获得前端提供的授权引用和事件通道)

         6、前端驱动初始化完成   

二、后端网卡驱动建立通信链接步骤

        1、从Xenstore读取前端授权引用和事件通道

        2、映射设备IO环的共享页面,并初始化设备IO环的响应端

        3、分配事件通道与前端事件通道建立连接

        4、后端设备连接完成

三、前端收包和发包过程

       发包过程(中断方式):

      1、发包函数接收到上层协议(TCP、IP等)封装后的数据包后,首先申请授权表项,然后调用授权表操作赋予后端读数据包的数据页权限

      2、发包函数申请环缓冲区的表项,在里面放置发包请求,发包请求包含了上一步申请的授权表表项的索引,后端将使用该索引来找到数据包数据页

      3、发包函数发事件通道通知后端有发包请求需要处理

      4、后端会异步处理该请求

      5、请求处理后,发包函数回收分配的环缓冲区和授权表

      收包过程(轮询方式):

      1、首先在环缓冲区放置一定量空的数据页,通过授权表允许后端读写或者页交换

      2、当后端发现包到达时,会将包的数据放置到环缓冲区中的空页中,这里可以采用读写复制或页交换的方式来传输包数据

      3、收包函数轮询时,如果在环缓冲区中发现已经收到的包,就将数据封装传递给上层协议,同时继续分配空的数据页到环缓冲区中。

四、后端收包和发包过程

       发包过程

       1、后端得到前端发来的事件通道通知:环缓冲区有包要发

       2、后端从环缓冲区中得到包请求

       3、后端通过授权表获得包数据的读权限,并将数据拷贝到dom0内存中

       4、后端将拷贝过来的数据包向网桥发,网桥负责转发到物理设备上

       收包流程

      1、后端从网桥那边接收到数据包

      2、后端从环缓冲区中取出前端预先放置的收包请求

      3、后端根据收包请求,通过授权表获得数据页的控制权确定是拷贝数据包还是数据包页交换

      4、通过事件通道通知前端有数据包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章