背景技术
在基于PCIE总线的传输过程中,数据报文需要被发送端封装为TLP(Transaction LayerPacket,事务层包)分片传输至接收端、再由接收方从TLP分片中解封装得到数据报文。
请参见图1,发送端和接收端均包括带有PCIE接口的CPU,且发送端和接收端的CPU的PCIE接口通过PCIE总线相互连接;发送端的CPU负责将待发送的数据报文的数据载荷封装至TLP分片、并从其PCIE接口连接的PCIE总线向接收端发送TLP分片;接收端的CPU从其PCIE接口接收到发送端通过PCIE总线发来的TLP分片、并从TLP分片中解封装得到数据载荷以恢复数据报文。
请参见图2,用于封装数据报文TLP分片从内至外依次包括:内层用于封装数据载荷的Data(载荷)字段,Transaction Layer(事务层)的一个12字节的Header(头)字段和一个4字节的ECRC(End-to-end Cyclic Redundancy Check,端到端循环冗余校验码)字段,Data LinkLayer(数据链路层)的一个2字节的SN(Sequence Number,序列号)字段和一个4字节的LCRC(Link Cyclic Redundancy Check,链路循环冗余校验码)字段,以及,Physical Layer(物理层)的两个1字节的Framing(框架)字段。
其中,只要一个数据报文的数据载荷长度未超过Data字段的载荷长度上限,该数据报文的数据载荷就可以全部被封装在一个TLP分片的Data字段中;但若一个数据报文的数据载荷长度超过Data字段的载荷长度上限,则该数据报文的数据载荷可以被分别封装至连续的多个TLP分片的Data字段中。另外,无论TLP分片的Data字段中封装的是一个数据报文的全部数据载荷还是部分数据载荷,一个TLP分片的Data字段中都只能封装同一个数据报文的数据载荷。
基于上述方式,从发送端向接收端发送的数据报文会以至少一个TLP分片的形式传输,而TLP分片的数量就取决于数据报文的数据载荷长度。但接收端虽然能够确定其接收到的每个TLP中封装的数据载荷属于同一个数据报文,但由于其并不知晓该数据报文的长度,因而无法确定该数据报文所对应的TLP分片数量,从而无法确定其是否完成对该数据报文的所有TLP分片的接收。
为此,现有技术在发送端与接收端之间采用BD(Buffer Descriptor,缓存描述符)机制,该BD机制由发送端在完成对一个数据报文的所有TLP分片后更新接收端的BD、并由接收方依据发送端对其BD的更新来确定是否完成对该数据报文的所有TLP分片的接收。
请参见图3,传输一个数据报文的过程包括:
S301,发送端将数据报文的数据载荷封装在TLP分片中、并通过PCIE总线向接收端发送;
S302,接收端从PCIE总线接收到封装有数据载荷的TLP分片,并通过PCIE总线向发送端回应封装有表示确收TLP分片的ACK(应答)信息的DLLP(Data Link Layer Packet,数据链路层包)、以及封装有Update Credit(更新信用度)信息的DLLP;
实际应用中,如果一个数据报文只需要占用一个TLP分片,则只需要针对这一个TLP分片执行一次S301~S302、然后即可开始执行S303,但如果一个数据报文需要占用至少两个TLP分片,则针对每个TLP分片均需要执行一次S301~S302、待针对所有的TLP分片均执行了S301~S302之后再开始执行S303;
S303,发送端在封装有该数据报文的数据载荷的所有TLP分片均完成发送后,会将一BD更新数据报文封装至TLP分片中发送至接收端;
S304,接收端在接收到封装有BD更新报文的TLP分片后,确认此前传输的属于同一个数据报文的TLP分片已接收完毕,并向发送端回应封装有表示确收BD更新报文的ACK信息的DLLP、以及封装有Update Credit信息的DLLP;
S305,接收端将属于同一个数据报文的TLP分片中的数据载荷恢复为该数据报文,并将一BD回收报文封装在TLP分片中向发送端发送、以触发发送端继续发送下一个数据报文;
S306,发送端接收到封装有BD回收报文的TLP分片后,向接收端回应封装有表示确收BD回收报文的ACK信息的DLLP、以及封装有Update Credit信息的DLLP。
至此,一个数据报文的传输过程结束。
在上述如图3所示的一次传输过程中:每个TLP分片的Data字段会产生载荷开销(数据载荷为M字节、M为正整数,BD更新报文和BD回收报文均为8字节);每个TLP分片的Transaction Layer、Data Link Layer以及Physical Layer的各字段还会产生总共24字节的控制信息开销;以及,每个DLLP也会产生8字节的开销。
因此,在一个数据报文的数据载荷只占用一个TLP分片的情况下,发送端至接收端的单向传输方向上传输的2个TLP和2个DLLP总共会产生(M+24)+(8+24)+8×2=M+72字节的单向带宽开销,单向带宽利用率为M/(M+72);如果再算上接收端至发送端的单向传输方向上传输的1个TLP和4个DLLP,即,总共(8+24)+8×4=64字节的开销,则总共产生M+136字节的双向带宽开销,双向带宽利用率为M/(M+136)。
假设一个数据报文的数据载荷的长度M为60字节、且该数据报文的数据载荷只需占用一个TLP分片,则单向带宽利用率只有60/132=45.5%,双向带宽利用率只有60/196=30.6%。这种情况下,对于一条5G×4Lane的PCIE总线链路,其20G的可用物理带宽经过8b/10b编码后形成16G的真实物理带宽,但基于30.6%的双向带宽利用率,实际只能产生4.9Gbps的速率。一个数据报文的数据载荷占用至少两个TLP分片的情况也是同理。
可见,现有的PCIE总线的带宽利用率不高。而且,由于一个TLP分片的Data字段只能被同一个数据报文的数据载荷独占,因此,当数据报文的数据载荷长度M较小时,PCIE总线的带宽利用率在小包传输时会被进一步降低。
发明内容
有鉴于此,本发明提供了一种报文传输方法和装置。
本发明提供的一种报文传输方法,该报文传输方法应用于数据报文传输的发送端的逻辑芯片中、并包括:
通过非PCIE总线从本端的CPU接收待发送的数据报文;
为接收到的数据报文增加用于表示该数据报文的数据载荷长度的字节填充;
将数据报文的所述字节填充和数据载荷封装至TLP分片的载荷字段中;
将TLP分片通过PCIE总线向接收端发送。
可选地,若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充及数据载荷被封装在一个TLP分片的载荷字段中;若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充以及该数据报文的数据载荷的一部分被封装在一个TLP分片的载荷字段中、该数据报文的数据载荷的其它部分被封装至后续连续的至少一个其它TLP分片的载荷字段中。进一步可选地,若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限,则该至少两个数据报文的所述字节填充及数据载荷被封装在同一个TLP分片的载荷字段中。
可选地,每个数据报文的所述字节填充位于该数据报文的数据载荷的前部。
本发明提供的另一种报文传输方法,该报文传输方法应用于数据报文传输的接收端的逻辑芯片中、并包括:
通过PCIE总线从发送端接收TLP分片;
依据TLP分片的载荷字段中用于表示数据报文的数据载荷长度的字节填充,将TLP分片的载荷字段中的对应长度的数据载荷确定为该字节填充所属数据报文的数据载荷;
将依据所述字节填充确定的对应长度的数据载荷恢复为对应的数据报文;
将恢复得到的数据报文通过非PCIE总线向本端的CPU发送。
可选地,若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的全部;若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的一部分、并从后续连续的至少一个其它TLP分片的载荷字段中识别出该数据报文的数据载荷的其它部分。进一步可选地,若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限且被封装在同一个TLP分片,则从该TLP分片的载荷字段中识别出该至少两个数据报文中的每一个的所述字节填充及数据载荷。
可选地,每个数据报文的所述字节填充位于该数据报文的数据载荷的前部。
本发明提供的一种报文传输装置,该报文传输装置承载于数据报文传输的发送端的逻辑芯片中、并包括:
内部接收模块,通过非PCIE总线从本端的CPU接收待发送的数据报文;
字节填充模块,为接收到的数据报文增加用于表示该数据报文的数据载荷长度的字节填充;
分片封装模块,将数据报文的所述字节填充和数据载荷封装至TLP分片的载荷字段中;
外部发送模块,将TLP分片通过PCIE总线向接收端发送。
可选地,若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充及数据载荷被封装在一个TLP分片的载荷字段中、并独占一个TLP分片的载荷字段;若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充以及该数据报文的数据载荷的一部分被封装在一个TLP分片的载荷字段中、该数据报文的数据载荷的其它部分被封装至后续连续的至少一个其它TLP分片的载荷字段中。进一步可选地,若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限,则该至少两个数据报文的所述字节填充及数据载荷被封装在同一个TLP分片的载荷字段中。
可选地,每个数据报文的所述字节填充位于该数据报文的数据载荷的前部。
本发明提供的另一种报文传输装置,该报文传输装置承载于数据报文传输的接收端的逻辑芯片中、并包括:
外部接收模块,通过PCIE总线从发送端接收TLP分片;
长度确定模块,依据TLP分片的载荷字段中用于表示数据报文的数据载荷长度的字节填充,将TLP分片的载荷字段中的对应长度的数据载荷确定为该字节填充所属数据报文的数据载荷;
报文恢复模块,将依据所述字节填充确定的对应长度的数据载荷恢复为对应的数据报文;
内部发送模块,将恢复得到的数据报文通过非PCIE总线向本端的CPU发送。
可选地,若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的全部;若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的一部分、并从后续连续的至少一个其它TLP分片的载荷字段中识别出该数据报文的数据载荷的其它部分。进一步可选地,若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限且被封装在同一个TLP分片,则从该TLP分片的载荷字段中识别出该至少两个数据报文中的每一个的所述字节填充及数据载荷。
可选地,每个数据报文的所述字节填充位于该数据报文的数据载荷的前部。
由此可见,基于本发明的报文传输方法和装置,发送端可以在TLP分片的载荷字段中携带数据报文的数据载荷长度,相应地,接收端可以从TLP分片的载荷字段中识别出数据载荷长度。因此,在发送端和接收端之间就无需通过BD机制来通告以及识别数据报文的传输完成,从而能够省去BD机制占用的带宽开销,进而能够提高PCIE总线的带宽利用率。而且,由于每个数据报文的数据载荷都能够通过对应的数据载荷长度予以标识,因而当数据报文的数据载荷长度较小时,多个数据报文的数据载荷可以共用一个TLP分片的载荷字段,从而能够减少小包传输的发生概率,进而能够在小包传输时进一步提高PCIE总线的带宽利用率。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图对本申请实施例进行详细说明。
针对PCIE总线传输的带宽利用率不高的问题,本实施例首先进行了如下分析:从如图3所示的流程可以看出,只有S301中由发送端向接收端发送的TLP分片、以及S302中由接收端向发送端发送的DLLP真正实现的是数据载荷的传输过程,而S303中传输的32字节的1个TLP分片、S304中传输的共16字节的2个DLLP、S305中传输的32字节的1个TLP分片、以及S306中传输的共16字节的2个DLLP均涉及BD机制,并产生总计96字节的带宽开销。即,在M+136的双向带宽开销中,BD机制占据了其中的96字节。
基于此,本实施例旨在省略PCIE传输中所使用的BD机制,以消除每个数据报文传输时由于BD机制所产生的96字节的带宽开销。
请参见图4,在本实施例中,发送端先为数据报文增加表示数据载荷长度的字节填充(该字节填充可以为2字节),该字节填充可以位于数据载荷的前部,然后发送端再将该字节填充与数据载荷一同封装在TLP分片的Data字段中。其中:
对于一个数据报文只封装为一个TLP分片的情况,请在参见图4的同时再结合图5a,表示数据载荷长度的该字节填充能够与全部的数据载荷封装在这一个TLP分片的Data字段中,且表示数据载荷长度的该字节填充在Data字段中优选地位于数据载荷的前部;
对于一个数据报文需要分为多个TLP分片封装的情况,请在参见图4的同时再结合图5b,表示数据载荷长度的该字节填充可以与一部分数据载荷封装一个TLP分片的Data字段中,且表示数据载荷长度的该字节填充优选地与数据载荷位置靠前的一部分封装在多个TLP中的第一个的Data字段中、并在Data字段中优选地位于数据载荷位置靠前的一部分的前部;
另外,对于一个数据报文的数据载荷长度较小(可称之为数据报文)的情况,请在参见图4的同时再结合图5c,若至少两个数据报文的上述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的Data字段的载荷长度上限,则为了在小包传输时进一步提高PCIE总线的带宽利用率,本实施例允许至少两个数据报文的上述字节填充及数据载荷被封装在同一个TLP分片的Data字段中,且每个数据报文的上述字节填充在Data字段中与该数据报文的数据载荷位置相邻、并优选地位于该数据报文的数据载荷的前部。
请再参见图4,对应于发送端的处理方式,接收端可以从TLP分片的Data字段中识别出表示数据载荷长度的字节填充、并以此来判断一个数据报文的所有数据载荷是否全部接收。其中,若表示数据载荷长度的字节填充位于其对应的数据报文的数据载荷的前部,则接收端在识别出该字节填充之后:
对于如图5a所示的一个数据报文只封装为一个TLP分片的情况,接收端可对当前TLP分片的Data字段中的接收内容进行字节计数,当计数达到该字节填充所表示的数据载荷长度时,即认为该字节填充对应的数据报文的所有数据载荷已全部接收;
对于如图5b所示的一个数据报文分为多个TLP分片封装的情况,接收端可对当前TLP分片及其后续连续接收到的至少一个其它TLP分片的Data字段中的接收内容进行字节计数,当计数达到该字节填充所表示的数据载荷长度时,即认为该字节填充对应的数据报文的所有数据载荷已全部接收;
另外,对于如图5c所示的至少两个数据报文的字节填充及数据载荷被封装在同一个TLP分片的情况,接收端可按照与如图5a所示的情况相同的方式依次对当前TLP分片中的每个数据报文的数据载荷进行计数。
如上可见,通过为数据报文增加表示数据载荷长度的字节填充、以及对增加了字节填充的数据报文进行TLP分片封装,本实施例无需发送端和接收端之间通过BD机制即可使接收端能够识别数据报文的数据载荷是否完成传输,从而能够省去BD机制占用的带宽开销,进而能够提高PCIE总线的带宽利用率。而且,通过允许多个数据报文的数据载荷共用同一个TLP分片的Data字段,本实施例能够减少小包传输的发生,进而能够在小包传输时进一步提高PCIE总线的带宽利用率。
请参见图6,本实施例可以在发送端和接收端均设置带有PCIE接口的逻辑芯片,该逻辑芯片可以是例如FPGA(Field Programmable Gate Array,现场可编程门阵列)等任一种逻辑器件;发送端中的CPU和逻辑芯片通过内部总线相互连接、接收端中的CPU和逻辑芯片也通过内部总线相互连接,发送端的逻辑芯片的PCIE接口与接收端的逻辑芯片的PCIE接口通过PCIE总线相互连接。
相应地,发送端的CPU仅负责将待发送的数据报文提供给发送端的逻辑芯片,发送端的逻辑芯片负责为数据报文增加表示数据载荷长度的字节填充、并将带有该字节填充的数据报文封装为TLP分片;同理,接收端的逻辑芯片负责从接收到的TLP分片中识别表示数据载荷长度的字节填充、还依据字节填充表示的数据载荷长度将TLP分片中对应的数据载荷恢复为数据报文并发送给接收端的CPU。其中,由于发送端和接收端的CPU不再涉及TLP分片的封装和解封装,因而发送端和接收端中将CPU和逻辑芯片相互连接的内部总线为任一种非PCIE协议的总线,例如SPI4.2(System Packet Interface4.2,4.2版本的本系统包接口)总线、或XAUI(10Gbps Ethernet Attachment Unit Interface,万兆以太连接单元接口)总线、或InterLaken(因特拉肯)总线等。
请参见图7,基于上述原理和硬件框架,在通过PCIE总线传输一个数据报文时,每个TLP分片的传输过程如下:
S701,发送端的逻辑芯片为从本端CPU接收到的数据报文增加表示数据载荷长度的字节填充,然后将带有该字节填充的数据报文封装在当前的一个TLP分片中、并通过PCIE总线向接收端发送;
S702,接收端的逻辑芯片从PCIE总线接收到TLP分片、并依据TLP分片中表示数据载荷的字节填充恢复得到具有特征长度的数据载荷的数据报文,然后通过PCIE总线向发送端回应表示确收数据载荷的DLLP。
至此,一个TLP分片的传输过程结束。
下面,针对如图7所示的上述传输过程在不同情况下产生的带宽利用率进行详细分析。
1)、一个数据报文只占据一个TLP分片的情况
在该情况下,一个数据报文的传输只需要执行一次如图7所示的传输过程,并且,在发送端至接收端的单项传输方向上只有一个TLP分片、在接收端至发送端的单向传输方向上有2个DLLP;
此时,假设表示数据载荷长度的字节填充选用2字节,则:
该TLP分片的Data字段会在PCIE总线产生M+2字节的载荷开销、其余字段会在PCIE总线产生24字节的控制信息开销,总计M+26字节的单向带宽开销、以及M/(M+26)的单向带宽利用率;
如果再算上接收端至发送端的单向传输方向上传输的2个DLLP产生的共16字节的带宽开销,则总共产生M+42字节的双向带宽开销、M/(M+42)的双向带宽利用率。
可见,相比于现有的单向带宽利用率M/(M+72)、以及双向带宽利用率为M/(M+136),本实施例在一个数据报文只占据一个TLP分片时产生的M/(M+26)的单向带宽利用率、以及M/(M+42)的双向带宽利用率都有了明显提高。
例如,假设一个数据报文的数据载荷的长度M为60字节、且该数据报文的数据载荷只需占用一个TLP分片,则单向带宽利用率能够达到60/86=69.8%、其明显高于现有方式的45.5%,双向带宽利用率能够达到60/102=58.8%、其明显高于现有方式的30.6%。相应地,对于一条5G×4Lane的PCIE总线链路,其20G的可用物理带宽经过8b/10b编码后形成16G的真实物理带宽,并且,基于58.8%的双向带宽利用率,实际能够产生9.4Gbps的速率、其明显高于现有方式的4.9Gbps。
2)、一个数据报文需要占据N(N为大于等于2的正整数)个TLP分片的情况
在情况下,一个数据报文的传输需要执行N次如图7所示的传输过程,并且,在发送端至接收端的单项传输方向上有N个TLP分片、接收端至发送端的单向传输方向上传输的2×N个DLLP;
此时,假设表示数据载荷长度的字节填充选用2字节,则:
N个TLP分片的Data字段总共会在PCIE总线产生M+2字节的载荷开销、其余字段会在PCIE总线产生24×N字节的控制信息开销,总计M+2+24×N字节的单向带宽开销、以及M/(M+2+24×N)的单向带宽利用率;
如果再算上接收端至发送端的单向传输方向上传输的2×N个DLLP产生的共16×N字节的带宽开销,则总共产生M+2+40×N字节的双向带宽开销、M/(M+2+40×N)的双向带宽利用率。
但若按照现有基于BD机制的传输方式,发送端至接收端的单向传输方向上需要传输N个用于实现数据载荷传输的TLP、1个用于实现BD机制的TLP分片以及2个用于实现BD机制的DLLP,接收端至发送端的单向传输方向上传输2×N个用于实现数据载荷传输应答的DLLP、2个用于实现BD机制的DLLP以及1个用于实现BD机制的TLP分片,相应地:
在发送端至接收端的单向传输方向上总共产生(M+2+24×N)+(8+24)+8×2=M+24×N+50字节的单向带宽开销,单向带宽利用率为M/(M+24×N+50);
如果再算上接收端至发送端的单向传输方向上产生的(2×N×8)+(2×8)+(8+24)=16×N+48字节的开销,则总共产生M+24×N+114字节的双向带宽开销,双向带宽利用率为M/(M+40×N+98)。
可见,相比于现有的单向带宽利用率M/(M+24×N+50)、以及双向带宽利用率为M/(M+40×N+98),本实施例在一个数据报文占据N个TLP分片时产生的M/(M+2+24×N)的单向带宽利用率、以及M/(M+2+40×N)的双向带宽利用率也都有所提高。
3)、P(P为大于等于2的正整数)个数据报文共用一个TLP分片的情况
在该情况下,P个数据报文的传输只需要执行一次如图7所示的传输过程,并且,在发送端至接收端的单项传输方向上只有一个TLP分片、在接收端至发送端的单向传输方向上有2个DLLP;
此时,假设P个数据报文中的每一个的数据载荷长度均为M个字节、表示数据载荷长度的字节填充选用2字节,则:
该TLP分片的Data字段会在PCIE总线产生(M+2)×P字节的载荷开销、其余字段会在PCIE总线产生24字节的控制信息开销,总计(M+2)×P+24字节的单向带宽开销、以及M/(M+2+24/P)的单向带宽利用率;
如果再算上接收端至发送端的单向传输方向上传输的2个DLLP产生的共16字节的带宽开销,则总共产生(M+2)×P+40字节的双向带宽开销、M/(M+2+40/P)的双向带宽利用率。
但如果按照现有基于BD机制的传输方式,发送端至接收端的单向传输方向上针对P个数据报文中的每一个都需要传输1个用于实现数据载荷传输的TLP、1个用于实现BD机制的TLP分片以及2个用于实现BD机制的DLLP,接收端至发送端的单向传输方向上针对P个数据报文中的每一个都需要传输2个用于实现数据载荷传输应答的DLLP、2个用于实现BD机制的DLLP以及1个用于实现BD机制的TLP分片,相应地,单向带宽利用率M/(M+72)、双向带宽利用率为M/(M+136)。
可见,单向带宽利用率M/(M+72)、以及双向带宽利用率为M/(M+136),本实施例在P个数据报文共用一个TLP分片时产生的M/(M+2+24/P)的单向带宽利用率、以及M/(M+2+40/P)的双向带宽利用率都有了明显提高;
而且,相比于一个数据报文只占据一个TLP分片时产生的M/(M+26)的单向带宽利用率、以及M/(M+42)的双向带宽利用率,本实施例在P个数据报文共用一个TLP分片时产生的M/(M+2+24/P)的单向带宽利用率、以及M/(M+2+40/P)的双向带宽利用率有了进一步的提高。
假设P取4、且4个数据报文中的每一个的数据载荷的长度M为60字节,则单向带宽利用率能够达到60/68=88.2%、其明显高于一个数据报文独占一个TLP分片时的69.8%,双向带宽利用率能够达到60/72=83.3%、其明显高于一个数据报文独占一个TLP分片时的58.8%。相应地,对于一条5G×4Lane的PCIE总线链路,其20G的可用物理带宽经过8b/10b编码后形成16G的真实物理带宽,并且,基于83.3%的双向带宽利用率,实际能够产生13.3Gbps的速率、其明显高于一个数据报文独占一个TLP分片时的9.4Gbps。
以上是对本实施例中的报文传输原理的详细说明及效果分析。基于上述的报文传输原理,本实施例提供了相应的报文传输方法。
本实施例首先提供了一种报文传输方法,该报文传输方法应用于数据报文传输的发送端的逻辑芯片中,该逻辑芯片通过PCIE总线与接收端相连、并通过非PCIE总线与本端的CPU相连,请参见图8a,该报文传输方法包括:
步骤811、通过非PCIE总线从本端的CPU接收待发送的数据报文。
步骤812、为接收到的数据报文增加用于表示该数据报文的数据载荷长度的字节填充。其中:
每个数据报文的上述字节填充优选地被本步骤添加在位于该数据报文的数据载荷的前部的位置处。
步骤813、将数据报文的上述字节填充和数据载荷封装至TLP分片的Data字段中。其中:
若一个数据报文的上述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则该数据报文的上述字节填充及数据载荷被本步骤封装在一个TLP分片的Data字段中;
若一个数据报文的上述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则该数据报文的上述字节填充以及该数据报文的数据载荷的一部分被本步骤封装在一个TLP分片的Data字段中、该数据报文的数据载荷的其它部分被本步骤封装至后续连续的至少一个其它TLP分片的Data字段中;
若至少两个数据报文的上述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限,则该至少两个数据报文的上述字节填充及数据载荷被本步骤封装在同一个TLP分片的Data字段中。
另外,若步骤812将每个数据报文的上述字节填充添加在位于该数据报文的数据载荷的前部,则本步骤在TLP分片的Data字段中所封装的每个数据报文的上述字节填充也会位于该数据报文的数据载荷的前部。
步骤814、将TLP分片通过PCIE总线向接收端发送。
至此,发送端的逻辑芯片针对一个数据报文的处理过程结束。
本实施例还提供了另一种报文传输方法,该报文传输方法应用于数据报文传输的接收端的逻辑芯片中,该逻辑芯片通过PCIE总线与发送端相连、并通过非PCIE总线与本端的CPU相连,请参见图8b,该报文传输方法包括:
步骤821、通过PCIE总线从发送端接收TLP分片。
步骤822、依据TLP分片的Data字段中用于表示数据报文的数据载荷长度的字节填充,将TLP分片的Data字段中的对应长度的数据载荷确定为该字节填充所属数据报文的数据载荷。其中:
若一个数据报文的上述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则本步骤从一个TLP分片的Data字段中识别出该数据报文的上述字节填充以及该数据报文的数据载荷的全部;
若一个数据报文的上述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则本步骤从一个TLP分片的Data字段中识别出该数据报文的上述字节填充以及该数据报文的数据载荷的一部分、并从后续连续的至少一个其它TLP分片的Data字段中识别出该数据报文的数据载荷的其它部分;
若至少两个数据报文的上述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的荷长度上限、并被封装在同一个TLP分片,则本步骤从该TLP分片的Data字段中识别出该至少两个数据报文中的每一个的上述字节填充及数据载荷。
另外,若发送端将每个数据报文的上述字节填充添加在位于该数据报文的数据载荷的前部,则本步骤从TLP分片的Data字段中所识别出的每个数据报文的上述字节填充也会位于该数据报文的数据载荷的前部。
步骤823、将依据字节填充确定的对应长度的数据载荷恢复为对应的数据报文。
步骤824、将恢复得到的数据报文通过非PCIE总线向本端的CPU发送。
至此,接收端的逻辑芯片针对一个数据报文的处理过程结束。
实际应用中,上述的报文传输方法可以利用计算机程序来实现,因此,本实施例还提供了基于计算机程序的报文传输装置。
本实施例首先提供了一种报文传输装置,该报文传输装置承载于数据报文传输的发送端的逻辑芯片中,该逻辑芯片通过PCIE总线与接收端相连、并通过非PCIE总线与本端的CPU相连,并且,该报文传输装置包括:
内部接收模块,通过非PCIE总线从本端的CPU接收待发送的数据报文;
字节填充模块,为接收到的数据报文增加用于表示该数据报文的数据载荷长度的字节填充;
分片封装模块,将数据报文的所述字节填充和数据载荷封装至TLP分片的载荷字段中;
外部发送模块,将TLP分片通过PCIE总线向接收端发送。
其中,对于所述分片封装模块:
若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充及数据载荷被所述分片封装模块封装在一个TLP分片的载荷字段中、并独占一个TLP分片的载荷字段;
若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则该数据报文的所述字节填充以及该数据报文的数据载荷的一部分被所述分片封装模块封装在一个TLP分片的载荷字段中、该数据报文的数据载荷的其它部分被所述分片封装模块封装至后续连续的至少一个其它TLP分片的载荷字段中;
若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限,则该至少两个数据报文的所述字节填充及数据载荷被所述分片封装模块封装在同一个TLP分片的载荷字段中。
另外,对于所述字节填充模块和所述分片封装模块,可以遵循每个数据报文的所述字节填充位于该数据报文的数据载荷的前部的原则。
本实施例还提供了一种报文传输装置,该报文传输装置承载于数据报文传输的接收端的逻辑芯片中,该逻辑芯片通过PCIE总线与发送端相连、并通过非PCIE总线与本端的CPU相连,并且,该报文传输装置包括:
外部接收模块,通过PCIE总线从发送端接收TLP分片;
长度确定模块,依据TLP分片的载荷字段中用于表示数据报文的数据载荷长度的字节填充,将TLP分片的载荷字段中的对应长度的数据载荷确定为该字节填充所属数据报文的数据载荷;
报文恢复模块,将依据所述字节填充确定的对应长度的数据载荷恢复为对应的数据报文;
内部发送模块,将恢复得到的数据报文通过非PCIE总线向本端的CPU发送。
其中,对于所述长度确定模块:
若一个数据报文的所述字节填充及数据载荷的总字节小于等于一个TLP分片的载荷长度上限,则所述长度确定模块从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的全部;
若一个数据报文的所述字节填充及数据载荷的总字节长度大于一个TLP分片的载荷长度上限,则所述长度确定模块从一个TLP分片的载荷字段中识别出该数据报文的所述字节填充以及该数据报文的数据载荷的一部分、并从后续连续的至少一个其它TLP分片的载荷字段中识别出该数据报文的数据载荷的其它部分;
若至少两个数据报文的所述字节填充及数据载荷的总字节长度之和小于等于一个TLP分片的载荷长度上限、并被封装在同一个TLP分片,则所述长度确定模块从该TLP分片的载荷字段中识别出该至少两个数据报文中的每一个的所述字节填充及数据载荷。
另外,所述长度确定模块可以与发送端同时遵循每个数据报文的所述字节填充位于该数据报文的数据载荷的前部的原则。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。