一种队列管理方法和装置与流程

文档序号:11959902阅读:221来源:国知局
一种队列管理方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种队列管理方法和装置。



背景技术:

随着网络技术的发展,人们对网络带宽需求增大,对相关设备的带宽、服务质量(英文全称:Quality of Service,英文简称:QoS)和成本都提出了很高的要求,体现在网络芯片上就要求其可以缓存和处理更多的报文、具备精准的调度能力和更低的芯片成本,这些都体现在产品的竞争力上。

网络芯片中的流量管理(英文全称:Traffic Manage,英文简称:TM)芯片的主要功能就是对报文的缓存、入队、调度和出队。其中,对报文的缓存、入队和出队是由队列管理模块来完成的,主要是对队列的链表的操作。对报文的调度是由调度模块来完成的,如果考虑成本去增大每个报文的长度信息的粒度,又会影响调度的准确性、造成很大的突发和抖动。

现有技术中常见的队列管理流程可包括如下步骤:

1、从网络芯片的入口接收报文;

2、将接收到的报文缓存在网络芯片外的随机存储器;

3、报文缓存之后生成报文描述符(英文全称:Packet Descriptor,英文简称:PD),然后将PD入队到对应的实体队列中,入队由队列管理模块来完成。其中,PD是描述报文的信息,包括实体队列中的某一个报文指向的下一个报文的指针等。

在目前的队列管理方案中至少存在如下问题:因为大带宽的设备要求缓存更多的报文,通常报文数据都缓存在片外的随机存储器中,但报文的队列信息(包括链表的头指针、下一个报文指针和链表的尾指针)和每个报文的长度通常都放在芯片的内部,除队列的头指针和尾指针是按实体队列来维护之外,下一个报文指针和报文长度是按照每个报文来维护的,这些信息用于维护实体队列的链表和保证调度的QoS。下一个报文指针就会占用很大的片内缓存资源,这会带来芯片成本的增加,但同时上述的下一个报文指针又是完成正常芯片功能和性能所不可或缺的。以100十亿(英文全称:Gigabit,英文简称:G)字节的处理能力的芯片而言,一般需要缓存的短报文的数量都会达到几百千(英文全称:Kilobit,英文简称:K)个报文的量级,甚至1百万(英文全称:Megabit,英文简称:M)个报文的量级了。以缓存1M个报文为例,每个报文需要用20比特(英文名称:bit)的指针来表示,这样芯片内部要保存的下一个报文指针的相关资源就要20Mbit,这样的数量会占用很大的芯片内存储资源,会带来芯片成本和功耗的增加。



技术实现要素:

本发明实施例提供了一种队列管理方法和装置,减少实体队列占用的网络芯片内部的存储资源,降低芯片成本和功耗。

为解决上述技术问题,本发明实施例提供以下技术方案:

第一方面,本发明实施例提供一种队列管理方法,包括:

将第一报文存储到第一宏单元包括的第一缓存单元,所述第一宏单元入队到第一实体队列,所述第一宏单元包括:连续的N个缓存单元,所述N为大于或等于2的自然数,所述第一缓存单元属于所述N个缓存单元;

根据所述第一报文的报文长度对所述第一宏单元存储了所述第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度;

根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息,所述第一宏单元对应的队列信息包括:所述第一宏单元在所述第一实体队列中的宏单元标识、所述第一宏单元内部的头指针、所述第一宏单元内部的尾指针和所述第一宏单元的当前平均报文长度。

本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元可入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

结合第一方面,在第一方面的第一种可能的实现方式中,所述第一实体队列,至少包括:第一宏单元和在所述第一实体队列中处于所述第一宏单元之前且相邻的第二宏单元,所述方法还包括:

从所述第一实体队列中确定出需要报文出队的宏单元为第二宏单元,所述第二宏单元对应的队列信息包括:所述第二宏单元在所述第一实体队列中的宏单元标识、所述第二宏单元内部的头指针、所述第二宏单元内部的尾指针和所述第二宏单元的当前平均报文长度;

根据所述第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值。

在本发明实施例中第二宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,当第二宏单元需要出队时,可以根据第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值,因此本发明实施例中不需要存储每个报文的报文长度也可以完成报文的出队,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述第二宏单元内部的头指针读取到需要出队的第二报文之后,所述方法还包括:

将所述第二宏单元的当前平均报文长度发送给调度器和限速器,以使所述调度器根据所述第二宏单元的当前平均报文长度刷新所述调度器的权重,所述限速器根据所述第二宏单元的当前平均报文长度刷新所述限速器的令牌。

本发明实施例中不需要存储第二宏单元内各个报文的真实长度,只需要维护报文平均长度即可,可以以宏单元粒度进行刷新调度器和限速器,对调度的效果没有影响。

结合第一方面或第一方面的第一种可能或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息之后,所述方法还包括:

根据所述第一宏单元对应的队列信息维护所述第一实体队列的链表。

本发明实施例中对第一实体队列的管理可以通过链表的方式来完成,链表中的队尾指针可以指向刚入队的第一宏单元,实现对实体队列的管理。

