ovs-dpdk 在美团云环境中的应用与实践

        转载请注明出处:http://blog.csdn.net/hliyuxin/article/details/52155136

        OpenvSwitch 以其丰富的功能,作为多层虚拟交换机,已经广泛应用于云环境中。Open vSwitch的主要功能是为物理机上的VM提供二层网络接入,云环境中的其它物理交换机并行工作在Layer 2。传统host ovs工作在内核态,与guest virtio的数据传输需要多次内核态和用户态的数据切换, 带来性能瓶颈.  ovs-dpdk 结合了DPDK和vhost-user技术的优势vhost-user是一个用户态的vhost-backend程序,从虚拟机到host上实现了数据的zero copy。DPDK 高性能(user space) 网卡驱动、大页内存、无锁化结构设计,这项技术已经被美团云的各类网关类产品使用, 早已实现了万兆网卡线速的性能。ovs-dpdk使vm到vm和nic到vm的整个数据传输都工作在用户态,极大的提升了ovs的性能.

ovs-dpdk 在美团云环境中的应用与实践_第1张图片

我们在相同的软硬件环境下,对比ovs和ovs-dpdk的性能 

  • E5-2650 v2 @ 2.6G,16 core
  • 128GB mem
  • CentOS release 7
  • Open vSwitch 2.4(dpdk), O2 build
  • dpdk 2.2.0
  • qemu 2.6.0
  • pktgen

kernel ovs中断在每个core上打散,ovs-dpdk使用一个物理core转发数据。

测试一: 从一台Host用dpdk pktgen向另一台Host的dpdk nic发包,bridge转发数据包:

  total pps
ovs 360 w
ovs-dpdk 1440 w

                                         nic-br-nic

测试二:  从一台Host上的多个vm向另一台Host上的多个vm发送64bytes的小包(vm-br-nic-nic-br-vm),vm和vm的物理是二层直连。多个vm接收的总pps,结果如下:

vm count 1 2 4 8
ovs 73w 83w 88w 88w
ovs-dpdk 280w 330w 345w 360w

                                vm-br-nic-nic-br-vm

 篇幅有限,本文仅列出这两项数据对比,明显可以看出,ovs-dpdk网络处理性能有了显著提高。

         从2015年第四季度开始,美团云的网络研发团队开始着手ovs-dpdk在生产环境中的研发和部署。

1.  ovs-dpdk 稳定性.

          ovs作为一个活跃的开源项目,但现在还很少被应用到实际生产环境,从去年到今年的7月,dpdk、qemu也升级也很多版本。我们在同步版本的基础上做了很多稳定性测试工作,出现了一系列bug经过内部云用户的大量使用,因vm复杂性、规模性暴露出很多实际bug。这些问题主要集中在ovs、dpdk vhost以及早期版本qemu部分,  我们现在都已经fix。

2.  适应管控平台、流量监控

         因为现在网络启动方式、qemu的启动方式不一样,我们对原来的云平台管控代码进行一些模块修改,适应现在的ovs-dpdk结构。原linux系统的一些运维监控工具(如netstat、tcpdump等),在现在的ovs-dpdk主机结构下不可用,我们完善ovs的基础命令,另外开发了一套监控和dump系统。

3.  功能迭代升级

(1)热迁移

           qemu-2.5版本中vhost-user对live migration支持,dpdk-16.04同时对virqueue的huge mem添加了log功能, 在此基础上,我们系统开发支持了vm的热迁移。

(2)热升级和故障恢复

            ovs-vswitch进程异常退出或者需要升级时需要重启虚拟机才能恢复网络。ovs-dpdk 之前是工作在server模式,这部分我们修改了ovs以及dpdk-vhost代码,开发了client模式,和原ovs tap网卡保持一致。ovs vhost port断开之后, 添加reconnect vm 逻辑代码。这样,在reconnect之后,可以通过virqueue 中的idx和vhost features恢复到原状态。

(3)dpdk bond型port

           物理网卡需要和原网络结构兼容,需要两个port支持bond协议,但现在dpdk接管网卡。一种方案是用ovs 本身的bond, 但是这样对于ovs,看到的还是两个port, 如果加流表规则, 需要加两份,这样不便于控制管理。另一种方案,使用dpdk 的bond,为ovs添加支持dpdk-bond类型port的代码,  类似dpdk, dpdk-vhost-user, tap类型。 这里我们对ovs代码进行修改,支持了dpdk bond类型的port。同时也fix了部分dpdk bond代码的bug。

(4)支持windows vm

           很多云用户反应window7及以上的版本vm,启动后系统会hang住,这部分我们将问题和Intel技术团队进行了沟通,也在近期fix。

4. 替换原ovs

           大规模部署ovs-dpdk, 需要升级现在的众多老ovs宿主机。现在有两套方案

(1)整机vm迁移

            将原ovs宿主机上的全部vm都迁移到新的ovs-dpdk宿主机上,这样的主要问题在于迁移拷贝本地磁盘时间较长,占用物理带宽较高。

(2)本机升级

            对本机linux系统升级,  发布新的ovs和管控代码,重启配置reboot物理机,restart vm,这个方案升级时间较短,对运维自动化程度要求比较高。

                

      后续工作

1.  QoS 

          在共享同一个物理网卡的众多VM中,我们期望给每台VM配置不同的速度和带宽,以保证核心业务VM的网络性能。现在ovs-dpdk的工作模式,不能像原ovs样,使用tc等工具来做流量QoS控制。后续我们需要开发一套特有的QoS模块。

2.  无缝热升级

          我们现在的升级ovs-dpdk,需要stop和start ovs-vswitch进程,大约需要2~3分钟时间,这段时间内,用户vm网络是不通的。大部分云用户很难接受这么长时间的不可用,后续我们可以探索一套秒级升级、用户无感知的升级方案。

3.  网络虚拟化(VPC)

           与前文同样的测试方法,我们测试对比了ovs-dpdk下vxlan port的性能:

vm count 1 2 4 8
ovs-dpdk normal port 280w 330w 345w 360w
vxlan port 220w 240w 270w 279w
ovs vxlan port 32w 44w 49w 50w

                                                           vm-br-nic-nic-br-vm

           可以看到,vxlan port的转发能力比普通port下降很少,如果加上udp header部分,转发的总bps是几乎相等的。与原ovs软解模式作对比,ovs-dpdk更能体现其性能优势。将ovs-dpdk运用作为的vxlan Host端的基础设施,或者与硬件vxlan offload结合,也是美团云开始使用ovs-dpdk的初衷之一。 我们解决了vm的物理接入之后,构造vxlan Host是后面重点突破实现的方案。




你可能感兴趣的:(OVS-DPDK)