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) |