CN102223285B - 处理数据报文的方法及网络节点 - Google Patents
处理数据报文的方法及网络节点 Download PDFInfo
- Publication number
- CN102223285B CN102223285B CN201010148050.6A CN201010148050A CN102223285B CN 102223285 B CN102223285 B CN 102223285B CN 201010148050 A CN201010148050 A CN 201010148050A CN 102223285 B CN102223285 B CN 102223285B
- Authority
- CN
- China
- Prior art keywords
- handle
- buffer
- message
- data
- buffer memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种处理数据报文的方法及网络节点,属于通信领域。方法包括:获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;根据首个缓存句柄中的缓存地址及约定协议确定的数据报文的报文头缓存地址及报文头数据长度,对数据报文进行报文头的解封装或封装,并根据解封装或封装后的数据报文的缓存地址和数据长度更新报文句柄。本发明通过采用报文句柄的方式对数据报文进行解封装或封装处理,使处理报文的性能与报文长度无关;另外,充分利用预留的内存区域封装报文头,降低缓存单元的申请频率,从而有效提高数据报文的处理效率,提高系统吞吐性能。
Description
技术领域
本发明涉及通信领域,特别涉及一种处理数据报文的方法及网络节点。
背景技术
随着通信系统的日益复杂,通信网络越来越庞大,业务种类也越来越多。网络节点常常需要完成大量的数据报文的处理工作,特别是在对不同处理层的接口处理上,网络节点常常需要对数据报文进行封装、解封装报文头处理。且在封装、解封装过程中,存在拷贝、挪移等内存操作,因而容易引起高速CPU(Central Processing Unit,中央处理单元)与低速内存设备之间的速度匹配失衡问题。
为了解决高速CPU与低速内存设备之间的速度匹配失衡问题,现有技术采取缓存机制,预先将可能用到的一块内存数据读入高速缓存中,当CPU访问某块内存数据时,先从高速缓存中查找,如果高速缓存命中,则直接使用高速缓存的数据,如果高速缓存未命中,再去访问内存设备,从而通过该种方式降低对低速内存设备的访问频率,进而隐藏速度匹配失衡的问题。
在实现本发明的过程中,发明人发现现有技术至少存在以下缺点:
由于高速缓存未命中时,CPU仍然需要访问低速内存设备,针对该种情况,与CPU直接访问内存设备相比,现有技术增加了查找高速缓存的过程,因而导致处理数据报文的时延变长;另外,即使高速缓存命中,同样存在对数据报文进行拷贝等操作,由于存在数据报文的拷贝,必将导致短的数据报文处理时延短,长的数据报文处理时延长,处理时延与报文长度存在的这种关联关系,使网络节点处理数据报文的性能指标(即:每秒处理的报文数)将随着报文长度的增加而降低,对系统的吞吐能力造成影响。
发明内容
为了使处理数据报文的性能与报文长度无关,减少处理数据报文的时延,进而提升系统的吞吐能力,本发明实施例提供了一种处理数据报文的方法及网络节点。所述技术方案如下:
一方面,提供了一种处理数据报文的方法,所述方法包括:
获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址及约定协议确定所述数据报文的报文头缓存地址及报文头数据长度;
根据所述报文头缓存地址及报文头数据长度,对所述数据报文的报文头解封装,并根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
另一方面,还提供了一种处理数据报文的网络节点,所述网络节点包括:
获取模块,用于获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块,用于解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址及约定协议确定所述数据报文的报文头缓存地址及报文头数据长度;
解封装模块,用于根据所述报文头缓存地址及报文头数据长度,对所述数据报文的报文头解封装;
更新模块,用于根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
提供了一种处理数据报文的方法,所述方法包括:
获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址确定预留的内存区域;
根据所述预留的内存区域对所述数据报文封装报文头,并根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
还提供了一种处理数据报文的网络节点,所述网络节点包括:
获取模块,用于获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块,用于解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址确定预留的内存区域;
封装模块,用于根据所述预留的内存区域对所述数据报文封装报文头;
更新模块,用于根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
本发明实施例提供的技术方案的有益效果是:
通过采用报文句柄的方式实现对数据报文进行解封装或封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,进而有效提高数据报文的处理效率,并可提高系统的吞吐性能;另外,通过充分利用预留的内存区域进行报文头封装,还可以降低缓存单元的申请频率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的处理数据报文的方法流程图;
图2是本发明实施例二提供的处理数据报文的方法流程图;
图3是本发明实施例二提供的缓存空间布局示意图;
图4是本发明实施例二提供的缓存句柄结构示意图;
图5是本发明实施例二提供的报文句柄结构示意图;
图6是本发明实施例二提供的数据报文解封装示意图;
图7是本发明实施例三提供的处理数据报文的网络节点结构示意图;
图8是本发明实施例三提供的处理数据报文的另一种网络节点结构示意图;
图9是本发明实施例三提供的更新模块结构示意图;
图10是本发明实施例四提供的处理数据报文的方法流程图;
图11是本发明实施例五提供的处理数据报文的方法流程图;
图12是本发明实施例五提供的数据报文封装示意图;
图13是本发明实施例六提供的处理数据报文的网络节点结构示意图;
图14是本发明实施例六提供的另一种处理数据报文的网络节点结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
参见图1,本实施例提供了一种处理数据报文的方法,该方法流程具体如下:
101:获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
102:解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址及约定协议确定数据报文的报文头缓存地址及报文头数据长度;
103:根据报文头缓存地址及报文头数据长度,对数据报文的报文头解封装,并根据解封装后的数据报文的缓存地址和数据长度更新报文句柄。
本实施例提供的方法,通过采用报文句柄的方式实现对数据报文进行解封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,进而有效提高数据报文的处理效率,提高系统吞吐性能。
实施例二
本实施例作为对上述实施例一的解释说明,提供了一种处理数据报文的方法,且为了避免在对数据报文解封装时进行重复拷贝,本实施例同样采取了将数据报文写入缓存单元,并构造报文句柄的方式,通过传递报文句柄实现对数据报文进行解封装处理。参见图2,方法流程具体如下:
201:接收数据报文,并将数据报文写入预先提取的一至多个缓存单元中;
针对该步骤,为了能够预先提取缓存单元,可以在初始化时配置一个专属的空闲缓存链表,该空闲缓存链表中的每个节点均包含一个缓存地址,每个缓存地址均对应一个长度固定的缓存单元。当接收到数据报文后,通过专属的空闲缓存链表预先提取缓存单元,之后再将数据报文写入该预先提取的缓存单元中,则每个缓存单元中均缓存一个数据报文片段。
提取的缓存单元的个数可根据数据报文的数据长度,以及缓存单元的字节长度确定,例如,数据报文的数据长度为2048字节,而每个缓存单元的字节长度为1056字节,则由此可以确定需要预先提取2个缓存单元,用于缓存该数据报文。
本实施例不对预先提取的缓存单元的个数,以及缓存单元的字节长度进行限定。对于缓存单元的字节长度,为了均衡使用各个高速缓存行,提高高速缓存的命中率,本实施例对缓存单元的字节长度N进行了特殊处理,N=(2^n+m),n≥11,m为高速缓存行的大小,以现有的高速缓存行为例,此处m一般为32字节,实际应用时还可以调整m的值,本实施例不对m的具体数值进行限定。所有缓存单元构成的缓存空间可如图3所示,每个缓存单元的起始地址均满足高速缓存行大小的整数倍,且同一缓存区域内的相邻缓存单元在地址空间上是连续存放的,即相邻两个缓存单元之间没有额外的填充或开销。
需要说明的是,同样为了能够提高高速缓存的命中率,实施例一及后续实施例涉及到的缓存单元的字节长度均采用本实施例提供的字节长度N,后续不再赘述。
202:根据每个缓存单元的缓存地址构造缓存句柄,得到数据报文的报文句柄;
具体地,根据每个缓存单元的缓存地址构造缓存句柄时,本实施例不对缓存句柄的具体内容及格式进行限定,每个缓存句柄应至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值,还可以包括Own字段、Resv字段和EOP字段,各字段对应的宽度可以根据实际情况进行调整,本实施例对此不做具体限定。
如图4所示的缓存句柄结构示意图,其中,Addr字段和Len字段分别表示与该缓存句柄对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值。当报文句柄包含多个缓存句柄时,为了区分不同的报文句柄,每个缓存句柄中还包括EOP字段,用于标识该缓存句柄是否为报文句柄中的最后一个缓存句柄。例如,仅当缓存句柄为所在报文句柄的最后一个缓存句柄时,EOP字段的值为1,其余缓存句柄的EOP字段的值均为0。本实施例不对EOP字段的取值所对应的结果进行限定,例如,还可以将报文句柄的最后一个缓存句柄中的EOP字段设为0,其余缓存句柄的EOP字段设为1。另外,图4所示的缓存句柄中还包括了用于标识该缓存句柄对应的缓存单元所有者的Own字段,Own字段不同的两个缓存句柄对应的缓存单元的所有者不同。除此之外,缓存句柄还包括了Resv字段,该字段可以作为预留字段,在实际应用时,通过该字段对缓存句柄的内容进行扩展。
根据每个缓存单元的缓存地址构造缓存句柄之后,即可得到包含至少一个缓存句柄的报文句柄,本实施例以包含4个缓存句柄的报文句柄为例,则报文句柄结构如图5所示。
203:获取数据报文的报文句柄,解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址及约定协议确定数据报文的报文头缓存地址及报文头数据长度;
针对该步骤,获取到的数据报文的报文句柄仍以图5所示的报文句柄为例,由于数据报文的解封装处理都集中在报文头部,而报文头被存储在首个缓存句柄对应的首个缓存单元中,则解封装处理需要针对报文句柄的首个缓存句柄(如图5所示的首个缓存句柄0),报文头缓存地址应该与首个缓存句柄中的缓存地址相同,因此,通过解析报文句柄的首个缓存句柄,得到该首个缓存句柄的缓存地址,即可得到报文头缓存地址。另外,通过约定协议可以确定报文头数据长度,约定协议不同,报文头数据长度也将不同,本实施例不对具体的约定协议进行限定。
204:根据报文头缓存地址及报文头数据长度,对数据报文的报文头解封装,并根据解封装后的数据报文的缓存地址和数据长度更新报文句柄;
具体地,根据报文头缓存地址即可查找到报文头的缓存位置,并按照报文头数据长度对数据报文的报文头进行解封装,解封装的方式可通过现有技术实现,本实施例对此不做赘述。
以报文头缓存在一个缓存单元中为例,解封装前后的示意图可如图6所示,由于数据报文被剥头,缓存报文头的缓存单元中的数据将发生变化:解封装前,缓存单元中缓存的数据报文片段包括L(n-1)层的报文头和L(n)层的有效数据;在对报文头进行解封装之后,该缓存单元中缓存的数据报文片段仅剩下L(n)层的有效数据,而该缓存单元的空闲区域则相应增大。如图6所示,缓存单元所缓存数据的缓存地址由Addr A变成了Addr A`,数据长度也相应由Len B变成了Len B`,因此,与该发生变化的缓存单元相对应的缓存句柄需要更新其缓存地址及数据长度值,而缓存句柄的更新也就意味着该数据报文的报文句柄也将随之更新,也就是说,需要根据解封装后的数据报文的缓存地址和数据长度,确定被解封装的报文头所在缓存单元当前所缓存的数据报文片段的缓存地址和数据长度,并根据确定的缓存地址和数据长度更新该被解封装的报文头所在缓存单元对应的缓存句柄。由于被解封装的报文头可以缓存在一至多个缓存单元中,则更新报文句柄的过程可根据以下两种情况采取不同的方式:
一、被解封装的报文头全部缓存在首个缓存单元中:
针对该种情况,报文头被解封装后,仅有缓存报文头的首个缓存单元内的数据发生了变化,因此,仅需要更新被解封装的报文头所在首个缓存单元所对应的首个缓存句柄,将首个缓存单元的缓存地址及数据长度值进行修改即可;
二、被解封装的报文头被缓存在多个缓存单元中:
针对该种情况,报文头被解封装后,所有缓存报文头的缓存单元都将发生变化,则需要更新被解封装的报文头所在缓存单元相对应的缓存句柄,例如,首个缓存单元仅缓存了报文头的前半部分,而后半部分缓存在下一个缓存单元中,则报文头被解封装之后,首个缓存句柄及下一个缓存句柄中的缓存地址及数据长度值都将被更新。
无论是上述哪种情况,当更新后的报文句柄中存在数据长度值为零的缓存句柄时,为了节省缓存资源,都需要将数据长度值为零的缓存句柄所对应的缓存单元释放,并将报文句柄中的后续缓存句柄逐个前移。
对于数据长度值为零的缓存句柄,由于其缓存地址在解封装前后发生了变化,因而将不是与其对应的缓存单元的起始地址,则在释放该数据长度值为零的缓存句柄对应的缓存单元时,需要根据该数据长度值为零的缓存句柄中当前的缓存地址换算对应的缓存单元的起始地址,根据起始地址释放数据长度值为零的缓存句柄对应的缓存单元。本实施例不对具体的换算方式进行限定,仍以图3所示的缓存空间示意图为例,如果所有缓存单元构成的缓存空间的起始地址为A0,数据长度值为零的缓存句柄当前的缓存地址为Ax,则该数据长度值为零的缓存句柄对应的缓存单元的其中,N为该待释放的缓存单元的字节长度。
需要说明的是,步骤203至步骤204仅是对数据报文进行一次解封装处理,如果还需要继续对其进行解封装,则可以重复执行步骤203和步骤204,直至解封装完毕。
本实施例提供的方法,通过采用报文句柄的方式实现对数据报文进行解封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,并在缓存单元的设计上考虑了高速缓存命中率的问题,从而能够有效提高数据报文的处理效率,提高系统吞吐性能。
实施例三
参见图7,本实施例提供了一种处理数据报文的网络节点,该网络节点包括:
获取模块701,用于获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块702,用于解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址及约定协议确定数据报文的报文头缓存地址及报文头数据长度;
解封装模块703,用于根据报文头缓存地址及报文头数据长度,对数据报文的报文头解封装;
更新模块704,用于根据解封装后的数据报文的缓存地址和数据长度更新报文句柄。
参见图8,该网络节点还包括:
接收模块705,用于接收数据报文;
句柄构造模块706,用于将数据报文写入预先提取的一至多个缓存单元中,每个缓存单元缓存一个数据报文片段;根据每个缓存单元的缓存地址构造缓存句柄,得到数据报文的报文句柄。
进一步地,参见图9,更新模块704,具体包括:
更新单元704a,用于根据解封装后的数据报文的缓存地址和数据长度,确定被解封装的报文头所在缓存单元当前所缓存的数据报文片段的缓存地址和数据长度,并根据确定的缓存地址和数据长度更新被解封装的报文头所在缓存单元对应的缓存句柄;
释放单元704b,用于当更新后的报文句柄中存在数据长度值为零的缓存句柄时,将数据长度值为零的缓存句柄所对应的缓存单元释放;
调整单元704c,用于在将数据长度值为零的缓存句柄所对应的缓存单元释放后,将报文句柄中的后续缓存句柄逐个前移。
其中,释放单元704b,具体用于根据数据长度值为零的缓存句柄中当前的缓存地址换算对应的缓存单元的起始地址,根据起始地址释放数据长度值为零的缓存句柄所对应的缓存单元。
本实施例提供的网络节点,通过采用报文句柄的方式实现对数据报文进行解封装处理,使整个处理过程中实现了零拷贝,且处理报文的性能与报文长度无关,并在缓存单元的设计上考虑了高速缓存命中率问题,不仅可以有效提高数据报文的处理效率,还能有效提高吞吐性能。
实施例四
参见图10,本实施例提供了一种处理数据报文的方法,该方法流程具体如下:
1001:获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
1002:解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址确定预留的内存区域;
1003:根据预留的内存区域对数据报文封装报文头,并根据封装后的数据报文的缓存地址和数据长度更新报文句柄。
本实施例提供的方法,通过采用报文句柄的方式实现对数据报文进行封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,从而有效提高数据报文的处理效率,提高系统吞吐性能;另外,通过充分利用预留的内存区域进行报文头封装,还可以有效降低缓存单元的申请频率。
实施例五
本实施例作为对上述实施例四的解释说明,提供了一种处理数据报文的方法,且为了避免在对数据报文封装时进行重复拷贝,本实施例同样采取了通过报文句柄实现对数据报文进行封装处理的方式。参见图11,本实施例提供的方法流程具体如下:
1101:获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
针对该步骤,获取数据报文的报文句柄时,本实施例不对具体获取方式进行限定,如果该数据报文是经过上述实施例一和实施例二提供的方法进行解封装之后得到的数据报文,则获取到的报文句柄应为上述实施例一和实施例二更新后的报文句柄。
除此之外,该数据报文的报文句柄还可以是本实施例重新构造的,构造方式同实施例二中描述的一样,也需要将该数据报文写入预先提取的一至多个缓存单元中,与实施例二中缓存单元有所不同的是,此时提取的缓存单元占用的是内存空间,也就是内存中的空闲缓存链表对应的缓存单元,因此,该种方式构造的缓存单元与解封装前构造的缓存单元的所有者不同,两个缓存单元对应的缓存句柄中的Own字段的值不同。
无论是通过哪种方式获取数据报文的报文句柄,该报文句柄的首个缓存句柄对应的缓存单元均预留一定的内存空间,以便后续添加封装的报文头,从而可以降低缓存的申请频率。
1102:解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址确定预留的内存区域;
其中,由于每个缓存单元的字节长度是固定的,且在获取数据报文的报文句柄时,首个缓存句柄对应的缓存单元预留了一定的内存空间,则在解析报文句柄的首个缓存句柄,得到首个缓存句柄中的缓存地址之后,根据该缓存地址及首个缓存句柄所对应的缓存单元的字节长度,即可确定预留的内存区域。
1103:根据预留的内存区域对数据报文封装报文头,并根据封装后的数据报文的缓存地址和数据长度更新报文句柄;
具体地,根据预留的内存区域对数据报文封装报文头时,可分为以下两种情况:
一、当预留的内存区域足以容纳封装的报文头时,则将报文头封装到预留的内存区域内;
针对该种情况,仅需将报文头封装在首个缓存单元中,则根据封装后的数据报文的缓存地址和数据长度更新报文句柄,具体包括:根据封装后的数据报文的缓存地址及数据长度,更新报文句柄的首个缓存句柄中的缓存地址和数据长度值。封装前后的示意图可如图12所示,封装前,缓存单元所缓存的数据报文片段仅包括L(n)层的有效数据;封装完报文头后,该缓存单元所缓存的数据报文片段除了包括L(n)层的有效数据,还包括封装的L(n)层报文头,则预留的内存区域也相应减少,即图12中的空闲区。缓存单元所缓存数据的缓存地址也由Addr X变成了Addr X`,数据长度也相应由Len Y变成了Len Y`,因此,与该缓存单元相对应的缓存句柄中的缓存地址及数据长度值需要根据X`和Y`进行更新。
二、当预留的内存区域不足以容纳封装的报文头时,则申请一个新的缓存单元,并将封装的报文头从后向前写入新的缓存单元中;或是将部分报文头数据写入预留的内存区域之后,再申请一个新的缓存单元,将剩余的报文头数据从后向前写入新的缓存单元中;本实施例不对该种情况下写入报文头的方式进行限定。
针对该种情况,无论采取哪种写入报文头的方式,根据封装后的数据报文的缓存地址和数据长度更新报文句柄,具体包括:根据新的缓存单元的地址构造一个新的缓存句柄,并将新的缓存句柄作为报文句柄的首个缓存句柄,原有的缓存句柄逐个后移。
需要说明的是,上述步骤1101至步骤1103仅以对数据报文进行一次封装处理进行了举例说明,如果还需要继续对其进行封装,则可以重复执行步骤1101至步骤1103,直至封装完毕,通过下面的步骤1104将封装好的数据报文发送。
1104:将封装后的数据报文发送,并释放更新后的报文句柄中各个缓存句柄对应的缓存单元。
针对该步骤,同上述实施例二中释放缓存单元一样,此处释放缓存单元时,仍然需要根据更新后的报文句柄中各个缓存句柄当前的缓存地址字段换算对应的缓存单元的起始地址,根据起始地址释放各个缓存句柄对应的缓存单元,此处不再赘述。
综上所述,本实施例提供的方法,通过采用报文句柄的方式实现对数据报文进行封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,并在缓存单元的设计上考虑高速缓存命中率问题,从而有效提高数据报文的处理效率,提高系统吞吐性能;另外,通过充分利用预留的内存区域进行报文头封装,还可以有效降低缓存单元的申请频率。
实施例六
参见图13,本实施例提供了一种处理数据报文的网络节点,该网络节点包括:
获取模块1301,用于获取数据报文的报文句柄,报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块1302,用于解析报文句柄的首个缓存句柄,根据首个缓存句柄中的缓存地址确定预留的内存区域;
封装模块1303,用于根据预留的内存区域对数据报文封装报文头;
更新模块1304,用于根据封装后的数据报文的缓存地址和数据长度更新报文句柄。
其中,封装模块1303,具体用于在预留的内存区域足以容纳封装的报文头时,将报文头封装到预留的内存区域内;
相应地,更新模块1304,具体用于根据封装后的数据报文的缓存地址及数据长度更新报文句柄的首个报文句柄中的缓存地址和数据长度值。
可选地,封装模块1303,具体用于在预留的内存区域不足以容纳封装的报文头时,申请一个新的缓存单元,并将封装的报文头从后向前写入新的缓存单元中;
相应地,更新模块1304,具体用于根据新的缓存单元的地址构造一个新的缓存句柄,并将新的缓存句柄作为报文句柄的首个缓存句柄,原有的缓存句柄逐个后移。
参见图14,该网络节点还包括:
发送模块1305,用于将封装后的数据报文发送;
释放模块1306,用于在将封装后的数据报文发送后,释放更新后的报文句柄中各个缓存句柄对应的缓存单元。
具体地,释放模块1306,具体用于在将封装后的数据报文发送后,根据更新后的报文句柄中各个缓存句柄当前的缓存地址字段换算对应的缓存单元的起始地址,根据起始地址释放各个缓存句柄对应的缓存单元。
本实施例提供的网络节点,通过采用报文句柄的方式实现对数据报文进行封装处理,使处理数据报文的性能与报文长度无关,且无需重复拷贝数据报文,并在缓存单元的设计上考虑高速缓存命中率问题,从而有效提高数据报文的处理效率,提高系统吞吐性能;另外,通过充分利用预留的内存区域进行报文头封装,还可以有效降低缓存单元的申请频率。
需要说明的是:上述实施例提供的处理数据报文的网络节点在处理数据报文时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将网络节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的处理数据报文的网络节点与处理数据报文的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本发明实施例中的全部或部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (20)
1.一种处理数据报文的方法,其特征在于,所述方法包括:
获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址及约定协议确定所述数据报文的报文头缓存地址及报文头数据长度;
根据所述报文头缓存地址及报文头数据长度,对所述数据报文的报文头解封装,并根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄;其中,所述根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄,具体包括:根据解封装后的数据报文的缓存地址和数据长度,确定被解封装的报文头所在缓存单元当前所缓存的数据报文片段的缓存地址和数据长度,并根据确定的所述缓存地址和数据长度更新所述被解封装的报文头所在缓存单元对应的缓存句柄。
2.根据权利要求1所述的方法,其特征在于,所述获取数据报文的报文句柄之前,还包括:
接收数据报文,并将所述数据报文写入预先提取的一至多个缓存单元中,每个缓存单元缓存一个数据报文片段;
根据每个缓存单元的缓存地址构造缓存句柄,得到所述数据报文的报文句柄。
3.根据权利要求1所述的方法,其特征在于,所述根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄,具体还包括:
当更新后的报文句柄中存在数据长度值为零的缓存句柄时,将所述数据长度值为零的缓存句柄所对应的缓存单元释放,并将所述报文句柄中的后续缓存句柄逐个前移。
4.根据权利要求3所述的方法,其特征在于,所述将所述数据长度值为零的缓存句柄所对应的缓存单元释放,具体包括:
根据所述数据长度值为零的缓存句柄中当前的缓存地址换算对应的缓存单元的起始地址,根据所述起始地址释放所述数据长度值为零的缓存句柄所对应的缓存单元。
5.根据权利要求1至4任一权利要求所述的方法,其特征在于,所述缓存单元的字节长度N=(2^n+m),其中,n≥11,m为高速缓存行的大小。
6.一种处理数据报文的网络节点,其特征在于,所述网络节点包括:
获取模块,用于获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块,用于解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址及约定协议确定所述数据报文的报文头缓存地址及报文头数据长度;
解封装模块,用于根据所述报文头缓存地址及报文头数据长度,对所述数据报文的报文头解封装;
更新模块,用于根据解封装后的数据报文的缓存地址和数据长度更新所述报文句柄;其中,所述更新模块,具体包括:更新单元,用于根据解封装后的数据报文的缓存地址和数据长度,确定被解封装的报文头所在缓存单元当前所缓存的数据报文片段的缓存地址和数据长度,并根据确定的所述缓存地址和数据长度更新所述被解封装的报文头所在缓存单元对应的缓存句柄。
7.根据权利要求6所述的网络节点,其特征在于,所述网络节点,还包括:
接收模块,用于接收数据报文;
句柄构造模块,用于将所述数据报文写入预先提取的一至多个缓存单元中,每个缓存单元缓存一个数据报文片段;根据每个缓存单元的缓存地址构造缓存句柄,得到所述数据报文的报文句柄。
8.根据权利要求6所述的网络节点,其特征在于,所述更新模块,具体还包括:
释放单元,用于当更新后的报文句柄中存在数据长度值为零的缓存句柄时,将所述数据长度值为零的缓存句柄所对应的缓存单元释放;
调整单元,用于在将所述数据长度值为零的缓存句柄所对应的缓存单元释放后,将所述报文句柄中的后续缓存句柄逐个前移。
9.根据权利要求8所述的网络节点,其特征在于,所述释放单元,具体用于根据所述数据长度值为零的缓存句柄中当前的缓存地址换算对应的缓存单元的起始地址,根据所述起始地址释放所述数据长度值为零的缓存句柄所对应的缓存单元。
10.一种处理数据报文的方法,其特征在于,所述方法包括:
获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址确定预留的内存区域;
根据所述预留的内存区域对所述数据报文封装报文头,并根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
11.根据权利要求10所述的方法,其特征在于,所述根据所述预留的内存区域对所述数据报文封装报文头,具体包括:
所述预留的内存区域足以容纳封装的报文头时,则将所述报文头封装到所述预留的内存区域内;
相应地,所述根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄,具体包括:
根据封装后的数据报文的缓存地址及数据长度,更新所述报文句柄的首个缓存句柄中的缓存地址和数据长度值。
12.根据权利要求10所述的方法,其特征在于,所述根据所述预留的内存区域对所述数据报文封装报文头,具体包括:
所述预留的内存区域不足以容纳封装的报文头时,则申请一个新的缓存单元,并将所述封装的报文头从后向前写入所述新的缓存单元中;
相应地,所述根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄,具体包括:
根据所述新的缓存单元的地址构造一个新的缓存句柄,并将所述新的缓存句柄作为所述报文句柄的首个缓存句柄,原有的缓存句柄逐个后移。
13.根据权利要求10所述的方法,其特征在于,所述根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄之后,还包括:
将封装后的数据报文发送,并释放更新后的报文句柄中各个缓存句柄对应的缓存单元。
14.根据权利要求13所述的方法,其特征在于,所述释放更新后的报文句柄中各个缓存句柄对应的缓存单元,具体包括:
根据更新后的报文句柄中各个缓存句柄当前的缓存地址字段换算对应的缓存单元的起始地址,根据所述起始地址释放各个缓存句柄对应的缓存单元。
15.根据权利要求10至14任一权利要求所述的方法,其特征在于,所述缓存单元的字节长度N=(2^n+m),其中,n≥11,m为高速缓存行的大小。
16.一种处理数据报文的网络节点,其特征在于,所述网络节点包括:
获取模块,用于获取数据报文的报文句柄,所述报文句柄至少包含一个缓存句柄,每个缓存句柄对应一个缓存数据报文片段的缓存单元,且所述每个缓存句柄中至少包括与其对应的缓存单元所缓存的数据报文片段的缓存地址和数据长度值;
解析模块,用于解析所述报文句柄的首个缓存句柄,根据所述首个缓存句柄中的缓存地址确定预留的内存区域;
封装模块,用于根据所述预留的内存区域对所述数据报文封装报文头;
更新模块,用于根据封装后的数据报文的缓存地址和数据长度更新所述报文句柄。
17.根据权利要求16所述的网络节点,其特征在于,所述封装模块,具体用于在所述预留的内存区域足以容纳封装的报文头时,将所述报文头封装到所述预留的内存区域内;
相应地,所述更新模块,具体用于根据封装后的数据报文的缓存地址及数据长度更新所述报文句柄的首个报文句柄中的缓存地址和数据长度值。
18.根据权利要求16所述的网络节点,其特征在于,所述封装模块,具体用于在所述预留的内存区域不足以容纳封装的报文头时,申请一个新的缓存单元,并将所述封装的报文头从后向前写入所述新的缓存单元中;
相应地,所述更新模块,具体用于根据所述新的缓存单元的地址构造一个新的缓存句柄,并将所述新的缓存句柄作为所述报文句柄的首个缓存句柄,原有的缓存句柄逐个后移。
19.根据权利要求16所述的网络节点,其特征在于,所述网络节点,还包括:
发送模块,用于将封装后的数据报文发送;
释放模块,用于在将所述封装后的数据报文发送后,释放更新后的报文句柄中各个缓存句柄对应的缓存单元。
20.根据权利要求19所述的网络节点,其特征在于,所述释放模块,具体用于在将所述封装后的数据报文发送后,根据更新后的报文句柄中各个缓存句柄当前的缓存地址字段换算对应的缓存单元的起始地址,根据所述起始地址释放各个缓存句柄对应的缓存单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010148050.6A CN102223285B (zh) | 2010-04-16 | 2010-04-16 | 处理数据报文的方法及网络节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010148050.6A CN102223285B (zh) | 2010-04-16 | 2010-04-16 | 处理数据报文的方法及网络节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102223285A CN102223285A (zh) | 2011-10-19 |
CN102223285B true CN102223285B (zh) | 2014-06-25 |
Family
ID=44779718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010148050.6A Active CN102223285B (zh) | 2010-04-16 | 2010-04-16 | 处理数据报文的方法及网络节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102223285B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133784B (zh) * | 2014-07-24 | 2017-08-29 | 大唐移动通信设备有限公司 | 一种报文缓存管理方法与装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101150485A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝缓冲区队列网络数据发送的管理方法 |
CN101150488A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝网络报文接收方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE531681C2 (sv) * | 2007-11-30 | 2009-06-30 | Skygd Ab | Mobil kommunikationsterminal och metod för larmrapportering |
-
2010
- 2010-04-16 CN CN201010148050.6A patent/CN102223285B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101150485A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝缓冲区队列网络数据发送的管理方法 |
CN101150488A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝网络报文接收方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102223285A (zh) | 2011-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101095308B (zh) | 用于队列级联和逻辑标识的系统分组接口分组交换的通信设备 | |
CN107257329B (zh) | 一种数据分段卸载发送方法 | |
CN112543925A (zh) | 用于使用专用低延迟链路的多个硬件加速器的统一地址空间 | |
CN106598752B (zh) | 远程零拷贝方法 | |
CN102195874A (zh) | 数据分组的预提取 | |
CN106155960A (zh) | 基于gpio握手和edma的uart串口通信方法 | |
US20130111141A1 (en) | Multi-core interconnect in a network processor | |
CN115080500A (zh) | 片上网络的增量拓扑修改 | |
US20020065991A1 (en) | Method and apparatus for increasing data rates in a data network while maintaining system coherency | |
US20170242590A1 (en) | Near-memory data reorganization engine | |
CN100499666C (zh) | 实现SPI4设备与PCI Express设备互连的系统及方法 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
JP6021132B2 (ja) | 連続データをパケットにより無線通信する送信装置、受信装置、通信装置、プログラム、送信方法、及び、受信方法 | |
WO2024077890A1 (zh) | 一种异步fifo读写控制方法、系统及电子设备 | |
KR20160037792A (ko) | 고 대역폭 피어-투-피어 스위치드 키-밸류 캐싱 | |
CN115543882A (zh) | 不同位宽总线间的数据转发装置及数据传输方法 | |
US20160085683A1 (en) | Data receiving device and data receiving method | |
CN102223285B (zh) | 处理数据报文的方法及网络节点 | |
CN106494466B (zh) | 列车运行监控的数据换装装置及其数据换装方法 | |
US9137167B2 (en) | Host ethernet adapter frame forwarding | |
US10255213B1 (en) | Adapter device for large address spaces | |
US10877911B1 (en) | Pattern generation using a direct memory access engine | |
CN102299861B (zh) | 一种报文流量控制方法 | |
EP1780976A1 (en) | Methods and system to offload data processing tasks | |
CN113204517B (zh) | 一种电力专用以太网控制器的核间共享方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |