一种高性能构件化的数据包处理系统转让专利

申请号 : CN202110971582.8

文献号 : CN113708965B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李宗垚张梦清彭璐

申请人 : 北京计算机技术及应用研究所

摘要 :

本发明涉及一种高性能构件化的数据包处理系统,属于计算机网络领域。本发明提出了Vnode与Vlink两种构件虚拟网络功能的组件的基本模型,虚拟网络功能组件能够基于基本模型快速开发。提供包括数据包分类器,二层交换,简单路由,数据包队列在内的一批基于Vlink,Vnode实现的简单虚拟网络功能组件,用户在不进行虚拟网络功能组件开发的情况下,能够使用ini形式的配置语言,将基本的虚拟网络功能组件配置成可用的网络功能,并达到与专用硬件产品相当的性能。我们使用pktgen数据包生成工具对虚拟网络功能组件组成的网络功能和服务链进行了测试,从实验结果来看,使用本发明搭建的网络功能具有较高的性能和良好的扩展性,不同网络功能组成服务链后仍具有较高的性能。

权利要求 :

1.一种高性能构件化的数据包处理系统,其特征在于,该系统包括硬件层、数据包处理与加速器驱动层、虚拟网络功能组件层、虚拟网络功能层和网络服务层,硬件层:通用的硬件为其他各层提供计算、网络、存储和加速器资源的支持;

数据包处理与加速器驱动层:管理硬件资源并为上层网络应用提供高速的数据包处理与管理库;

虚拟网络功能组件层:将虚拟网络功能组件VNFC划分为两种基本的模型Vnode和Vlink;Vnode处理以CPU处理为中心的数据包操作,而Vl ink描述了Vnode之间的关联关系,处理Vnode功能链之间,Vnode与驱动之间的数据包流转,并且用户能通过Vnode与Vlink模板的接口函数,增加自定义的虚拟网络功能组件;

虚拟网络功能层:一个虚拟网络功能由一个或者多个虚拟网络功能组件组成,每个虚拟网络功能都是网络中间件的软件实现,用户使用虚拟网络功能组件搭建自定义的虚拟网络功能;

网络服务层:网络服务层是能够被业务支撑系统直接使用的集成功能,它描述了虚拟网络功能的排列拓扑与依赖关系;

其中,Vnode包括以下七个部分:

数据包包头过滤器:当一批数据包经过数据包包头过滤器时,用户定义的特定的数据包包头字段会被抽取出来作为数据包注解进入查询器中进行处理,同时将完整的数据包在内存缓冲区中进行缓存;

规则表:规则表是流表的一种实现,规则表中的键是数据包信息的任意组合,动作ID是索引预定义动作方法体的唯一标志符;

查询器:查询器根据特定的数据包头字段信息检索规则表,然后找到相匹配的处理动作ID,动作ID与预定义的包处理动作相对应;

动作表:动作表存储着动作ID与动作方法体之间一一对应的关系;

动作执行器:动作执行器遍历预定义好的规则表去匹配一批数据包的动作ID,然后执行匹配到动作ID的方法体,获取整批的数据包,然后根据方法体的执行结果给这些数据包的注解打上标记;

分发器:分发器决定数据包应该通过哪个连接点,分发器通过检查数据包注解上的标记信息,重定向数据包流,使数据包通过对应的连接点;

连接点:连接点是VNFC的起点和终点;每个VNFC可以有一个或多个输入连接点和3个或更多的输出连接点;

Vlink包括三个部分:

接收/输出环形队列:接收/输出环形队列基于包处理系统实现,使用包处理系统提供的共享内存管理与CPU支持的直接内存访问技术实现零拷贝的数据包处理;当使用Vlink与硬件进行交互时,接收/输出环形队列将会使用硬件驱动提供的输入输出队列,以半软件化、半硬件的方式实现;

卸载方法:将Vlink中转出队列进入的数据包负载卸载到硬件驱动或者软件库提供的队列中,并使用轮询的方式接收经过硬件或者软件库处理的数据包,并将其放入接收队列中;

连接点:Vlink中只能存在两个连接点,一个负责与前驱节点的输出端限量,一个负责与后继节点的输入端相连。

2.如权利要求1所述的高性能构件化的数据包处理系统,其特征在于,规则表中的键是数据包信息的任意组合,数据包信息为Macda,Vlan,IPsa和载荷。

3.如权利要求1所述的高性能构件化的数据包处理系统,其特征在于,每个VNFC只能存在一个规则表,当规则表为空时,VNFC将会使用默认的规则,即绕过这个VNFC。

4.如权利要求1所述的高性能构件化的数据包处理系统,其特征在于,打在数据包上的标记只有三种——丢弃、转发到Vl ink和转发到Vnode。

5.如权利要求1所述的高性能构件化的数据包处理系统,其特征在于,在配置文件中对连接点进行注册,每个连接点拥有一个唯一的标识符去所引导连接点的详细信息,连接点是一个方法接口,而连接点之间的连接是方法调用。

6.如权利要求1所述的高性能构件化的数据包处理系统,其特征在于,用户使用ini形式的配置文件,自底向上地配置出具体业务需要的网络服务,首先,用户从虚拟网络构件库中明确选取的构件类型,然后为每个构件分配硬件资源;最后确定构件之间的连接点的连接关系,这样的一组配置项作为一个虚拟网络功能的描述符。

7.如权利要求6所述的高性能构件化的数据包处理系统,其特征在于,该系统采用了流水线与运行至完成相结合的方式,对于单独的虚拟网络功能,采用运行至完成的模式将所有的执行逻辑运行在同一个CPU核心上完成,在虚拟网络功能之间,采用流水线的形式,不同的虚拟网络功能执行不同的数据包处理逻辑,部署在不同的核心上。

8.如权利要求7所述的高性能构件化的数据包处理系统,其特征在于,该系统通过解析网络服务描述文件以连接虚拟网络功能构件的方式形成可用的网络,具体步骤如下:检查输入参数:检查由配置文件解析而来的参数是否为空,输入端口输出端口数量是合理且匹配;

创建虚拟网络功能:注册虚拟网络功能的标识符,根据配置文件为虚拟网络功能分配硬件资源;

创建Vlink构件:注册Vlink构件的标识符,使用配置文件中的批处理大小参数调用Vlink的创建函数为Vl ink构件分配资源并初始化;

创建Vnode构件:注册Vnode构件的标识符,根据配置文件中的规则表的文件路径使用Vnode构件创建规则表的方法初始化并填充规则表,然后根据配置文件的16进制数据包头掩码调用Vnode的创建方法完成对包头过滤器、动作表、动作执行器和分发器的创建;

连接输入输出端口:相连的Vnode与Vl ink的连接点相互注册;

开启网络服务:创建并启动默认的控制节点,控制节点通过消息队列与虚拟网络功能进行通讯。

说明书 :

一种高性能构件化的数据包处理系统

技术领域

[0001] 本发明属于计算机网络领域,具体涉及一种高性能构件化的数据包处理系统。

背景技术

[0002] 如今,网络安全已经成为国家安全的重要组成部分,特别是在党政军等重要领域,为了保证网络的安全,需要使用多样的网络安全设备来应对越来越多样化的网络攻击。
[0003] 然而,随着硬件网络安全设备的不断增多,一些问题也逐渐显露了出来。首先,随着网络攻击的日渐复杂多变,为了应对一种新的网络攻击,可能就需要引入一种新的安全设备,在有限的网络中心中为新设备开辟空间并配备合适的电力条件变得越来越难。其次,专用硬件设备需要集成越来越多的安全策略,大大增加了硬件的设计难度。新型网络攻击不断出现,而硬件设备的开发周期较长,硬件安全设备很快就会落后于网络攻防技术的发展形势,甚至阻碍新型安全技术的产生。再次,不同厂商的网络设备的操作大相径庭,使用多种厂家的设备使得网络管理员疲于适应各种各样的网络操作系统而疏于网络安全的保障,但如果只使用同一厂家的设备则会造成厂商绑定,从而产生更严重的安全隐患。最后,为了在网络峰值时保证高可用性,网络中心必须预留出足够的硬件设备,这在闲时则会造成大量的资源浪费。网络功能虚拟化概念的提出使得这些问题的解决迎来了转机。网络功能虚拟化使用标准的虚拟化技术,将软件网络功能的实现与底层的硬件解耦,并将软件实现的虚拟网络功能整合到通用的硬件设备中。
[0004] 使用网络功能虚拟化将在专用硬件上部署的网络服务转换到软件上来面临的最重要的问题就是性能问题,软硬件之间性能上数量级的差距成为了网络功能虚拟化发展最大的瓶颈。幸好,最近一些高速包转发库(DPDK,netmap,PF_RING)与新型国产硬件技术的发展(多核/众核处理器技术),使得软件实现的虚拟网络功能的性能逼近硬件成为了可能。但是,上层的应用开发者很难利用这些底层的库或是硬件来形成高性能高可用的网络应用,同时使用这些底层库或是硬件驱动要对底层架构有比较清晰的了解,这就要求网络功能的开发者需要掌握一定的硬件架构上的知识,这使得将网络设备软件化的进程进展缓慢。
[0005] 使用软件的方式实现网络功能的另一个障碍就是将网络服务的需求转化为真实部署在通用服务器上的实例。就如同之前硬件的解决方案所面临的问题,在现有的框架中,使用底层的高速包转发库与硬件技术要形成真正可用的虚拟网络功能需要对批处理大小,并行化等一系列参数进行重复的调优,严重阻碍了虚拟网络功能部署在通用硬件上的进程。底层多种多样的转发库与软硬件驱动,虽然带来了较高的硬件性能,但是也带来了高复杂性,开发者很难利用这些库来开发现实的网络功能。使得用户需求的服务部署在通用的硬件上需要漫长的时间,这就使网络功能虚拟化的发展陷入了一个困境,既不能达到硬件的高性能,也不能够实现网络服务的快速开发与部署。

发明内容