结合第一方面或第一方面的第一种可能或第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述将第一报文存储到第一宏单元包括的第一缓存单元,包括:

将所述第一宏单元内部的尾指针分配给第一报文,并修改所述第一宏单元内部的尾指针对应的偏移值。

本发明实施例中第一宏单元中在写入第一报文时修改第一宏单元内部的尾指针对应的偏移值,从而通过宏单元的尾指针可以指向新增加的报文。

结合第一方面或第一方面的第一种可能或第二种可能的实现方式,在第一方面的第五种可能的实现方式中,所述根据所述第一报文的报文长度对所述第一宏单元存储了所述第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,包括:

获取所述第一宏单元存储所述第一报文之前已经存储的所有报文数量;

根据所述已经存储的所有报文数量、所述第一宏单元存储了所述第一报文之前的平均报文长度和所述第一报文的报文长度计算第一宏单元的当前平均报文长度。

本发明实施例中可以第一宏单元在有新的报文写入时修改第一宏单元的当前平均报文长度,而不需要记录每个报文的真实长度,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

第二方面,本发明实施例还提供一种队列管理装置,包括:

存储模块,用于将第一报文存储到第一宏单元包括的第一缓存单元,所述第一宏单元入队到第一实体队列,所述第一宏单元包括:连续的N个缓存单元,所述N为大于或等于2的自然数,所述第一缓存单元属于所述N个缓存单元;

平均报文长度修正模块,用于根据所述第一报文的报文长度对所述第一宏单元存储了所述第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度;

队列信息生成模块,用于根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息,所述第一宏单元对应的队列信息包括:所述第一宏单元在所述第一实体队列中的宏单元标识、所述第一宏单元内部的头指针和所述第一宏单元内部的尾指针和所述第一宏单元的当前平均报文长度。

本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元可入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

结合第二方面,在第二方面的第一种可能的实现方式中,所述第一实体队列,至少包括:第一宏单元和在所述第一实体队列中处于所述第一宏单元之前且相邻的第二宏单元,所述队列管理装置还包括:

出队管理模块,用于从所述第一实体队列中确定出需要报文出队的宏单元为第二宏单元,所述第二宏单元对应的队列信息包括:所述第二宏单元在所述第一实体队列中的宏单元标识、所述第二宏单元内部的头指针、所述第二宏单元内部的尾指针和所述第二宏单元的当前平均报文长度;

报文读取模块,用于根据所述第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值。

在本发明实施例中第二宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,当第二宏单元需要出队时,可以根据第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值,因此本发明实施例中不需要存储每个报文的报文长度也可以完成报文的出队,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述队列管理装置还包括:发送模块,其中,

所述发送模块,用于所述报文读取模块根据所述第二宏单元内部的头指针读取到需要出队的第二报文之后,将所述第二宏单元的当前平均报文长度发送给调度器和限速器,以使所述调度器根据所述第二宏单元的当前平均报文长度刷新所述调度器的权重,所述限速器根据所述第二宏单元的当前平均报文长度刷新所述限速器的令牌。

本发明实施例中不需要存储第二宏单元内各个报文的真实长度,只需要维护报文平均长度即可,可以以宏单元粒度进行刷新调度器和限速器,对调度的效果没有影响。

结合第二方面或第二方面的第一种可能或第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述队列管理装置还包括:链表维护模块,其中,

所述链表维护模块,用于所述队列信息生成模块根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息之后,根据所述第一宏单元对应的队列信息维护所述第一实体队列的链表。

本发明实施例中对第一实体队列的管理可以通过链表的方式来完成,链表中的队尾指针可以指向刚入队的第一宏单元,实现对实体队列的管理。

结合第二方面或第二方面的第一种可能或第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述存储模块,具体用于将所述第一宏单元内部的尾指针分配给第一报文,并修改所述第一宏单元内部的尾指针对应的偏移值。

本发明实施例中第一宏单元中在写入第一报文时修改第一宏单元内部的尾指针对应的偏移值,从而通过宏单元的尾指针可以指向新增加的报文。

结合第二方面或第二方面的第一种可能或第二种可能的实现方式,在第二方面的第五种可能的实现方式中,所述平均报文长度修正模块,包括:

报文数量获取模块,用于获取所述第一宏单元存储所述第一报文之前已经存储的所有报文数量;

平均报文长度计算模块,用于根据所述已经存储的所有报文数量、所述第一宏单元存储了所述第一报文之前的平均报文长度和所述第一报文的报文长度计算修正第一宏单元的当前平均报文长度。

本发明实施例中可以第一宏单元在有新的报文写入时修改第一宏单元的当前平均报文长度,而不需要记录每个报文的真实长度,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

从以上技术方案可以看出,本发明实施例具有以下优点:

在本发明实施例中,首先将第一报文存储到第一宏单元中的第一缓存单元,该第一宏单元入队到第一实体队列,该第一宏单元包括:连续的N个缓存单元,然后根据第一报文的报文长度对第一宏单元存储第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,最后根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度。本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元可入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

