简介


VPP全称Vector Packet Processing,据说是Cisco 2002年开发的商用代码。2016年2月11号,Linux基金会创建FD.io项目。Cisco将VPP代码的开源版本加入该项目,目前已成为该项目的核心。VPP商用版看不到我们暂且不说,单看这个开源版本,个人觉得还是一个初级版本,因为自从关注之后代码更新还是很多,包括bug修复和功能开发。VPP运行于用户空间,支持多种收包方式,我个人关注的是DPDK。

VPP有两个关键特性:

  • 框架可扩展。(确实易扩展)
  • 成熟的交换/路由功能。(不是我说的,官方说的)

扩展性


节点操作

VPP平台是通过graph node串联起来形成一条datapath来处理报文,类似于freebsd的netgraph。通过插件的形式引入新的graph node或者重新排列报文的graph node。将插件添加到插件目录中,运行程序的时候就会自动加载插件。另外插件也可以根据硬件情况通过某个node直接连接硬件进行加速。VPP平台可以用于构建任何类型的报文处理应用。比如负载均衡、防火墙、IDS、主机栈。也可以是一个组合,比如给负载均衡添加一个vSwitch。

通过创建插件,可以任意扩展如下功能:

  • 自定义新的graph node。
  • 重新排列graph node。
  • 添加底层API。

添加插件如下图所示:
我们通过插件可以往ip6-lookup后面添加处理逻辑。
请输入图片描述

可编程能力

VPP还提供了基于共享内存或者消息队列的高性能内部API。目前VPP平台支持C和JAVA客户端进行内部API绑定。
如下图所以,我们可以实现一个外部应用来对VPP进行操作:
请输入图片描述

以上的编程能力是针对内部API的调用,另外还可以支持远程可编程能力。远程可编程能力可以通过Data Plane Management Agent来实现。这里所说的Data Plane Management Agent其实就是类似上面的外部应用,只不过他不参与直接控制,只是一个傀儡,用来传话。通过外部API与Data Plane Management Agent进行通信。Data Plane Management Agent通过内部API与VPP应用(引擎)进行通信。这是一个非常灵活的方法,任何人可以添加,但是需要外部API和Data Plane Management Agent匹配,以实现特定需求的VPP应用。
下图展示Agent对接VPP和外部程序:
请输入图片描述

案例Honeycomb Agent:
Honeycomb Agent通过netconf和restconf发布了yang模型的VPP功能。像OpenDaylight这样支持netconf/yang的控制器可以挂载Honeycomb Management Agent来工作。而OpenDaylight支持OpenStack Neutron,所以如下图所示OpenStack Neutron可以集成到vpp来:
请输入图片描述

网络功能


网络特性

VPP拥有的网络特性如下:

  • 快速查找路由表、CAM表。
  • 任意n元组分类。
  • 商用级别的交换/路由功能。

VPP能提供的所有功能如下:
请输入图片描述

网络性能

这里的对比我个人认为是不公平的,我个人的理解,OVS更适用于SDN,因为他的流表更加灵活,实现的功能更加强大,尤其是在IaaS的主机中做网络转发比较常见。而VPP更适用于NFV,适合做特定功能的网络模块,而且性能占优。

多核基准性能例子 (UCS-C240 M3, 3.5gHz,所有内存通道转发ipv4):

  • 1 core: 9 MPPS in+out。
  • 2 cores: 13.4 MPPS in+out。
  • 4 cores: 20.0 MPPS in+out。

下面几个图展示的是和OVS+DPDK的性能对比:
请输入图片描述

请输入图片描述

下图是在Haswell x86 架构的E5-2698v3 2x16C 2.3GHz上测试,图中显示了12口10GE,16核,ipv4转发:
请输入图片描述

结语


之前了解DPDK就学习到了不少计算机硬件软件的相关知识,也了解了DPDK优化的关键点,而VPP不仅仅是做了一些网络功能,并且也展现了抛开DPDK所做的优化,我们在实际业务逻辑中仍然需要注意怎么写代码去提升运行效率。所以我觉得VPP的代码还是值得一看的,不过代码挺难啃得,容易看崩溃。。。

最后修改:2021 年 08 月 20 日
如果觉得我的文章对你有用,请随意赞赏