发明内容
本发明提供了一种队列管理方法及装置,以至少解决相关技术中短包处理速率达不到系统带宽要求的问题。
根据本发明的一个方面,提供了一种队列管理方法,其包括:获取当前出队的队列的报文概数,其中,上述报文概数存储在队列管理组件内部,上述报文概数用于指示上述队列中当前有的报文数目的状态;根据上述报文概数判断上述队列允许再次出队的次数。
优选地,上述状态包括以下之一:上述报文概数等于0、上述报文概数等于1至N中任意一个数,上述报文概数大于上述N,其中,上述N为获取上述队列中当前有的报文数目所需的时钟周期允许上述队列出队的次数,上述报文数目存储在上述队列管组件的外部。
优选地,根据上述报文概数判断上述队列允许再次出队的次数包括:上述报文概数大于1的情况下,判断出上述队列允许再次出队一次;上述报文概数大于2的情况下,判断出上述队列允许再次出队二次;依次判断,上述报文概数大于上述N的情况下,判断出上述队列允许再次出队N次。
优选地,上述方法还包括:判断出上述队列允许再次出队的情况下,将上述报文数目减去判断出的上述队列允许再次出队的次数,并根据更新后的报文数目重新确定上述报文概数指示的状态。
优选地,上述方法还包括:上述队列入队的情况下,将上述报文概数加上1,将上述报文数目加上1。
根据本发明的另一方面,提供了一种队列管理装置,其包括:获取模块,用于获取当前出队的队列的报文概数,其中,上述报文概数存储在队列管理组件内部,上述报文概数用于指示上述队列中当前有的报文数目的状态;判断模块,用于根据上述报文概数判断上述队列允许再次出队的次数。
优选地,上述状态包括以下之一:上述报文概数等于0、上述报文概数等于1至N中任意一个数,上述报文概数大于上述N,其中,上述N为获取上述队列中当前有的报文数目所需的时钟周期允许上述队列出队的次数,上述报文数目存储在上述队列管组件的外部。
优选地,上述判断模块包括:第一判断单元,用于上述报文概数大于1的情况下,判断出上述队列允许再次出队一次;第二判断单元,上述报文概数大于2的情况下,判断出上述队列允许再次出队二次;第N判断单元,用于上述报文概数大于N的情况下,判断出上述队列允许再次出队N次。
优选地,上述队列管理装置还包括:第一处理模块,用于判断出上述队列允许再次出队的情况下,将上述报文数目减去判断出的上述队列允许再次出队的次数,并根据更新后的报文数目重新确定上述报文概数指示的状态。
优选地,上述队列管理装置还包括:第二处理模块,用于上述队列入队的情况下,将上述报文概数加上1,将上述报文数目加上1。
在本发明中,通过获取当前出队的队列的报文概数,该报文概数存储在队列管理组件内部,所述报文概数用于指示所述队列中当前有的报文数目的状态,并根据所述报文概数判断所述队列允许再次出队的次数,实现了可以快速地获取报文概数,来及时地判断出允许再次出队的次数,缩短了判断是否允许再次出队所需的时间,从而提高了队列出队(短包处理)的效率,有助于提高流量管理系统的性能。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本实施例提供了一种队列管理方法,如图2所示,该队列管理方法包括步骤S202至步骤S204。
步骤S202:获取当前出队的队列的报文概数,其中,上述报文概数存储在队列管理组件内部,上述报文概数用于指示上述队列中当前有的报文数目的状态。
步骤S204:根据上述报文概数判断上述队列允许再次出队的次数。
通过上述步骤,通过获取当前出队的队列的报文概数,该报文概数存储在队列管理组件内部,所述报文概数用于指示所述队列中当前有的报文数目的状态,并根据所述报文概数判断所述队列允许再次出队的次数,实现了可以快速地获取报文概数,来及时地判断出允许再次出队的次数,缩短了判断是否允许再次出队所需的时间,从而提高了队列出队(短包处理)的效率,有助于提高流量管理系统的性能。
为了减少队列管理组件片内的存储资源的占用,在本优选实施例中,上述状态包括以下之一:上述报文概数等于0、上述报文概数等于1至N中任意一个数,上述报文概数大于上述N,其中,上述N为获取上述队列中当前有的报文数目所需的时钟周期允许上述队列出队的次数,上述报文数目存储在上述队列管组件的外部。为了减少存储资源的占用,上述报文概数的状态可以采用bits的形式来存储,例如,当N=1时,需要存储报文概数的状态包括以下之一:报文概数=0,报文概数=1,报文概数>1,因此可以采用2bit的形式存储,2’b00来表示无报文(报文概数=0),以2’b01来表示有1个报文(报文概数=1),以2’b10来表示有1个以上报文(报文概数>1);而当N=2时,需要存储报文概数的状态包括以下之一:报文概数=0,报文概数=1,报文概数=2,报文概数>2,因此可以采用2bit的形式存储,2’b00来表示无报文,以2’b01来表示有1个报文,以2’b10来表示有2个报文,以2‘b11来表示有2个以上的报文;而当N=3时报文概数的状态包括以下之一:报文概数=0,报文概数=1,报文概数=2,报文概数=3,报文概数>3,此时可以采用3bit的形式存储,3’b000来表示无报文,以3’b001来表示有1个报文,以3’b010来表示有2个报文,以3’b011来表示有3个报文,以3‘b100来表示有3个以上的报文;上述N的取值可以根据获取外部存储的报文数目所需的时钟周期和队列出队(短包处理)所需间隔的时钟周期来确定,为了保证队列出队的效率,上述N为获取上述队列中当前有的报文数目所需的时钟周期允许上述队列出队的次数。
为了及时地、快速地判断出队列可以再次出队的次数,在本优选实施例中,根据上述报文概数判断上述队列允许再次出队的次数包括:上述报文概数大于1的情况下,判断出上述队列允许再次出队一次;上述报文概数大于2的情况下,判断出上述队列允许再次出队二次;依次判断,上述报文概数大于N的情况下,判断出上述队列允许再次出队N次。即上述报文概数大于1时,可以再次出队一次,上述报文概数大于2时,可以再次出队2次,一次类推,当上述报文概数大于N时,则可以再次出队N,避免了根据外部存储的报文数目来判断是否可以再次出队,从而缩短了判断再次出队所需的时间。
为了可以准确地判断出是否可以再次出队,在本优选实施例中,上述队列管理方法还包括:判断出上述队列允许再次出队的情况下,将上述报文数目减去判断出的上述队列允许再次出队的次数,并根据更新后的报文数目重新确定上述报文概数指示的状态。即当获取报文数目时,将获取的报文数目减去上述判断出的允许出队次数,例如,判断出的允许出队的次数2,则将获取的报文数目减去2,并根据更新后的报文数目重新确定上述报文概数指示的状态,以保证上述报文概数和上述报文数目与实际有的报文数目相一致,并保存更新后的报文概数状态和报文数目。
为了可以准确地判断出是否可以再次出队,在本优选实施例中,上述队列管理方法还包括:上述队列入队的情况下,将上述报文概数加上1,将上述报文数目加上1。即每入队一次,更新上述报文概数和上述报文数目,以保证上述报文概数和上述报文数目与当前实际有的报文数目相一致,并保存更新后的报文概数和报文数目。
本优选实施例提供了一种队列管理装置,如图3所示,该队列管理装置包括:获取模块302,用于获取当前出队的队列的报文概数,其中,上述报文概数存储在队列管理组件内部,上述报文概数用于指示上述队列中当前有的报文数目的状态;判断模块304,连接至获取模块302,用于根据上述报文概数判断上述队列允许再次出队的次数。
在上述优选实施例中,通过获取模块302获取当前出队的队列的报文概数,该报文概数存储在队列管理组件内部,所述报文概数用于指示所述队列中当前有的报文数目的状态,判断模块304根据所述报文概数判断所述队列允许再次出队的次数,实现了可以快速地获取报文概数,来及时地判断出允许再次出队的次数,缩短了判断是否允许再次出队所需的时间,从而提高了队列出队(短包处理)的效率,有助于提高流量管理系统的性能。
为了及时地、快速地判断出队列可以再次出队的次数,在本优选实施例中,上述判断模块304包括:第一判断单元,用于上述报文概数大于1的情况下,判断出上述队列允许再次出队一次;第二判断单元,上述报文概数大于2的情况下,判断出上述队列允许再次出队二次;第N判断单元,用于上述报文概数大于N的情况下,判断出上述队列允许再次出队N次。
为了可以准确地判断出是否可以再次出队,在本优选实施例中,如图3所示,上述队列管理装置还包括:第一处理模块306,用于判断出上述队列允许再次出队的情况下,将上述报文数目减去判断出的上述队列允许再次出队的次数,并根据更新后的报文数目重新确定上述报文概数指示的状态。第二处理模块308,用于上述队列入队的情况下,将上述报文概数加上1,将上述报文数目加上1。
以下结合附图对上述各个优选实施例进行详细地描述。
在本优选实施例中,如图4所示,可以在队列管理组件片内增加一个SRAM来存储报文概数(或称为内部计数),该报文概数用于指示此次报文出队后该队列是否还有报文可以出队,由于上述报文概数存储在片内,获取上述报文概数所需的时间较短,可以在上次报文出队后1~2个时钟周期以后判断出该队列是否还需要进行出队调度,相比之前直接读取外部QDRSRAM的报文数目(或称为外部计数)需要N~N+1(通常N=8)个时钟周期才能给出判断结果,短包处理间隔大大缩短。
在本优选实施例中,以队列管理中包入队为例,以如下场景为例,短包处理间隔为8个时钟周期,QDR SRAM读延迟为8个时钟周期,内部SRAM指定值(上述N)为1,报文概数状态有大于1、等于1和等于0三个不同状态,因此需要用2bits来表示,来详细描述上述队列管理方法的处理流程,如图5所示,该流程包括如下步骤:
步骤S502:判断是否接收到入队操作使能,若是,则转至步骤S504,若否,则继续步骤S502。
步骤S504:队列入队读取QDR SRAM外部计数(相当于上述报文数目)和SRAM内部计数(相当于上述报文概数状态),例如,该SRAM中存储2bits的内部计数,其中,2’b00表示无报文,2’b01表示有一个报文,2’b10表示有一个以上报文。
步骤S506:例如1个时钟周期后,读出内部计数,将该内部计数加1,即原值是2’b00更新为2’b10,原值为2’b01更新为2’b10,原值为2’b10的保持2’b10,并将最新的内部计数值存入SRAM中。
步骤S508:例如M个时钟周期(该时钟周期根据外部QDR SRAM而定)后,读出外部计数,将该外部计数加1,将最新的外部计数值存入QDR SRAM中,转至步骤S502。
在本优选实施例中,以队列管理中包出队为例,以如下场景为例,短包处理间隔为8个时钟周期,QDR SRAM读延迟为8个时钟周期,内部SRAM指定值(上述N)为1,报文概数状态有大于1、等于1和等于0三个不同状态,因此需要用2bits来表示,来详细描述上述队列管理方法的处理流程,如图6所示,该流程包括如下步骤:
步骤S602:判断是否收到出队操作使能,若是,则转至步骤S604,若否,则继续步骤S602。
步骤S604:队列出队读取QDR SRAM外部计数(相当于上述报文数目)和SRAM内部计数(相当于上述报文概数状态),例如,该SRAM中存储2bits的内部计数,其中,2’b00表示无报文,2’b01表示有一个报文,2’b10表示有一个以上报文。
步骤S606:例如1个时钟周期后,读出内部计数;
步骤S608:判断SRAM内部计数是否大于1,如大于1,则执行步骤S612,如不大于1,则执行步骤S610。
步骤S610:该队列不满足再次出队条件,终止出队。
步骤S612:该队列满足再次出队条件,可再次添加进出队链表;
步骤S614:得到QDR SRAM外部计数之后,将该外部计数减1,并根据更新后的外部计数确定内部计数(相当于上述报文概数状态)。
步骤S614:更新SRAM内部计数和QDR SRAM外部计数,转至步骤S602。
从以上的描述中,可以看出,上述优选实施例实现了如下技术效果:通过上述步骤,通过获取当前出队的队列的报文概数,该报文概数存储在队列管理组件内部,所述报文概数用于指示所述队列中当前有的报文数目的状态,并根据所述报文概数判断所述队列允许再次出队的次数,实现了可以快速地获取报文概数,来及时地判断出允许再次出队的次数,缩短了判断是否允许再次出队所需的时间,从而提高了队列出队(短包处理)的效率,有助于提高流量管理系统的性能。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。