目录
最近公司启动了一个新项目,是基于FD.io的开源项目VPP来进行开发的。由于VPP项目目前只支持对L2和L3数据包的处理,但是我们新项目希望加入对L4(主要是TCP和UDP)协议的处理并提供一套类似于BSD socket API来建立自己的网络应用。对L4协议的处理我们选用了开源项目OpenFastPath实现的协议栈,所以需要将OFP实现的L4协议栈处理加入到VPP项目中并最终可以实现对TCP和UDP数据包的终结。基于以上的应用场景,本次项目涉及到VPP、OFP和ODP的应用。
郑重声明一下:本文和后续的关于VPP、OFP和ODP的内容,都属于本人在项目开发中的一些学习和总结,由于本人的知识水平有限,有什么总结的不对的地方欢迎各位大神批评指正,希望朋友们不吝赐教同时也给本人一个学习和提高的机会!
本篇主要是对VPP项目做一个介绍。
一、简介
VPP全称Vector Packet Processing,是Cisco2002年开发的商用代码。
2016年2月11号,Linux基金会创建FD.io项目。Cisco将VPP代码的开源版本加入该项目,目前已成为该项目的核心。
VPP运行于用户空间,支持多种收包方式,常用的是DPDK。
VPP主要有两个主要功能:框架可扩展;成熟的交换/路由功能。
二、扩展性
1、结点操作
VPP平台是通过graphnode串联起来处理数据包,类似于freebsd的netgraph。
通过插件的形式引入新的graph node或者重新排列数据包的gpragh node。将插件添加到插件目录中,运行程序的时候就会自动加载插件。另外插件也可以根据硬件情况通过某个node直接连接硬件进行加速。
VPP平台可以用于构建任何类型的数据包处理应用。比如负载均衡、防火墙、IDS、主机栈。也可以是一个组合,比如给负载均衡添加一个vSwitch。
通过创建插件,可以任意扩展如下功能:
• 自定义新的图结点
• 重新排列图结点
• 添加底层API
添加插件如下图所示:
2、可编程能力
VPP还提供了基于共享内存或者消息队列的高性能内部API。目前VPP平台支持C和JAVA客户端进行内部API绑定。
如下图所以,我们完成一个外部应用对VPP进行操作:
以上的编程能力是针对内部API的调用,另外还可以支持远程可编程能力。
远程可编程能力可以通过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:
HoneycombAgent通过netconf和restconf发布了yang模型的VPP功能。 像OpenDaylight 这样支持netconf/yang的控制器可以挂载Honeycomb 管理代理来工作。而OpenDaylight支持OpenStack Neutron,所以如下图所示OpenStack Neutron可以集成到vpp来:
三、网络功能
1、网络特性
VPP拥有的网络特性如下:
• 快速查找路由表、CAM表
• 任意n元组分类
• 商用级别的交换/路由功能
VPP能提供的所有功能如下:
2、网络性能
多核基准性能例子 (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转发:
以上资料可以参考FD.io的官方网站:https://fd.io/technology