VPP(1):什么是VPP,为什么叫VPP

什么是VPP

VPP(Vector Packet Processing)是思科旗下的一款可拓展的开源框架,提供用用的、高质量交换、路由功能的应用框架。是网络协议领域常用的开源框架。

为什么叫VPP

VPP全称Vector Packet Processing(矢量报文处理)。VPP的精髓都包含在名字里了,即这个Vector。矢量报文处理与常规的报文处理有什么差别?

标量报文处理

一个标量报文处理流程的典型过程是:一次仅处理一个报文,一个报文中接口收到后,经过若干个功能模块的依次处理。每个功能模块的处理结果,通常有三类,1)丢弃;2)不作处理投递给下一功能模块;3)改写报文/转发。

1
2
3
4
+---> fooA(packet1) +---> fooB(packet1) +---> fooC(packet1)
+---> fooA(packet2) +---> fooB(packet2) +---> fooC(packet2)
...
+---> fooA(packet3) +---> fooB(packet3) +---> fooC(packet3)

标量报文处理存在以下问题:

  1. I-cache抖动:每个报文都要完整地执行完所有功能模块(foo)的处理,程序频繁地替换I-cache(instruction cache)缓存中的数据,导致缓存利用率降低,从而影响计算机性能。
  2. 每个报文处理过程中的调用栈信息随功能模块(foo)而变化,导致调用栈存放的D-cache的存取压力大。

矢量报文处理

矢量报文处理把报文组成一个“报文矢量”(可理解为报文组)。每一个功能模块(foo),都对报文矢量中的报文做一次性处理。

这样的设计:

  1. 减少了I-cache抖动,因为每个instruction重复应用于处理报文组的每个报文,提高了I-cache命中率。
  2. 调用栈信息重复应用于报文组的每个报文,D-cache的存取压力随之降低。
1
2
3
4
+---> fooA([packet1, +---> fooB([packet1, +---> fooC([packet1, +--->
packet2, packet2, packet2,
... ... ...
packet256]) packet256]) packet256])

报文处理图

VPP中的关键设计是Packet Process Graph(报文处理图)。使VPP具有以下特性:

  • 可伸缩,可插件扩展
  • 成熟的图节点架构
  • 可定制的流水线
  • 插件平等

在处理图中,开发人员可以定制插入新的处理节点,这让VPP易于扩展且可以用于定制化地对报文进行特定意途的处理。

报文处理图

VPP平台从接口上接收报文,组合成报文向量,然后把报文向量“喂”给报文处理图,图中的所有节点对报文向量进行逐一处理。

VPP插件都是在运行时加载的共享库。一个插件可以引入新的报文处理图节点或重新组织报文处理图。你可以生成一个完全独立于VPP原生的报文处理图。

参考资料