基于可重构芯片的网络数据包处理的编程方法转让专利

申请号 : CN202011264871.6

文献号 : CN112379868B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱敏

申请人 : 无锡沐创集成电路设计有限公司

摘要 :

本发明提供一种基于可重构芯片的网络数据包处理的编程方法,其按照数据包的处理逻辑分别设计以下三个程序模块:数据包接收程序模块,用于实现数据包的接收和存储;数据包处理程序模块,用于针对数据包处理需求设计相应的回调函数,以生成用于可重构芯片的相应配置信息,从而通过配置可重构芯片的处理逻辑来对数据包进行处理;数据包发送程序模块,用于在数据包处理完成后进行数据包的发送。本发明的编程方法基于可重构芯片,专门针对可重构芯片的软件、硬件双可编程性进行了优化,能最大程度体现可重构技术的优越性,而且本编程方法是模块化的,从而具有可重用性高、代码可读性好、可维护性好的特点。

权利要求 :

1.一种基于可重构芯片的网络数据包处理的编程方法,其特征在于,按照数据包的处理逻辑分别设计以下三个程序模块:

数据包接收程序模块,用于实现数据包的接收和存储;

数据包处理程序模块,用于针对数据包处理需求设计相应的回调函数,以生成用于可重构芯片的相应配置信息,从而通过配置可重构芯片的处理逻辑来对数据包进行处理;

数据包发送程序模块,用于在数据包处理完成后进行数据包的发送;其中,所述数据包接收程序模块模块包括数据包接收程序代码和数据包存储程序代码,所述数据包接收程序代码包括用于循环等待是否接收到数据包的循环函数,所述数据包存储程序代码用于在接收到数据包后存储数据包;并且在设计所述数据包存储程序代码时,在接收到数据包后,将接收到的数据包的数据块存储到最终要放置的存储空间,并且在为数据包预划分存储空间时预留额外存储空间,以为后续要添加的额外数据块预留存储空间。

2.根据权利要求1所述的编程方法,其特征在于,在所述数据包处理程序模块中,通过分析数据包处理需求的算法特征,进行数据流图的设计,在确定数据流图之后,针对可重构处理器的硬件特点,将数据流图映射到可重构芯片的数据通路上,进而生成相应配置信息。

3.根据权利要求2所述的编程方法,其特征在于,在设计所述数据包存储程序代码时,基于接收到的数据包和数据包处理需求,来为接收到的数据包预划分存储空间。

4.根据权利要求3所述的编程方法,其特征在于,所述数据包存储程序代码包括至少两个不同的存储空间预划分函数,以针对不同的处理需求执行不同的存储空间预划分函数,从而针对不同的数据包处理需求预划分相应的存储空间。

5.根据权利要求4所述的编程方法,其特征在于,所述编程方法还包括:设计数据包处理需求设定程序模块,所述数据包处理需求设定程序模块用于在每次变更数据包处理需求时,进行数据包处理需求的设定,所述数据包处理需求设定程序模块先于所述数据包接收程序模块执行,以使得在所述数据包接收程序模块执行所述数据包存储程序代码时,基于所设定的数据包处理需求自动执行相应的存储空间预划分函数。

6.根据权利要求5所述的编程方法,其特征在于,在所述数据包处理需求设定程序模块中,通过设置相应的标识符来进行数据包处理需求的设定,所述数据包存储程序代码基于所述标识符来自动判断需要执行的存储空间预划分函数。

7.根据权利要求6所述的编程方法,其特征在于,在所述数据包发送程序模块中,通过将处理后的数据包的长度和基地址等相应的标志位写入寄存器,来通知可重构芯片的数据通路将处理后的数据包发出。

8.一种基于可重构芯片的网络数据包的处理方法,其特征在于,通过如权利要求1‑7中任一项所述的编程方法所设计的数据包接收程序模块、数据包处理程序模块和数据包发送程序模块来分别执行数据包的接收、处理和发送。

说明书 :

基于可重构芯片的网络数据包处理的编程方法

技术领域

[0001] 本发明涉及网络数据包处理技术领域,尤其涉及一种基于可重构芯片的网络数据包处理的编程方法。

背景技术

[0002] 可重构芯片具备软件、硬件双编程的特性,硬件架构和功能随软件变化而实时动态变化,因而又被称为软件定义芯片。可重构芯片的出现打通了“应用定义软件、软件定义
芯片”进而实现“应用定义芯片”这一人们长期追求的通道,而广泛的适应性也使其成为替
代专用集成电路、可编程器件和经典处理器的有力竞争者。
[0003] 为了说明可重构芯片的独特性,例如以软件可编程性和硬件可编程性为两个轴,构建一个四象限的坐标图,具体地,参见图1,其示出了动态可重构芯片的属性分类。可以看
出,可重构芯片相比传统芯片具有不可比拟的优势。
[0004] 现有技术下,网络数据包处理的编程方法都是基于传统芯片,从而不能有效利用可重构芯片的软件、硬件双编程的特性以及“应用定义芯片”这一特点。而且,传统的网络数
据包处理的编程方法的代码结构不清晰,不方便做成一个通用的编程框架,从而导致代码
复用率低。

