利用DPDK加速容器网络

作者简介:谈鉴锋,英特尔工程师,清华大学计算机硕士,主要从事于DPDK中半虚拟化网卡virtio的驱动开发,目前专注于使用DPDK加速容器网络以及推动容器的NFV技术。

问题的提出

随着应用场景的不断增加,用户对容器网络的要求也越来越高。这些场景包括:

a. 基于容器的VNF,如vRouter、vFirewall等;
b. 数据中心里面的网络节点上的各种服务,如LB、VPN等;
c. 需要高性能网络的关键应用服务,如Key-Value数据库。

在这些场景下对容器网络的要求包括:

a. 从性能角度保证高带宽、低时延,并且尽可能少的网络抖动;
b. 从安全角度保证隔离性(特别是多租户环境下);
c.从服务质量角度保证对不同容器提供QoS差分服务。这里看到,不同于传统容器网络里常常被提及的挑战(如服务发现、IP地址分配),我们这里主要关心的还是数据面。

问题的分析

一直以来,容器网络都是构建在整个内核网络协议栈之上,并且利用net namespace来进行隔离的。受内核网络协议栈的限制,数据层面的性能优化空间很小。比如,a.避免使用vethpair和Linuxbridge或OVS,直接将VF或者NIC的queue包装为interface,分配给某个容器网络空间(如下图所示);b.避免使用overlay网络来规避encapsulation和decapsulation带来的性能损失。

问题的解决

这些优化技术带来的性能提升有限,于是我们考虑通过DPDK这样的用户态驱动来加速容器网络。DPDK利用hugepage、poll-mode、batching等技术大大提升了收发包能力。使用DPDK加速容器网络主要有两种使用模型:a.设备pass-through模型;b. vSwitch模型。

设备pass-through模型

如下图所示,所生成的Virtual Function(VF)将被用户态的DPDK来直接驱动。应用程序将通过DPDK直接从物理网络中收发包。整个数据通道仅仅需要物理网卡到内存之间的数据拷贝,并且最大程度发挥了DPDK的收发包优势。

vSwitch模型

在vswitch模型中,和虚拟机类似,容器中的网络流都汇集到经过DPDK加速的vSwitch(如OVS-DPDK、VPP)中。容器和vSwitch之间的通信通过DPDK里面虚拟设备virtio_user来进行(该设备主要提供了一种高速的进程间通信机制)。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/21128.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于18-07-14
0