面向网络功能虚拟化的高性能设计方法与流程

文档序号:16512288发布日期:2019-01-05 09:24阅读:157来源:国知局
本发明属于网络
技术领域
:,涉及网络功能虚拟化(nfv)的性能优化,特别涉及一种面向网络功能虚拟化的高性能设计方法。
背景技术
::网络功能虚拟化(networkfunctionvirtualization,nfv)是指在软件中实现网络功能(nf,如入侵检测,监控和负载平衡等),以实现更具弹性的管理和更低的网络系统成本。网络功能通常连接在一起形成一个串行的服务链,而nfv运行商通过服务链引导数据包进行传递。然而,网络功能的软件化实现也带来了较大的性能问题。现有研究表明,当数据包通过含有多个网络功能的长链时,包处理性能会严重下降。nfv的性能问题促使研究人员提出了一些解决方案,以提升服务链处理数据包的性能。现有研究主要从两个角度出发:(1)一类工作专注于直接加速nfv的数据平面路径,包括使用特殊硬件(例如fpga和gpu)来加速单个nf的性能,以及引入nf之间数据包传输的共享内存机制(例如netvm和clickos)来加速服务链的性能。(2)另一类研究提议并行执行nf以加速服务链(例如,nfp和parabox)。这类研究的分析表明,服务链内部的某些nf之间并没有依赖关系,因此可以并行执行。我们将nf并行化执行称为拓宽数据路径,因为它试图在原有数据路径上同时执行网络功能。然而,以上两种服务链性能优化方法有一个共同的假设:网络功能是模块化的,即一个网络功能的处理与下一个网络功能处理之间的仍然是互相隔离的。因此,服务链的处理性能存在一个上限。即使使用了上述两类优化方法,性能下降也是不可避免的。如果我们不打破nf处理的边界,例如合并作用于数据包的多次修改,则可能会有一些处理冗余是现有两类优化无法消除的。加速这些操作不能完全消除冗余;而并行化它们则未必可行,因为它们可能不是独立的(例如,如果它们会对数据包的相同域进行写入操作)。这种冗余操作可能会随着链的长度而增加,因而当服务链足够长时,处理性能会显著下降。技术实现要素:为了克服上述现有技术的缺点,本发明的目的在于提供一种面向网络功能虚拟化的高性能设计方法,搭建一个在单机实现的网络功能(nf)链,通过缓存每条数据流对应的nf操作,来提高nf链的处理性能,降低nf链上数据包的处理延迟的包处理系统。为了实现上述目的,本发明采用的技术方案是:一种面向网络功能虚拟化的高性能设计方法,其特征在于,对每条数据流的第一个数据包和之后的数据包进行不同的处理,其中:对数据流的第一个数据包处理步骤如下:步骤(11),数据包经过包分类器,计算数据包对应数据流的fid,在gmat中寻找对应数据流的处理动作缓存;步骤(12),如果在gmat没有找到对应数据流的处理动作缓存,则新建一个对于该数据流的空缓存并分配一个新的fid,然后将数据包发送给nf链进行进行处理并记录处理操作;步骤(13),nf链中的每个nf正常处理数据包,将处理动作按fid编号缓存到lmat中,然后将数据包传递给下一个nf,所述处理动作包括对头部的动作和对nf内部状态的动作;步骤(14),每个nf将lmat中对于数据流的头部动作以及状态动作可能触发的事件列表与对应行为上传到gmat中,并将所有的nf头部动作按顺序叠加,建立新的数据流缓存以备后续使用;对数据流的后续数据包处理步骤如下:步骤(21),数据包经过包分类器,计算数据包对应流的fid,在gmat中寻找对应数据流的处理动作缓存;步骤(22),如果在gmat找到对应数据流的处理动作缓存,取出fid对应缓存空间中处理动作,然后将数据包以及每个针对状态的动作发送给不同的分核进行处理;步骤(23),每个分核对同一数据包并行处理状态动作,并将处理结果同一返回主核;步骤(24),主核在收到分核的处理结果后,如果发现状态动作上没有触发事件,则对数据包进行头部动作处理,否则根据事件编号触发对应的事件行为,并将数据包发回对应的nf中,重复第一个数据包的步骤(13)和步骤(14)。所述步骤(11)和步骤(21)中,通过由传输层协议、源ip、目的ip、源端口、目的端口组成的五元组,对数据包的所属流进行分类,每条数据流根据五元组分配一个用来标识的流标志(fid)。所述步骤(12)中,根据哈希规则分配新的fid。所述步骤(22),在多核系统中,每个nf位于一个核上,将每个nf各自对应的状态动作以句柄形式发回对应的核执行。所述头部动作只包含对数据包五元组的识别与处理,并且不会造成nf内部状态的改变,所述状态动作包含对数据包其他部分的识别与处理或者会修改nf内部状态的其余行为。与现有技术相比,本发明的有益效果是:1)统筹整体nf链上的所有操作,大大减少nf内部以及nf之间的冗余计算,加快系统处理效率和数据包吞吐率。2)在保证系统正确性的情况下,实现多个nf对单个数据包的并行化处理,降低系统的处理时延。3)系统提供极为简洁的框架接口,原先的nf只需修改少量的代码即可放置到该系统中。附图说明图1为面向网络功能虚拟化的高性能设计架构示意图。图2为数据包处理流程图。具体实施方式下面结合附图和实施例详细说明本发明的实施方式。本发明一种面向网络功能虚拟化的高性能设计方法,设计数据流的全局匹配动作表,通过缓存每条数据流所对应的nf处理行为的方式减少冗余计算,并由此实现多个nf对同一数据包处理的并行化,从而实现数据流的后续数据包的处理效率提升与处理延时缩减。参考图1,本发明通过五元组(传输层协议、源ip、目的ip、源端口、目的端口)对数据包的所属流进行分类,每条数据流根据五元组分配一个用来标识的流标志(fid)。系统中,nf对数据包的处理行为分为头部动作和状态动作两种。头部动作只包含对数据包五元组的识别与处理并且不会造成nf内部状态的改变,其余包含对数据包其他部分的识别与处理或者会修改nf内部状态的行为则被称为状态动作。在本发明中,缓存被称为匹配行为表matchactiontable(mat),在nf本地的行为表被称为localmat(lmat),全局的行为表缓存则被称为globalmat(gmat)。系统通过流对应的fid访问mat表并获取数据流对应头部动作和状态动作。当一个nf只包含对数据包的头部动作时,那么该nf对同一个数据流中所有数据包的头部处理行为都相同,因此只需缓存每条数据流的第一个数据包在nf链中的处理行为,即可将该行为复用到该流之后所有的数据包上。同时多个nf头部动作可以通过按处理顺序覆盖叠加的方式被合并成一个行为。因此对于每条数据流只需缓存一个头部动作即可完成整个nf链对流中数据包的操作,并且如果nf不包含对数据包的状态动作,则nf对单个流的头部动作不会改变。合并多个nf的头部动作可以大大减少nf对数据包处理的冗余,其中最典型的就是如果最后一个nf将数据包丢弃,那么之前的nf操作都无意且在头部动作合并时会被认定为无效动作被清除。系统同时考虑并优化nf对数据包的状态动作处理。虽然nf对数据流中各个数据包的状态动作无法叠加,但是系统依然可以通过缓存nf对数据流中数据包的状态动作来简单实现多个状态动作的并行化,以减少nf链的对单个数据包的处理时延。gmat按顺序存储每个nf对给定流中数据包的状态动作。状态动作根据对数据包的处理被分为读类型(对数据包只有读操作)、写类型(对数据包有写操作)和读写无关(不读写数据包内容,只修改nf内部状态)三类。只要多个连续的状态动作都为读类型或是读写无关类型,那么这些状态动作可以在多个核上并行处理并向gmat所在核返回结果。如果状态动作为写类型,那么该行为就只能与其他状态动作分离并单独处理。同时nf对数据包的状态动作可能会修改nf的内部状态,因此对应流的头部动作和状态动作也可能会随着nf内部状态的修改而发生该本。为解决这一问题,每一个状态动作都会返回一个事件表示处理的结果,同时在gmat上进行缓存时不单需要提交状态动作的运行端口,还需要提交一个状态动作事件表,表示对于不同返回事件的处理方式。如果没有事件触发,这说明数据流对应的头部动作和状态动作没有发生改变。如果事件被触发,系统则会按照返回的事件编号按事件表中所给出的接口进行缓存修改。在本系统中,最简单的处理方式为将数据包重新导入到原先的nf链进行处理然后重新构建对于该数据流的lmat与gmat。在实验中证实这样修改头部动作和状态动作情况占总体很小的比例,因此这样的操作可以在保证系统效率的同时确保系统运行的正确性。本发明适用于nf串行处理的run-to-completion(rtc)模型,即系统在完整处理完一个(组)进入nf链的数据包后再进行下一个(组)数据包的处理。在本发明中,运行与存储gmat的cpu核心为主核,其余为运行状态处理的核心为分核。主核会接收来自网卡的数据包,计算数据包对应流动的fid在gmat中查询该数据流所对应的处理动作。如果该流在gmat中不存在,则主核会给新的数据流根据哈希函数结果分配新的缓存空间,然后使用原先的nf链对数据包进行处理并生成数据流对应的动作并按fid填入到lmat和gmat中。如果在gmat中存在该流的缓存,则将从fid对应缓存空间中取出该流对应的状态动作分发到各个分核中去并获取处理结果,如果触发事件则正常对数据包进行头部动作处理并发出,否则根据nf提交的状态事件表修改流对应的行为处理。参考图2,本发明面向网络功能虚拟化的高性能设计方法,是对每条数据流的第一个数据包和之后的数据包进行不同的处理,其具体步骤可表述如下:对数据流的第一个数据包处理会经过以下四个步骤:步骤(11)数据包经过包分类器,计算数据包对应流的fid,在gmat中寻找其对应数据流的处理动作缓存。步骤(12)在gmat没有找到对应数据流的缓存,则新建一个对于该数据流的空缓存并分配一个新的fid,然后将数据包发送给nf链进行常规处理。步骤(13)nf链中的每个nf正常处理数据包,将处理动作(头部动作、状态动作)按fid编号缓存到lmat中,然后将数据包传递给下一个nf。步骤(14)每个nf将lmat中对于新数据流的处理动作以及状态动作可能触发的事件列表与对应行为上传到gmat中,并将所有的nf头部动作按顺序叠加,建立新的数据流缓存以备后续使用。对数据流的后续数据包处理会经过一下四个步骤:步骤(21)与第一个数据包的步骤(11)相同。步骤(22)在gmat找到对应数据流的缓存,取出fid对应缓存空间中处理动作,然后将数据包以及每个状态动作发送给不同的分核进行处理。步骤(23)每个核对于同一数据包并行处理状态动作,并将处理结果同一返回主核。步骤(24)主核在收到分核的处理结果后,如果发现状态动作上没有触发事件,则对数据包进行头部动作处理,否则根据事件编号触发对应的事件行为。一般情况下系统的事件行为会选择将数据包发回对应的nf中,重复第一个数据包的步骤(13)和步骤(14)。综上所述,本发明提出了一种针对单机nfv系统的优化框架,通过降低多个nf之间的冗余计算与nf对单个数据包的并行化处理,在保证系统正确性的同时提高系统的吞吐效率,优化系统的处理延时。本发明目的是通过聚合服务链中网络功能对数据流的操作来消除网络功能中的处理冗余,以实现高效的网络数据通路。在每个网络功能中建立本地动作匹配表来记录对数据流中数据包以及网络功能状态的操作行为,并建立全局动作匹配表来聚合所有本地动作匹配表,同时使用事件触发表和新的数据包处理模式来保证网络功能在运行时的逻辑正确性,以及通过网络功能函数的并行化来提高系统的性能。本高性能设计架构对于每个网络流的初始数据包和后续数据包分为两种执行流程:(1)初始包:若在全局动作匹配表中没有对应流的操作则发送给网络功能服务链,服务链中的各个网络功能对数据包进行处理并生成本地动作匹配表,然后全局动作匹配表对本地动作匹配表进行聚合;(2)后续包:若全局动作匹配表中存在对应流的动作,则提取其中的头部动作与所有状态动作,使用多个处理核并行处理状态动作并返回结果事件。在此过程中,根据结果事件选择继续处理头部动作或是根据事件触发表重新构建新的头部动作与状态动作。本发明在保证网络功能逻辑正确性的情况下,显著优化了网络功能服务链的处理延时以及吞吐率。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1