fd.io vpp 是第三代矢量数据包处理实现,具体涉及美国专利 7,961,636和 早期的工作。为了提高性能,vpp 数据平面由转发节点的有向图组成,该转发图每次调用处理多个数据包。这种模式可实现多种微处理器优化:流水线和预取以覆盖相关的读取延迟,固有的 I-cache 阶段行为,矢量指令。 除了硬件输入和硬件输出节点之外,整个转发图都是可移植的代码。
VPP:(the vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。是 Linux 基金会下开源项目FD.io 的一个子项目,由思科贡献的开源版本,目前是F D.io 的最核心的项目。
Implemetation taxonomy
vpp 数据平面分为四个不同的层:
- 基础架构层:包括 vppinfra,vlib,svm 和二进制 api 库。/src/{vppinfra, vlib, svm, vlibapi, vlibmemory}
- 通用网络协议栈层:vnet。/src/vnet
- 应用程序 shell:vpp。/src/vpp
- 数据平面插件。/src/plugins
1. Vppinfra
Vppinfra 是基本的 c 库服务的集合,足以直接构建在裸机上运行的独立程序。它还提供高性能的动态数组,哈希,位图,高精度的实时时钟支持,细粒度的事件记录和数据结构序列化。
2. VLIB
Vlib 提供矢量处理支持,包括图形节点调度,可靠的多播支持,超轻量协作多任务线程,CLI,插件.DLL支持,物理内存和Linux epoll 支持。
3. Vnet
vnet 库提供矢量化的第2层和第3层网络图节点,一个数据包生成器和一个数据包跟踪器。
在构建数据包处理应用程序方面,vnet 提供了一个与平台无关的子图,一个子图连接了两个设备驱动程序节点。
典型的RX连接包括“以太网输入”(完整的软件分类,提要 ipv4-input,ipv6-input,arp-input等)和“ ipv4-input-no-checksum” [如果硬件可以分类,请执行ipv4标头校验和]