Chinaunix首页 | 论坛 | 博客
  • 博客访问: 168849
  • 博文数量: 35
  • 博客积分: 2067
  • 博客等级: 大尉
  • 技术积分: 282
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-31 10:29
文章分类

全部博文(35)

文章存档

2014年(3)

2011年(2)

2010年(20)

2009年(10)

我的朋友

分类:

2010-03-29 19:59:19

Redesigning Xen's Memory Sharing Mechanism for Safe and Efficient I/O Virtualization

这篇文章主要是改进基于Xen的半虚拟化的分离前后端模型的网络I/O性能。

作者曾经在这个主题上发表了很多文章,而且都是好会(VEE 2009,USENIX ATC 2010)

那么他在WIOV 2010上面,又发表了一篇后续之作,看来他们的工作趋近于完工了。

熟悉Xen的人应该知道,半虚拟化情况下,Dom U如果要向另外一台物理机器发送一个网络包,需要Dom 0进行一个中转。

在这个中转过程当中,包含以下步骤:

1)假设发送字符A,Dom U首先把A所在的内存页面,共享给Dom 0。
2)当Dom 0发现Dom U有要共享给自己的页面,就通过VMM,把A所在的页面,映射到了它自己的内核地址空间(即不同的domain之间的共享内存)
3)重新对来自Dom U的A进行一个封装,然后把该封装后的包发送到物理网卡
4)通知dom U,包发送完成,然后撤销A所在页面的内存共享。

大家可以看出来,在上面这个步骤中,每发送一次包(接收路径上,同样存在类似的问题),就要把相关内容所在的页面共享给Dom 0一次,并且完成后,撤销共享的页面。

由此以往,如果要接收或者发送大量的包的话,就会频繁的发生页面共享和撤销的过程。

在测量当中,这些过程是非常消耗CPU的(作者在原来的工作中,给出了很多的数据来论证此事)

那么,为了优化这部分开销,本文作者就在Dom U和Dom 0之间加了一张类似于IOMMU的地址转换表,该表内填充着一些已经在Dom U和Dom 0之间共享好了的页面。每当要发送,或者接受网络包时,由Dom U单方面的来决定使用(或者回收)这个表中的哪一个页面,来给Dom 0发送或者接受网络I/O数据。这样的话,就可以绕开我们前面提出的,频繁调用共享和撤销共享的操作。

那么这么地址转换表还可以硬件的IOMMU进行非常好的耦合,不过截止到该文章出现的时候,还没有完全实现好。

数据给出了一些,感觉优化的幅度不像作者原来的那些工作,幅度那么大了。

那么最后,作者也提出了该方法也就是优化块设备前后端,嘻嘻,可惜俺的文章已经投了,一定要中呀,保佑,保佑~~~~
阅读(1093) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~