附图说明

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

图1为本发明实施例提供的一种队列管理方法的流程方框示意图;

图2为本发明实施例提供的随机存储器中的宏单元的处理流程示意图;

图3-a为本发明实施例提供的一种队列管理装置的组成结构示意图;

图3-b为本发明实施例提供的另一种队列管理装置的组成结构示意图;

图3-c为本发明实施例提供的另一种队列管理装置的组成结构示意图;

图3-d为本发明实施例提供的另一种队列管理装置的组成结构示意图;

图3-e为本发明实施例提供的一种平均报文长度修正模块的组成结构示意图;

图4为本发明实施例提供的另一种队列管理装置的组成结构示意图。

具体实施方式

本发明实施例提供了一种队列管理方法和装置,减少实体队列占用的网络芯片内部的存储资源,降低芯片成本和功耗。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

以下分别进行详细说明。

本发明队列管理方法的一个实施例,可应用于对实体队列的流量管理中,请参阅图1所示,本发明一个实施例提供的队列管理方法,可以包括如下步骤:

101、将第一报文存储到第一宏单元包括的第一缓存单元,第一宏单元入队到第一实体队列,第一宏单元包括:连续的N个缓存单元。

其中,N为大于或等于2的自然数,第一缓存单元属于N个缓存单元。

在本发明实施例中,从网络芯片的接口可以接收到需要缓存的报文,为便于描述,后续实施例中可以将该需要缓存的报文定义为第一报文,该第一报文需要缓存到网络芯片外的随机存储器,例如双倍速率同步动态随机存储器(英文全称:Double Data Rate Synchronous Dynamic Random Access Memory,英文简称:DDR SDRAM)。本发明实施例中网络芯片外的随机存储器中划分有多个宏单元,每个宏单元都包括连续的多个缓存单元,即在随机存储器中连续的多个缓存单元可封装为一个宏单元,每个缓存单元都是随机存储器中的一个存储单元(英文名称:Cell),每个缓存单元都有一个标识,即Cell的指针,Cell的指针对应到随机存储器的物理地址。具体的,一个宏单元包括:连续的N个缓存单元,N的取值为大于等于2的自然数,N个缓存单元的地址在存储空间中是连续的。例如,可以将地址连续的8个缓存单元封装为一个宏单元,又如,可以将地址连续的4个缓存单元封装为一个宏单元,或者,将地址连续的16个缓存单元封装为一个宏单元。

在本发明实施例中,网络芯片外的随机存储器中可以划分有多个宏单元,一个完整的报文可以存储到一个缓存单元中,为了便于描述,将第一报文存储到随机存储器中的宏单元定义为第一宏单元,具体的,第一宏单元中包括有多个连续的缓存单元,将存储了第一报文的缓存单元定义为第一缓存单元,该第一报文具体可以存储到第一宏单元中的第一缓存单元中,第一报文存储的第一缓存单元为第一宏单元中包括的连续N个缓存单元中的一个缓存单元。例如,可以将第一报文存储到第一宏单元中尾指针指向的存储地址。

具体的,在本发明实施例中,步骤101将第一报文存储到第一宏单元包括的第一缓存单元,包括:

A1、将第一宏单元内部的尾指针分配给第一报文,并修改第一宏单元内部的尾指针对应的偏移值。

其中,第一宏单元中包括连续的N个缓存单元,一个缓存单元用于存储一个报文,当第一报文需要存储到第一宏单元时,从第一宏单元中查找空闲的缓存单元,则第一宏单元内部的尾指针指向的第一缓存单元是空闲的,第一报文可以存储到第一宏单元内部的尾指针指向的地址空间,第一报文存储之后还可以将第一宏单元内部的尾指针对应的偏移值修改为下一个空闲的缓存单元,例如第一宏单元内部的尾指针的偏移值增加1,此处只是举例,具体偏移的尺度可以取决于应用场景的需要,此处举例不作为对本发明的限定。

102、根据第一报文的报文长度对第一宏单元存储了第一报文之前的平均报文长度(英文名称:Average Packet Length)进行修正,得到第一宏单元的当前平均报文长度。

其中,本发明实施例中可以针对每个宏单元获取到该宏单元的平均报文长度,宏单元的平均报文长度指的是在宏单元中存储的所有报文长度的平均值,单位可以为字节(英文名称:Byte)。在宏单元中每存储一个新的报文时,都可以对原平均报文长度进行修正,即可以根据存储的新的报文长度来修正原平均报文长度。例如,第一宏单元在存储第一报文之前计算出平均报文长度,当该第一宏单元中写入了第一报文之后,可以根据该第一报文的报文长度对第一宏单元的平均报文长度进行修正,得到第一宏单元的当前平均报文长度。本发明实施例中,在第一实体队列中入队第一宏单元,该第一实体队列中在第一报文写入第一宏单元后,可以根据新写入的第一报文的报文长度来修正第一宏单元的原平均报文长度,在第一实体队列中并不需要保存每个报文的报文长度,而是以宏单元为粒度,对于每个宏单元只保存一个平均报文长度,从而节省保存每个报文的报文长度带来的很多开销,当宏单元中存储的报文越多时,其可以节省的开销就越大。

在本发明的一些实施例中,步骤102根据第一报文的报文长度对第一宏单元存储了第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,具体可以包括如下步骤:

B1、获取第一宏单元存储第一报文之前已经存储的所有报文数量;

B2、根据已经存储的所有报文数量、第一宏单元存储了第一报文之前的平均报文长度和第一报文的报文长度计算第一宏单元的当前平均报文长度。

其中,首先执行步骤B1,获取到第一宏单元存储了第一报文之前已经存储的所有报文数量,即在存储第一报文前,该第一宏单元中已存储的报文个数,例如,可以通过第一宏单元内部的头指针和第一宏单元内部的尾指针之间的差值来确定出第一宏单元中已存储的报文个数。然后执行步骤B2,根据已经存储的所有报文数量、第一宏单元存储了第一报文之前的平均报文长度和第一报文的报文长度计算第一宏单元的当前平均报文长度。举例说明如下,可以采用如下公式来计算:平均报文长度new=(平均报文长度old*报文数量old+入队报文长度)/(报文数量old+1)。其中,平均报文长度old指的是存储了第一报文之前的平均报文长度,入队报文长度指的是第一报文的报文长度,报文数量old指的是在第一宏单元中已经存储的所有报文数量。

103、根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度。

在本发明实施例中获取到第一宏单元的当前平均报文长度之后,可以根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,该第一宏单元对应的队列信息是第一实体队列中入队第一宏单元的队列管理信息,在第一实体队列中对于每个宏单元都可以生成该宏单元对应的队列管理信息,则对于实体队列中的每一个宏单元对应的队列信息包括:该宏单元在该实体队列中的宏单元标识、该宏单元内部的头指针、该宏单元内部的尾指针和该宏单元的当前平均报文长度。需要说明的是,在本发明实施例中每个宏单元中有报文入队时都需要修改该宏单元的平均报文长度,以维护宏单元的当前平均报文长度是存储了新报文之后的平均报文长度。

在本发明实施例中,第一报文存储到第一宏单元中的第一缓存单元之后,通过步骤101可以确定第一报文在第一宏单元中的存储情况,然后确定第一宏单元内部的头指针和第一宏单元内部的尾指针,并且根据该第一宏单元入队到的第一实体队列中的具体地址可以生成第一宏单元在第一实体队列中的宏单元标识。由于第一报文存储到了第一宏单元,因此可以生成第一宏单元对应的队列信息,其中,每个宏单元都链接其后面的一个宏单元,相对于后面的宏单元而言,这个前面的宏单元的地址就是指向下一个宏单元的指针(也称为Next Pointer)。该Next Pointer可以通过第一宏单元在第一实体队列中的宏单元标识来确定,第一实体队列中的各个宏单元的宏单元标识用于确定在第一实体队列中各个宏单元之间的入队顺序。

需要说明的是,在发明实施例中,实体队列中不需要保存每个报文对应的下一个报文的指针,而是保存针对连续的N个缓存单元构成一个宏单元在实体队列中的宏单元标识,若需要缓存的总报文数量为M个,M为一个非零自然数,则按照现有技术,实体队列中就需要针对每个报文的下一个报文保存一个指针,即共保存M个下一个报文的指针。而在本发明实施例中,一个宏单元包括连续的N个缓存单元,每个缓存单元存储一个报文,则一个宏单元可以容纳N个报文,因此总报文数量为M时,需要缓存的宏单元的个数为M/N个,因此共保存M/N个宏单元标识,可见本发明实施例中相比于现有技术占用的芯片内部的队列管理资源更少,只有现有技术中占用的资源数的N分之一,随着N的取值不断增大,本发明实施例占用的芯片内部的队列管理资源更少。另外,在实体队列中还可以包括宏单元内部的头指针和宏单元内部的尾指针,其中,宏单元内部的头指针是宏单元中允许出队报文的一端,头指针指向宏单元中排在最前面的一个报文,宏单元内部的尾指针是宏单元中允许接收报文的一端,尾指针指向宏单元中排在最后面的一个报文。

在本发明实施例中,网络芯片外的随机存储器中一个宏单元只能分配给一个实体队列,即一个宏单元内包含所有报文都入队到同一个实体队列中。例如,第一宏单元对应第一实体队列,则第一宏单元中所有缓存单元内存储的报文都入队到第一实体队列中。需要说明的是,本发明实施例中,因为大带宽的设备要求缓存更多的报文,因此报文数据都缓存在网络芯片外的随机存储器,但第一宏单元对应的队列信息都存储到网络芯片的内部,网络芯片内部通过实体队列来管理宏单元对应的队列信息。

在本发明的一些实施例中,第一实体队列,至少包括:第一宏单元和在第一实体队列中处于第一宏单元之前且相邻的第二宏单元,本发明实施例提供的队列管理方法除了执行前述的步骤之外,还可以包括如下步骤:

C1、从第一实体队列中确定出需要报文出队的宏单元为第二宏单元,第二宏单元对应的队列信息包括:第二宏单元在第一实体队列中的宏单元标识、第二宏单元内部的头指针、第二宏单元内部的尾指针和第二宏单元的当前平均报文长度;

C2、根据第二宏单元内部的头指针读取到需要出队的第二报文,并修改第二宏单元内部的头指针对应的偏移值。

其中,步骤101至步骤103描述了本发明实施例中第一报文的缓存和入队,接下来通过步骤C1和步骤C2来介绍本发明实施例中对第二报文的调度和出队。其中,哪个报文需要出队可以通过配置的调度方式来确定,例如可以按输出信息如输出端口、用户组、用户和优先级等对报文进行调度,以确定需要调度的报文在哪个实体队列,本发明实施例中以需要出队的报文位于第一实体队列为例,先从多个实体队列中选择出第一实体队列,以该第一实体队列中包括两个宏单元为例,分别为第一宏单元和第二宏单元,第二宏单元为第一实体队列中的队头,第一宏单元为第一实体队列中的队尾,则首先执行步骤C1,从第一实体队列中确定出需要报文出队的宏单元为第二宏单元。

进一步的,在本发明的一些实施例中,步骤C1从第一实体队列中确定出需要报文出队的宏单元为第二宏单元,具体可以包括如下步骤:

C11、根据第一实体队列的链表中的队头指针确定该队头指针指向的宏单元为第二宏单元。

其中,本发明实施例中,实体队列可以通过链表来管理,链表(Link List)是一种最通用的队列的实现方式,链表的数据结构包括队头指针和队尾指针,根据出队信息从第一实体队列的链表的队头指针确定出第二宏单元,则按照前述实施例中的描述,第一实体队列中每个宏单元都生成有对应的队列信息,同样的,第二宏单元也生成有对应的队列信息,接下来根据第二宏单元对应的队列信息可以获取到该第二宏单元内部的头指针,根据第二宏单元内部的头指针从第二宏单元中读取到第二报文,并修改第二宏单元内部的头指针对应的偏移值,例如第二宏单元内部的头指针的偏移值加1,此处只是举例,不作为对本发明的限定。

需要说明的是,在本发明前述步骤C1至C2的实现场景下,是以第一实体队列中的队头为第二宏单元为例进行说明报文的出队方式,若在第一实体队列中只包括第一宏单元,则第一宏单元在第一实体队列中既是队头也是队尾,则步骤C1至C2中的处理对象就可以转换成第一宏单元,也就是说,在第一宏单元中需要出队报文时,可以指向如下步骤:从第一实体队列中确定出需要报文出队的宏单元为第一宏单元,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度;根据第一宏单元内部的头指针读取到需要出队的第二报文,并修改第一宏单元内部的头指针对应的偏移值。

在本发明的一些实施例中,在前述执行步骤C1和C2的实现场景下,步骤C2根据第二宏单元内部的头指针读取到需要出队的第二报文之后,本发明实施例提供的队列管理方法还可以包括如下步骤:

C3、将第二宏单元的当前平均报文长度发送给调度器和限速器,以使调度器根据第二宏单元的当前平均报文长度刷新调度器的权重,限速器根据第二宏单元的当前平均报文长度刷新限速器的令牌。

其中,在第二报文出队时还可以将第二报文所在的第二宏单元的平均报文长度提供给各级调度器和限速器,调度器根据第二宏单元的平均报文长度刷新调度器的权重,限速器根据第二宏单元的平均报文长度刷新限速器的令牌,使用这种方法不需要存储第二宏单元内各个报文的真实长度,只需要维护报文平均长度即可,可以以宏单元粒度进行刷新调度器和限速器,对调度的效果没有影响。

在本发明的一些实施例中,步骤103根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息之后,本发明实施例提供的队列管理方法还可以包括如下步骤:

D1、根据第一宏单元对应的队列信息维护第一实体队列的链表。

其中,本发明实施例中,第一实体队列可以通过链表来管理,链表是一种最通用的队列的实现方式,链表的数据结构包括队头指针和队尾指针,在第一实体队列中入队的第一宏单元中写入有第一报文之后,可以根据生成的第一宏单元对应的队列信息维护第一实体队列的链表,具体的,如果第一实体队列在入队第一宏单元之前为空队列,则该第一宏单元入队到第一实体队列之后,在第一实体队列的链表的队头指针和队尾指针就可以指向该第一宏单元,如果第一实体队列在入队第一宏单元之前已经存储了其它宏单元,则该第一宏单元入队到第一实体队列之后,在第一实体队列的链表的队尾指针就可以指向该第一宏单元。

