FD.io VPP基本介绍-理解VPP软件架构

向量封包处理器

1. 什么是VPP

在这里插入图片描述

1.1. 介绍

VPP平台是一个可扩展的框架,可提供开箱即用的生产质量交换机/路由器功能。它是思科矢量数据包处理(VPP)技术的开源版本:一种高性能的数据包处理协议栈,可以在商用CPU上运行。

在这里插入图片描述

实施VPP的好处在于其高性能,经过验证的技术,其模块化和灵活性以及丰富的功能集。

VPP技术基于成熟的技术,已帮助交付了超过10亿美元的思科产品。这是一个模块化设计。该框架允许任何人“插入”新的**图形节点**,而无需更改内核代码。


1.1.1. 模块化,灵活和可扩展

VPP平台建立在“数据包处理图”上。这种模块化方法意味着任何人都可以“插入”新的图节点(Graph Node)。这使得扩展性相当简单,并且意味着可以针对特定目的自定义插件

插件如何发挥作用?

在运行时,VPP平台从RX环获取所有可用的数据包,以形成数据包向量。数据包处理图逐个节点(包括插件)应用于整个数据包向量。
图节点有一下两个特点:

  • 图节点较小且模块化。
  • 图节点是松散耦合的。

这使得引入新图节点变得容易。这也使得重新连接现有图形节点相对容易。

插件可以引入新的图节点或重新排列数据包处理图。您还可以独立于VPP源代码树构建插件-这意味着您可以将其视为独立组件。可以通过将插件添加到插件目录来安装插件。

VPP平台可用于构建任何类型的数据包处理应用程序。它可用作负载均衡器,防火墙,IDS或主机协议栈的基础。您也可以创建应用程序的组合。例如,您可以向vSwitch添加负载平衡。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQhqHQ8Y-1599474540887)(_v_images/20200907160042304_30427.png)]

引擎在纯用户空间中运行。这意味着插件不需要更改核心代码-您可以扩展包处理引擎的功能,而无需更改在内核级别运行的代码。通过创建插件,任何人都可以使用以下功能扩展功能:

  • 新的自定义图节点(graph node)
  • 图节点的重排
  • 新的低级API

1.1.2. 功能丰富

全套图形节点允许构建各种网络设备工作负载。从高层次上讲,该平台提供:

  • 快速查找表的路由,网桥条目
  • 任意n元组分类器
  • 开箱即用的生产质量交换机/路由器功能

以下是VPP平台提供的功能的摘要:

在这里插入图片描述


1.2. 为什么称为向量处理

顾名思义,VPP使用矢量处理而不是标量处理。标量数据包处理是指一次处理一个数据包。这种较旧的传统方法需要处理中断,并遍历调用堆栈(a调用b调用c …从嵌套调用返回return …然后从Interrupt返回)。然后,该过程将执行以下三项操作之一:平移,丢弃或重写/转发数据包。

传统的标量数据包处理的问题是

  • 在缓存中发生抖动
  • 每个数据包都会导致相同的I缓存未命中
  • 除了提供更大的缓存,无其他解决方法

相比之下,向量处理一次处理一个以上的数据包

向量方法的好处之一是它解决了缓存抖动问题。它还缓解了相关的读取延迟问题(预取消除了延迟)。

这种方法解决了与堆栈深度/ D-cache堆栈地址未命中有关的问题。它改善了“时间”。从设备RX环中获取所有可用数据包,形成一个“帧”(向量),该帧由RX顺序的数据包索引组成,通过有向图的节点图运行数据包,然后返回到RX-Ring。随着数据包处理的继续,时间将根据提供的负载达到稳定的平衡。

随着向量大小的增加,每个数据包的处理成本降低,因为您要在较大的N上摊销I缓存未命中。


1.3. 用例示例:VPP作为vSwitch / vRouter

VPP平台的一种使用情况是将其实现为虚拟交换机或路由器。以下部分描述了可以使用VPP平台创建的可能实现的示例。有关其他可能用例的更多详细说明,请参见用例列表。

您可以使用VPP平台创建现成的虚拟交换机(vSwitch)和虚拟路由器(vRouter)。VPP平台使您可以通过命令行界面(CLI)管理这些应用程序的某些功能和配置。

交换应用程序可以创建的一些功能包括:

  • 桥接
  • 端口(包括隧道端口)
  • 将端口连接到网桥域
  • 程序ARP终止

路由应用程序可以创建的一些功能包括:

  • 虚拟路由和转发(VRF)表(以千计)
  • 路线(以百万计)

在这里插入图片描述


1.3.1. 本地可编程性

一种方法是实现VPP应用程序以与本地环境(Linux主机或容器)中的外部应用程序通信通信将通过低级API进行。这种方法提供了一个完整的,功能丰富的解决方案,既简单又高性能。
例如,可以合理地预期性能产出为每秒50万条路由。

这种方法利用了**共享内存/消息队列**的优势。该实现在本地或容器上。所有CLI任务都可以通过API调用完成。

VPP平台的当前实现为C客户端Java客户端生成低级绑定。将来可能会为其他编程语言的绑定提供支持。

在这里插入图片描述


1.3.2. 远程可编程性

另一种方法是通过高级API使用数据平面管理代理。如图所示,数据平面管理代理可以通过低级API与VPP App(引擎)对话。它可以在一个盒子(或VM或容器)中本地运行。盒子(或容器)将通过某种形式的绑定公开更高级别的API。

这里可以使用netconf/yang模型,不知道可不可以用tr069或者snmp进行南向接口的编程。
在这里插入图片描述

这是一种特别灵活的方法,因为VPP平台不会强制使用特定的数据平面管理代理。此外,VPP平台不将通信限制为仅一个高级API。任何人都可以携带数据平面管理代理。这使您可以将高级API /数据平面管理代理和实施与VPP应用程序的特定需求进行匹配。


1.3.3. 样本数据平面管理代理

使用高级API的一个示例是在运行本地ODL实例(Honeycomb)的盒子上将VPP平台实现为应用程序。您可以在生成的Java绑定上使用低级API来与VPP App对话,并通过netconf / restconfNB公开Yang模型。

在这里插入图片描述

这将是实现网桥域的一种方法。


1.4. VPP的主要特征

一些主要特征包括:

与在内核中运行类似的数据包处理相比,提高了容错能力和ISSU:

  • 很少崩溃、很少需要重启进程
  • 软件更新不需要重新启动系统
  • 开发环境比类似的内核代码更易于使用和执行调试
  • 用户空间调试工具(gdb,valgrind,wireshark)
  • 利用广泛可用的内核模块uioigb_uio):DMA安全内存

作为Linux用户空间进程运行:

  • 同一映像可在VMLinux容器主机内核中运行
  • KVM和ESXi:通过PCI直接映射的NIC
  • 虚拟主机用户,netmap,virtio半虚拟化NIC
  • 调整/点击驱动程序
  • DPDK轮询模式设备驱动程序

VDP与DPDK集成在一起,支持现有的NIC设备,包括:

  • 英特尔i40e,英特尔ixgbe物理和虚拟功能,英特尔e1000,virtio,虚拟主机用户,Linux TAP
  • 惠普更名为英特尔Niantic MAC / PHY
  • 思科VIC

考虑的安全性问题:

  • 思科安全团队的广泛白盒测试
  • 图像段基地址随机化
  • 共享内存段基地址随机化
  • 堆栈边界检查
  • 调试CLI“ chroot”

数据包处理的矢量方法已被证明是主要体系结构上的主要平移/注入路径。


1.4.1. 支持的架构

VPP平台支持:

  • x86 / 64
  • ARM
  • Power

1.4.2. 支持的系统

VPP平台支持在以下操作系统上安装软件包:

  • Debian
  • Ubuntu
  • CentOS
  • OpenSUSE

1.5. 效率期望

VPP实施的好处之一是它在相对低功耗的计算上具有高性能。如此高的性能基于以下亮点:

  • 用于商用硬件的高性能用户空间网络协议栈
  • 主机,VM,Linux容器的代码相同
  • 集成的虚拟主机用户virtio后端,可实现虚拟机到虚拟机的高速连接
  • L2和L3功能,多种封装
  • 利用同类最佳的开源驱动程序技术:DPDK
  • 通过使用插件可扩展
  • 通过基于标准的API控制平面/业务流程平面

1.5.1. 性能指标

已显示VPP平台可提供以下近似性能指标:

  • 来自单个x86_64内核的多个MPPS
  • 单个物理主机上> 100Gbps全双工
  • 多核扩展基准测试示例(在UCS-C240 M3上,3.5 gHz,转发了所有内存通道,简单的ipv4转发):
    1核:9 MPPS进出
    2核:13.4 MPPS进出
    4核:20.0 MPPS进出

2. VPP工作环境

VPP - Working Environments

TODO


3. VPP特性

Feature Summary

TODO


以上内容由荣涛翻译整理自网络。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要配置FD.io VPPDPDK,您可以按照以下步骤进行操作: 1. 安装DPDK:首先,确保您的系统符合DPDK的要求,并按照DPDK官方文档的说明进行安装。您可以从DPDK官方网站上下载DPDK的源代码,并按照提供的说明进行编译和安装。 2. 配置DPDK环境变量:设置DPDK环境变量,包括`RTE_SDK`和`RTE_TARGET`。`RTE_SDK`指向DPDK源代码目录的路径,`RTE_TARGET`指定您要构建的目标平台。例如,在bash shell,您可以使用以下命令设置环境变量: ``` export RTE_SDK=/path/to/dpdk export RTE_TARGET=<target> ``` 3. 配置VPP:安装FD.io VPP并启动VPP进程。您可以从FD.io VPP官方网站上获取安装说明,并根据指南进行安装。在启动VPP之前,确保您已正确配置了DPDK。 4. 配置VPPDPDK集成:编辑VPP的运行时配置文件,通常是位于`/etc/vpp/startup.conf`。将DPDK驱动程序与VPP绑定,指定所需的物理接口和CPU核心。 例如,要将DPDK绑定到VPP并配置两个物理接口(例如eth0和eth1),可以在配置文件添加以下内容: ``` dpdk { dev <DPDK_DEVICE_NAME> { num-rx-queues <NUM_RX_QUEUES> num-tx-queues <NUM_TX_QUEUES> socket-mem <SOCKET_MEM> } } interface <INTERFACE_NAME> { dpdk <DPDK_DEVICE_NAME> } ``` 在上述配置,您需要将`<DPDK_DEVICE_NAME>`替换为DPDK设备名称(例如`0000:00:00.0`),`<NUM_RX_QUEUES>`和`<NUM_TX_QUEUES>`分别是接收和发送队列的数量,`<SOCKET_MEM>`是用于DPDK内存的分配。 5. 启动VPP:使用VPP启动命令启动VPP进程,例如: ``` sudo vpp -c /etc/vpp/startup.conf ``` 在启动VPP后,它将根据配置文件的设置与DPDK集成。 请注意,这只是简单的配置示例,您可能需要根据您的特定需求进行更详细的配置。您可以参考FD.io VPPDPDK的官方文档以获取更多详细信息和配置选项。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值