发明内容
本发明实施例中提供了一种数据传输方法及装置,以解决现有技术通过PCIe接口传输数据时,数据经过多层封装和多次交互,导致传输效率降低的技术问题。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
第一方面提供了一种数据传输方法,所述方法包括:
将接收到的多个报文缓存到缓存器中;
提取所述多个报文中每个报文的报文描述符BD;所述每个BD包括:缓存对应报文的物理地址;
将所述每个BD缓存到描述符缓存队列BDQ中,并统计所述BDQ中BD的个数;
将所述BDQ中BD的个数定时同步到接收端,以便于所述接收端判断所述BDQ中是否缓存有BD;
接收所述接收端发送的获取所述BDQ中至少一个BD的请求;
根据所述请求,将所述BDQ中至少一个对应的BD发送给所述接收端。
在第一方面的第一种可能的实现方式中,所述方法还包括:
接收所述接收端发送的获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
根据所述报文的物理地址,将所述缓存器中所述至少一个BD对应的所述报文通过总线接口发送给所述接收端。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,在提取所述多个报文中每个报文的报文描述符BD后,所述方法还包括:
按照业务类型或线程管理,划分所述BD;
所述将所述BD缓存到描述符缓存队列BDQ中,并统计所述BDQ中BD的个数,包括:将划分后的BD分别缓存到对应的BDQ中,并统计每个所述BDQ中BD的个数。
结合第一方面或第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述方法还包括:
接收到所述接收端发送的不再接收所述BD对应的所述报文的通知;
在接收到所述通知后,根据自身需要来判断是否将后续接收到的报文缓存到缓存器中。
第二方面提供了一种数据传输方法,所述方法包括:
定时获取发送端发送的描述符缓存队列BDQ中BD的个数;
将已存储的BD的个数更新为接收到的所述BD的个数;
如果根据接收到的所述BD的个数确定所述发送端的所述BDQ中缓存有BD,且根据需要向所述发送端发送获取所述BDQ中至少一个BD的请求;
接收所述发送端按照所述请求发送的所述BDQ中至少一个对应的BD。
在第二方面的第一种可能的实现方式中,所述方法还包括:
向所述发送端发送获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
通过总线接口接收所述发送端根据所述报文的物理地址发送的所述缓存器中至少一个BD对应的所述报文。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述根据接收到的所述BD的个数确定所述发送端的所述BDQ中缓存有BD包括:
按照接收到的所述BDQ中BD的个数是否大于预设阈值来判断所述BDQ中是否缓存有BD,如果大于,则确定所述BDQ中缓存有BD;否则,确定所述BDQ中没有缓存BD。
第三方面提供了一种数据传输装置,包括:
第一缓存单元,用于将接收到的多个报文缓存到缓存器中;
提取单元,用于提取所述多个报文中每个报文的报文描述符BD;所述每个BD包括:缓存所述报文的物理地址;
第二缓存单元,用于将所述每个BD缓存到描述符缓存队列BDQ中;
统计单元,用于统计所述BDQ中BD的个数;
同步单元,用于将所述BDQ中BD的个数定时同步到接收端,以便于所述接收端判断所述BDQ中是否缓存有BD;
第一接收单元,用于接收所述接收端发送的获取所述BDQ中至少一个BD的请求;
第一发送单元,用于根据所述请求,将所述BDQ中至少一个对应的BD发送给所述接收端。
在第三方面的第一种可能的实现方式中,还包括:
第二接收单元,用于接收所述接收端发送的获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
第二发送单元,用于根据所述报文的物理地址,将所述缓存器中所述至少一个BD对应的所述报文通过总线接口发送给所述接收端。
结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
划分单元,用于在所述提取单元提取所述多个报文中每个报文的报文描述符BD后,按照业务类型或线程管理,划分所述BD;
所述第二缓存单元,还用于将所述划分单元划分后的BD分别缓存到对应的BDQ中;
所述统计单元,还用于统计每个所述BDQ中BD的个数。
结合第三方面或第三方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,还包括:
第三接收单元,用于接收到所述接收端发送的不再接收所述BD对应的所述报文的通知;
判断单元,用于在所述第三接收单元接收到所述通知后,根据自身需要来判断是否将后续接收到的报文缓存到缓存器中。
第四方面提供了一种数据传输装置,包括:
获取单元,用于定时获取发送端发送的描述符缓存队列BDQ中BD的个数;
更新单元,用于将已存储的BD的个数更新为接收到的所述BD的个数;
第一发送单元,用于在根据接收到的所述BD的个数确定所述发送端的所述BDQ中缓存有BD时,且根据需要向所述发送端发送获取所述BDQ中至少一个BD的请求;
第一接收单元,接收所述发送端按照所述请求发送的所述BDQ中至少一个对应的BD。
在第四方面的第一种可能的实现方式中,还包括:
第二发送单元,用于向所述发送端发送获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
第二接收单元,用于通过总线接口接收所述发送端根据所述报文的物理地址发送的所述缓存器中至少一个BD对应的所述报文。
结合第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
判断单元,用于根据接收到的所述BD的个数判断所述发送端的所述BDQ中是否缓存有BD,并有的判断结果发送给所述第一发送单元;
所述第一发送单元,还用于在接收到所述判断单元发送的有的判断结果时,向所述发送端发送获取所述BDQ中BD的请求。
结合第四方面或第四方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,判断单元,具体用于按照接收到的所述BDQ中BD的个数是否大于预设阈值来判断所述BDQ中是否缓存有BD,如果大于,则确定所述BDQ中缓存有BD;否则,确定所述BDQ中没有缓存BD。
由上述技术方案可知,本发明实施例中,发送端先将接收到的多个报文缓存到缓存器中,并将缓存该多个报文的报文描述符的个数定时同步到接收端,并通过PCIe接口将多个报文描述符统一发送给接收端,大大减少了PCIe接口间的信息传递,提高了PCIe接口传输效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种在总线接口上传输数据的方法的流程图;所述方法包括:
步骤101:将接收到的多个报文缓存到缓存器中;
该步骤中,在发送端接收到多个报文(可以同时接收到多个报文,也可以依次接收到多个报文)时,将多个报文中的每个报文缓存到缓存器(buffer)中,本实施例中,该缓存器具有足够大存储空间,当然,缓存器还可以根据实际需要进行适应性扩展,以满足实际需要为准,本实施例不作限制。
步骤102:提取所述多个报文中每个报文的报文描述符(BD,Buffer description);所述每个BD包括:缓存所述报文的物理地址;
该实施例中,发送端将所述多个报文存储到缓存器后,提取每个报文的报文描述符BD,所述每个报文描述符中包括缓存对应报文的物理地址(Phy_Address),当然,所述报文描述符还可以包括该报文相关的头信息等,本实施例不作限制。
步骤103:将所述每个BD缓存到描述符缓存队列(BDQ,Buffer Description Queue)中,并统计所述BDQ中BD的个数;
在该实施例中,发送端将提取的每个报文描述符缓存到BDQ中,也就是说,提取一个报文描述符,就将该报文描述符缓存到BDQ中,当然,如果能同时提取多个报文中的每个报文的报文描述符,则将多个报文描述符同时缓存到BDQ中。
其中,统计所述BDQ中BD的个数,在该实施例中,通过计数器来记录缓存报文描述符的个数,比如,发送端将提取的报文描述符缓存到BDQ中时,即记录所述BDQ中缓存所述报文描述符的写计数器的写计数值加1,然后将所述写计数值存储到发送端的第一写计数表项中;当然,如果该BDQ中的报文描述符被读取一个,则读计数器的值加1,即记录读取所述BDQ中缓存的所述报文描述符的读计数的计数值加1,并将读计数的计数值存储到发送端的第一读计数表项中。
在该步骤中,该写计数值又称为写指针(Wr_ptr)值,该读计数值又称为读指针(Rd_ptr)值。发送端将报文描述符写入BDQ后,得到BDQ的Wr_ptr值,并将该Wr_ptr值写入写指针表项(Wr ptr table)缓存;其中,写指针表项又可以称为写计数值表项。
相反的,发送端的BDQ中的报文描述符被读出,得到BDQ的Rd_ptr值,并将该Rd_ptr值写入读指针表项(Rd ptr table)缓存;其中,读指针表项又可以称为读计数值表项。
通常情况下,在物理层面可以通过计数器来实现,在软件方面可以通知指针来实现。
步骤104:将所述BDQ中BD的个数定时同步到接收端,以便于所述接收端判断所述BDQ中是否缓存有BD;
在该步骤中,同步的过程包括两种方式,一种方式是发送端主动将BDQ中BD的个数定时发送给接收端,以便于接收端定时更新已存储的BD的个数;然后接收端根据更新后的BD的个数判断所述BDQ中是否缓存有BD;
另一种方式是,发送端在接收到接收端定时发送的获取BDQ中BD的个数的请求后,将所述BDQ中BD的个数发送给接收端,以便于接收端定时更新已存储的BD的个数;然后接收端根据更新后的BD的个数判断所述BDQ中是否缓存有BD。
需要说明的是,在发送端,有缓存BD的BDQ,以及缓存BD的个数的写计数值的写计数表项(称为第一写计数表项),以及读BD的个数的读计数值的读计数表项(称为第一读计数表项)。而对应的接收端,有缓存写计数值的写计数表项(称为第二写计数表项),读BD的个数的读计数值的读计数表项(称为第二读计数表项)。
发送端在接收到接收端定时发送的同步读计数值的命令时,将所述写计数值通过总线接口发送给所述接收端,以便于所述接收端将所述写计数值同步到所述接收端的第二写计数表项中,接收端根据读计数值与写计数值的差值来决策是否需要发送读BDQ命令;也就是说,发送端在接收到接收端发送的同步命令时,将发送端记录的写计数值通过总线接口(比如PCIe接口)发送给接收端,以便于接收端在接收端该写计数值后,依据该接收端的读计数值与同步后的写计数值的差值决策是否需要向发送端发送读BDQ命令。即,接收端利用该差值用来判断发送设备的BDQ内是否有缓存有报文描述符,即决策是否需要发送读BDQ命令;如有,则向发送端发送读BDQ命令;否则,就不向发送端发送读BDQ命令。所述读BDQ命令中包括:读BDQ的起始地址和读长度。
其中,所述决策是否需要发送读BDQ命令,具体为:如果该差值大于读长度(LEN),则发送读长度(LEN);如果该差值小于等于LEN,则发送读长度为该差值;其中,读长度(LEN)为经过协商的固定长度LEN,也就是BD的个数。
步骤105:接收所述接收端发送的获取所述BDQ中至少一个BD的请求;
基于上述过程,如果接收端判断所述BDQ中缓存有BD,则向发送端发送获取所述BDQ中BD的请求。该请求中包括读BDQ的起始地址和读长度。
步骤106:根据所述请求,将所述BDQ中至少一个对应的BD发送给所述接收端。
其中,发送端在接收到所述接收端发送的请求,按照请求中的读BDQ的起始地址和读长度将所述BDQ中对应的所述报文描述符统一通过总线接口发送给所述接收端,以便于接收端根据所述报文描述符进行IP重排或TCP重排;并将所述BDQ的读计数值同步到所述接收端的第一读计数表项中。
本发明实施例中,发送端先将接收到的多个报文缓存到缓存器中,并将缓存该多个报文的报文描述符的个数定时同步到接收端,并通过PCIe接口将多个报文描述符统一发送给接收端,大大减少了PCIe接口间的信息传递,提高了PCIe接口传输效率。
可选,还请参阅图2,图2为本发明实施例提供的一种数据传输方法的另一流程图,所述包括:
步骤201至步骤206;详见步骤101至步骤106,在此不再赘述;
步骤207:接收所述接收端发送的获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
接收端在获取BDQ中对应的至少一个BD后,由于每个BD中包括缓存所述报文的物理地址,如果接收端需要获取至少一个BD对应的报文的内容,则向发送端发送获取所述至少一个BD对应的报文的请求,该请求中包括缓存该报文的物理地址。即发送端接收端该请求。
步骤208:根据所述报文的物理地址,将所述缓存器中所述至少一个BD对应的所述报文通过总线接口发送给所述接收端。
发送端在接收到获取报文的请求后,按照该请求中的物理地址,将缓存器中缓存的与该物理地址对应的报文发送给所述接收端。
也就是说,本实施例中,可以将报文的报文描述信息和报文内容分离,独自发送报文描述符和报文内容;即根据业务需要,可以只发送报文描述符,省略报文内容的传输;或者将多个报文描述符统一发送,然后在根据需要,获取需要的报文内容。
可选的,所述方法还可以包括:接收到所述接收端发送的不再接收所述BD对应的所述报文的通知;在接收到所述通知后,根据自身需要来判断是否将后续接收到的报文缓存到缓存器中。
也就是说,在该实施例中,如果发送端是否在缓存报文,不受接收端是否从缓存读取报文的控制。比如,当发送端接收到接收端不再读取该发送端缓存中BD对应的报文的通知后,会根据自身需求决定是否继续缓存报文,如果自身还有缓存空间,则可以继续缓存接收到的报文,如果没有,就不再缓存接收到的报文。
本发明实施例中,发送端先将接收到的多个报文缓存到缓存器中,并将缓存该多个报文的报文描述符的个数定时同步到接收端,并通过PCIe接口多个报文描述符统一发送给接收端,大大减少了PCIe接口间描述符/地址信息的信息传递,降低了PCIe接口中各层的额外传输开销,提高了PCIe接口传输效率。
可选的,在上述图1或图2所述实施例的基础上,在提取所述多个报文中每个报文的报文描述符BD后,所述方法还可以包括:
按照业务类型或线程管理,划分所述BD;并将划分后的BD分别缓存到对应的BDQ中,并统计每个所述BDQ中BD的个数,将所述每个BDQ中BD的个数定时同步到接收端,以便于所述接收端判断所述每个BDQ中是否缓存有BD;然后,接收所述接收端发送的获取所述BDQ中BD的请求;根据所述请求,将所述BDQ中对应的BD发送给所述接收端。
也就是说,本发明实施例中,发送端可以根据业务分类或线程管理,通过一个或多个报文缓存队列BDQ进行报文描述符的缓存。
还请参阅图3,图3为本发明实施例提供的一种数据传输方法的另一流程图,所述方法包括:
步骤301:定时获取发送端发送的描述符缓存队列BDQ中BD的个数;
在该步骤中,获取的方式有两种,一种是,接收端主动向发送端获取BDQ中BD的个数;另一种是,发送端主动将BDQ中BD的个数发送给接收端,以保持发送端和接收端的BD的个数保持同步。
步骤302:将已存储的BD的个数更新为接收到的所述BD的个数;
接收端在接收端该BDQ中BD的个数后,将已存储的BD的个数更新为接收到的所述BD的个数,以保持与发送端的BD的个数一样。
步骤303:如果根据接收到的所述BD的个数确定所述发送端的所述BDQ中缓存有BD,根据需求向所述发送端发送获取所述BDQ中至少一个BD的请求;
可选的,可以根据BDQ调度权重,或者优先级等来决定是否向所述发送端发送获取所述BDQ中至少一个BD的请求。
可选的,在该步骤中,确定所述发送端的所述BDQ中缓存有BD,包括:按照接收到的所述BDQ中BD的个数是否大于预设阈值来判断所述BDQ中是否缓存有BD,如果大于,则确定所述BDQ中缓存有BD;否则,确定所述BDQ中没有缓存BD。其中,预设阈值是经过协商的固定长度LEN(即BD的个数),
也就是说,接收端判断所述BDQ中是否缓存有BD,即决策是否需要向发送端发送读BDQ命令,具体为:如果接收端的读计数值和写计数值的差值大于固定长度(LEN),则发送端发送读BDQ命令,其命令中包括的读长度为固定长度(LEN);如果该差值小于等于LEN,则发送端发送读BDQ命令,其命令中包括的读长度为该差值。
步骤304:接收所述发送端按照所述请求发送的所述BDQ中至少一个对应的BD。
发送端在接收端该请求后,将所述BDQ中对应的至少一个BD发送给接收端,即接收端接收到所述BDQ中至少一个对应的BD。
本发明实施例中,接收端接收发送端统一发送的BDQ中BD的个数,并更新自身的BD个数,已与发送端同步,然后,在判断发送端的BDQ中缓存有满足条件的BD时,通过PCIe接口获取多个报文描述符,大大减少了PCIe接口间描述符/地址信息的信息传递,降低了PCIe接口中各层的额外传输开销,提高了PCIe接口传输效率。
还请参阅图4,为本发明实施例提供的一种数据传输方法的另一流程图,所述方法包括:
步骤401至步骤404,与步骤301至步骤304同,具体详见上述,在此不再赘述。
步骤405:向所述发送端发送获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;
基于上述过程,接收端在获取发送端的所述BDQ中对应的BD后,由于该BD中包括缓存报文的物理地址,如果需要获取该BD对应的报文,则接收端会向发送端发送获取所述BD对应的报文的请求。
步骤406:通过总线接口接收所述发送端根据所述报文的物理地址发送的所述缓存器中至少一个BD对应的所述报文。
发送端在接收到该请求后,按照请求中携带的物理地址,将所述缓存器中对应的所述报文发送给接收端,即接收端接收到发送端发送的BD对应的报文。
本发明实施例中,接收端定时获取多个报文描述符,并更新自身存储的报文描述符的个数,即与发送端同步,然后,根据需要,从发送端通过PCIe接口获取多个报文描述符,大大减少了PCIe接口间报文描述符/地址信息的信息传递,降低了PCIe接口中各层的额外传输开销,提高了PCIe接口传输效率。
基于上述方法的实现过程,本发明实施例还提供一种数据传输装置,其结构示意图如图5所示,所述装置包括:第一缓存单元51,提取单元52,第二缓存单元53,统计单元54,同步单元55,第一接收单元56和第一发送单元57;其中,
所述第一缓存单元51,用于将接收到的多个报文缓存到缓存器中;
所述提取单元52,用于提取所述多个报文中每个报文的报文描述符BD;所述每个BD包括:缓存所述报文的物理地址;
所述第二缓存单元53,用于将所述每个BD缓存到描述符缓存队列BDQ中;
所述统计单元54,用于统计所述BDQ中BD的个数;
所述同步单元55,用于将所述BDQ中BD的个数定时同步到接收端,以便于所述接收端判断所述BDQ中是否缓存有BD;
所述第一接收单元56,用于接收所述接收端发送的获取所述BDQ中至少一个BD的请求;
所述第一发送单元57,用于根据所述请求,将所述BDQ中至少一个对应的BD发送给所述接收端。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还可以包括:第二接收单元和第二发送单元,其中,
所述第二接收单元,用于接收所述接收端发送的获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;所述第二发送单元,用于根据所述报文的物理地址,将所述缓存器中所述至少一个BD对应的所述报文通过总线接口发送给所述接收端。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还可以包括:划分单元,其中,所述划分单元,用于在所述提取单元提取所述多个报文中每个报文的报文描述符BD后,按照业务类型或线程管理,划分所述BD;所述第二缓存单元,还用于将所述划分单元划分后的BD分别缓存到对应的BDQ中;所述统计单元,还用于统计每个所述BDQ中BD的个数。
可选的,所述装置还可以包括:第三接收单元和判断单元,其中,所述第三接收单元,用于接收到所述接收端发送的不再接收所述BD对应的所述报文的通知;所述判断单元,用于在所述第三接收单元接收到所述通知后,根据自身需要来判断是否将后续接收到的报文缓存到缓存器中。
所述装置中各个单元的功能和作用的实现过程,详见上述方法中对应步骤的实现过程,在此不再赘述。
相应的,本发明实施例还提供一种数据传输装置,其结构示意图如图6所示,所述装置包括:获取单元61,更新单元62,第一发送单元63和第一接收单元64,其中,
所述获取单元61,用于定时获取发送端发送的描述符缓存队列BDQ中BD的个数;
所述更新单元62,用于将已存储的BD的个数更新为接收到的所述BD的个数;
所述第一发送单元63,用于在根据接收到的所述BD的个数确定所述发送端的所述BDQ中缓存有BD时,且根据需要向所述发送端发送获取所述BDQ中至少一个BD的请求;
所述第一接收单元64,接收所述发送端按照所述请求发送的所述BDQ中至少一个对应的BD。
可选的,在另一实施例中,该实施例在上述实施例的基础,所述装置还可以包括:第二发送单元和第二接收单元,其中,
所述第二发送单元,用于向所述发送端发送获取所述至少一个BD对应的报文的请求,所述请求中包括:所述至少一个BD对应的报文的物理地址;所述第二接收单元,用于通过总线接口接收所述发送端根据所述报文的物理地址发送的所述缓存器中至少一个BD对应的所述报文。
可选的,在另一实施例中,该实施例在上述实施例的基础,所述装置还可以包括:判断单元,其中,所述判断单元,用于根据接收到的所述BD的个数判断所述发送端的所述BDQ中是否缓存有BD,并有的判断结果发送给所述第一发送单元;所述第一发送单元,还用于在接收到所述判断单元发送的有的判断结果时,向所述发送端发送获取所述BDQ中BD的请求。
其中,判断单元,具体用于按照接收到的所述BDQ中BD的个数是否大于预设阈值来判断所述BDQ中是否缓存有BD,如果大于,则确定所述BDQ中缓存有BD;否则,确定所述BDQ中没有缓存BD。
为了便于本领域技术人员的理解,下面以具体的实例来说明。
请参阅图7,为本发明实施例提供的第一应用实例。
如图7所示,包括:一个发送设备(Sender),一个接收设备(Reciever),发送设备和接收设备之间采用PCIe接口传输,具体处理过程包括:
1)发送设备接收到报文后,先对报文进行分发,然后,将分发后的将报文缓存到缓存器(buffer),其buffer的存储空间足够大;
2)发送设备在将报文缓存到缓存器后,提取该报文描述符(BD),并将BD存储到对应的描述符缓存队列(BDQ)中;
当然,在该实施例中,还可以根据业务类型或线程管理(例如X86处理时,通常分为多个线程)对BD进行划分,并将划分后同一类的BD存储到对应的描述符缓存队列(BDQ)中。其中,报文描述符BD可以包含报文缓存的基地址Phy_Address(即物理地址)、报文相关的头信息等;
3)发送设备将所述描述符写入BDQ后,得到BDQ的写指针(Wr_ptr),并将Wr_ptr写入写指针表项(Wr ptr table)中进行缓存;
4)接收设备向发送设备定时发送读指针同步命令,以获取发送设备的Wr_ptr;
5)发送设备在接收到所述命令后,根据读指针同步,向接收设备返回BDQ的Wr_ptr,接收设备将接收到的Wr_ptr缓存到对应的写指针表项(Wr ptr table);即接收设备侧的Wr ptr table。
6)接收设备计算读指针和写指针的差值△,利用差值△来判断发送设备的BDQ内是否缓存有报文描述符;
在该实施例中,如果差值△大于经过协商的固定长度LEN(即BD的个数),则向发送设备发送的读长度为LEN;如果差值△小于等于LEN,则向发送设备发送的读长度为差值△;
7)接收设备根据读写指针差值△,还可以根据后级业务处理状态(例如,是否反压),来决策是否需要向发送设备发送读BDQ的命令,其中,读BDQ的命令包含读BDQ内存的起始地址和读长度;如果需要,则向发送设备发送读BDQ的命令,然后,执行步骤8);
8)发送设备在接收到读BDQ命令,根据该读BDQ命令中的读BDQ内存的起始地址和读长度,向接收设备发送对应的一串BD信息;
9)接收设备在接收到BD信息后,将BDQ的读指针刷新到内部的读指针表项(Rd ptrtable)中缓存;
在该实施例中,接收设备在接收到BD信息后,可以根据实际需要决定是否需要BD对应的报文信息,比如,接收设备只需要进行IP重排或者TCP重排,则根据接收到的BD信息来执行;当然,接收设备还可以根据需要获取BD对应的报文内容,即执行步骤10);
10)接收设备从BD中提取报文的Phy_Address;
11)接收设备获取Phy_Address,向发送端发送读报文命令,该读报文命令中包括Phy_Address;
12)发送设备在接收到该读报文命令后,根据读报文命令中的Phy_Address,将缓存在缓存器中的原始报文发送给接收设备;
13)接收设备在接收到所述报文后,定时将读指针刷新到发送设备;
14)接收设备后级业务处理1的反压信息;
15)接收设备后级业务处理2的反压信息。
也就是说,步骤14)和步骤15)中,接收设备对接收(读取)到报文的数量进行控制,当接收到报文的数量达到一定量时,比如饱和,向发送设备发送不再接收(读取)报文的信息,而发送设备在接收到该信息后,可以根据自身需要来决定是否存储报文,比如,如果,自身还有存储空间,则可以存储报文,如果没有存储空间,可以不存储报文,也就是说,发送设备是否存储报文,不受接收设备是否读取发送设备中存储的报文的限制。而根据自身需要。
该实施例中,接收设备通过定时刷新Wr_ptr和Rd_ptr的方式,以及控制发送的BDQ读长度,成功实现将发送设备的BDQ中的BD信息打包处理,减少了设备间描述符/地址信息的传递,降低了额外传输开销,大大提高了PCIe接口的传输效率。
同时,定时时长和BD的最大个数LEN,可以根据需要动态设置,实现较高的灵活性。
需要说明的是,本发明实施例中基于PCIe的传输机制,将报文描述符(即报文描述信息和报文内容分离,各自独立传输。
可选的,在另一实施例的基础上,该实施例在上述实施例的基础上,图7中的步骤10)、11)、12)和15)都可以省略,也就是说,对于接收设备来说,如果只需要报文描述信息,就可以进行相应的处理,比如,进行IP重排或者TCP重排等。这大大减少了PCIe接口间的信息传递,提高了PCIe接口的传输效率。
可选的,在另一实施例的基础上,该实施例在上述实施例的基础上,通过图7中的步骤7)、14)和15),实现了用户层面的反压功能;
也就是说,现有PCIe协议的流量控制中,主要体现在接口传输层面的流量控制,每个PCIe设备的接收缓冲区都是有限的;本发明实施例中通过定时发送流量控制报文,以告诉接收设备接收缓冲区剩余空间大小,以防止溢出。
如上所述方案,可以实现用户层面的反压功能,且接收缓冲区容量大小可以自由设置;很好的解决了突发场景下的流量整形控制。
需要说明的是,本实施例中只是以PCIe接口传输为例,并不限于此,还可以适用于其他接口传输。
本发明实施例中,将定时轮询、定长传输的机制,成功应用在PCIe接口传输,提高接口传输效率。同时定时时长、发包长度可动态调整,使传输更加灵活高效。
也就是说,上述实施例中,将多个短包(或者多个地址信息,或者多个报文描述信息)进行缓存,然后打包发送,有效减少了接口间信息的传递次数,减少了额外传输开销,提高了传输效率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。