通过前述实施例对本发明的描述可知,首先将第一报文存储到第一宏单元中的第一缓存单元,该第一宏单元包括:连续的N个缓存单元,然后根据第一报文的报文长度对第一宏单元存储第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,最后根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度。本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元可入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。请参阅如图2所示,本发明实施例提供的随机存储器中的宏单元的处理流程示意图。本发明实施例提出了的队列管理方法可以实现按照宏单元的粒度对报文缓存管理,与现有技术的方法相比可以极大的减少网络芯片内缓存资源的使用。为方便理解和描述,假设本发明实施例中中划分的每一个芯片外DDR SDRAM的缓存单元都可以缓存一个完整的报文,芯片外DDR SDRAM的缓存单元称之为Cell,每一个Cell都有一个自己的标识,Cell的标识可以对应到DDR的物理地址。本发明实施例中将地址连续的8个Cell组成一个宏单元(英文名称:Macro Cell),同时生成一个Macro Cell的标识,如标识为0~7的8个Cell组成的Macro Cell的标识是0,如标识为8~15的8个Cell组成的Macro Cell的标识是1,以此类推。每条实体队列是以Macro Cell为粒度来占用Cell的资源,队列的链表也是基于Macro Cell的标识来创建的。在Macro Cell被分配给某个实体队列后多了一个限制,就是即使一个Macro Cell包含的8个Cell当前还没有被全部占用,那么其中空闲的Cell也不能再分配给其他的实体队列了,即需要建立宏单元和实体队列的唯一对应关系,以保证在一个宏单元内存储的所有报文的队列信息对应于同一个实体队列。

如图2所示以宏单元结构管理随机存储器的缓存,每个宏单元最多管理8个报文(可以是其他数值,不限定为8,以下以8为例进行说明)。图2中,网络芯片外的随机存储器中包括的宏单元分别:MCn、Mcx、MCy、MCm。其中,MCn中包括连续的8个缓存单元,这8个缓存单元中分别存储的报文为:Pn、Pn+1、Pn+2、Pn+3、Pn+4、Pn+5、Pn+6和Pn+7,宏单元MCn中需要出队的报文为MCn中的头指针指向的报文Pn,宏单元MCm中包括连续的8个缓存单元,其中,宏单元MCm中前3个缓存单元中分别存储的报文为:Pm、Pm+1、Pm+2,宏单元MCm中其余的缓存单元为空(英文名称:Null),宏单元MCm中需要新缓存的报文为Pm+3。以每个宏单元为单位维护如下的队列信息,包括宏单元指向下一个宏单元的标识(即Next Pointer)、宏单元的头指针、宏单元的尾指针,另外队列信息还可以包括宏单元内包含所有报文的平均报文长度。通过维护宏单元指向的下一个宏单元的标识、宏单元内部的头指针偏移值、宏单元内部的尾指针偏移值,就可以组成整个实体队列的队列链表了,而不需要存储每个报文的下一个报文的指针。

其中,一个宏单元内报文数量=宏单元内尾指针偏移值-宏单元内头指针偏移值+1。以宏单元MCn为例,宏单元内尾指针偏移值-宏单元内头指针偏移值=7-0,然后再加1可以得到该宏单元MCn内存储了8个报文。

当宏单元中报文出队时,读取宏单元头指针指向的报文,将此报文输出,同时宏单元头指针偏移值加1。例如,宏单元MCn内的头指针指向的报文Pn出队,则宏单元的头指针偏移值加1。

当报文入队向宏单元申请分配地址时,宏单元尾指针分配给入队报文,同时宏单元尾指针偏移值加1。例如,宏单元MCm内的尾指针指向报文Pm+2,当报文Pm+3入队时,则宏单元的尾指针偏移值加1。

需要说明的是,在本发明实施例中,宏单元中报文全部出队时,可以回收宏单元的地址指针,该宏单元可以分配给其它的实体队列。假定总缓存报文数量为M,每个宏单元内缓存8个报文,则需管理的宏单元的数量为M/8。宏单元通过维护的平均报文长度给每一次调度提供出队报文长度,报文出队时将平均报文长度提供给各级调度器和限速器。报文在出队时,宏单元的平均报文长度不变,当宏单元中报文入队时,宏单元的平均报文长度维护公式如下:平均报文长度new=(平均报文长度old*报文数量old+入队报文长度)/(报文数量old+1)。使用这种方法不需要存储宏单元内各个报文的真实长度,只需要维护平均报文长度即可,本发明实施例中可以在宏单元粒度上分析,对调度的效果没有影响。

通过前述对本发明的举例说明可知,本发明实施例中使用宏单元来管理的缓存资源,用宏单元地址和宏单元内部报文的头/尾偏移指针来维护实体队列的链表资源,大大减少了管理实体队列的链表对芯片内部的资源的占用。以宏单元为单位来维护其内部所有报文的平均报文长度,使用平均报文长度刷新调度器和限速器的状态,相对于传统的以报文为单位来维护报文长度减少了调度信息对芯片内部的资源的占用,同时又不影响调度的效果。

