1 Introduction
VPP平台是一个可扩展的框架提供现成的生产质量交换机/路由器功能。它是思科矢量数据包处理VPP技术的开源版本一个高性能的数据包处理堆栈,可以在商品CPU上运行。
VPP的这种实现的好处是其高性能、成熟的技术、模块化和灵活性,以及丰富的功能集。
VPP技术基于久经考验的技术,该技术帮助思科推出了超过10亿美元的产品。这是一种模块化设计。该框架允许任何人“插入”新的图形节点,而无需更改核心/内核代码。
1.1 模块化、灵活且可扩展
VPP平台建立在“数据包处理graph”上。这种模块化方法意味着任何人都可以“插入”新的图形节点。这使得可扩展性变得相当简单,这意味着插件可以针对特定目的进行定制。
插件是如何发挥作用的?在运行时,VPP平台从RX ring获取所有可用数据包,形成数据包矢量。对整个数据包向量逐节点,包括插件,应用数据包处理graph。图形节点小且模块化。图节点是松散耦合的。这使得引入新的图节点变得容易。它还可以相对容易地重新连接现有的图形节点。
插件可以引入新的graph节点或重新排列数据包处理graph。您还可以独立于VPP源代码树构建插件,这意味着您可以将其视为独立组件。可以通过将插件添加到插件目录来安装插件。
VPP平台可用于构建任何类型的数据包处理应用程序。它可以用作负载平衡器、防火墙、IDS或主机堆栈的基础。您还可以创建应用程序的组合。例如,您可以向vSwitch添加负载平衡。
引擎在纯用户空间中运行。这意味着插件不需要更改核心代码——您可以扩展数据包处理引擎的功能,而无需更改在内核级别运行的代码。通过创建插件,任何人都可以通过以下方式扩展功能,
新的自定义图节点
图节点的重排
新的低级API
1.2 功能丰富
全套graph节点允许构建各种各样的network appliance工作负载。在高层次上,该平台提供,
快速查找路由、网桥条目的表项
任意n元组分类器
现成的生产质量交换机/路由器功能
以下是VPP平台提供的功能摘要,
IPv4/IPv6 | IPv4 | L2 |
2 为什么叫矢量处理?
顾名思义,VPP使用矢量处理而不是标量处理。标量数据包处理是指一次处理一个数据包。这种较旧的传统方法需要处理一个中断,并遍历调用堆栈,a调用b调用c…从嵌套调用返回…然后从中断返回,。然后,该过程执行以下三项操作之一,punt、丢弃或重写/转发数据包。
传统标量数据包处理的问题是,
抖动发生在I-cache中
每个数据包都会导致一组相同的I-cache未命中
除了提供更大的缓存之外,没有解决上述问题的方法
相比之下,矢量处理一次处理多个数据包。
矢量方法的一个好处是,它修复了I-cache抖动问题。它还缓解了相关读取延迟问题,预取消除了延迟,。
这种方法修复了与堆栈地址上的堆栈深度/D-cache未命中相关的问题。它改善了“circuit 时间”。“circuit”是从设备RX ring循环捕获所有可用数据包,形成一个“帧”,矢量,,该帧由按RX顺序的packet索引组成,通过节点的有向graph 运行packets ,然后返回到RX ring。随着持续处理数据包,circuit 时间根据提供的负载达到稳定平衡。
随着矢量大小的增加,每个数据包的处理成本降低,因为您将I-cache未命中分摊到更大的N。
3 示例用例,VPP作为vSwitch/vRouter
VPP平台的一个用例是将其实现为虚拟交换机或路由器。以下部分介绍了可以使用VPP平台创建的可能实现的示例。有关其他可能用例的更深入描述,请参见用例列表。
您可以使用VPP平台创建现成的虚拟交换机,vSwitch,和虚拟路由器,vRouter,。VPP平台允许您通过命令行界面,CLI,管理这些应用程序的某些功能和配置。
交换应用程序可以创建的一些功能包括,
桥接域
端口,包括隧道端口,
将端口连接到网桥域
程序ARP termination
路由应用程序可以创建的一些功能包括,
Virtual Routing and Forwarding (VRF) tables (in the thousands)
Routes (in the millions)
3.1 本地可编程性
一种方法是实现VPP应用程序,以便在本地环境,Linux主机或容器,中与外部应用程序通信。通信将通过低级API进行。这种方法提供了一个完整的、功能丰富的解决方案,它既简单又高性能。例如,预期性能产出率为每秒500kroutes/second是合理的。
这种方法利用了共享内存/消息队列。该实现是在盒子或容器上的本地计算机上实现的。所有CLI任务都可以通过API调用完成。
VPP平台的当前实现为C客户端和Java客户端生成低级绑定。将来可能会为其他编程语言的绑定提供支持。
3.2 远程编程能力
另一种方法是通过高级API使用数据平面管理代理。如图所示,数据平面管理代理可以通过低级API与VPP应用程序,引擎,对话。这可以在一个盒子,或虚拟机或容器,中本地运行。盒子,或容器,将通过某种形式的绑定公开更高级别的API。
这是一种特别灵活的方法,因为VPP平台不强制特定的数据平面管理代理。此外,VPP平台不限制通信仅限于*一个*高级API。任何人都可以带数据平面管理代理。这允许您将高级API/数据平面管理代理和实现与VPP应用程序的特定需求相匹配。
3.3 数据平面管理代理示例
使用high-hevel API的一个例子是将VPP平台作为一个应用程序实现在一个运行本地ODL实例,蜂窝,的盒子上。您可以在生成的Java绑定上使用低级API与VPP应用程序对话,并通过netconf/restconf NB公开模型。
这将是实现桥接域的一种方法。
4 VPP的主要特征
一些主要特征包括,
与在内核中运行类似的数据包处理相比,提高了容错性和ISSU,
崩溃通常只需要重启进程
软件更新不需要重新启动系统
开发环境比类似的内核代码更易于使用和执行调试
用户空间调试工具,gdb、valgrind、wireshark,
利用广泛可用的内核模块,uio、igb_uio,,DMA安全内存
作为Linux用户空间进程运行,
相同的映像可以在VM、Linux容器或主机内核上运行
KVM和ESXi,通过PCI direct map的NIC
Vhost用户、netmap、virtio paravirtualized NICs
Tun/tap驱动程序
DPDK轮询模式设备驱动程序
VPP与DPDK集成,支持现有的NIC设备,包括,
英特尔i40e、英特尔ixgbe物理和虚拟功能、英特尔e1000、virtio、vhost用户、Linux TAP
惠普更名为英特尔Niantic MAC/PHY
思科 VIC
考虑的安全问题,
思科安全团队进行了广泛的白盒测试
图像段基址随机化
共享内存段基址随机化
堆栈边界检查
调试CLI“chroot”
数据包处理的矢量方法已被证明是主要架构上的主要punt/inject路径。
4.1 支持的体系结构
VPP平台支持,
x86/64
4.2 支持的打包模型
VPP平台支持在以下操作系统上安装软件包,
Debian
Ubuntu 16.04
Centos 7.3
5 性能预期
VPP的这种实现的好处之一是它在相对低功耗计算上的高性能。这种高水平的性能基于以下亮点
用于商用硬件的高性能用户空间网络栈
主机、虚拟机和Linux容器的代码相同
集成的vhost用户virtio后端可实现高速虚拟机到虚拟机的连接
L2和L3功能,多重封装
利用同类最佳的开源驱动程序技术,DPDK
通过使用插件进行扩展
通过基于标准的API控制平面/编排平面
5.1 性能指标
VPP平台已被证明提供了以下近似性能指标,
Multiple MPPS from a single x86_64 core
>100Gbps full-duplex on a single physical host
Example of multi-core scaling benchmarks (on UCS-C240 M3, 3.5 gHz, all memory channels forwarded, simple ipv4 forwarding):
1 core: 9 MPPS in+out
2 cores: 13.4 MPPS in+out
4 cores: 20.0 MPPS in+out
NDR rates for 2p10GE, 1 core, L2 NIC-to_NIC
The following chart shows the NDR rates on: 2p10GE, 1 core, L2 NIC-to_NIC.
本文链接:https://www.kinber.cn/post/3467.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: