发明内容
有鉴于此,本发明的主要目的在于提供一种多通道数据处理方法及装置,以节省资源。
为达到上述目的,本发明提供的多通道数据处理方法如下:
对队列管理模块中的包信息队列进行分组,并为每组包信息队列分别设置一个读数据模块和一个对应的发送模块,其中,所分成的组数小于包信息队列的个数;
所述读数据模块从自身所对应组中的各个包信息队列中轮流读取包信息,根据读取的包信息读出报文,并将读出的报文发送给对应的发送模块;
发送模块收到读数据模块发送来的报文后,将收到的报文通过与该报文的入通道相对应的出通道发送出去。
其中,所述对队列管理模块中的包信息队列进行分组包括:
将队列管理模块中的所有包信息队列分成一组。
所述对队列管理模块中的包信息队列进行分组包括:
将队列管理模块中的包信息队列至少分成两组,且其中至少有一组中包括至少两个包信息队列。
所述根据读取的包信息读出报文包括:
读数据模块根据读取的包信息从缓存模块中读出报文。
所述读数据模块将读出的报文发送给对应的发送模块还包括:读数据模块将该报文的入通道所对应的出通道信息发送给发送模块;
所述发送模块将收到的报文通过与该报文的入通道相对应的出通道发送出去包括:发送模块将收到的报文通过与收到的出通道信息相对应的出通道发送出去。
当所分成的组数大于1时,各个读数据模块采用并行工作方式。
本发明提供的多通道数据处理装置包括:写缓存模块、缓存模块、包括至少一组包信息队列且至少有一组包信息队列中包括至少两个包信息队列的队列管理模块、与各组包信息队列一一对应的读数据模块以及与各个读数据模块一一对应的发送模块,其中,
写缓存模块,用于将从入通道接收到的报文写入缓存模块,并在收到的报文为包尾时,将该包信息写入队列管理模块中与该包的入通道相对应的包信息队列;
读数据模块,用于从自身所对应组中的各个包信息队列中轮流读取包信息,根据读取的包信息从缓存模块中读出报文,并将读出的报文发送给与自身对应的发送模块;
发送模块,用于在收到读数据模块发送来的报文后,将收到的报文通过与该报文的入通道相对应的出通道发送出去。
所述读数据模块进一步用于将读出的报文的入通道所对应的出通道信息发送给发送模块;
所述发送模块将收到的报文通过与收到的出通道信息相对应的出通道发送出去。
所述读数据模块个数大于1时,各个读数据模块采用并行工作方式。
由此可见,在本发明所提供的技术方案中,读数据模块和发送模块是与一组包信息队列相对应的,而不是与各个包信息队列分别对应,这样可以减少读数据模块和发送模块的个数,从而节省了逻辑资源。并且,发送模块的数量减少后,所有发送模块所需要的总缓存数量就会减少,从而也节省了缓存资源。另外,读数据模块的数量减少后,各个读数据模块就可以获得更多的访问缓存模块的带宽,如果分配给读数据模块的带宽能够使得读数据模块从缓存模块中读取报文的速率达到发送模块发送报文的速率,那么,发送模块就可以连续地将读数据模块读出的报文发送出去,而无需占用缓存资源来存储读数据模块读出的报文直到整个包被读取完毕,从而进一步减少了缓存资源的占用。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,下面参照附图并举实施例,对本发明作进一步详细说明。
为了解决现有技术中的问题,本发明提供了一种多通道数据处理方法,参见图2所示,该方法主要包括以下步骤:
步骤201:对队列管理模块中的包信息队列进行分组,并为每组包信息队列分别设置一个读数据模块和一个发送模块,其中,所分成的组数小于包信息队列的个数。
在步骤201中,可以将队列管理模块中的所有包信息队列就当作一组,或者也可以将它们分成多组。在分成多组的情况下,至少要有一个组中包括至少两个包信息队列。
步骤202:读数据模块对自身所对应组中的各个包信息队列进行轮询,轮流读取所述各个包信息队列中的包信息,根据读取的包信息读出报文,并将读出的报文发送给对应的发送模块。
步骤203:发送模块收到读数据模块发送来的报文后,将收到的报文通过与该报文的入通道相对应的出通道发送出去。
由图2可见,在本发明所提供的技术方案中,读数据模块和发送模块是与一组包信息队列相对应的,而不是与各个包信息队列分别对应,这样可以减少读数据模块和发送模块的个数,节省逻辑资源。并且,发送模块的数量减少后,所有发送模块所需要的总缓存数量就会减少,从而也节省了缓存资源。
为更加清楚起见,下面通过两个具体实施例对本发明所提供的多通道数据处理方法进行详细说明。
实施例一
为了节省缓存资源和逻辑资源,可以采用本发明所提供的方法对图1所示的多通道数据处理逻辑结构进行改进,改进后的多通道数据处理逻辑结构参见图3所示。
在图3中,QM中的两个包信息队列被分成了一组,该组对应一个RD模块和一个TX模块,该TX模块对应TX0和TX1两个出通道。其中,WR模块、QM模块和缓存模块的功能与图1一致,这里不再一一赘述,下面主要对图3中的RD模块和TX模块的工作过程进行说明。
在图3中,QM模块中仍有两个包信息队列FIFO0和FIFO1,但只有一个RD模块,此时,RD模块可以对QM中的两个包信息队列进行轮询,即轮流读取FIFO0和FIFO1中的包信息,然后根据包信息从缓存模块中读出报文,将读出的报文发送给TX模块;TX模块收到RD模块发送过来的报文后,将收到的报文发送出去。RD模块在向TX模块发送报文时,还需要将该报文的入通道所对应的出通道信息发送给TX模块;TX模块收到后,将收到的报文通过相应的出通道发送出去。比如,对于根据FIFO0中的包信息而读出的报文,RD模块会将TX0信息携带在该报文中发送给TX模块,TX模块收到后,将该报文通过TX0通道发送出去。
在图3中,任意时刻只有一个出通道在发送数据,TX0和TX1通过时分复用的方式实现出口10G的数据处理带宽。在图1中,虽然出通道TX0和TX1理论上可以达到20G的总带宽,但是,由于入通道RX0和RX1的总带宽仅有10G,因此实际上TX0和TX1的出口平均带宽也只有10G。
相比图1,图3只采用一个RD模块和一个TX模块,这样不仅可以节省一倍的缓存资源,并且还可以节省一倍的逻辑资源。另外,在图3中,缓存模块仅需处理两个端口的请求仲裁:一个WR模块的写端口和一个RD模块的读端口。此时,如果缓存模块的有效带宽为20G,则RD模块平均可以获得10G的访问带宽,即RD模块可按照10G的速率从缓存模块中读取报文。这样,TX模块就可以按照10G的速率连续地发送RD模块读出的报文,而无需占用缓存来存储RD模块读出的报文直到一个完整数据包的报文都被读取完毕,从而进一步节省了缓存资源。
实施例二
图4给出了另一种常见的多通道数据处理逻辑结构示意图,共包括4个带宽均为5G的入通道RX0、RX1、RX2和RX3,以及4个带宽均为10G的出通道TX0、TX1、TX2和TX3。其中,WR模块用于从入口侧的4个数据通道RX0、RX1、RX2和RX3接收报文,将收到的报文写入缓存模块中,并在接收到的报文为包尾时,将该包的信息写入QM模块;QM中包括4个包信息队列FIFO0、FIFO1、FIFO2和FIFO3,分别用于存储WR写入的来自RX0、RX1、RX2和RX3通道的报文的包信息;RD0、RD1、RD2和RD3模块分别用于从QM中的FIFO0、FIFO1、FIFO2和FIFO3队列中读取包信息,根据包信息从缓存模块中读取报文,然后通过TX0、TX1、TX2和TX3将读出的报文发送出去。
这里,为了节省逻辑资源和缓存资源,可以采用本发明所提供的方法对图4所示的多通道数据处理逻辑结构进行改进,改进后的多通道数据处理逻辑结构参见图5所示。
在图5中,QM中的4个包信息队列被分成了两组,第一组包括FIFO0和FIFO1这两个包信息队列,第二组包括FIFO2和FIFO3这两个包信息队列;并且,还为各组分别设置了读数据模块RD01和RD23以及发送模块TX01和TX23。其中,RD01模块用于根据轮询调度原则分别从FIFO0和FIFO1队列中读取包信息,并根据包信息从缓存模块中读取报文,然后将读取的报文发送给TX01模块;TX01模块用于将收到的报文通过相应的出通道发送出去,即将来自RX0通道的报文通过TX0通道发送出去,将来自RX1通道的报文通过TX1通道发送出去。RD23模块用于根据轮询调度原则分别从FIFO2和FIFO3队列中读取包信息,并根据包信息从缓存模块中读取报文,然后将读取的报文发送给TX23模块;TX23模块用于将收到的报文通过相应的出通道发送出去,即将来自RX2通道的报文通过TX2通道发送出去,将来自RX3通道的报文通过TX3通道发送出去。
在图5中,RD01和RD23并行工作,TX0和TX1按照时分复用的方式进行报文发送,TX2和TX3按照时分复用的方式进行报文发送。其中,TX01的发送带宽可达10G,与RX0和RX1的入口总带宽10G相持平,因此来自RX0和RX1的流量能够被及时发送出去;同理,来自RX2和RX3的流量也能够被及时发送出去。
当然,也可以将图4中的所有包信息队列当作一个组,为所有包信息队列只设置一个读数据模块和一个发送模块,由该读数据模块对QM中的所有包信息队列进行轮询,由TX0、TX1、TX2和TX3四个出通道通过时分复用的方式将报文发送出去。但是,由于TX0、TX1、TX2和TX3采用时分复用的方式进行报文发送后,整个出口的带宽只能达到10G,要远远小于20G的入口带宽,因此,将图4中的所有包信息队列分成一个组的做法,会造成入口流量不能够及时得到发送,并最终导致异常丢包现象的发生。
另外,还可以将图4中的包信息队列分成如下两组:其中一组包括FIFO0、FIFO1和FIFO2三个包信息队列,另一组只包括FIFO3队列;并且分别为各组设置读数据模块和发送模块。也就是相当于,对FIFO3队列的处理与图4保持一致,而对FIFO0、FIFO1和FIFO2队列则采用轮询调度机制。其中的具体处理过程这里不再赘述。
相应地,本发明还提供了一种多通道数据处理装置,该装置结构参见图6所示,主要包括:写缓存模块、缓存模块、包括至少一组包信息队列且至少有一组包信息队列中包括至少两个包信息队列的队列管理模块、与各组包信息队列一一对应的读数据模块以及与各个读数据模块一一对应的发送模块,其中,
写缓存模块,用于将从入通道接收到的报文写入缓存模块,并在收到的报文为包尾时,将该包信息写入队列管理模块中与该包的入通道相对应的包信息队列;
读数据模块,用于从自身所对应组中的各个包信息队列中轮流读取包信息,根据读取的包信息从缓存模块中读出报文,并将读出的报文发送给与自身对应的发送模块;
发送模块,用于在收到读数据模块发送来的报文后,将收到的报文通过与该报文的入通道相对应的出通道发送出去。
其中,所述读数据模块进一步用于将读出的报文的入通道所对应的出通道信息发送给发送模块;
所述发送模块将收到的报文通过与收到的出通道信息相对应的出通道发送出去。
当所述读数据模块个数大于1时,各个读数据模块采用并行工作方式。
以上所述对本发明的目的、技术方案和有益效果进行了进一步的详细说明,所应理解的是,以上所述并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。