以100G字节的处理能力的芯片而言,一般需要缓存的短报文的数量都会达到几百K个报文的量级,甚至1M个报文的量级了。以缓存1M个报文为例,1M个报文需要用20bit的指针来表示,每个报文的长度信息以支持9600字节的最长报文来计算就需要14bit,按照现有技术,芯片内部要保存的下一个报文指针和报文长度的相关资源就要34Mbit,这样的数量会占用很大的芯片内缓存资源,会带来芯片成本和功耗的增加。而本发明实施例中,以系统管理1M个缓存地址,每8个连续的缓存地址封装为一个宏单元,共产生128K个宏单元,以每个宏单元内维护下一个宏单元的指针17bit、宏单元内报文的头/尾指针各3bit,宏单元内报文的平均长度14bit来计算,需要芯片内的缓存资源约5Mbit,远小于现有技术中的34Mbit。设缓存报文数量为M,宏单元容量为8,在片外DDR缓存规模相同的情况下,本发明实施例与现有技术方法相比可节约片内逻辑使用的缓存(34-5)/34=85.29%的资源,在芯片外缓存规模相同的情况下,减小了芯片实体队列的链表和报文长度占用的芯片内部的资源。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。

请参阅图3-a所示,本发明实施例提供的一种队列管理装置300,可以包括:存储模块301、平均报文长度修正模块302和队列信息生成模块303,其中,

存储模块301,用于将第一报文存储到第一宏单元包括的第一缓存单元,所述第一宏单元入队到第一实体队列,所述第一宏单元包括:连续的N个缓存单元,所述N为大于或等于2的自然数,所述第一缓存单元属于所述N个缓存单元;

平均报文长度修正模块302,用于根据所述第一报文的报文长度对所述第一宏单元存储了所述第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度;

队列信息生成模块303,用于根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息,所述第一宏单元对应的队列信息包括:所述第一宏单元在所述第一实体队列中的宏单元标识、所述第一宏单元内部的头指针和所述第一宏单元内部的尾指针和所述第一宏单元的当前平均报文长度。

在本发明的一些实施例中,所述第一实体队列,至少包括:第一宏单元和在所述第一实体队列中处于所述第一宏单元之前且相邻的第二宏单元,如图3-b所示,所述队列管理装置300还包括:出队管理模块304和报文读取模块305,其中,

出队管理模块304,用于从所述第一实体队列中确定出需要报文出队的宏单元为第二宏单元,所述第二宏单元对应的队列信息包括:所述第二宏单元在所述第一实体队列中的宏单元标识、所述第二宏单元内部的头指针、所述第二宏单元内部的尾指针和所述第二宏单元的当前平均报文长度;

报文读取模块305,用于根据所述第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值。

进一步的,在本发明的一些实施例中,所述出队管理模块304,出队管理模块,具体用于根据所述第一实体队列的链表中的队头指针确定该队头指针指向的宏单元为第二宏单元。

进一步的,在本发明的一些实施例中,如图3-c所示,相对于如图3-b所示,所述队列管理装置300还包括:发送模块306,其中,

所述发送模块306,用于所述报文读取模块305根据所述第二宏单元内部的头指针读取到需要出队的第二报文之后,将所述第二宏单元的当前平均报文长度发送给调度器和限速器,以使所述调度器根据所述第二宏单元的当前平均报文长度刷新所述调度器的权重,所述限速器根据所述第二宏单元的当前平均报文长度刷新所述限速器的令牌。

在本发明的一些实施例中,如图3-d所示,相对于如图3-a所示,所述队列管理装置300还包括:链表维护模块307,其中,

所述链表维护模块307,用于所述队列信息生成模块303根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息之后,根据所述第一宏单元对应的队列信息维护所述第一实体队列的链表。

在本发明的一些实施例中,所述存储模块301,具体用于将所述第一宏单元内部的尾指针分配给第一报文,并修改所述第一宏单元内部的尾指针对应的偏移值。

在本发明的一些实施例中,如图3-e所示,所述平均报文长度修正模块302,包括:

报文数量获取模块3021,用于获取所述第一宏单元存储所述第一报文之前已经存储的所有报文数量;

平均报文长度计算模块3022,用于根据所述已经存储的所有报文数量、所述第一宏单元存储了所述第一报文之前的平均报文长度和所述第一报文的报文长度计算修正第一宏单元的当前平均报文长度。

通过前述实施例对本发明的描述可知,首先将第一报文存储到第一宏单元中的第一缓存单元,该第一宏单元包括:连续的N个缓存单元,然后根据第一报文的报文长度对第一宏单元存储第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,最后根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度。本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元可入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明前述所示的方法实施例中的叙述,此处不再赘述。

本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。

接下来介绍本发明实施例提供的另一种队列管理装置,请参阅图4所示,队列管理装置400包括:

接收器401、发射器402、处理器403和存储器404(其中队列管理装置400中的处理器403的数量可以一个或多个,图4中以一个处理器为例)。在本发明的一些实施例中,接收器401、发射器402、处理器403和存储器404可通过总线或其它方式连接,其中,图4中以通过总线连接为例。

存储器404可以包括只读存储器和随机存取存储器,并向处理器403提供指令和数据。存储器404的一部分还可以包括非易失性随机存取存储器(英文全称:Non-Volatile Random Access Memory,英文缩写:NVRAM)。存储器404存储有操作系统和操作指令、可执行模块或者数据结构,或者它们的子集,或者它们的扩展集,其中,操作指令可包括各种操作指令,用于实现各种操作。操作系统可包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。

