一种报文处理方法、装置和网络设备与流程

文档序号:15281585发布日期:2018-08-28 23:36阅读:225来源:国知局

本申请涉及通信技术领域,尤其涉及一种报文处理方法、装置和网络设备。



背景技术:

目前,网络设备在接收到报文时,根据报文所属的队列,将报文缓存到外部存储单元中。网络设备在需要发送报文时,根据报文所属的队列,从外部存储单元中读出报文并发送。在报文的存取过程中,会存在两个关键元素,分别为pkt(packet,报文实体)和pd(packetdescription,报文描述符)。

在传统方式中,网络设备会将pkt存储到ddrsdram(dualdataratesynchronousdynamicrandomaccessmemory,双倍速率同步动态随机存取存储器,后续简称ddr),并将pd存储到qdrsram(quaddataratestaticrandomaccessmemory,四倍数据速率静态随机存取存储器,后续简称qdr)。但是,由于需要使用qdr存储pd,因此,提高了单板设计成本,增加布线压力。

此外,在需要发送报文时,网络设备先从qdr读取pd,然后利用pd从ddr读取pkt,由于需要分两次,分别读取pd和pkt,因此读取效率很低。



技术实现要素:

本申请提供一种报文处理方法,内存被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间,所述方法包括:获得待存储的报文,并根据所述报文的长度和第一存储空间的长度,确定所述报文需要占用的第二区块,并将所述报文存储到确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的报文描述符pd,并将所述pd存储到确定的第二区块的第二存储空间;

从第二区块的第一存储空间读取报文片段,从所述第二区块的第二存储空间读取pd,利用读取的pd将读取的报文片段组成报文,并发送组成的报文。

本申请提供一种报文处理装置,内存被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间,所述装置包括:写入模块,用于获得待存储的报文,并根据所述报文的长度和第一存储空间的长度,确定所述报文需要占用的第二区块,并将所述报文存储到确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的报文描述符pd,并将所述pd存储到确定的第二区块的第二存储空间;

读取模块,用于从第二区块的第一存储空间读取报文片段,并从所述第二区块的第二存储空间读取pd,并利用读取的pd将读取的报文片段组成报文,并发送组成的报文。

本申请提供一种网络设备,所述网络设备包括转发芯片和外部存储单元,所述外部存储单元的内存被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间;其中:

所述转发芯片,用于获得待存储的报文,根据所述报文的长度和第一存储空间的长度,确定所述报文需要占用的第二区块,并将所述报文存储到所述外部存储单元中的确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的报文描述符pd,将所述pd存储到所述外部存储单元中的确定的第二区块的第二存储空间;从所述外部存储单元中的第二区块的第一存储空间读取报文片段,从所述外部存储单元中的所述第二区块的第二存储空间读取pd,并利用读取的pd将读取的报文片段组成报文,并发送组成的报文。

基于上述技术方案,本申请实施例中,内存(如ddr内存)被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间,因此,可以将报文存储到第一存储空间,并将pd存储到第二存储空间,这样,可以将报文和pd存储到同一个内存,而不是将报文存储到ddr内存,并将pd存储到qdr内存。因此,不需要使用qdr存储pd,充分利用ddr资源,降低了单板设计成本,减少了布线压力。而且,由于将报文和pd存储到同一个内存,因此在需要发送报文时,可以从同一个内存中读取到报文和pd,而不用分两次分别读取pd和报文,这样读取效率很高。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。

图1a-图1c是本申请一种实施方式中的应用场景示意图;

图2是本申请一种实施方式中的报文处理方法的流程图;

图3a-图3e是本申请另一种实施方式中的应用场景示意图;

图4是本申请一种实施方式中的报文处理装置的结构图;

图5a和图5b是本申请一种实施方式中的网络设备的硬件结构图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请实施例中提出一种报文处理方法,可以应用于网络设备,网络设备在处理报文时,会涉及报文存取(即存储和读取)过程,在报文的存取过程中,会存在两个关键元素,分别为报文和pd。报文也可以称为pkt,即报文实体,也就是待存储的报文本身,而pd用于记录报文的关键信息,如报文的长度、队列信息、存储地址等,且pd的长度远小于报文的长度,pd的信息量比较小。

