FD.io了解

参考文章:https://www.metaswitch.com/blog/fd.io-takes-over-vpp

FD.io旨在提供一个模块化、可扩展的用户态报文处理框架,能支持高吞吐量、低延迟、高资源利用率的IO服务。
FD.IO范围:1.基础用户态IO处理框架(DPRE)。2.报文处理编程框架及基本业务(对应SDK)。3.控制面代理。(Manage & Control)
VPP是FD.io Project的核心组件。(相当于DPRE)
VPP架构模型:VPP Plugin API+VPP
----矢量报文处理:Batch处理报文、多核并行处理
----Plugin机制:插入新node、Rearrange报文处理流程、硬件卸载
VPP运行框架——基于Node的业务运行及调度框架

Node调度框架的主要流程:1.从Input类型节点获取输入报文(采用批量收发方式)。2.每个节点进行报文处理后,将报文信息写到该worker线程的pending-frame-buff中进入下一个节点的调度。每个node节点都有一块Pending-frame-buff;3.每个Node节点完成这组packetc处理后,进入node-dispatch动作,Node节点内部可以根据报文类型代码静态制定下一个节点ID或者通过查表后获得下一个节点ID,从而完成Node有向图的串接执行。概括:Node抽象框架目的是解决业务串接;相当于是多个node节点构成一个软pipeline处理模式。

优缺点:Node抽象粒度过细,而node间都uxuyao一次出队入队动作,导致node的调度开销比较过大;
其pipeline处理模式有利于长业务流程;长业务流程采用pipeline后,可以减少node间的cache冲突导致大量的cache miss。

[A blog:FD.io Takes Over VPP and Unites with DPDK to Accelerate NFV Data Planes to Outright Nutty Speeds]
1.思科首先研究将VPP引入到开源社区并集成在DPDK加速的Open vSwitch中,OVS是大多数人在考虑NFV数据面架构时首先想到的东西。但是,FD.io不仅适用于OVS,还适用于其他的虚拟化转发引擎,如标准的linux路由器版本,Click模块化路由器。事实上,VPP也适用于许多的架构(x86,ARM和PowerPC)和部署环境(裸机,虚拟机,容器)。
2.在DPDK的轮询模式驱动程序(PMD)和环形缓冲区的支持下,VPP旨在通过减少流/转发表高速缓存中未命中率,同时使用并行方法替换标准创航数据包查寻,来提高平面吞吐量。短生命周期流以及高度动态变化的报文,会使caches变得无能、失效。
3.按照CPU的说法,这个功能可以利用信息指令缓存(i-cache),这就是VPP和FD.io在当前所有的文档中提到的。 它还提到了支持数据高速缓存(d-cache),用于存储支持i-cache所需的预取数据。 VPP主要倾向于i-cache。
4.NFV工作者对FD.IO使用的一些术语非常熟悉,首先拿VPP来说,它使用了和NFV SFC相似的命名方法。
5.由于瓶颈是高速缓存,即使在高度调优的全用户空间的DPDK加速环境中,交换机流水线以串行模式运行,每次处理一个数据包。即使有一个巨大的DPDK FIFO塞满了 数据包,它们也会通过"转发图"单独发送,在计算方面,这被称为标量处理。这是一条通往全面OVS管道的缓慢之路。
6.VPP按照一个简单的原则进行操作,这个原则有个(典型的)学名:时间局部性。具有同属性的数据包使用相同的资源,并访问相同的内存位置,VPP利用这个特性对数据包集合处理。
7.FD.io在Intel体系结构或x86环境下运行时很大程度依赖于DPDK的工具集合。DPDK PMDs定期询问其large FIFO环以等待收集数据包,这样大大减少了CPU中断的开销。VPP引擎并不是仅仅抓取线路前端的数据包,而是将大量的数据包接受到一个预定的最大值。
8.,Nx分组的“超帧”到达到第一个图节点,在该第一个图节点中,以太网报头被解码并且以太网类型被识别。 虽然我们的时间局部性理论表明,EtherType在矢量(即IPv4)中将是相同的,但自然有一组不同的数据包(即IPv6)成为超帧的机会。 如果是这种情况,则转发图叉和超帧将划分为两个“子网”,每个子网具有不同的下一跳图节点。
9.VPP技术,是一个高度模块化,能够方便快速的嵌入新节点,而不用对底层代码和内核有任何改变。这使开发人员能够轻松地构建具有不同转发图的任意数量的数据包处理设备,其中不仅包括那些支持交换机和路由器,还包括入侵检测和防御,防火墙或负载平衡器。 抛出一些OpenDaylight管理代理的本地支持,FD.io使用它的vSwitch / vRouter示例代码,并为NFV数据平面奠定了基础,能够实现一些相当疯狂的性能。

posted @ 2018-02-12 17:27  Enchel  阅读(540)  评论(0编辑  收藏  举报