具体实施方式
针对现有技术中每个EF队列都需要分别占用一个FPGA队列,从而造成FPGA资源浪费,以及FPGA队列调度困难的问题,本发明提出一种EF队列的实现方法,通过在一个接口上为不同的类规则分别建立虚拟EF队列,并将多个虚拟EF队列指定到同一个FPGA EF队列的方式,实现多个虚拟EF队列对同一个FPGA EF队列的共享,从而,节约宝贵的FPGA队列资源,并且,可以降低队列调度算法的复杂度。
如图2所示,为本发明实施例所提出的一种EF队列的实现方法的流程示意图,该方法具体包括以下步骤:
步骤S201、当接收到在FPGA的接口上对类规则配置EF队列及其带宽的配置信息时,CPU判断所述接口是否已经分配了FPGA EF队列。
如果判断结果为否,则执行步骤S202;
如果判断结果为是,则执行步骤S204。
在本步骤中,相应的类规则配置EF队列及其带宽的配置信息可以是直接配置给FPGA的,也可以是通过第三方网络设备所发送的配置指令,具体的配置信息的形式变化并不会影响本发明的保护范围。
步骤S202、所述CPU为所述接口分配一个FPGA EF队列,并设置所述FPGAEF队列的带宽值为所述配置信息所配置的EF队列的带宽值。
本步骤为CPU对FPGA的FPGA EF队列配置过程。
由于该接口之前并没有分配FPGA EF队列,因此,需要先为该接口分配一个FPGA EF队列,作为所配置的虚拟EF队列所共享的FPGA队列资源,并根据配置信息所配置的带宽值设定该FPGA EF队列的带宽值,即保证该FPGA EF队列可以为该虚拟EF队列提供足够的FPGA队列资源。
步骤S203、所述CPU向所述接口下发相应的流量策略表项,为所述接口配置与所述配置信息相对应的虚拟EF队列,并将所述虚拟EF队列指定到所述FPGA EF队列。
需要指出的是,本步骤所提出的流量策略表项实现了对虚拟EF队列的流量进出速率限定,通过这样的流量策略表项,可以实现对该虚拟EF队列所接收到的报文进行流量评估,从而,确定该虚拟EF队列所接收到的报文的流量是否超过了该虚拟EF队列的预设带宽,在具体的处理场景中,这样的流量策略表项可以具体为CAR策略表项,或者其他能够设定流量限制的策略类型,具体策略表项类型的变化,并不会影响本发明的保护范围。
本步骤为CPU对FPGA的虚拟EF队列配置过程。
通过前述的步骤S201,CPU确认需要为该接口配置EF队列,通过前述的步骤S202,CPU通过对该接口配置FPGA EF队列,并设置相应的带宽,为在该接口配置虚拟EF队列准备了相应的FPGA队列资源,最后,通过本步骤,将相应的流量策略表项发给FPGA,在FPGA的相应接口上实现相应的虚拟EF队列的配置,同时,通过将虚拟EF队列指定到步骤S202中所配置的FPGAEF队列,来实现虚拟EF队列对FPGAEF队列资源的共享。
步骤S204、所述CPU调整所述接口上所分配的FPGA EF队列的带宽值为所述配置信息所配置的EF队列的带宽值和所述接口上已配置的EF队列的带宽值之和。
本步骤为CPU对FPGA的FPGA EF队列的带宽调整过程。
由于该接口之前已经分配了FPGA EF队列,但是该FPGA EF队列的带宽是按照之前该接口上所配置的虚拟EF队列的资源需要进行配置的,由于需要新增虚拟EF队列,其所共享的FPGA EF队列的带宽需求必然进一步增加,因此,需要对FPGA EF队列的带宽值进行调整,其调整后的带宽值为所述配置信息所配置的EF队列的带宽值和该接口上已配置的EF队列的带宽值之和,即保证在新增虚拟EF队列后,该FPGA EF队列可以同时为所有的虚拟EF队列提供FPGA队列资源。
本步骤完成后,CPU同样执行步骤S203,按照相应配置信息,对该接口增加相应的流量策略表项。
通过前述的步骤S201,CPU根据接收到的配置信息确认需要为该接口配置EF队列,同时,判断之前已经为该接口配置了FPGA EF队列,通过前述的步骤S204,CPU通过对该接口已配置的FPGA EF队列的带宽值进行调整,为在该接口配置虚拟EF队列准备了相应的FPGA队列资源,最后,通过步骤S203,将相应的流量策略表项发给FPGA,并在FPGA的相应接口上实现相应的虚拟EF队列的配置。
通过上述的步骤S201至步骤S204的处理,CPU完成了在相应的接口上对于虚拟EF队列的配置,并对各虚拟EF队列指定了共享的FPGA EF队列。通过这样的处理,不仅可以节省FPGA队列资源,而且,在进行队列调度时,由于每个接口只有一个FPGA EF队列,即采用严格优先调度的队列只有一个,不必考虑多个严格优先调度队列之间的公平调度问题,降低了队列调度算法的复杂度。
进一步的,本发明还提出了相应的虚拟EF队列,以及FPGA EF队列的取消配置流程,具体说明如下。
当接收到在所述接口上对虚拟EF队列的取消配置信息时,所述CPU在所述接口上对取消配置信息所对应的流量策略表项进行删除,取消相对应的虚拟EF队列。
在本步骤中,相应的对虚拟EF队列的取消配置信息可以是直接配置给FPGA的,也可以是通过第三方网络设备所发送的配置指令,具体的配置信息的形式变化并不会影响本发明的保护范围。
在取消了相应的虚拟EF队列后,CPU判断当前该接口上是否还剩余至少一个虚拟EF队列。
如果判断结果为否,则表明该接口上不再有任何需要共享该FPGA EF队列的虚拟EF队列,因此,该接口上也就没有了继续配置FPGA EF队列的必要,为了及时回收FPGA队列资源,CPU释放该接口上当前所分配的FPGA EF队列。
如果判断结果为是,则表明该接口上还有其他需要共享该FPGA EF队列的虚拟EF队列,但由于已经取消了一个虚拟EF队列,剩余的其他虚拟EF队列所需要占用的资源必然减小,因此,为了节约宝贵的FPGA队列资源,需要对为当前该接口所配置的FPGA EF队列的带宽资源进行及时调整,具体的调整同样由CPU通过以下过程来实现。
CPU调整所述接口已经分配的FPGA EF队列的带宽值,调整后的带宽值为该接口当前剩余的虚拟EF队列的带宽值之和,即在取消虚拟EF队列后,该接口所剩余的全部虚拟EF队列的带宽值之和。
通过以上的处理过程,在对一个接口取消虚拟EF队列的配置后,CPU及时对该接口所分配的FPGA EF队列的带宽进行调整,将被取消的虚拟EF队列所共享的FPGA队列资源进行释放,直至在该接口上没有虚拟EF队列后,将为该接口分配的FPGA EF队列释放,通过这样的处理,CPU可以根据接口上的虚拟EF队列的配置情况,及时调整为该接口所分配的FPGA EF队列的带宽值,从而,最大限度的节约为相应的接口所分配的FPGA队列资源。
进一步的,在所述CPU完成上述的步骤S203的处理,即为所述接口配置了虚拟EF队列,并将各虚拟EF队列指定到共享的FPGA EF队列之后,本发明还进一步提出了在FPGA转发引擎上通过相应的虚拟EF队列进行报文处理的技术方案,具体包括以下步骤:
(1)当FPGA转发引擎(以下简称FPGA)上配置了相应的虚拟EF队列和FPGA EF队列的接口接收到匹配优先类的报文时,所述FPGA确定所述报文所对应的虚拟EF队列,及所述虚拟EF队列所指定到的所述FPGA EF队列。
通过此处理,FPGA完成对接收到的报文所对应的队列的识别,由于之前所配置的各虚拟EF队列分别对应了不同的类规则,因此,可以根据相应的配置找到报文相对应的虚拟EF队列,并且,由于各虚拟EF队列均制定了FPGAEF队列,在确定了虚拟EF队列后,相应的FPGA EF队列也就随之确定。
需要指出的是,在本发明实施例所提出的技术方案中,在一个接口上,所有的虚拟EF队列均指定到同一个FPGA EF队列,因此,只要是此接口所接收到的报文,无论对应哪个虚拟EF队列,最终所指定到的FPGA EF队列均相同。
(2)所述FPGA根据所述虚拟EF队列所对应的流量策略表项对所述报文的流量进行评估。
具体的,FPGA对当前虚拟EF队列所接收到的报文需要占用的带宽进行评估,然后将评估结果与前述步骤S203为该虚拟EF队列所设置的流量策略表项进行比较,从而,确定当前该虚拟EF队列所接收到的报文的流量是否超过了该虚拟EF队列的分配带宽。
(3)如果所述报文的流量未超过所述虚拟EF队列的分配带宽,所述FPGA对所述报文添加第一标识,如果所述报文的流量超过了所述虚拟EF队列的分配带宽,所述FPGA对所述报文添加第二标识。
通过这样的标识添加处理,将超过分配带宽的流量和未超过分配带宽的流量进行区分,以便在后续步骤中进行区分处理。
FPGA对于添加了所述第一标识的报文直接发送到所述FPGA EF队列;对于添加了所述第二标识的报文,根据所述FPGA EF队列的拥塞状态,按照预设的处理策略进行相应的处理。
由于添加第一标识的报文没有超过分配带宽,因此,可以直接进行后续处理。
而添加第二标识的报文超过了分配带宽,之前并没有为这样的流量分配足够的带宽资源,不能直接进行后续处理,而由于后续的FPGA EF队列是多个虚拟EF队列所共享的,因此,可以识别当前分配给其他虚拟EF队列的资源是否闲置,如果闲置,则可以暂时占用这样的闲置资源进行超过分配带宽的报文的传输,相反,如果没有闲置资源,则直接将超过分配带宽的报文进行丢弃。
在具体的处理场景中,此处所提及的对于添加了第二标识的报文进行处理所应用的处理策略,具体可以为:
所述FPGA判断所述FPGA EF队列当前是否处于拥塞状态。
如果判断结果为否,所述FPGA将添加了所述第二标识的报文直接发送到所述FPGA EF队列。
如果判断结果为是,所述FPGA将添加了所述第二标识的报文丢弃。
与现有技术相比,本发明所提出的技术方案具有以下优点:
通过应用本发明的技术方案,当在FPGA的一个接口上定义多个类规则,并分别指定EF队列时,CPU在该接口上采用CAR方式将其实现为多个虚拟EF队列,同时,CPU只为该接口分配一个FPGA EF队列,并设置该FPGA EF队列的带宽值为各虚拟EF队列的带宽值之和,从而,使各虚拟EF队列共享该FPGAEF队列的资源。通过这样的处理,不仅可以节省FPGA队列资源,而且,在进行队列调度时,由于每个接口只有一个FPGA EF队列,即采用严格优先调度的队列只有一个,不必考虑多个严格优先调度队列之间的公平调度问题,降低了队列调度算法的复杂度。
为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明。
根据本发明实施例所提出的技术方案,对于FPGA转发引擎的一个接口,如果同时定义了多个类规则,并分别为各类规则指定了EF队列及其带宽,那么,可以采用约定流量(例如CAR)的方式,将这样的EF队列配置实现为多个虚拟EF队列,并共享同一个FPGA EF队列。
这样,可以节省宝贵的FPGA队列资源,同时,由于实际只有一个FPGAEF队列配置给该接口,相应的队列调度复杂度也得到了降低。
具体的,本发明实施例分别通过队列配置和报文处理两个阶段对相应的技术方案进行说明。
1、队列配置过程。
基于本发明实施例节约FPGA队列资源的目的,限定对FPGA转发引擎的每个接口最多只能分配一个FPGA EF队列。
当该接口上配置第一个虚拟EF队列时,CPU可以为该接口分配一个FPGA EF队列,作为该虚拟EF队列所使用的FPGA队列资源。
后续再增加或取消虚拟EF队列的配置时,只需要调整该FPGA EF队列的带宽,匹配相应的虚拟EF队列的资源需求即可。
而当该接口上取消最后一个EF队列配置时,则表示该接口不再需要占用FPGA队列资源,因此,取消该接口上所分配的FPGA EF队列,即将配置给该接口的FPGA队列资源进行释放。
基于上述的处理思路,如图3所示,为本发明实施例所提出的一种EF队列的实现方法中的队列配置过程的流程示意图。
步骤S301、接收到在一个接口上对某个类规则配置EF队列及其带宽的配置信息。
步骤S302、CPU判断该接口是否已经分配了FPGA EF队列。
如果否,则执行步骤S303;
如果是,则执行步骤S304。
步骤S303、CPU为该接口分配一个FPGA EF队列。
步骤S304、CPU设置该接口上所分配的FPGA EF队列的带宽,取值为EF队列的配置下发后,该接口上EF队列的带宽之和。
步骤S305、CPU根据前述配置的EF队列带宽向该接口下发FPGA CAR策略表项,实现虚拟EF队列的配置,并将该虚拟EF队列指定到该接口所分配的FPGA EF队列。
通过这样的处理,此接口上的EF队列在FPGA中的配置如图4所示。
在此接口上,匹配某个类规则的报文需要进入指定的EF队列,而每个EF队列在FPGA中用CAR实现为虚拟EF队列,并且,此接口上所有的(虚拟)EF队列共享1个FPGA EF队列,该FPGA EF队列的带宽值为此接口上EF队列的带宽值之和。
2、报文处理过程。
按照现有技术中的配置,EF队列的带宽值用于在拥塞发生时监管流量。如果发生拥塞,优先类超过分配带宽的数据包将被丢弃;如果未发生拥塞,允许优先类使用超过分配的带宽。
而在本发明实施例所提出的技术方案中,采用CAR等流量策略来实现虚拟EF队列,对超出分配带宽(例如CAR限速)的流量不能直接丢弃,否则,达不到未拥塞时允许优先类使用超过分配的带宽的目的。
基于上述思路,对于报文流量的评估结果(例如CAR评估结果),对相应的流量添加不同的流量标识,例如,将报文所对应的流量根据其是否超过相应的虚拟EF队列的分配带宽,分别添加不同颜色的标记,例如绿色标记和红色标记,其中,绿色标记代表未超过分配带宽,红色标记代表已经超出分配带宽。
相应的虚拟EF队列处理场景如图5所示,报文通过虚拟EF队列的CAR评估后,携带绿色或红色标记,到达指定FPGA EF队列。
标记为绿色的报文直接入FPGA EF队列;而在对标记为红色的报文进行入队处理前,需要先评估FPGA EF队列的拥塞情况,如果当前FPGA EF队列长度达到或超过某个阈值(比如队列允许最大长度的2/3),则认为FPGA EF队列发送拥塞,将标记为红色的报文直接丢弃;否则,认为当前FPGA EF队列未拥塞,标记为红色的报文可以入FPGA EF队列。
最后,通过相应的队列调度处理将队列中的报文出队。
基于上述的处理思路,如图6所示,为本发明实施例所提出的一种EF队列的实现方法中的报文处理过程的流程示意图。
步骤S601、FPGA转发引擎的一个接口接收到报文。
步骤S602、FPGA转发引擎对该报文匹配优先类,确定该报文所对应的虚拟EF队列,以及FPGA EF队列的信息。
步骤S603、FPGA转发引擎根据相应的虚拟EF队列所对应的CAR策略表项,对该报文进行CAR评估。
步骤S604、FPGA转发引擎确定当前报文是否通过CAR评估。
如果通过,即当前报文的所对应的流量没有超过虚拟EF队列的分配带宽,则执行步骤S605;
如果没有通过,即当前报文的所对应的流量超过了虚拟EF队列的分配带宽,则执行步骤S606。
步骤S605、FPGA转发引擎为该报文添加绿色标识。
本步骤完成后,FPGA转发引擎在对该报文进行后续处理时,可以直接执行步骤S608。
步骤S606、FPGA转发引擎为该报文添加红色标识。
本步骤完成后,FPGA转发引擎在对该报文进行后续处理时,执行步骤S607。
步骤S607、FPGA转发引擎判断FPGA EF队列当前是否处于拥塞状态。
具体的判断标砖可以根据实际需要进行设置,例如,FPGA转发引擎评估FPGA EF队列的拥塞情况,如果当前FPGA EF队列长度达到或超过某个阈值(比如队列允许最大长度的2/3),则认为FPGA EF队列处于拥塞状态,相反,则认为FPGA EF队列未处于拥塞状态。
如果FPGA EF队列当前未处于拥塞状态,则执行步骤S608。
如果FPGA EF队列当前处于拥塞状态,执行步骤S609。
步骤S608、FPGA转发引擎将该报文转入FPGA EF队列进行转发。
步骤S609、FPGA转发引擎将该报文丢弃。
与现有技术相比,本发明所提出的技术方案具有以下优点:
通过应用本发明的技术方案,当在FPGA的一个接口上定义多个类规则,并分别指定EF队列时,CPU在该接口上采用CAR方式将其实现为多个虚拟EF队列,同时,CPU只为该接口分配一个FPGA EF队列,并设置该FPGA EF队列的带宽值为各虚拟EF队列的带宽值之和,从而,使各虚拟EF队列共享该FPGAEF队列的资源。通过这样的处理,不仅可以节省FPGA队列资源,而且,在进行队列调度时,由于每个接口只有一个FPGA EF队列,即采用严格优先调度的队列只有一个,不必考虑多个严格优先调度队列之间的公平调度问题,降低了队列调度算法的复杂度。
为了实现本发明的技术方案,本发明还提出了一种报文转发系统,包括CPU71和FPGA72,其结构示意图7所示。
其中,所述CPU71,包括:
接收模块711,用于接收在所述FPGA的接口上配置EF队列及其带宽的配置信息;
判断模块712,用于在所述接收模块711接收到在FPGA的接口上对类规则配置EF队列及其带宽的配置信息时,判断所述接口是否已经分配了FPGAEF队列;
第一配置模块713,用于在所述判断模块712的判断结果为否时,为所述接口分配一个FPGA EF队列,并设置所述FPGA EF队列的带宽值为所述配置信息所配置的EF队列的带宽值;
发送模块714,用于根据所述第一配置模块713的配置结果,向所述接口下发相应的流量策略表项,为所述接口配置与所述配置信息相对应的虚拟EF队列,并将所述虚拟EF队列指定到所述FPGA EF队列。
在另一种场景下,所述第一配置模块713,还用于在所述判断模块712的判断结果为是时,调整所述接口上所分配的FPGA EF队列的带宽值为所述配置信息所配置的EF队列的带宽值和所述接口上已配置的EF队列的带宽值之和;
所述发送模块714,还用于根据所述第一配置模块713的调整结果,向所述接口下发相应的流量策略表项,为所述接口配置与所述配置信息相对应的虚拟EF队列,并将所述虚拟EF队列指定到所述FPGA EF队列。
进一步的,对应于虚拟EF队列取消配置的应用场景:
所述接收模块711,还用于接收在所述FPGA的接口上对虚拟EF队列的取消配置信息;
所述第一配置模块713,还用于在所述接收模块711接收到在所述接口上对虚拟EF队列的取消配置信息时,在所述接口上对所述取消配置信息所对应的流量策略表项进行删除,取消相对应的虚拟EF队列;
所述判断模块712,还用于在所述第一配置模块713取消所述虚拟EF队列之后,判断所述接口上是否还剩余至少一个虚拟EF队列,其中:
如果所述判断模块712的判断结果为是,通知所述第一配置模块713调整所述接口已经分配的FPGA EF队列的带宽值为所述接口当前剩余的虚拟EF队列的带宽值之和;
如果所述判断模块712的判断结果为否,则通知所述第一配置模块713释放所述接口上所分配的FPGA EF队列。
另一方面,所述FPGA72,包括:
至少一个接口721,用于接收和转发报文;
第二配置模块722,用于接收所述CPU71所发送的与所述FPGA的一个接口722相应的流量策略表项,为接口722配置相对应的虚拟EF队列,并将所述虚拟EF队列指定到所述FPGA EF队列;
确定模块723,用于在所述接口721接收到匹配优先类的报文时,根据所述第二配置模块722的配置信息确定所述报文所对应的虚拟EF队列,及所述虚拟EF队列所指定的所述FPGA EF队列;
评估模块724,用于根据所述第二配置模块722所接收到的所述虚拟EF队列所对应的流量策略表项,对所述报文的流量进行评估;
标识模块725,用于根据所述评估模块724的评估结果,对未超过所述虚拟EF队列的分配带宽的报文添加第一标识,对超过所述虚拟EF队列的分配带宽的流量添加第二标识;
处理模块726,用于将添加了所述第一标识的流量直接发送到所述FPGAEF队列,根据所述FPGA EF队列的拥塞状态,按照预设的处理策略对添加了所述第二标识的流量进行相应的处理。
在具体的应用场景中,所述处理模块726,具体用于:
判断所述FPGA EF队列当前是否处于拥塞状态;
如果判断结果为否,将添加了所述第二标识的流量直接发送到所述FPGAEF队列;
如果判断结果为是,将添加了所述第二标识的流量丢弃。
与现有技术相比,本发明所提出的技术方案具有以下优点:
通过应用本发明的技术方案,当在FPGA的一个接口上定义多个类规则,并分别指定EF队列时,CPU在该接口上采用CAR方式将其实现为多个虚拟EF队列,同时,CPU只为该接口分配一个FPGA EF队列,并设置该FPGA EF队列的带宽值为各虚拟EF队列的带宽值之和,从而,使各虚拟EF队列共享该FPGAEF队列的资源。通过这样的处理,不仅可以节省FPGA队列资源,而且,在进行队列调度时,由于每个接口只有一个FPGA EF队列,即采用严格优先调度的队列只有一个,不必考虑多个严格优先调度队列之间的公平调度问题,降低了队列调度算法的复杂度。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。