本申请实施例中,将报文和pd存储到同一个内存(如ddr内存),而不是将报文存储到ddr内存,将pd存储到qdr内存,从而不需要使用qdr存储pd,充分利用ddr内存资源,降低了单板设计成本,减少布线压力。而且,由于将报文和pd存储到同一个内存,因此在需要发送报文时,可以从同一个内存中读取到报文和pd,而不用分两次分别读取pd和报文,这样读取效率很高。

本申请实施例中,内存(如ddr内存)被划分成多个第一区块(也可以称为大块内存),每个第一区块又被划分成多个第二区块(也可以称为小块内存,每个小块内存可以为一个burst)。每个第二区块又被划分成为大小不等的两段,较大的这段内存可以为第一存储空间,而较小的这段内存可以为第二存储空间,即第一存储空间可以大于第二存储空间。基于此,可以将报文存储到第一存储空间,将pd存储到第二存储空间,从而将报文和pd存储到同一个内存。

在一个例子中,参见图1a所示,ddr内存可以被划分成了多个第一区块,每个第一区块为一个2k字节的大块内存。此外,每个第一区块可以被划分成32个第二区块,每个第二区块为一个64字节的小块内存,即每个2k字节的第一区块被划分成32个64字节的小块内存,每一个小块内存可以为一个burst。

其中,上述2k字节、32个、64字节等,只是本申请的一个示例,对此数值不做限制,例如,上述第一区块为2k字节,第二区块为128字节时,则第一区块可以被划分成16个第二区块。又例如,上述第一区块为4k字节,第二区块为64字节时,则第一区块可以被划分成64个第二区块。以此类推,为了方便描述,后续以2k字节的第一区块被划分成32个64字节的第二区块为例。

其中,在将第一区块划分成32个64字节的第二区块之后,还可以将每个第二区块划分为大小不等的两段。较大的这段内存可以为56字节(以56字节为例),且这段内存为第一存储空间,第一存储空间用于存储报文。较小的这段内存可以为8字节(以8字节为例),且这段内存为第二存储空间,第二存储空间用于存储pd。参见图1b所示,第二区块可以同时存储报文和pd,例如,假设需要存储4个报文(如报文0、报文1、报文2、报文3),且4个报文的大小均是96字节,则报文0存储在第二区块0和第二区块1,报文0可以占用第二区块0的56字节,占用第二区块1的40字节,且在第二区块0的前8字节中,还存储有pd,在第二区块1的前8字节中,还存储有pd。以此类推。

参见图1c所示,为pd的一个示例,针对报文占用的不同第二区块,这些第二区块对应的pd可能相同,也可能不同。例如,当报文占用一个或多个第二区块时,若第二区块是报文需要占用的所有第二区块中的第一个第二区块,则确定该第二区块对应的pd可以包括报文长度(len)和第一标记(sop),第一标记表示报文存储在第一个第二区块。若第二区块是报文需要占用的所有第二区块中的最后一个第二区块,则确定该第二区块对应的pd可以包括第二标记(eop),所述第二标记表示报文存储在最后一个第二区块。若第二区块是报文需要占用的所有第二区块中的任一第二区块,则确定该第二区块对应的pd可以包括第三标记(bv),第三标记表示当前的第二区块是否有效;如第三标记为0时,表示当前第二区块有效,第三标记为1时,表示当前第二区块无效。

此外,当报文需要占用的所有第二区块共占用至少两个第一区块时,若第二区块是第一区块中的最后一个第二区块,则确定该第二区块对应的pd可以包括报文需要占用的所有第二区块占用的下一个第一区块的指针(nba)、报文需要占用的所有第二区块在下一个第一区块中的第二区块数量(nbn)、第四标记(val)。其中,该第四标记可以表示nba是否有效。例如,当该第四标记为0时,则表示nba有效,当该第四标记为1时,则表示nba无效。

