xen的网络设备机制-I/O环

note:此文描述了xen半虚拟化网卡的VIF机制。


Xen的块设备驱动使用了XEN IO环的机制。

对于IO子系统而言,xen hyprevisor的作用就是在虚拟机和IObackend设备之间提供一层保护层,然而对于数据传输机制,要使得数据在系统之间移动的同时带来比较小的开销。两个主要的数据传输机制影响I/O数据传输。一方面是资源管理,另外一方面是数据传输过程。Xen使用了最小化开销的两种机制:IO描述符环和事件通道,授权表机制。

对于网络设备是这样的,Xen给虚拟机提供了虚拟网桥,每一个Domain都有一个或者多个虚拟接口VIFs逻辑上连接到了虚拟网桥,一个VIF看起来就像是一个物理网络接口卡NIC一样,但是有两个buffer描述符环,一个是接收的,另外一个是发送的。这两个方向都有各自的rule形式(也就是网卡的rule),如果满足的话,相应的动作就会实施(就相当于物理网卡可能会执行的过滤功能那样)。


发送过程

虚拟机操作系统直接把一个buffer 描述符(是对应的(vif driver的)TX buffer?的buffer描述符)放到发送环中(描述符的请求producer)。XEN复制这个描述符并且保证安全性,然后复制数据包的头部进行一些过滤规则(请求 consumer )。(数据包的payload并不复杂,因为我们使用共享内存机制)

这就相当于xen接管了物理网卡部分,但是同时让这个虚拟机的内存buffer和物理网卡buffer是共享的内存,于是减小了开销。


接收过程

当包从虚拟网桥到来的时候,guest OS会使用一个没有用的页面去来交换到来的包,这避免了在XEN和guest OS之间复制包的开销,虽然这需要guest OS的接收buffers在网络接口处排队。当包接收到后,XEN会很快的去查询rules,来决定相应的vif,并且用接收环上的page frame的packet buffer来交换这个数据包。

"if no frame is available,the packet is dropped。" 所以在接收的过程中很可能会丢包,这也就是说如果接收环满了,那么就丢包了。


注意,这个讲的和netmap和vale对比,原理有相似之处,但是vale工作在网桥层面,而IO环工作在网卡和网卡驱动层(XEN的)。


参考文献:

xen and the art of virtualization


p.s.有空再补充


你可能感兴趣的:(IO,buffer,网卡,虚拟化,xen)