[0006] (一)要解决的技术问题
[0007] 本发明要解决的技术问题是如何提供一种高性能构件化的数据包处理系统,以解决现有的网络功能虚拟化既不能达到硬件的高性能,也不能够实现网络服务的快速开发与部署的问题。
[0008] (二)技术方案
[0009] 为了解决上述技术问题,本发明提出一种高性能构件化的数据包处理系统,该系统包括硬件层、数据包处理与加速器驱动层、虚拟网络功能组件层、虚拟网络功能层和网络服务层,
[0010] 硬件层:通用的硬件为其他各层提供计算、网络、存储和加速器资源的支持;
[0011] 数据包处理与加速器驱动层:管理硬件资源并为上层网络应用提供高速的数据包处理与管理库;
[0012] 虚拟网络功能组件层:虚将虚拟网络功能组件VNFC划分为两种基本的模型Vnode和Vlink;Vnode处理以CPU处理为中心的数据包操作,而Vlink描述了Vnode之间的关联关系,处理Vnode功能链之间,Vnode与驱动之间的数据包流转,并且用户能通过Vnode与Vlink模板的接口函数,增加自定义的虚拟网络功能组件;
[0013] 虚拟网络功能层:一个虚拟网络功能由一个或者多个虚拟网络功能组件组成,每个虚拟网络功能都是网络中间件的软件实现,用户使用虚拟网络功能组件搭建自定义的虚拟网络功能;
[0014] 网络服务层:网络服务层是能够被业务支撑系统直接使用的集成功能,它描述了虚拟网络功能的排列拓扑与依赖关系。
[0015] 进一步地,Vnode包括以下七个部分:
[0016] 数据包包头过滤器:当一批数据包经过数据包包头过滤器时,用户定义的特定的数据包包头字段会被抽取出来作为数据包注解进入查询器中进行处理,同时将完整的数据包在内存缓冲区中进行缓存;
[0017] 规则表:规则表是流表的一种实现,规则表中的键是数据包信息的任意组合,动作ID是索引预定义动作方法体的唯一标志符;
[0018] 查询器:查询器根据特定的数据包头字段信息检索规则表,然后找到相匹配的处理动作ID,动作ID与预定义的包处理动作相对应;
[0019] 动作表:动作表存储着动作ID与动作方法体之间一一对应的关系;
[0020] 动作执行器:动作执行器遍历预定义好的规则表去匹配一批数据包的动作ID,然后执行匹配到动作ID的方法体,获取整批的数据包,然后根据方法体的执行结果给这些数据包的注解打上标记;
[0021] 分发器:分发器决定数据包应该通过哪个连接点,分发器通过检查数据包注解上的标记信息,重定向数据包流,使数据包通过对应的连接点;
[0022] 连接点:连接点是VNFC的起点和终点。每个VNFC可以有一个或多个输入连接点和3个或更多的输出连接点。
[0023] 进一步地,规则表中的键是数据包信息的任意组合,数据包信息为Macda,Vlan,IPsa和载荷。
[0024] 进一步地,每个VNFC只能存在一个规则表,当规则表为空时,VNFC将会使用默认的规则,即绕过这个VNFC。
[0025] 进一步地,打在数据包上的标记只有三种——丢弃、转发到Vlink和转发到Vnode。
[0026] 进一步地,在配置文件中对连接点进行注册,每个连接点拥有一个唯一的标识符去所引导连接点的详细信息,连接点是一个方法接口,而连接点之间的连接是方法调用。
[0027] 进一步地,Vlink包括三个部分:
[0028] 接收/输出环形队列:接收/输出环形队列基于包处理系统实现,使用包处理系统提供的共享内存管理与CPU支持的直接内存访问技术实现零拷贝的数据包处理;当使用Vlink与硬件进行交互时,接收/输出环形队列将会使用硬件驱动提供的输入输出队列,以半软件化、半硬件的方式实现;
[0029] 卸载方法:将Vlink中转出队列进入的数据包负载卸载到硬件驱动或者软件库提供的队列中,并使用轮询的方式接收经过硬件或者软件库处理的数据包,并将其放入接收队列中;
[0030] 连接点:Vlink中只能存在两个连接点,一个负责与前驱节点的输出端限量,一个负责与后继节点的输入端相连。
[0031] 进一步地,用户使用ini形式的配置文件,自底向上地配置出具体业务需要的网络服务,首先,用户从虚拟网络构件库中明确选取的构件类型,然后为每个构件分配硬件资源;最后确定构件之间的连接点的连接关系,这样的一组配置项作为一个虚拟网络功能的描述符。
[0032] 进一步地,该系统采用了流水线与运行至完成相结合的方式,对于单独的虚拟网络功能,采用运行至完成的模式将所有的执行逻辑运行在同一个CPU核心上完成,在虚拟网络功能之间,采用流水线的形式,不同的虚拟网络功能执行不同的数据包处理逻辑,部署在不同的核心上。
[0033] 进一步地,该系统通过解析网络服务描述文件以连接虚拟网络功能构件的方式形成可用的网络,具体步骤如下:
[0034] 检查输入参数:检查由配置文件解析而来的参数是否为空,输入端口输出端口数量是合理且匹配;
[0035] 创建虚拟网络功能:注册虚拟网络功能的标识符,根据配置文件为虚拟网络功能分配硬件资源;
[0036] 创建Vlink构件:注册Vlink构件的标识符,使用配置文件中的批处理大小参数调用Vlink的创建函数为Vlink构件分配资源并初始化;
[0037] 创建Vnode构件:注册Vnode构件的标识符,根据配置文件中的规则表的文件路径使用Vnode构件创建规则表的方法初始化并填充规则表,然后根据配置文件的16进制数据包头掩码调用Vnode的创建方法完成对包头过滤器、动作表、动作执行器和分发器的创建;
[0038] 连接输入输出端口:相连的Vnode与Vlink的连接点相互注册;
[0039] 开启网络服务:创建并启动默认的控制节点,控制节点通过消息队列与虚拟网络功能进行通讯。
[0040] (三)有益效果
[0041] 本发明提出一种高性能构件化的数据包处理系统,与现有的技术相比,本发明提出了Vnode与Vlink两种构件虚拟网络功能的组件的基本模型,虚拟网络功能组件能够基于基本模型快速开发。提供包括数据包分类器,二层交换,简单路由,数据包队列在内的一批基于Vlink,Vnode实现的简单虚拟网络功能组件,用户在不进行虚拟网络功能组件开发的情况下,能够使用ini形式的配置语言,将基本的虚拟网络功能组件配置成可用的网络功能,并达到与专用硬件产品相当的性能。我们使用了pktgen数据包生成工具对虚拟网络功能组件组成的网络功能和服务链进行了测试,从实验结果来看,使用本发明搭建的网络功能具有较高的性能和良好的扩展性,不同网络功能组成服务链后仍具有较高的性能。

附图说明

[0042] 图1为本发明整体架构图;
[0043] 图2为本发明的Vnode模型结构图;
[0044] 图3为本发明的Vlink模型结构图;
[0045] 图4本发明与Linux协议栈吞吐量对比;
[0046] 图5网卡单端口情境下本发明的吞吐量;
[0047] 图6网卡全端口情境下本发明的吞吐量;
[0048] 图7实现不同网络功能的吞吐量。

具体实施方式

[0049] 为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0050] 本发明的目的就是提出一个能够利用现有的软硬件技术快速地将现有的安全网络服务需求迅速转化为部署在通用硬件上的网络功能的数据包处理系统,并达到与硬件网络设备相当的性能。
[0051] 1.整体架构
[0052] 图一为本发明的整体架构图,如图一所示,整体架构包含如下5层:
[0053] 硬件层:通用的硬件为其他各层提供计算、网络、存储和加速器资源的支持。
[0054] 数据包处理与加速器驱动层:管理硬件资源并为上层网络应用提供高速的数据包处理与管理库。
[0055] 虚拟网络功能组件层:虚拟网络功能组件VNFC是一个虚拟网络功能的组成部分,它实现了一个虚拟网络功能功能的子集。我们将虚拟网络功能组件划分为两种基本的模型Vnode和Vlink。Vnode处理以CPU处理为中心的数据包操作,例如规则表的查询,数据包包头的解析等;而Vlink描述了Vnode之间的关联关系,主要处理Vnode功能链之间,Vnode与驱动(网卡驱动、加速引擎驱动)之间的数据包流转。并且用户可以通过Vnode与Vlink模板的接口函数,增加自定义的虚拟网络功能组件。
[0056] 虚拟网络功能层:一个虚拟网络功能可以由一个或者多个虚拟网络功能组件组成。每个虚拟网络功能都是现实世界中网络中间件的软件实现。用户可以系统配置的方式使用虚拟网络功能组件搭建自定义的虚拟网络功能。
[0057] 网络服务层:网络服务层是能够被业务支撑系统直接使用的集成功能,它描述了虚拟网络功能的排列拓扑与依赖关系。
[0058] 2.Vnode模型
[0059] Vnode实现了对规则表查询过程的封装。如图2所示一个典型的Vnode包括以下七个部分:
[0060] 数据包包头过滤器:当一批数据包经过数据包包头过滤器时,用户定义的特定的数据包包头字段会被抽取出来作为数据包注解进入查询器中进行处理,同时将完整的数据包在内存缓冲区中进行缓存,通常的数据包处理操作只需对包头中的数据处理,只有在执行与数据包载荷相关的数据包处理动作时,才需要对内存缓冲区中的完整数据包进行访问。
[0061] 规则表:规则表是流表的一种实现。规则表中的键可以是数据包信息的任意组合,例如:Macda,Vlan,IPsa,载荷等。动作ID是索引预定义动作方法体的唯一标志符。每个VNFC只能存在一个规则表,当规则表为空时,VNFC将会使用默认的规则,即绕过这个VNFC。
[0062] 查询器:查询器根据特定的数据包头字段信息检索规则表,然后找到相匹配的处理动作的ID,这些ID与预定义的包处理动作相对应。
[0063] 动作表:动作表存储着动作ID与动作方法体之间一一对应的关系。
[0064] 动作执行器:动作执行器遍历预定义好的规则表去匹配一批数据包的动作ID。然后执行匹配到动作ID的方法体,获取整批的数据包,然后根据方法体的执行结果给这些数据包的注解打上标记。在我们的设计中,打在数据包上的标记只有三种——丢弃、转发到Vlink和转发到Vnode。
[0065] 分发器:分发器决定数据包应该通过哪个连接点。分发器通过检查数据包注解上的标记信息,重定向数据包流,使数据包通过对应的连接点。
[0066] 连接点:连接点是VNFC的起点和终点。每个VNFC可以有一个或多个输入连接点和3个或更多的输出连接点。在我们使用连接点前,我们必须在配置文件中对连接点进行注册,每个连接点拥有一个唯一的标识符去所引导连接点的详细信息。通常连接点是一个方法接口,而连接点之间的连接是方法调用。
[0067] 3.Vlink模型
[0068] Vlivk将数据包从前驱节点的发送队列发送到后继节点的接受队列,并使用统一定义的接口对将数据包负载卸载到加速器驱动上进行了封装。如图3所示,一个Vlink主要包括三个部分:
[0069] 接收/输出环形队列:接收/输出环形队列基于包处理系统实现。他们使用包处理系统提供的共享内存管理与CPU支持的直接内存访问技术实现零拷贝的数据包处理。当使用Vlink与硬件进行交互时,接收/输出环形队列将会使用硬件驱动提供的输入输出队列,以半软件化、半硬件的方式实现。
[0070] 卸载方法:卸载方法实现了将Vlink中转出队列进入的数据包负载卸载到硬件驱动或者软件库提供的队列中,并使用轮询的方式接收经过硬件或者软件库处理的数据包,并将其放入接收队列(针对数据包处理逻辑的接收队列)中。
[0071] 连接点:Vlink中的连接点与Vnode中的连接点类似,唯一的不同是Vlink中只能存在两个连接点,一个负责与前驱节点的输出端限量,一个负责与后继节点的输入端相连。
[0072] 4.配置网络服务
[0073] 我们预制了一系列基础的构件。基于Vnode模型实现的二层交换、三层交换、路由、防火墙、安全网关等和基于Vlink模型实现的多队列网卡通道、加密卸载队列、加速器卸载队列和软件缓冲区队列等。用户使用ini形式的配置文件,自底向上地配置出具体业务需要的网络服务。首先,用户从虚拟网络构件库中明确选取的构件类型。然后为每个构件分配网卡、CPU、加速器等硬件资源,用户可以根据硬件资源亲和性的原则进行配置以获取更好的性能。最后确定构件之间的连接点的连接关系,这样的一组配置项作为一个虚拟网络功能的描述符。
[0074] 在我们的系统中,采用了流水线与运行至完成相结合的方式,对于单独的虚拟网络功能,我们采用运行至完成的模式将所有的执行逻辑运行在同一个CPU核心上完成,可以充分利用缓存中的数据,方便进行数据预取等操作。而在虚拟网络功能之间,我们采用流水线的形式,不同的虚拟网络功能执行不同的数据包处理逻辑,部署在不同的核心上,方便网络管理员对虚拟网络功能的执行逻辑进行单独的性能优化,使整体的性能达到更优。同时将多个虚拟网络功能以流水线的形式部署在多个核心上,也能减少线程之间切换,优化性能。基于这样数据包转发模型,我们将实际的网络服务通过网络功能连接图拆分为一个个互相连接的虚拟网络功能,通过简单的配置虚拟网络功能的连接关系即可搭建出完整的网络服务。描述了完整的网络功能的ini配置文件我们称之为网络服务描述文件。
[0075] 5.运行网络服务
[0076] 我们的系统通过解析网络服务描述文件以连接虚拟网络功能构件的方式形成可用的网络,具体步骤如下:
[0077] 检查输入参数:检查由配置文件解析而来的参数是否为空,输入端口输出端口数量是合理且匹配。
[0078] 创建虚拟网络功能:注册虚拟网络功能的标识符,根据配置文件为虚拟网络功能分配CPU、网卡、加速器等硬件资源。
[0079] 创建Vlink构件:注册Vlink构件的标识符,使用配置文件中的批处理大小参数(如果没有设置则为默认的32)调用Vlink的创建函数为Vlink构件分配资源并初始化。
[0080] 创建Vnode构件:注册Vnode构件的标识符,Vnode中的动作表目前没有开放用户的定制功能。默认的动作表只存在三种默认的模式:丢弃数据包,将数据包发送到端口和将数据包发送到规则表。这对于大多数的网络功能来说已经够用。根据配置文件中的规则表的文件路径使用Vnode构件创建规则表的方法初始化并填充规则表。然后根据配置文件的16进制数据包头掩码调用Vnode的创建方法完成对包头过滤器、动作表、动作执行器和分发器的创建。
[0081] 连接输入输出端口:相连的Vnode与Vlink的连接点相互注册。
[0082] 开启网络服务:创建并启动默认的控制节点,控制节点通过消息队列与虚拟网络功能进行通讯,目前系统提供了一个简单的命令行工具使用控制节点对虚拟网络功能进行运行时控制(更改策略,启动,停止等)。
[0083] 6.系统性能度量
[0084] 我们将两台服务器直连,其中一台服务器运行pktgen分别产生64B,128B,256B,512B和1024B的数据包作为测试数据源,另一台运行测试程序。每台服务器均配置四个CPU节点,2张全双工双端口40Gb的网卡,使用linux系统。
[0085] 场景一本发明与linux协议栈对比
[0086] 测试服务器分别运行linux网络协议栈和基于本发明搭建的IP路由器。如图4所示,在最好的情况下linux网络协议栈的吞吐仅为6.3Gb/s,而在64B包大小的情况下,本发明搭建的IP路由器已经可以达到6.8Gb/s的吞吐,在数据包大小达到1024B大小时,已经可以达到网卡的线速度。与linux网络协议栈相比,本发明搭建的IP路由器性能提高了8‑10倍。
[0087] 场景二本发明的性能与拓展性
[0088] 测试服务器运行本发明搭建的IP路由器,第一次测试运行单个IP路由器实例,服务器使用单个网卡端口与单个CPU节点,第二次测试运行4个IP路由器实例,服务器使用4个网卡端口与全部4个CPU节点。如图5所示,当数据包大小达到512B时,IP路由器的吞吐已经能够达到数据源产生数据包的速度,当数据包大小持续增大,IP路由器的处理速度将达到网卡端口的线速度。根据统计,网络上的数据包的平均大小为744B,IP路由器在实际应用中可以保证以网卡线速度进行转发。如图6所示,当IP路由器从单网卡端口扩展到多网卡端口,从单核扩展到多核之后,IP路由器的性能并没有受到影响,在512B数据包大小的情况下就达到了网卡的线速度,由于网卡型号的限制,当单张网卡同时使用两个端口时,网卡的线速度只能达到50Gb/s。
[0089] 场景三本发明实现的不同网络功能与服务链的性能
[0090] 我们使用本发明的系统搭建了网络中十分常见的IP路由器(RT),防火墙(FW),流分类器(FC)与二层交换机(L2fwd)。首先测试了这些网络功能单独运行时的性能,为每个网络功能创建两个实例,将它们配置运行在同一节点的不同的CPU核上,每个实例处理该CPU节点双端口网卡的一个端口,然后将这4个网络功能的八个实例(在8个CPU核上)串联成2串服务链(FW‑FC‑RT‑L2fwd)每个服务链负责处理该节点双端口网卡的一个端口。从图7中我们看出,在运行单个网络功能的时候,在处理512B大小的数据包时,网络功能就基本可以达到网卡的线速度,在数据包大小大于512B的时候,安全网关处理数据包的能力已经基本达到网卡收发数据包的速率。从图7中,我们发现,串联连接的网络功能的性能只是稍稍低于组成它的网络功能中性能最差的那一部分。数据包在应用程序内部从一个网络功能被送往另一个网络功能是通过传递指针而不是整个数据包复制实现的,因此,只有很少的一部分的通讯开销在这个过程中产生。
[0091] 与现有的技术相比,本发明提出了Vnode与Vlink两种构件虚拟网络功能的组件的基本模型,虚拟网络功能组件能够基于基本模型快速开发。提供包括数据包分类器,二层交换,简单路由,数据包队列在内的一批基于Vlink,Vnode实现的简单虚拟网络功能组件,用户在不进行虚拟网络功能组件开发的情况下,能够使用ini形式的配置语言,将基本的虚拟网络功能组件配置成可用的网络功能,并达到与专用硬件产品相当的性能。我们使用了pktgen数据包生成工具对虚拟网络功能组件组成的网络功能和服务链进行了测试,从实验结果来看,使用本发明搭建的网络功能具有较高的性能和良好的扩展性,不同网络功能组成服务链后仍具有较高的性能。
[0092] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。