首页 > 代码库 > 基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2

基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2

继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案

 

[Xen-devel] XenStore as a data transfer path?  这篇帖子讨论了xenstore作为domain0和domainU传递自定义数据的可行性,在Xen架构里,xenstore用于domain0和多个domainU之间传递控制数据,根据Xenstore的文档,不适合用于传输过大的数据,它的设计目标是对domain0的应用层有非常好的可视性和可操作性(tdb格式数据库),同时方便多个vm传输控制数据。

 

[Xen-devel] Dom0-DomU communication 这篇帖子讨论了同样的话题,基本结论是多个vm间数据传输:小块数据如控制信息类用xenstore,大块数据如文件用http/nfs等网络,或者基于memory map的机制,如grant table机制。

 用“xen inter domain memory sharing”做关键字搜索,找到了这个问题的若干论文和方案,如下:

 

xenloop

定位于两个domainU之间数据传输,domainU应用层依然使用socket接口,但正常的路径是走到虚拟网卡->虚拟网卡驱动->网桥等等做交互,xenloop 的方式是通过 netfilter hook 的方式插入一个模块到内核,然后在内核协议栈的ip层截获数据,直接将数据拷贝到映射好的共享内存,由xenloop协议做数据交互。架构图如下:

XenLoop A Transparent High Performance  Inter-VM Network Loopback pdf  

xenloop 官网地址和代码链接 

 

XENFS

Shared Memory Based Communication Between Collocated Virtual Machines pdf

xenfs.pdf

官方说明 

这篇论文系统探讨了基于shared memory 的vm间数据交互方案,对比了包括 xenloop 在内的多种已经实现的方案,该文最后提出自己的基于nfs的交互方案。

内存映射方案里,做在协议栈里的,可以获得很好的透明性和扩展性,对原有代码影响很小。做在block层的,透明性差,但性能更好。xenfs 试图共有这两个方面。

 

IO hook

Linux kernel 3.0 release   kernel 3.0 提出了在虚拟机环境下,出于性能和可维护性等考虑,传统io路径需要通过hook简化路径,并提出在xen里的一些实现。这篇文章有助于理解在xen环境下IO路径的设计

 

V4V

v4v linux driver  v4v 驱动只实现了linux版本

这篇文章提到了v4v

critrix v4v windows 驱动

v4v 和 vchan 的对比介绍

vchan

libvchan 已经合并入xen代码,但文档还没完成,基本思路也是替换普通协议栈流程

代码: xen4.2.3/tools/libvchan

introducing-vchan

Documentation on lib(xen)vchan

xen-devel-libvchan-00

xen-devel-libvchan-01

windows guest 使用libvchan的讨论