在一个例子中,sop(startofphase,开始阶段)的取值为0时,表示当前第二区块是第一个第二区块;sop的取值为1时,表示当前第二区块不是第一个第二区块。eop(endofphase,结束阶段)的取值为0时,表示当前第二区块是最后一个第二区块;eop的取值为1时,表示当前第二区块不是最后一个第二区块。bv(blockvalid,块有效)为0时,表示当前第二区块有效,bv为1时,表示当前第二区块无效。val(valid,有效)为0时,表示nba有效,val为1时,表示nba无效。len(length,长度)表示报文长度。nba(nextblockaddress,下一块地址)的取值为下一个第一区块的指针地址。nbn(nextblocknumber,下一块数量)的取值为在下一个第一区块中的第二区块数量。

例如,在图1c中,报文1对应第二区块2、第二区块3和第二区块4。针对报文1需要占用的所有第二区块中的第一个第二区块(如第二区块2),则该第二区块2对应的pd可以包括len(如120,表示报文1的总长度是120字节)和sop(表示第一个第二区块)。针对报文1需要占用的所有第二区块中的任意一个第二区块(如第二区块2、第二区块3和第二区块4,图中以第二区块3为例),该第二区块3对应的pd可以包括bv(如bv为0,表示当前的第二区块有效)。针对报文1需要占用的所有第二区块中的最后一个第二区块(如第二区块4),该第二区块4对应的pd可以包括eop(表示最后一个第二区块)。

在这个示例中,第二区块2的pd可以包括:len=120;sop=0;bv=0;第二区块4的pd可以包括:eop=0;bv=0。第二区块3的pd可以包括:bv=0。

又例如,报文2对应一个第一区块(后续将其称为第一区块0)中的第二区块5至第二区块31、另一个第一区块(后续将其称为第一区块1)中的第二区块0、第二区块1。针对报文2需要占用的所有第二区块中的第一个第二区块(如第一区块0的第二区块5),则该第二区块5对应的pd可以包括len和sop。针对报文2需要占用的所有第二区块中的任意一个第二区块(如第一区块0的第二区块5至第二区块31、以及第一区块1的第二区块0和第二区块1),这些第二区块对应的pd均可以包括bv。针对第一区块0的第二区块31(即第一区块的最后一个第二区块),该第二区块31对应的pd还可以包括nba(用于记录第一区块1的指针,如第一区块1的第二区块0的地址)、nbn(用于记录报文2在第一区块1中的第二区块数量,如取值为2)、val(用于表示nba是否有效)。针对报文2需要占用的所有第二区块中的最后一个第二区块(如第一区块1的第二区块1),则该第二区块1对应的pd可以包括eop。

在这个示例中,第二区块5的pd可以包括:len=1560;sop=0;bv=0;第二区块31的pd可以包括:bv=0;nba=0x8049324(其表示第二区块的指针地址);nbn=2;val=0;对于其它第二区块的pd,在此不再赘述。

在上述应用场景下,参见图2所示,为该报文处理方法的流程图。

步骤201,获得待存储的报文,并根据该报文的长度和第一存储空间的长度,确定该报文需要占用的第二区块,并将该报文存储到确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的pd,并将该pd存储到确定的第二区块的第二存储空间。其中,步骤201可以是报文存储过程。

在一个例子中,针对“确定该报文需要占用的第二区块”的过程,可以包括但不限于如下方式:确定该报文对应的队列。然后,若该队列对应有尾指针,则从该尾指针指向的第二区块开始,确定该报文需要占用的第二区块;此外,若该队列没有对应尾指针,则可以选取空闲的第一区块,并从选取的第一区块中的首个第二区块开始,确定该报文需要占用的第二区块。

其中,可以先根据该报文的长度和第一存储空间的长度,确定该报文需要占用的第二区块的数量,然后,从该尾指针指向的第二区块开始或者从选取的第一区块中的首个第二区块开始,确定该报文需要占用的该数量个第二区块。每个第二区块用于存储该报文的一个报文片段,例如,若报文需要占用3个第二区块,则可以将报文划分为3个报文片段,每个报文片段占用一个第二区块。

其中,网络设备可以采用队列存储报文,每个队列具有唯一的队列标识。当然,采用队列存储报文的方式只是一个示例,网络设备还可以采用其它方式存储报文,本实施例中以采用队列存储报文为例进行说明。通过队列存储报文,可以有效的区分不同类型的报文,并将不同类型的报文存储到不同的队列。例如,网络设备包括三个队列(如fifo(first-infirst-out,先进先出)队列),这三个队列的队列标识分别为队列a、队列b和队列c,队列a用于存储具有特征a(如出接口为接口a)的报文,队列b用于存储具有特征b(如出接口为接口b)的报文,队列c用于存储具有特征c(如出接口为接口c)的报文。

网络设备在获得待存储的报文之后,可以先确定出报文的队列,对此过程不做限制。若该报文是该队列对应的首个报文,则该队列没有对应尾指针和头指针,若该报文不是该队列对应的首个报文,则该队列对应有尾指针和头指针。

其中,头指针可以是指:指向队列对应的第一个报文头部的指针(如第一个报文的开始地址或者开始位置)。尾指针可以是指:指向队列对应的最后一个报文尾部的指针(如最后一个报文的结束地址或者结束位置)。

例如,在队列为空的情况下,若获得待存储的报文1,则在队列中存储报文1,并更新该队列的尾指针和头指针,该头指针指向报文1的开始地址,该尾指针指向报文1的结束地址。然后,若获得针对该队列的报文2,则在队列中存储报文2,此时不再更新头指针,只需要更新该队列对应的尾指针,如尾指针指向报文2的结束地址。以此类推,每接收到该队列的报文,就可以更新尾指针。若需要读取队列中的报文,则从队列的头指针开始读取,在报文1读取完成后,则从队列中删除报文1,此时不需要更新尾指针,只需要更新队列对应的头指针,如头指针指向报文2的开始地址。以此类推,每从队列中读取并删除一个报文,就可以更新头指针。综上所述,存储报文的过程,是从队列的尾指针开始,依次存储报文,读取报文的过程,是从队列的头指针开始,依次读取报文。

其中,在队列对应有尾指针的情况下,针对“从该尾指针指向的第二区块开始,确定该报文需要占用的第二区块”的过程,可以包括:从该尾指针指向的第二区块的下一个第二区块开始,选取预设数量个第二区块,所述预设数量是根据报文的长度以及第一存储空间的长度确定的。例如,若尾指针指向第一区块1的第二区块10,且报文的长度是100字节,由于第一存储空间为56字节,因此,确定该报文占用两个第二区块,即该报文对应的第二区块为第一区块1的第二区块11和第二区块12。又例如,若尾指针指向第一区块1的第二区块30,且报文的长度是100字节,由于第一存储空间为56字节,因此,确定该报文占用两个第二区块,又由于第一区块1已经不存在两个空闲的第二区块,因此,还可以重新申请空闲的第一区块(如第一区块3),基于此,该报文对应的第二区块可以为第一区块1的第二区块31和第一区块3的第二区块0。

在“从该尾指针指向的第二区块开始,确定报文需要占用的第二区块”后,还可以根据该报文对应的第二区块,更新队列对应的尾指针,即该尾指针指向该报文对应的第二区块的结束地址,如指向第二区块12的结束地址。

其中,在该队列没有对应尾指针的情况下,针对“选取空闲的第一区块,并从选取的第一区块中的首个第二区块开始,确定该报文需要占用的第二区块”的过程,可以包括:从第一区块中的首个第二区块开始,选取预设数量个第二区块,所述预设数量是根据报文的长度以及第一存储空间的长度确定的。例如,若选取空闲的第一区块2,且报文的长度是100字节,由于第一存储空间为56字节,因此,确定该报文占用两个第二区块,即该报文对应的第二区块可以为第一区块2的第二区块0(即第一区块2的首个第二区块)、第二区块1。

在“从选取的第一区块中的首个第二区块开始,确定该报文需要占用的第二区块”后,还可以根据该报文对应的第二区块,更新队列对应的尾指针。

其中,针对“选取空闲的第一区块”的过程,网络设备可以维护空闲地址池,该空闲地址池用于存储所有空闲的第一区块。在申请空闲的第一区块时,可以从空闲地址池中选取空闲的第一区块,以第一区块为单位申请空闲的第一区块,即每次需要申请一个或者多个第一区块,而不是直接申请一个或者多个第二区块。在回收内存时,也是以第一区块为单位回收,即将一个或者多个第一区块回收到空闲地址池,而不是将一个或者多个第二区块回收到空闲地址池。

在一个例子中,针对“将报文存储到确定的第二区块的第一存储空间”的过程,若报文需要占用的第二区块为第二区块11和第二区块12,则可以将报文划分为两个报文片段,并可以将这两个报文片段分别存储到第二区块11的第一存储空间、第二区块12的第一存储空间。例如,以报文的长度是100字节为例,则可以将该报文的前56个字节划分到报文片段1,并将该报文片段1存储到该第二区块11的第一存储空间。此外,将该报文的后44个字节划分到报文片段2,并将该报文片段2存储到该第二区块12的第一存储空间。

在一个例子中,当报文占用一个或多个第二区块时,针对“生成该第二区块对应的pd”的过程,可以包括但不限于:若该第二区块是报文需要占用的所有第二区块中的第一个第二区块,则确定该第二区块对应的pd可以包括报文长度(len)和第一标记(sop),第一标记表示报文存储在第一个第二区块。若该第二区块是报文需要占用的所有第二区块中的最后一个第二区块,则确定该第二区块对应的pd可以包括第二标记(eop),第二标记表示报文存储在最后一个第二区块。若第二区块是报文需要占用的所有第二区块中的任一第二区块,则确定该第二区块对应的pd可以包括第三标记(bv)。此外,当报文需要占用的所有第二区块共占用至少两个第一区块时,若该第二区块是第一区块中的最后一个第二区块,则确定该第二区块对应的pd可以包括报文需要占用的所有第二区块占用的下一个第一区块的指针(nba)、报文需要占用的所有第二区块在下一个第一区块中的第二区块数量(nbn)、第四标记(val)。

其中,上述pd的生成过程可以参见图1c所示,在此不再重新赘述。

在一个例子中,针对“将该pd存储到确定的第二区块的第二存储空间”的过程,假设报文需要占用第二区块11和第二区块12,则确定第二区块11对应的pd为报文长度(len)和第一标记(sop),将报文长度(len)和第一标记(sop)存储到第二区块11的第二存储空间。确定第二区块12对应的pd为第二标记(eop),将第二标记(eop)存储到第二区块12的第二存储空间。

基于上述技术方案,可以实现报文的存储过程,而且,是将ddr内存划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间,因此,可以将报文存储到第一存储空间,并将pd存储到第二存储空间,这样,可以将报文和pd存储到同一个内存,而不是将报文存储到ddr内存,并将pd存储到qdr内存。因此,不需要使用qdr存储pd,充分利用ddr资源,降低了单板设计成本,减少了布线压力。

步骤202,从第二区块的第一存储空间读取报文片段,并从该第二区块的第二存储空间读取pd,并利用读取的pd将读取的报文片段组成报文,并发送组成的报文。其中,步骤202可以是报文的读取过程,以及报文的发送过程。

具体的,从第一区块的每个第二区块的第二存储空间读取pd,并确定包括第一标记的pd,并将包括第一标记的pd对应的第二区块确定为起始第二区块。若读取的pd存在包括第二标记的pd,则可以将包括第二标记的pd对应的第二区块确定为终止第二区块;若读取的pd不存在包括第二标记的pd,则从所述第一区块的最后一个pd获取下一个第一区块的指针、下一个第一区块中的第二区块数量,并根据所述指针和第二区块数量,从下一个第一区块的第二区块的第二存储空间读取pd,并可以将包括第二标记的pd对应的第二区块确定为终止第二区块。从起始第二区块与终止第二区块之间的每个第二区块的第一存储空间中读取报文片段,并将读取的报文片段组成报文,并发送组成的报文。

其中,在需要发送某个队列中的报文时,查询出该队列对应的头指针,这个头指针是指向该队列对应的第一个报文头部的指针(如第一个报文的开始地址),且这个地址可以是第二区块的地址。然后,确定该第二区块所属的第一区块,并从该第一区块的每个第二区块的第二存储空间读取pd。

参见图1c所示,由于第二区块0的pd包括第一标记(sop),第二区块1的pd包括第二标记(eop),因此将第二区块0确定为起始第二区块,将第二区块1确定为终止第二区块,从第二区块0的第一存储空间中读取报文片段,从第二区块1的第一存储空间中读取报文片段,并将读取的报文片段组成一个报文,并发送该报文。由于第二区块2的pd包括第一标记(sop),第二区块4的pd包括第二标记(eop),因此将第二区块2确定为起始第二区块,将第二区块4确定为终止第二区块。从第二区块2、第二区块3、第二区块4的第一存储空间中读取报文片段,并将读取的报文片段组成一个报文1,并发送该报文。

又例如,由于第二区块5的pd包括第一标记(sop),因此将第二区块5确定为起始第二区块。由于第二区块5后,第一区块的各第二区块(第二区块6-31)的pd均不包括第二标记,因此从第二区块31的pd中获取下一个第一区块的指针(nba)、当前报文在下一个第一区块的第二区块数量(nbn),并根据nba获取到下一个第一区块的地址,从下一个第一区块中读取前nbn个第二区块的pd。由于下一个第一区块的第二区块1的pd包括第二标记(eop),因此将下一个第一区块的第二区块1确定为终止第二区块。然后,从当前第一区块的第二区块5-第二区块31、下一个第一区块的第二区块0、第二区块1的第一存储空间读取报文片段,将读取的报文片段组成一个报文,并发送该报文。

在一个例子中,在“从起始第二区块与终止第二区块之间的每个第二区块的第一存储空间中读取报文片段”之后,还可以释放读取的报文片段占用的第一存储空间;当第一区块中的每个第二区块的第一存储空间均被释放时,则可以将所述第一区块回收为空闲的第一区块,即将这个第一区块回收到空闲地址池,然后,网络设备可以使用这个第一区块存储新的报文片段。此外,网络设备还可以根据该第一区块指向的下一个第一区块的地址,更新队列的头指针。

在一个例子中,在将所述第一区块回收为空闲的第一区块后,还可以释放所述第一区块中的每个第二区块的第二存储空间。或者,在将所述第一区块回收为空闲的第一区块后,还可以不释放所述第一区块中的每个第二区块的第二存储空间,而是调整所述第一区块的反转标记。

进一步的,针对调整所述第一区块的反转标记的实现方式,网络设备在每次生成第二区块对应的pd时,还可以获取与该第二区块对应的第一区块的反转标记,并确定该第二区块对应的pd包括该反转标记。其中,第一区块连续两次被使用时的反转标记不同。例如,第一区块第一次被使用时的反转标记为0,在将该第一区块回收为空闲的第一区块后,可以将第一区块的反转标记修改为1(只要与0不同即可),第一区块第二次被使用时的反转标记为1,在将该第一区块回收为空闲的第一区块后,可以将第一区块的反转标记修改为0或2(只要与1不同即可),第一区块第三次被使用时的反转标记为0或2,以此类推。

例如,在第一次使用第一区块1存储报文时,在第一区块1的每个第二区块的第二存储空间写入pd,参见图3a所示,为第二存储空间写入pd的示例。在针对第一区块1的读操作完成后,如果不对这些pd进行处理,就会出现错误。例如,在第二次使用第一区块1存储报文时,只在第一区块1的第二区块0、第二区块1、第二区块2中写入报文片段和pd,而不在第一区块1的其它第二区块中写入报文片段和pd,这样,在针对第一区块1进行读操作时,可以从第二区块0至第二区块31读取到pd,但只能从第二区块0、第二区块1、第二区块2读取到报文片段,在使用这些pd对读取到的报文片段进行组包时会出现错误。

针对上述发现,在一个例子中,在针对第一区块1的读操作完成后,还可以删除第一区块1中的每个第二区块的第二存储空间的pd。但是,在该方式下,每次针对第一区块1的读操作完成后,均需要删除第一区块1的每个第二区块的第二存储空间的pd,导致第二区块的反复操作,并降低网络设备的处理性能。