发明内容

[0005] 为了解决上述技术问题,本发明公开了一种基于可重构芯片的网络数据包处理的编程方法,本发明的编程方法与传统的网络数据包处理编程方法不同,本编程方法是基于
可重构芯片,专门针对可重构芯片的软件、硬件双可编程性进行了优化,能最大程度体现可
重构技术的优越性,而且本编程方法是模块化的,从而具有可重用性高、代码可读性好、可
维护性好的特点。
[0006] 为达到上述目的,本发明的技术方案提供了一种本发明的基于可重构芯片的网络数据包处理的编程方法,其按照数据包的处理逻辑分别设计以下三个程序模块:数据包接
收程序模块,用于实现数据包的接收和存储;数据包处理程序模块,用于针对数据包处理需
求设计相应的回调函数,以生成用于可重构芯片的相应配置信息,从而通过配置可重构芯
片的处理逻辑来对数据包进行处理;数据包发送程序模块,用于在数据包处理完成后进行
数据包的发送。
[0007] 进一步地,在所述数据包处理程序模块中,通过分析数据包处理需求的算法特征,进行数据流图的设计,在确定数据流图之后,针对可重构处理器的硬件特点,将数据流图映
射到可重构芯片的数据通路上,进而生成相应配置信息。
[0008] 进一步地,所述数据包接收程序模块模块包括数据包接收程序代码和数据包存储程序代码,所述数据包接收程序代码包括用于循环等待是否接收到数据包的循环函数,所
述数据包存储程序代码用于在接收到数据包后存储数据包。
[0009] 进一步地,在设计所述数据包存储程序代码时,在接收到数据包后,将接收到的数据包的数据块存储到最终要放置的存储空间,并且在为数据包预划分存储空间时预留额外
存储空间,以为后续要添加的额外数据块预留存储空间。
[0010] 进一步地,在设计所述数据包存储程序代码时,基于接收到的数据包和数据包处理需求,来为接收到的数据包预划分存储空间。
[0011] 进一步地,所述数据包存储程序代码包括至少两个不同的存储空间预划分函数,以针对不同的处理需求执行不同的存储空间预划分函数,从而针对不同的数据包处理需求
预划分相应的存储空间。
[0012] 进一步地,所述编程方法还包括:设计数据包处理需求设定程序模块,所述数据包处理需求设定程序模块用于在每次变更数据包处理需求时,进行数据包处理需求的设定,
所述数据包处理需求设定程序模块先于所述数据包接收程序模块执行,以使得在所述数据
包接收程序模块执行所述数据包存储程序代码时,基于所设定的数据包处理需求自动执行
相应的存储空间预划分函数。
[0013] 进一步地,在所述数据包处理需求设定程序模块中,通过设置相应的标识符来进行数据包处理需求的设定,所述数据包存储程序代码基于所述标识符来自动判断需要执行
的存储空间预划分函数。
[0014] 进一步地,在所述数据包发送程序模块中,通过将处理后的数据包的长度和基地址等相应的标志位写入寄存器,来通知可重构芯片的数据通路将处理后的数据包发出。
[0015] 本发明的实施方式还提供了一种基于可重构芯片的网络数据包处理方法,其通过如上所述的编程方法所设计的数据包接收程序模块、数据包处理程序模块和数据包发送程
序模块来分别执行数据包的接收、处理和发送。

附图说明

[0016] 图1是示出动态可重构芯片的属性分类的示意图;
[0017] 图2是示出可重构处理器的基本价格的示意图;
[0018] 图3是根据本发明的实施方式的编程方法的设计流程图;
[0019] 图4是示出数据包处理前后的数据结构的对比图;
[0020] 图5是示出ESP数据包格式的示意图;
[0021] 图6是根据本发明的进一步的实施方式的编程方法的设计流程图。

具体实施方式

