有没有开源的虚拟路由器?有,VPP了解一下
VPP(Vector Packet Processing,矢量包处理)平台是一个可扩展的开源框架,提供开箱即用的网络交换机或路由器的功能。VPP技术基于Cisco产品的成熟技术,是思科矢量包处理 (VPP) 技术的开源版本:一种可以在商用CPU上运行的高性能包处理堆栈。
传统的标量处理方法是对单个数据包的处理,存在高延迟的问题。为了推动网络的可扩展性,VPP读取网络I/O层中最大的可用数据包扇区。VPP不是在具有多个节点的整个图中单独处理每个数据包,而是选择整个数据包矢量并将它们推送到一个图节点,然后再移动到下一个节点。由于先前从第一个矢量数据包中学习到指令,指令缓存然后适应该过程,使得剩余数据包的处理速度更快。这样一来,VPP可以一次处理多个数据包,有降低延迟的特性。这种VPP处理的好处是高性能、技术成熟、模块化、灵活性以及功能集丰富。
VPP是由Linux基金会支持的开源框架,是快速数据项目(http://FD.io)的一部分。VPP 的许多底层功能使用数据平面开发套件设备驱动程序和库,此功能被分离到VPP的可选插件中。它是一种模块化设计,该框架允许任何人“插入”新的图形节点,而无需更改核心/内核代码。
模块化、灵活且可扩展
VPP 平台建立在“数据包处理图”之上。这种模块化方法意味着任何人都可以“插入”新的图形节点。这使得可扩展性变得相当简单,这意味着可以为特定目的定制插件。
该插件如何发挥作用?
在运行时,VPP 平台从RX环中抓取所有可用的数据包,形成一个数据包矢量。数据包处理图逐个节点(包括插件)应用于整个数据包矢量。图节点小且模块化。图节点是松散耦合的。这使得引入新的图节点变得容易。它还使得重新连接现有图形节点变得相对容易。
插件可以引入新的图节点或重新排列数据包处理图,还可以独立于VPP源代码树构建插件。这意味着可以将其视为独立组件,可以通过将插件添加到插件目录来安装插件。
VPP平台可用于构建任何类型的数据包处理应用程序,可以用作负载均衡器、防火墙、IDS 或主机堆栈的基础,还可以创建应用程序的组合。例如,您可以向 vSwitch 添加负载均衡。
引擎在纯用户空间中运行。这意味着插件不需要更改核心代码。可以扩展数据包处理引擎的功能,而无需更改在内核级别运行的代码。通过创建插件,任何人都可以通过以下方式扩展功能:
新的自定义图形节点
图节点的重新排列
新的低级 API
功能丰富
全套图形节点允许构建各种网络设备工作负载。在高层次上,该平台提供:
路由、网桥条目的快速查找表
任意 n 元组分类器
开箱即用的生产质量交换机/路由器功能
以下是 VPP 平台提供的功能摘要:
为什么叫矢量处理?
顾名思义,VPP 使用矢量处理而不是标量处理。标量包处理是指一次处理一个包,这种较旧的传统方法需要处理中断,并遍历调用堆栈(a 调用 b 调用 c...从嵌套调用中返回返回...然后从中断返回)。然后,该过程执行以下 3 件事之一:不处理、丢弃或重写/转发数据包。
传统标量数据包处理的问题是:
抖动发生在 I-cache 中
每个数据包都会导致一组相同的 I-cache 未命中
除了提供更大的缓存之外,没有解决上述问题的方法
相比之下,矢量处理一次处理多个数据包。
矢量方法的好处之一是它修复了 I-cache 颠簸问题。它还减轻了依赖读取延迟问题(预取消除了延迟)。
这种方法修复了与堆栈地址上的堆栈深度/D 缓存未命中相关的问题。它改善了“电路时间”。“电路”是从设备 RX 环中抓取所有可用数据包的循环,形成一个“帧”(矢量),由按 RX 顺序的数据包索引组成,通过节点的有向图运行数据包,然后返回到 RX电路。随着数据包处理的继续,电路时间会根据提供的负载达到稳定的平衡。
随着矢量大小的增加,每个数据包的处理成本会降低,因为您将 I-cache 未命中分摊到更大的 N 上。
用例示例:VPP 作为 vSwitch/vRouter
VPP 平台的用例之一是将其实现为虚拟交换机或路由器。以下部分描述了可以使用 VPP 平台创建的可能实现的示例。有关其他可能用例的更深入描述,请参阅用例列表。
您可以使用VPP平台创建开箱即用的虚拟交换机(vSwitch)和虚拟路由器 (vRouter)。VPP 平台允许您通过命令行界面(command-line interface,CLI)管理这些应用程序的某些功能和配置。
切换应用程序可以创建的一些功能包括:
桥接域
端口(包括隧道端口)
将端口连接到桥接域
程序 ARP 终止
路由应用程序可以创建的一些功能包括:
虚拟路由和转发(Virtual Routing and Forwarding,VRF)表(以千计)
路由(以百万计)
本地可编程性
一种方法是实现VPP应用程序以与本地环境(Linux 主机或容器)内的外部应用程序通信,通信将通过低级API进行。这种方法提供了一个完整的、功能丰富的解决方案,它简单而高性能。例如,期望 500k 路由/秒的性能收益是合理的。
这种方法利用了使用共享内存/消息队列的优势。该实现位于设备或容器的本地,所有 CLI 任务都可以通过 API 调用来完成。
VPP 平台的当前实现为 C 客户端和 Java 客户端生成低级绑定。将来可能会为其他编程语言的绑定提供支持。
学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
远程可编程性
另一种方法是通过高级 API 使用数据平面管理代理。如图所示,数据平面管理代理可以通过低级 API 与 VPP 应用程序(引擎)对话。这可以在一个盒子(或 VM 或容器)中本地运行。盒子(或容器)将通过某种形式的绑定公开更高级别的 API。
这是一种特别灵活的方法,因为 VPP 平台不强制使用特定的数据平面管理代理。此外,VPP 平台不会将通信限制为仅一个高级API,任何人都可以携带数据平面管理代理。这允许您将高级API/数据平面管理代理和实现与VPP应用程序的特定需求相匹配。
示例数据平面管理代理
使用高级API的一个示例是将VPP平台实现为运行本地ODL实例(Honeycomb)的机器上的应用程序。您可以在生成的Java绑定上使用低级API与VPP应用程序通信,并通过netconf/restconf NB公开Yang模型。
这将是实现桥接域的一种方式。
VPP的主要特征
一些主要特征包括:
与在内核中运行类似的数据包处理相比,改进的容错和ISSU:
崩溃很少需要重新启动进程
软件更新不需要系统重启
开发环境比类似的内核代码更易于使用和调试
用户空间调试工具(gdb、valgrind、wireshark)
利用广泛可用的内核模块(uio、igb_uio):DMA 安全内存
作为 Linux 用户空间进程运行:
相同的映像在 VM、Linux 容器或主机内核中工作
KVM 和 ESXi:通过 PCI 直接映射的网卡
Vhost-user、netmap、virtio 半虚拟化 NIC
Tun/tap 驱动程序
DPDK 轮询模式设备驱动程序
VPP与DPDK集成,支持现有的NIC设备,包括:
Intel i40e、Intel ixgbe 物理和虚拟功能、Intel e1000、virtio、vhost-user、Linux TAP
惠普定制的英特尔 Niantic MAC/PHY
思科VIC
考虑的安全问题:
思科安全团队进行了广泛的白盒测试
图像段基地址随机化
共享内存段基地址随机化
堆栈边界检查
调试 CLI“chroot”
数据包处理的矢量方法已被证明是主要架构上的主要转发/注入路径。
支持的架构
VPP平台支持:
x86/64
支持的封装模型
VPP 平台支持在以下操作系统上安装软件包:
Debian
Ubuntu 16.04
Centos 7.3
性能期望
这种 VPP 实现的好处之一是它在相对低功耗的计算上的高性能。这种高水平的性能基于以下亮点:
用于商用硬件的高性能用户空间网络堆栈
主机、虚拟机、Linux 容器的相同代码
集成 vhost-user virtio 后端,用于高速 VM 到 VM 连接
L2 和 L3 功能,多重封装
利用同类最佳的开源驱动技术:DPDK
可使用插件扩展
通过基于标准的 API 的控制平面/编排平面
性能指标
VPP 平台已被证明可提供以下近似性能指标:
单个x86_64内核,性能可达几MPPS
单个物理主机,支持>100Gbps全双工
多核扩展基准示例(在UCS-C240 M3,3.5 GHz,所有内存通道转发,简单的 ipv4 转发):
1 核:9 MPPS 输入+输出
2 核:13.4 MPPS 输入+输出
4 核:20.0 MPPS 输入+输出
10GE*2、CPU*1、L2 NIC-to_NIC 的 NDR 速率
下图显示了 NDR 速率:2个10GE接口,1核CPU,网卡到网卡的二层转发。
10GE*2、CPU*1、L2 网卡到虚拟机/虚拟机到虚拟机的 NDR 速率
下图显示了 NDR 速率:2个10GE接口,1核CPU,网卡到虚拟机/虚拟机到虚拟机的二层转发。
笔记
虚拟网络基础设施效率基准
仅每个连接的所有测试,单核
具有更多连接、更多内核的潜在更高性能
最新软件:OVSDPDK 2.4.0、VPP 09/2015
NDR 对 VPP 与 OVSDPDK 进行评级
下图显示了与开源和商业报告相比的 VPP 性能。
这些速率反映了在具有 E5-2698v3 2x16C 2.3GHz 的 Haswell x86 平台上测试的 VPP 和 OVSDPDK 性能。该图显示了12个10GE接口、16核CPU、IPv4的 NDR 速率。
原文链接:https://zhuanlan.zhihu.com/p/449559990
有没有开源的虚拟路由器?有,VPP了解一下相关推荐
- 虚拟路由器冗余协议(VRRP)原理与实验
一.基础知识: 虚拟路由冗余协议(VRRP)与热备份路由协议(HSRP)都是一种默认网关冗余方法,它们都是让一组路由器构成一台虚拟路由器.和HSRP不同的是,VRRP是开发的协议,而HSRP是思科专属 ...
- VRRP——虚拟路由器冗余协议
VRRP VRRP概述 VRRP的作用 VRRP协议的状态 VRRP的工作过程 VRRP配置命令 VRRP概述 ●利用VRRP,一组路由器(同一个LAN中的接口),协同工作,但是只有一个处于Maste ...
- 配置VRRP(虚拟路由器冗余协议)
1,实验名称:配置VRRP(虚拟路由器冗余协议) 2,实验目的: 3,实验拓扑: 4.配置步骤: (1)配置交换机SW1 SW1(config)#vlan 10 创建vlan 10 SW1(con ...
- 虚拟路由器冗余协议-VRRP
虚拟路由器冗余协议 (VRRP:Virtual Router Redundancy Protocol) 虚拟路由器冗余协议(VRRP)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 ...
- 路由器的工作原理_VRRP(虚拟路由器冗余协议)知识点梳理
VRRP基本概念 VRRP(Virtual Router Redundancy Protocol)虚拟路由器冗余协议,其作用解决静态网关出现的单点故障的路由协议,虚拟出来的VIP地址充当网关,当主路由 ...
- 虚拟路由器冗余协议VRRP原理详解!
虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...
- H3C之虚拟路由器冗余协议(VRRP)的原理及应用
VRRP简介:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...
- 虚拟路由器冗余协议(VRRP)
简介 虚拟路由器冗余协议(VRRP)是一种LAN接入设备备份协议.一个局域网络内的所有主机都设置缺省网关,这样主机发出的目的地址不在本网段的报文将被通过缺省网关发往三层交换机,从而实现了主机和外部网络 ...
- 网络基础之虚拟路由器冗余协议(VRRP)理论基础及华为ENSP基础配置
一. VRRP的引入 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果此时默认网关设备发生故障,将中断所有用户终端的网络访问,这很可能会给用户带来不可预计的损失,所以可以通过部署多个 ...
最新文章
- 常用的数据统计Sql 总结(转)
- python冒泡排序算法时间复杂度为nlogn_Python版算法专题-1、冒泡排序
- java常见不可变类_Java语言不可变类的诀窍
- 启明云端方案分享| 小尺寸串口屏在充电桩的应用
- 读取配置文件失败_还在为Find_Package失败而烦恼吗?
- 集成框架比较– Spring集成,Mule ESB或Apache Camel
- spss三次指数平滑_17 统计学:SPSS基础
- 小米答题题库_拼多多果园答题题库74(每日更新)
- 【POJ】2454.Jersey Politics
- ajax 中操作this,需要先在ajax的外面给this重新定义为_this!!
- 【keras/Tensorflow/pytorch】Conv2D和Conv2DTranspose详解
- GStreamer系列-基础概念
- SlideLive:提供时间线类型PPT模板下载
- 黑苹果 惠普笔记本电池补丁_惠普笔记本电池无法充电问题的解决方法
- Ngork内网穿透简单实现
- matlab错位相减,matlab随手记
- 如何通过Python制作日历壁纸
- 善的讯息可以产生美丽的水结晶
- 中国智能制造发展趋势!
- 2020IT网吧如何建立网吧电影系统
热门文章
- ASO优化:iOS如何做好ASO推广
- Summery about show input info bar of MTK 分享
- python的range函数用法和实例
- 【佛山】地铁2号线“海口站”改“张槎站”设7换乘站
- Windows RDS远程会话服务
- 如何不通过系统升级来安装window10正式版?(特别针对Xp用户)
- 飞机步道(plane trails)
- 猫影视TV 2.0.8 附稳定源地址
- 你要的大数据/Python学习路线图来了!
- FLASH中button组件的selected和toggle属性解析