处理器403控制队列管理装置的操作,处理器403还可以称为中央处理单元(英文全称:Central Processing Unit,英文简称:CPU)。具体的应用中,队列管理装置的各个组件通过总线系统耦合在一起,其中总线系统除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都称为总线系统。

上述本发明实施例揭示的方法可以应用于处理器403中,或者由处理器403实现。处理器403可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器403中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器403可以是通用处理器、数字信号处理器(英文全称:digital signal processing,英文缩写:DSP)、专用集成电路(英文全称:Application Specific Integrated Circuit,英文缩写:ASIC)、现场可编程门阵列(英文全称:Field-Programmable Gate Array,英文缩写:FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器404,处理器403读取存储器404中的信息,结合其硬件完成上述方法的步骤。

本发明实施例中,处理器403,用于执行前述实施例中描述的队列管理方法,详见前述实施例的说明。

在本发明实施例中,存储器304存储的实体队列,实体队列中入队有第一宏单元,该第一宏单元包括:连续的N个缓存单元,所述N为大于或等于2的自然数,第一缓存单元属于N个缓存单元。

在本发明实施例中,处理器403,用于执行如下步骤:

将第一报文存储到第一宏单元包括的第一缓存单元,所述第一宏单元入队到第一实体队列,所述第一宏单元包括:连续的N个缓存单元,所述N为大于或等于2的自然数,所述第一缓存单元属于所述N个缓存单元;

根据所述第一报文的报文长度对所述第一宏单元存储了所述第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度;

根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息,所述第一宏单元对应的队列信息包括:所述第一宏单元在所述第一实体队列中的宏单元标识、所述第一宏单元内部的头指针、所述第一宏单元内部的尾指针和所述第一宏单元的当前平均报文长度。

在本发明实施例中,所述第一实体队列,至少包括:第一宏单元和在所述第一实体队列中处于所述第一宏单元之前且相邻的第二宏单元,处理器403,还用于执行如下步骤:

从所述第一实体队列中确定出需要报文出队的宏单元为第二宏单元,所述第二宏单元对应的队列信息包括:所述第二宏单元在所述第一实体队列中的宏单元标识、所述第二宏单元内部的头指针、所述第二宏单元内部的尾指针和所述第二宏单元的当前平均报文长度;

根据所述第二宏单元内部的头指针读取到需要出队的第二报文,并修改所述第二宏单元内部的头指针对应的偏移值。

在本发明一些实施例中,处理器403,还用于执行如下步骤:根据所述第二宏单元内部的头指针读取到需要出队的第二报文之后,将所述第二宏单元的当前平均报文长度发送给调度器和限速器,以使所述调度器根据所述第二宏单元的当前平均报文长度刷新所述调度器的权重,所述限速器根据所述第二宏单元的当前平均报文长度刷新所述限速器的令牌。

在本发明一些实施例中,处理器403,还用于执行如下步骤:根据所述第一宏单元和所述第一实体队列生成所述第一宏单元对应的队列信息之后,根据所述第一宏单元对应的队列信息维护所述第一实体队列的链表。

在本发明一些实施例中,处理器403,具体用于执行如下步骤:

将所述第一宏单元内部的尾指针分配给第一报文,并修改所述第一宏单元内部的尾指针对应的偏移值。

在本发明一些实施例中,处理器403,具体用于执行如下步骤:

获取所述第一宏单元存储所述第一报文之前已经存储的所有报文数量;

根据所述已经存储的所有报文数量、所述第一宏单元存储了所述第一报文之前的平均报文长度和所述第一报文的报文长度计算第一宏单元的当前平均报文长度。

通过前述实施例对本发明的描述可知,首先将第一报文存储到第一宏单元中的第一缓存单元,该第一宏单元包括:连续的N个缓存单元,然后根据第一报文的报文长度对第一宏单元存储第一报文之前的平均报文长度进行修正,得到第一宏单元的当前平均报文长度,最后将第一宏单元入队到第一实体队列,并根据第一宏单元和第一实体队列生成第一宏单元对应的队列信息,第一宏单元对应的队列信息包括:第一宏单元在第一实体队列中的宏单元标识、第一宏单元内部的头指针、第一宏单元内部的尾指针和第一宏单元的当前平均报文长度。本发明实施例中对于连续的多个缓存单元可封装为一个宏单元,并且宏单元是入队到实体队列中,例如第一宏单元入队到第一实体队列,实体队列的管理是以宏单元为粒度来使用缓存单元的资源,不需要存储每个报文指向的下一个报文的指针,由于本发明实施例中对于一个宏单元只需要维护宏单元内部的平均报文长度,也不需要存储每个报文的报文长度,因此本发明实施例中在网络芯片外缓存报文的规模相同的情况下,减小了网络芯片内实体队列占用的网络芯片内部的存储资源,从而可以降低网络芯片的成本和功耗。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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