Netmap to VALE—— 从高性能网络框架到高性能虚拟网络交换机
我在上一篇文章也提到过,对于全虚拟化和半虚拟化,需要分配给虚拟机一个虚拟网络接口,这些就需要一个虚拟交换机vswitch(可以和hypervisor一同使用),从而将虚拟网络接口的数据包从物理接口转发出去。但是在复杂的系统中,这个虚拟交换机的性能往往并不好。开源项目netmap[1]做了一个高性能网络框架,并且同样使用这个原理完成了高性能虚拟网络交换机vale的设计[2],在多种场景下Vale测量的性能[3]也非常好。
Netmap
由于官网上介绍的已经很详细了,我这里简单描述。那么问题是程序是怎么使用netmap机制的呢?通过在程序里面打开一个特殊的文件/dev/netmap,获得一个文件描述符,并且使用ioctl()系统调用选择一个设备,然后应该可以获取一块region,然后使用mmap()将文件描述符对应的文件对应到那个region。
netmap是作为内核模块来实施的,主要包括两部分。一是功能,实现了那些open,close,ioctl,poll/select等基本功能。另外一个是与设备相关的部分,netmap延伸了驱动的功能,负责传输数据(只要传输描述符ring的元数据)。因为做到了zero copy,所以能够达到高性能。
VALE原理
参考资料
[1]http://info.iet.unipi.it/~luigi/netmap/[3]http://info.iet.unipi.it/~luigi/papers/20121026-vale.pdf
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。