在另一个例子中,在针对第一区块1的读操作完成后,并不是删除第一区块1中的每个第二区块的第二存储空间的pd,而是采用如下方式解决上述“在使用这些pd对读取到的报文片段进行组包时,就会出现错误”问题,从而可以避免第二区块的第二存储空间的反复操作,并可以提高网络设备的处理性能。

为每个第一区块设置反转标记,该反转标记可以为第一数值或者第二数值。基于此,每次针对第一区块的读操作完成之后,在将该第一区块回收为空闲的第一区块时,若该第一区块的反转标记为第一数值,则可以将第一数值修改为第二数值,若反转标记为第二数值,则可以将第二数值修改为第一数值标识。

在此基础上,每次通过第一区块中的第二区块的第二存储空间存储pd时,所述pd还可以包括反转标记。例如,若第一区块对应的反转标记为0,针对图3a,具有反转标记的pd可以如图3b或者图3c所示。sel0表示当前的反转标记为0。sop0、eop0、nbn0、nba0中的0,均表示当前的反转标记为0。

然后,在将第一区块回收为空闲的第一区块时,由于第一区块对应的反转标记为0,因此将该反转标记修改为1。再次使用该第一区块存储报文时,若只在第二区块0、第二区块1、第二区块2中写入报文和pd,则具有反转标记的pd可以如图3d或者图3e所示。在图3d或者图3e中,sel1表示当前的反转标记为1,sop1、eop1中的1,均表示当前的反转标记为1。

通过对比图3d和图3b,在针对第一区块进行读操作时,可以从第二区块0至第二区块31读取到pd,但是只有第二区块0、第二区块1、第二区块2对应sel1,即只有第二区块0、第二区块1、第二区块2是当前的反转标记1对应的第二区块,因此只使用第二区块0、第二区块1、第二区块2的pd对读取到的报文片段进行组包,不会发生错误。同理,通过对比图3c和图3e,也可以只使用第二区块0、第二区块1、第二区块2的pd对读取到的报文片段进行组包。

基于与上述方法同样的申请构思,本申请实施例中还提出一种报文处理装置,内存被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间,如图4所示,所述装置包括:

写入模块401,用于获得待存储的报文,并根据所述报文的长度和第一存储空间的长度,确定所述报文需要占用的第二区块,并将所述报文存储到确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的报文描述符pd,并将所述pd存储到确定的第二区块的第二存储空间;

读取模块402,用于从第二区块的第一存储空间读取报文片段,并从所述第二区块的第二存储空间读取pd,并利用读取的pd将读取的报文片段组成报文,并发送组成的报文。

在一个例子中,所述写入模块401,具体用于在确定所述报文需要占用的第二区块的过程中,确定所述报文对应的队列;若所述队列对应有尾指针,则从所述尾指针指向的第二区块开始,确定所述报文需要占用的第二区块;若所述队列没有对应尾指针,则选取空闲的第一区块,并从选取的第一区块中的首个第二区块开始,确定所述报文需要占用的第二区块。

在一个例子中,所述写入模块401,具体用于生成该第二区块对应的pd的过程中,若该第二区块是所述报文需要占用的第一个第二区块,则确定该第二区块对应的pd为报文长度和第一标记,第一标记表示报文存储在第一个第二区块;若该第二区块是所述报文需要占用的最后一个第二区块,则确定该第二区块对应的pd为第二标记,所述第二标记表示报文存储在最后一个第二区块。

在一个例子中,当所述报文需要占用的所有第二区块占用至少两个第一区块时,所述写入模块401,具体用于生成该第二区块对应的pd的过程中,若该第二区块是第一区块的最后一个第二区块,则确定该第二区块对应的pd为所述报文需要占用的所有第二区块占用的下一个第一区块的指针、所述报文需要占用的所有第二区块在下一个第一区块中的第二区块数量。

在一个例子中,所述写入模块401,具体用于生成该第二区块对应的pd的过程中,获取与该第二区块对应的第一区块的反转标记,并确定该第二区块对应的pd包括所述反转标记;其中,第一区块连续两次被使用时的反转标记不同。

所述读取模块402,具体用于从第一区块的每个第二区块的第二存储空间读取pd,并确定包括第一标记的pd,并将包括第一标记的pd对应的第二区块确定为起始第二区块;若读取的pd存在包括第二标记的pd,将包括第二标记的pd对应的第二区块确定为终止第二区块;若读取的pd不存在包括第二标记的pd,从所述第一区块的最后一个pd获取下一个第一区块的指针、下一个第一区块中的第二区块数量,根据所述指针和第二区块数量,从下一个第一区块的第二区块的第二存储空间读取pd,将包括第二标记的pd对应的第二区块确定为终止第二区块;从起始第二区块与终止第二区块之间的每个第二区块的第一存储空间中读取报文片段,并将读取的报文片段组成报文,并发送组成的报文。

所述读取模块402,还用于在从起始第二区块与终止第二区块之间的每个第二区块的第一存储空间中读取报文片段之后,释放读取的报文片段占用的第一存储空间;当第一区块中的每个第二区块的第一存储空间均被释放时,将所述第一区块回收为空闲的第一区块;在将所述第一区块回收为空闲的第一区块后,释放所述第一区块中的每个第二区块的第二存储空间;或者,在将所述第一区块回收为空闲的第一区块后,调整所述第一区块的反转标记。

基于与上述方法同样的申请构思,本申请实施例中还提出一种网络设备,本申请实施例提供的网络设备,从硬件层面而言,硬件架构示意图具体参见图5a所示。所述网络设备包括转发芯片和外部存储单元,所述外部存储单元是与所述转发芯片分开部署的,如所述外部存储单元可以是ddr内存,当然所述外部存储单元也可以是其它类型的存储单元,对此不做限制。

其中,所述外部存储单元的内存被划分成多个第一区块,每个第一区块被划分成多个第二区块,每个第二区块均包括第一存储空间和第二存储空间。

所述转发芯片,用于获得待存储的报文,根据所述报文的长度和第一存储空间的长度,确定所述报文需要占用的第二区块,将所述报文存储到外部存储单元中的确定的第二区块的第一存储空间;针对确定的每个第二区块,生成该第二区块对应的报文描述符pd,并将所述pd存储到外部存储单元中的确定的第二区块的第二存储空间;以及,从外部存储单元中的第二区块的第一存储空间读取报文片段,从外部存储单元中的所述第二区块的第二存储空间读取pd,并利用读取的pd将读取的报文片段组成报文,并发送组成的报文。

其中,转发芯片可以实现上述报文处理方法,即用于执行上述报文处理方法的各个操作。而且,处理器可以将用于实现上述报文处理方法的流程写入到转发芯片,使转发芯片可以执行上述报文处理方法的各个操作,在此不再赘述。

其中,转发芯片可以包括但不限于:fpga(field-programmablegatearray,现场可编程门阵列)、cpld(complexprogrammablelogicdevice,复杂可编程逻辑器件)等,对此转发芯片的类型不做限制,只要能够实现上述功能即可。

在一个例子中,由于外部存储单元是转发芯片的片外存储器(ddr),因此,通过将报文和pd存储到同一个内存,使得转发芯片可以从外部存储单元的同一个内存中读取到报文和pd,而不用分两次分别读取pd和报文,即不用从外部存储单元读取两次,这样转发芯片的读取效率很高。

在另一个例子中,参见图5b所示,上述转发芯片还可以包括转发引擎和tm(trafficmanage,流量管理)模块。转发引擎在接收到报文后,可以对报文进行流分类和流量监管(如car(committedaccessrate,承诺访问速率)限速操作等),并将报文输出给tm(trafficmanage,流量管理)模块。

tm模块在接收到报文后,可以对报文进行拥塞避免(如wred(weightedrandomearlydetection,加权随机早期检测)、尾丢弃等)、拥塞管理(如pq(priorityqueue,优先级队列)调度、wfq(weightedfairqueuing,加权公平队列)调度等)、流量整形等操作。此外,tm模块在接收到报文时,可以根据报文所属的队列,将报文缓存到外部存储单元中。tm模块在需要发送报文时,根据报文所属的队列,从外部存储单元中读出报文并发送。

而tm模块将报文缓存到外部存储单元、tm模块从外部存储单元中读出报文并发送的过程,也就是上述报文处理方法,在此不再重复赘述。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1