[0022] 下面结合具体实施例对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
[0023] 参见图2,其示出了可重构处理器或可重构芯片的基本架构。与传统的指令流驱动处理器一样,可重构处理器也主要由控制单元、数据通路、存储器和输入/输出接口组成。与
指令流处理器的主要差别在于,控制单元通过配置信息而不是指令来控制数据通路的行
为,存储器当中所存储的指令也被配置信息所取代。数据通路往往由运算单元阵列
(processing element array,PEA)组成,其计算功能之所以能够被重构,主要是因为PEA内
部集成了众多基本算术运算单元(如加法器、乘法器等)和逻辑运算单元(如与、或、非、异或
等逻辑门)。控制单元可以通过配置信息来选择和组织这些运算单元,以实现特定的功能。
[0024] 在本发明的实施方式中,为了能够有效利用可重构芯片或处理器的软件、硬件双编程的特性,提出了一种基于可重构芯片的网络数据包处理的编程方法。如图3所示,在本
发明的实施方式中,本编程方法按照网络数据包的处理逻辑分别设计以下三个程序模块:
[0025] (1)数据包接收程序模块,用于实现数据包的接收和存储。
[0026] (2)数据包处理程序模块,用于针对网络数据包的处理需求设计相应的回调函数,以生成用于可重构芯片的相应配置信息,从而通过配置可重构芯片的处理逻辑来对上述
(1)中所接收的数据包进行处理。该模块部分是一个通用的回调函数,由用户通过可重构芯
片技术实现,根据不同的应用要求,添加不同的处理逻辑,由于使用了硬件实现,降低了负
载。
[0027] (3)数据包发送程序模块,用于在数据包处理完成后完成数据包的发送。
[0028] 在一般的具体开发环境中,上述程序模块(1)和(3)一旦开发完成,就基本不用再变。每次变更不同需求的时候,只需要变更上述程序模块(2)中的回调函数即可。
[0029] 这样就形成了一个通用的开发框架和编程方法,特别有利于代码的复用,且适用于可重构芯片中使用。
[0030] 其中,在(2)数据包处理程序模块中,通过分析数据包处理需求的算法特征,进行数据流图的设计,在确定数据流图之后,针对可重构处理器的硬件特点,将数据流图映射到
可重构处理芯片的数据通路上,进而生成相应配置信息。
[0031] 关于(1)数据包接收程序模块,其可以包括数据包接收程序代码和数据包存储程序代码,所述数据包接收程序代码为用于循环等待是否接收到数据包的循环函数,所述数
据包存储程序代码用于在接收到数据包后存储数据包。其中,用于存储数据包的空间既可
以是可重构芯片中的存储空间,也可以是可重构芯片可以访问到的外部的其他器件的存储
空间。
[0032] 在(3)数据包发送程序模块中,通过将处理后的数据包的长度和基地址等相应的标志位写入寄存器,来通知可重构芯片的数据通路将处理后的数据包发出。
[0033] 由于在数据包的处理过程中,往往涉及大量的数据拷贝,从而影响实际的处理性能,而且网络数据包处理通常涉及变长协议处理。针对此,在本发明的进一步的实施方式
中,在上述(1)数据包接收程序模块的数据包存储程序代码中,当接收到数据包后,根据处
理后数据包的特点,对数据空间进行预切分,将数据包的数据块提前存储到最终要存储的
内存空间中,同时为要添加的新的数据块预留下空间,从而保证在处理过程中,不再需要多
余的拷贝工作。
[0034] 为了便于理解,下面以将普通IP包封装成ESP包为例进行说明。参见图4,其示出了数据包处理前后的数据结构的对比图。从图4可以看出,在同一段同内存中,将数据包进行
了加密操作。然后在加密内存前后,添加了两个新的数据段,分别用于存放ESP包的其他部
分。关于ESP的详细介绍和相关原理例如可以参见RFC 2406‑IP Encapsulating Security 
Payload(ESP)。
[0035] 在上述实施方式中,并没有涉及原数据包的拷贝工作,而是在将原始数据包的数据块拷贝到内存时,就预先分配好了数据空间,以为插入新数据块作好准备。这样就以零拷
贝的方式,完成了一个标准ESP包的封装。
[0036] 因此,本发明的编程方法还具有如下优势:直接在数据包原有内存段上进行处理,从而尽量减少了内存处理过程中的拷贝工作。
[0037] 由于在数据包的实际处理过程中,接收的原始数据包类型可能不同(例如,IPV4包或者IPV6包),并且处理需求也会发生变更(例如,ESP协议处理需求、NVGRE、VXLAN协议处理
需求等),导致数据包处理前后额外插入的数据段的大小(或长度)以及插入位置也会不同。
[0038] 为了便于理解,以将IPV4包和IPV6包分别封装成ESP包为例。参见图5,其分别示出了传输模式和隧道模式下的ESP数据包格式。其中,图5的(a)示出了原始IPv4包的数据包格
式;图5的(b)示出了将IPv4包封装成传输模式的ESP包后的数据包格式;图5的(c)示出了将
IPv4包封装成隧道模式的ESP包后的数据包格式;图5的(d)示出了原始IPv6包的数据包格
式;图5的(e)示出了将IPv6包封装成传输模式的ESP包后的数据包格式;图5的(f)示出了将
IPv6包封装成隧道模式的ESP包后的数据包格式。将可以看出,数据包处理前后插入的额外
数据段的长度以及插入位置取决于所接收的原始数据包以及具体的处理需求。
[0039] 为了满足不同数据包以及处理需求对存储空间的要求,在(1)数据包接收程序模块的数据包存储程序代码中,在接收到数据包后,基于所接收到的数据包以及具体的处理
需求来预先划分冗余存储空间,以为额外添加的数据段预留存储空间。
[0040] 由于针对不同的处理需求,需要预划分的存储空间也会不同,导致每次变更处理需求时,都需要针对具体的处理需求进行程序代码的改写,为了减少后续代码修改工作量,
可以在数据包存储程序代码中,预先设计至少两个不同的存储空间预划分函数(例如,针对
ESP协议处理需求的存储空间预划分函数、针对NVGRE协议处理需求的存储空间预划分函数
等),以针对不同的处理需求执行不同的存储空间预划分函数,从而满足不同处理需求对存
储空间的划分需求。在该实施方式中,在每次变更处理需求时,可以通过人工选择执行相应
的存储空间预划分函数,从而省去了重复编写或修改代码工作量。当然可以理解的,预先设
计的存储空间预划分函数的类型和数量并不受具体限制。
[0041] 在进一步的实施方式中,为了保证程序代码结构清晰,以便于代码的复用,参见图6,本发明的编程方法还可以包括:设计数据包处理需求设定程序模块,所述数据包处理需
求设定程序模块用于在每次变更数据包处理需求时,进行数据包处理需求的设定,所述数
据包处理需求设定程序模块先于所述数据包接收程序模块执行,以使得在所述数据包接收
程序模块执行所述数据包存储程序代码时,基于所设定的处理需求自动执行相应的存储空
间预划分函数。
[0042] 具体地,在数据包处理需求设定程序模块中,可以通过设置相应标识符来设定处理需求。例如,对于ESP协议处理需求,可以设定标识符A=1;对于NVGRE协议处理需求,可以
设定标识符A=2;对于VXLAN协议处理需求,可以设定标识符A=3,以此类推。当然可以理解
的,对于ESP协议处理需求中的传输模式,也可以设定标识符A=1.1,对于ESP协议处理需求
中的传输模式,可以设定标识符A=1.2。需要注意的,处理需求的类型和数量并不受具体限
制,可以根据实际需求灵活设置。
[0043] 由此,在后续执行数据包存储程序代码时,在为接收到的数据包预划分存储空间时,首先识别在数据包处理需求设定程序模块中设定的标识符,从而根据标识符,自动判断
需要执行的存储空间预划分函数,以进行数据包存储空间的划分。例如,当判断标识符A=
1.1时,可以执行存储空间预划分函数Alldivide_memory,以按照传输模式下的ESP数据包
格式来为接收到的数据包预划分存储空间;当断标识符A=2时,可以执行存储空间预划分
函数A2divide_memory,以按照NVGRE数据包格式来为接收到的数据包预划分存储空间。
[0044] 通过上述实施方式,由于单独增加了处理需求设定程序模块,从而每次变更不同处理需求时,仅需要对该模块中的标识符进行变更即可,而无需修改其他程序代码,从而大
大提高了程序代码复用率。
[0045] 与传统的网络数据包处理编程方法不同,本发明的编程方法是基于可重构芯片,专门针对可重构芯片的软件、硬件双可编程性进行了优化,从而能最大程度体现可重构技
术的优越性。
[0046] 本发明提供了一种模块化的编程方法,由于本编程方法是模块化的,有可重用性高,代码可读性好,可维护性好的特点。
[0047] 另外,本发明的编程方法为数据包零拷贝,直接在原数据包的内存上进行处理,能够极大程度减少数据的拷贝的工作量。
[0048] 本发明是基于可重构芯片的,它的优点和功能主要有:
[0049] 1.本发明是基于可重构芯片的,能充分利用可重构芯片的软件、硬件双编程的特性,实现“应用定义芯片”的目的;
[0050] 2.接收、发送数据包完全由硬件实现,同时数据包处理由可重构芯片负责,降低了负载,从而提高了处理的性能;
[0051] 3.本发明在处理过程中对原数据是零拷贝的,可以在接收到数据包时,进行数据包插入位置的切分,从而直接在原数据包的内存空间上进行处理,不涉及过多的数据拷贝,
能够很好地确保处理的性能;
[0052] 4.通过编程框架及接收包的插入位置切分技术,特别适合数据包处理前后变长协议的快速编程,是一个通用的框架,代码结构清晰,代码复用率高。
[0053] 另外,本发明的实施方式还提供了一种基于可重构芯片的网络数据包处理方法,其通过如上所述的编程方法所设计的数据包接收程序模块、数据包处理程序模块和数据包
发送程序模块来分别执行数据包的接收、处理和发送。
[0054] 以上所述的仅是本发明的优选实施方式,应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出若干变形和改进,这些都属于本发明
的保护范围。