具体实施方式
本发明实施例提供了一种数据处理方法及系统以及相关设备,能够提高处理器的处理效率。
请参阅图2,本发明实施例中的数据处理方法一个实施例包括:
201、对接收到的同一数据流中的各数据包进行顺序存储;
本实施例中,POE模块会对同一数据流中的各数据包进行顺序存储,具体可以是存储各数据包的描述符信息。
本实施例中,数据包的描述符信息具体可以如图3所示,其中:
服务质量(QoS,Quality of Service):表明这个数据包的服务等级;
组(Group):表明这个数据包的处理阶段,并且能够被那些处理器处理;
标签类型(Tag Type):表明该数据包的标签类型;
标签(Tag):表明该数据包的标签号;
地址(Address):表明该数据包在内存中存放的地址。
202、接收各处理器发送的取包命令;
当处理器(CORE)请求取包进行处理时,会向POE模块发送取包命令,以请求POE分配一个数据包进行处理。
203、根据预置的调度规则从存储的数据包中为各处理器分别选择数据包进行处理;
当POE模块接收到各处理器的取包命令之后,可以根据预置的调度规则从存储的数据包中为各处理器分别选择数据包进行处理,具体可以根据严格优先级(SP,Strict-Priority)调度或者是加权轮询(WRR,Weighted Round Robin)选择对应的数据包。
204、接收各处理器发送的标签切换命令;
当POE模块为各处理器分配了数据包进行处理之后,当某处理器完成了对分配的数据包的处理之后,则会向POE模块发送标签切换命令,该标签切换命令用以指示处理器已完成当前阶段的处理。
POE模块会陆续从各处理器接收到标签切换命令。
205、按照先进先出的顺序对处理后的数据包进行标签切换;
POE模块根据接收到的标签切换命令,按照FIFO的顺序对各处理器处理后的数据包进行标签切换,以使得这些数据包可以被后续的处理器再次进行处理,具体标签切换的过程将在后续实施例中进行详细描述。
206、根据后续处理器发送的取包命令将处理后的数据包提供给后续处理器进行处理直至处理完成。
本实施例中的数据包的处理是PIPELINE模式,即数据包需要经过多个处理器的处理才能全部完成,因此POE模块在完成标签切换之后,还可以根据后续的处理器的取包命令将这些处理后的数据包再分配进行处理直至全部完成。
本实施例中,POE模块在处理器完成数据包的处理之后会从处理器接收到标签切换命令,则POE模块可以按照FIFO的顺序执行标签切换,因此能够实现包保序,而同时,处理器只需要执行取包、处理、发送标签切换命令的操作,当处理器发送了标签切换命令之后,后续的操作由POE模块进行,则处理器无需等待其他处理器的处理结果,而可以执行其他的业务流程,因此减少了处理器的等待时间,提高了处理器的处理效率。
需要说明的是,上述是从POE模块的角度对本发明实施例中的数据处理方法进行了描述,下面从处理器的角度对本发明实施例中的数据处理方法进行描述,请参阅图4,本发明实施例中数据处理方法另一实施例包括:
401、向包保序POE模块发送取包命令;
当处理器需要进行数据包处理时,会向POE模块发送取包命令,请求POE模块分配一个数据包进行处理。
402、从POE模块反馈的数据包缓存地址中获取相应的数据包进行处理;
处理器在发送取包命令之后,会从POE模块接收到数据包的缓存地址,之后可以根据该缓存地址获取到相应的数据包,并对该数据包进行处理,具体的处理过程为本领域技术人员的公知常识,此处不做限定。
403、向POE模块发送标签切换命令并执行其他业务处理。
当处理器对数据包处理完成之后,则可以向POE模块发送标签切换命令并执行其他业务处理,该标签切换命令用以指示处理器已完成当前阶段的处理。
本实施例中,处理器只需要执行取包、处理、发送标签切换命令的操作,当处理器发送了标签切换命令之后,后续的操作由POE模块进行,则处理器无需等待其他处理器的处理结果,而可以执行其他的业务流程,因此减少了处理器的等待时间,提高了处理器的处理效率。
为便于理解,下面以一个数据包为例,对本发明实施例中的数据处理方法进行描述,请参阅图5,本发明实施例中单个数据包处理过程包括:
501、请求添加数据包;
本实施例中,GMAC、Core、Tring、IPSEC等模块发出添加数据包(Add_packet)命令,希望向POE模块添加数据包,POE模块可以解析到这个命令。
502、POE模块将数据包描述符信息存储;
POE模块接收到添加数据包命令之后,将数据包的描述符信息,按照对应的格式进行存储,具体的格式可以如图2所示,此处不再赘述。
503、处理器发送取包命令;
当处理器(CORE)需要进行数据包处理时,CORE发出一个取包(Get_packet)命令,向POE模块请求一个数据包进行处理。
504、POE模块根据预置调度规则调度数据包;
POE模块收到CORE发送的取包命令之后,可以根据预置调度规则调度数据包,具体可以为:根据QOS进行SP调度或者WRR调度,首先选择一个QOS队列;再根据CORE的Group掩码寄存器来判断这个CORE能处理那些Group中的数据包,选择一个Group队列,再从Group队列中选择一个数据包。
505、POE模块将调度得到的数据包的描述符信息反馈给处理器;
POE确定了分配的数据包之后,可以通过AHB Slave将调度得到的数据包的描述符信息反馈给CORE,反馈的数据包描述符信息为数据包的缓存地址。
506、绑定当前数据包与处理器;
当POE模块将调度得到的数据包的描述符信息反馈给CORE之后,可以将该数据包与CORE进行绑定,至此即是将一个数据包与一个Core完成了绑定。
507、处理器处理数据包;
绑定了当前数据包与处理器之后,处理器可以对数据包进行处理,具体的处理过程为本领域技术人员的公知常识,此处不做限定。
508、标签切换操作以及后续处理;
本实施例中,一个数据包的处理可能需要多个阶段才能完成,在POE模块中,通过标签切换(Switch Tag)可以完成多个阶段之间的互通。
当CORE处理完数据包的当前阶段,可以发出一个标签切换命令,请求POE模块将与其绑定的数据包从当前组队列转换到一个新的组队列,在标签切换过程中,还可能会更新标签类型和标签号,这样,该数据包即可以被其他的CORE完成后续阶段的处理。
需要说明的是,为了充分利用CORE的处理能力,在执行标签切换操作的时候,主要是由POE模块来完成,在POE模块执行的过程中,Core可以执行其他的任务。
POE模块可以提供一个标签切换状态位,来表明本次标签切换操作是否完成,CORE可以发送取状态(Get_state)命令来查询此状态,可以理解的是,POE模块也可以将这个状态写入CORE的缓存空间,此时则可以避免总线接口被频繁的查询,从而提高处理效率。
CORE在通过标签切换状态位确定标签切换已经完成之后,则可以向POE模块发送取包命令以进行后续的处理。
509、数据包处理完成;
如果CORE确定当前数据包已经被处理完成,则发送一个特殊的空切换操作(SWITCH_NULL)命令,表明这个数据包已经完成了所有的处理阶段,可以输出。
510、POE模块将该数据包的描述符信息从队列中删除。
POE模块收到CORE发送的空切换操作命令之后,获知该数据包已经完成了所有的处理阶段,则可以将这个完成的数据包从本地标签队列中删除。
本实施例中,POE模块在处理器完成数据包的处理之后会从处理器接收到标签切换命令,则POE模块可以按照FIFO的顺序执行标签切换,因此能够实现包保序,而同时,处理器只需要执行取包、处理、发送标签切换命令的操作,当处理器发送了标签切换命令之后,后续的操作由POE模块进行,则处理器无需等待其他处理器的处理结果,而可以执行其他的业务流程,因此减少了处理器的等待时间,提高了处理器的处理效率;
其次,POE模块可以将标签切换状态位写入CORE的缓存空间,此时则可以避免总线接口被频繁的查询,从而提高处理效率。
上面对本发明实施例中的单个包处理过程进行了描述,下面对本发明实施例中实现包保序的过程进行描述,请参阅图6,本发明实施例中的包保序过程大致包括:
601、对数据包进行打标签;
本实施例中,POE模块可以对输入的数据包按照业务进行分类解析,分别对每个不同的数据流打上标签,用“标签+标签类型”来区别不同的数据流。
同时,为了对应不同QoS的业务流,还需要给数据包加上QoS信息,如果某些数据包只能被指定的CORE处理,还需要标记组(Group)信息,来表明这个数据包可以被哪些CORE处理。
602、对数据包进行管理;
POE模块根据QoS+Group的组合信息,将数据包分类存放在输入缓存(input buffer)中,在存放的时候,每个Input FIFO都对应唯一的QOS+Group,即对应一个数据流。
603、CORE取包过程;
当CORE要对数据包进行处理的时候,发出取包的指令,POE模块解析到这个命令,基于QOS、Group从Input Buffer中取满足条件的数据包给CORE,同时POE模块在绑定缓存(Bind Buffer)中记录每个数据包的标签,基于标签做为唯一的标识符来进行数据包的管理。
604、标签切换过程;
在Bind Buffer中,不同的标签FIFO之间可以通过切换操作来完成标签间的切换,实现数据包各个CORE之间的互通。
605、数据包输出过程。
当数据包完全处理完成以后,CORE发出一个完成的操作指令,则POE模块从Bind Buffer中将该数据包删除,不再记录
需要说明的是,基于上述的包保序过程,对于某个FIFO队列,当有多个CORE取其中的数据包时,需要满足先进先出的原则,具体请参阅图7,其中:
T1时刻:Core0得到数据包Packet0,开始处理;
T2时刻:Core1得到数据包Packet1,开始处理;
T3时刻:Core2得到数据包Packet2,开始处理;
由于每个Core的处理性能不一致,可能处理完成的顺序不一致,
T4时刻:Core1先处理完成,向POE模块发送标签切换命令,但是此时由于其绑定的数据包不在队列头部,所以POE模块不能立刻出bind FIFO;
T5时刻:Core2处理完成,向POE模块发送标签切换命令,但是由于其绑定的数据包不在队列头部,所以也不能立刻出bind FIFO;
T6时刻:Core0处理完成,向POE模块发送标签切换命令,由于其绑定的数据包在队列头部,所以POE模块可以按照先进先出的顺序进行标签切换,使得数据包Packet0直接从bind FIFO中出队,开始下一个阶段的处理;随后,数据包Packet1、数据包Packet2相继出队。
本实施例中,通过FIFO的管理,可以使数据包在每个处理阶段都按照顺序自动先进先出,完成包的保序功能;同时,CORE可以不需要实时参与,只需要发出取包命令、包处理完成命令以后,就可以继续处理其他事务,从而可以提高CORE的处理效率。
上述实施例中描述了基于标签切换过程的数据处理方法,该方法可以完成各个CORE之间的数据包处理,在实际应用中,为了减少CORE在处理数据包过程中的等待延迟,还可以通过设置完成标识位(finish),并且在对应的二级缓存内对完成标识位进行管理,具体的方案请参阅图8,其中:
队列1中的一个数据包需要切换到队列5中,图中,该数据包不在bindFIFO的头部,只要前面的数据包没有被处理完,那么这个数据包就不能先跳出这个队列,因为前面的数据包在处理完以后,可能也需要切换到同一个标签队列中,这样一旦后面的数据包先跳出这个队列,同一个队列的保序功能就没有办法完成。
因此只有在该数据包已经移动到队头,才能跳出这个队列,并且切换到一个新的队列中进行下一轮的排队处理。
T1时刻:当CORE需要执行切换过程的时候,首先将自己在二级缓存内的“finish”标记位置位为“1”,然后发出一个切换命令,此后,CORE可以选择查询二级缓存内的“finish”标志位,只有当“finish”标志位为0的时候,才可以继续处理这个数据包,否则,CORE可以处理其他的事务;
T2时刻:当POE模块检测到CORE发出的切换命令,就开始将这个CORE绑定的数据包从bind FIFO1搬运到bind FIFO5中(即等待该数据包到bindFIFO1的对头之后,再将其切换至bind FIFO5的队尾),当POE模块完成切换过程后,就可以将该CORE中在二级缓存内对应的“finish”标志位清0。
此时,CORE检测到“finish”标志位为0,则CORE可以继续处理该数据包,而在“finish”标志位不为0的时候,CORE可以进行其他业务的处理,从而能够充分的利用CORE的能力。
下面对本发明实施例中的POE模块进行描述,请参阅图9,本发明实施例中的包保序模块包括:
存储单元901,用于对接收到的同一数据流中的各数据包进行顺序存储;
取包命令接收单元902,用于接收各处理器发送的取包命令;
分发单元903,用于根据预置的调度规则从存储的数据包中为各处理器分别选择数据包进行处理;
切换命令接收单元904,用于接收各处理器发送的标签切换命令,标签切换命令用以指示处理器已完成当前阶段的处理;
标签切换单元905,用于按照先进先出的顺序对处理后的数据包进行标签切换;
处理单元906,用于当标签切换完成之后,根据后续处理器发送的取包命令将处理后的数据包提供给后续处理器进行处理直至处理完成。
本实施例中的存储单元901包括:
分配子单元9011,用于为同一数据流中的各数据包分配组标识以及服务质量信息;
执行子单元9012,用于根据组标识以及服务质量信息将各数据包存储在输入先进先出队列中。
本实施例中的分发单元903包括:
选择子单元9031,用于根据服务质量信息进行严格优先级调度或者加权轮询调度选择服务质量信息队列;
确定子单元9032,用于根据处理器的组标识掩码寄存器确定处理器能处理的组队列,从组队列中为处理器选择数据包。
本实施例中的标签切换单元905包括:
存储子单元9051,用于将处理后的数据包按照先进先出的顺序存入绑定先进先出队列中;
转换子单元9052,用于将绑定先进先出队列中的数据包从当前的组队列转换到新的组队列,并更新处理后的数据包的标签。
本实施例中标签切换单元905进行标签切换的过程与前述图5所示的实施例中描述的标签切换的过程相同,此处不再赘述。
本实施例中,切换命令接收单元904在处理器完成数据包的处理之后会从处理器接收到标签切换命令,则标签切换单元905可以按照FIFO的顺序执行标签切换,因此能够实现包保序,而同时,处理器只需要执行取包、处理、发送标签切换命令的操作,当处理器发送了标签切换命令之后,后续的操作由POE模块进行,则处理器无需等待其他处理器的处理结果,而可以执行其他的业务流程,因此减少了处理器的等待时间,提高了处理器的处理效率。
下面介绍本发明实施例中的处理器,请参阅图10,本发明实施例中的处理器包括:
取包命令发送单元1001,用于向包保序POE模块发送取包命令;
数据包处理单元1002,用于从POE模块反馈的数据包缓存地址中获取相应的数据包进行处理;
切换命令发送单元1003,用于当对数据包处理完成之后,向POE模块发送标签切换命令,标签切换命令用以指示处理器已完成当前阶段的处理;
业务执行单元1004,用于在切换命令发送单元发送标签切换命令的同时执行其他业务处理。
本实施例中的处理器还可以进一步包括:
获取单元1005,用于获取POE模块提供的标签切换状态位,或从缓存空间获取标签切换状态位;
第一判断单元1006,用于判断标签切换状态位是否指示POE模块已完成标签切换,若是,则触发取包命令发送单元1001执行相应操作。
本实施例中的处理器还可以进一步包括:
命令发送单元1007,用于向POE模块发送切换命令,切换命令用以指示将待处理数据包从第一绑定先进先出队列切换至第二绑定先进先出队列;
参数设置单元1008,用于将二级缓存中的完成标识位的数值设置为暂时不对待处理数据包进行处理;
第二判断单元1009,用于判断二级缓存中的完成标识位的数值是否指示切换已完成,若是,则触发业务执行单元1004继续处理待处理数据包。
本实施例中的处理器中各单元间的交互过程与前述图4以及图5所示的实施例中描述的内容相同,此处不再赘述。
本实施例中,处理器只需要执行取包、处理、发送标签切换命令的操作,当切换命令发送单元1003发送了标签切换命令之后,后续的操作由POE模块进行,则处理器无需等待其他处理器的处理结果,而可以执行其他的业务流程,因此减少了处理器的等待时间,提高了处理器的处理效率。
本发明实施例中还提供一种数据处理系统,该数据处理系统包括包保序模块以及若干处理器,其中,包保序模块可以如前述图9所示的实施例中描述的包保序模块,处理器可以如前述图10所示的实施例中描述的处理器,具体此处均不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种数据处理方法及系统以及相关设备进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,因此,本说明书内容不应理解为对本发明的限制。