一种硬件封包的基于PCIe的DMA传输方法
【技术领域】
[0001]本发明涉及一种数据传输方法,具体涉及一种基于PCIe的DMA传输方法。
【背景技术】
[0002]目前市场上现有的基于PCIe链路进行数据传输的板卡设备中,在与基于X86平台的上位机进行数据通讯的过程中,由于X86平台中北桥芯片的架构限制,从X86平台向板卡设备传输数据时,如果由X86平台发起并主导传输过程,则在每个TLP数据包(即PCIe协议中会话层的数据传输格式,一个TLP数据包由至少12个字节的包头和可选的包内数据组成)中都仅能够携带最多4个字节的有效数据,而TLP数据包的包头最小也需要12个字节,由于有效数据仅占据了 TLP数据包大小的最多1/4,因此在这种模式下,数据传输的效率非常低下,无法充分发挥PCIe链路的高速传输性能。
[0003]为了解决此问题,一般的做法都是在板卡设备侧实现相应的DMA传输控制功能,即由板卡设备来发起并主导控制数据传输的全过程。
[0004]市场上现有的基于PCIe链路进行数据传输的板卡设备中,一般都是从基于PCI链路的模式上修改和移植过来的,其DMA处理模式也是如此,一般都是通过软件配置和计算主要的传输参数,之后由板卡设备侧的硬件来完成传输过程。
【发明内容】
[0005]本发明旨在提出一种由硬件控制的数据包封装机制,即通过硬件获取数据传输链路上的数据包所允许的最大有效数据量,根据具体的物理内存映射地址来进行独立的数据封包操作,从而大幅减少处理过程中对底层驱动软件的依赖和底层软件的操作,以实现最优的数据传输性能。
[0006]本发明的技术方案在于:
一种硬件封包的基于PCIe的DMA传输方法,在基于PCIe总线的板卡设备中,以板卡设备向X86平台传输数据一方为发送侧,以X86平台向板卡设备传输数据为接收侧;包括以下步骤:
(1)为发送侧以及接收侧分别设立独立的数据封包控制单元;
(2)获取PCIe链路上的Payload_;
(3)确定首个数据包中携带的最大有效数据量Payloadfi?t并在起始系统物理地址开始以Payload_进行传输,直至剩余数据量不足Payload _则停止使用Payload _进行传输;
(4)确定最后一个数据包中的有效数据量Payloadlast,并传递剩余数据。
[0007]所述的确定Payloadfirs^方法为:以Addr start^以Payload max取得余数,再用Payload_减去此余数,其差值为Payload firsto
[0008]所述的确定PayloadfirSt时单个数据包中所携带有效数据不穿越系统的4K物理地址边界。
[0009]本发明的技术效果在于: 通过本发明提供的方法,将之前软件需要设定三个寄存器进而只需要两个寄存器就可以完成全部数据传输过程;且根据起始系统物理地址和总共需要传输的数据量的不同,如果要完成一次数据传输,软件最少需要将上述三个参数配置一次,最多时需要将上述三个参数配置3次。通过本发明提供的方法,软件的处理负担得以大幅降低,从而保证了数据传输过程更加的流畅和高效。
【具体实施方式】
[0010]—种硬件封包的基于PCIe的DMA传输方法,在基于PCIe总线的板卡设备中,以板卡设备向X86平台传输数据一方为发送侧,以X86平台向板卡设备传输数据为接收侧;包括以下步骤:
(1)为发送侧以及接收侧分别设立独立的数据封包控制单元;
(2)获取PCIe链路上的Payload_;
(3)确定首个数据包中携带的最大有效数据量Payloadfi?t并在起始系统物理地址开始以Payload_进行传输,且单个数据包中所携带有效数据不穿越系统的4K物理地址边界,直至剩余数据量不足PayloaUj停止使用Payload _进行传输;其中,确定Payload first的方法为:以AddrstaJ*以Payload _取得余数,再用Payload _减去此余数,其差值为
Payloadfirst0
[0011](4)确定最后一个数据包中的有效数据量Payloadlast,并传递剩余数据。
[0012]实施例:
Addrstart^ 5231,Payload 咖为 32,数据总量为 9753,以 Addr start5231 除以 PayloaU〗取得余数为15,再用Payload_32减去此余数15,得到Payloadfi?t大小为17,首个数据包传输完之后,对应的系统物理地址也增加到5248,为即5231+17所得,数据总量9753减去?&710&(1£11^后,剩余数据量为9736。之后从地址5248开始,以Payload _32作为数据包的有效数据容量进行数据传输,由于下一个4K边界的物理地址对应于8192,即4096*2,由于5248+ (91*32)=8160,由于下一个数据包的容量仍为32,而8160+32=8192,所以在此边界处未出现数据包中数据穿越4K边界的情况。同理,在下个数据边界12288处也不会发生这种情况。由于9736整除32所得到商为304,余数为8,所以从地址5248开始以Payload_32作为数据包的有效数据容量进行数据传输后,传输了 304个数据包之后,系统物理地址增加到14976,即5248+32*304,由于此时总共传输了 9745个字节的数据,而总数据量为9753个数据,因此最后一次传输的数据包中的有效数据为8,且最后一个数据包传输过程中也没有出现数据包中数据穿越4K边界的情况。
[0013]综上,在硬件实现过程中,由于全部使用了二进制的数据表示方法,在计算系统物理地址Addrstart除以Payload_的过程中,由于Payloadmax为2的整数幂,因此可以通过取Addrstart最低几位的操作来实现,譬如10进制数5231以2进制表示就是1010001101111,在Payloadmax为32的情况下,由于32对应的2进制数据为100000,因此只需取52312进制表示数据结果的低5位,即可得到5231除以32的余数15,再用32-15即可得到了 Payloadfl?t为17。之后再以总的数据量9753-17先得到剩余数据量9736,之后再每次传输开始前,将其与Payload_比较,如果大于Payload _则使用Payload _进行数据传输,并将剩余数据量减去Payload_,重复此过程直至剩余数据量小于等于PayloacLJ^,使用剩余数据量作为最后一个数据包中的有效数据量即可完成此次数据传输。
[0014]使用此方法设计的板卡设备,使用在PCIe Genl,XI的链路上时,实际测试得到的结果为进行单向传输时,板卡设备向上位机发送数据时,有效数据传输速率为230MBps ;上位机向板卡设备发送数据时,有效数据传输速率为220MBps ;板卡设备向上位机发送数据和上位机向板卡设备发送数据同时进行时,两个方向的总的数据传输速率为410Mbps,传输PCIe链路的传输性能得到了大幅的提升。
【主权项】
1.一种硬件封包的基于PCIe的DMA传输方法,在基于PCIe总线的板卡设备中,以板卡设备向X86平台传输数据一方为发送侧,以X86平台向板卡设备传输数据为接收侧;其特征在于:包括以下步骤: (1)为发送侧以及接收侧分别设立独立的数据封包控制单元; (2)获取PCIe链路上的Payload_; (3)确定首个数据包中携带的最大有效数据量Payloadfi?t并在起始系统物理地址开始以Payload_进行传输,直至剩余数据量不足Payload _则停止使用Payload _进行传输; (4)确定最后一个数据包中的有效数据量Payloadlast,并传递剩余数据。2.如权利要求1所述的一种硬件封包的基于PCIe的DMA传输方法,其特征在于:所述的确定Payloadfi?t的方法为:以Addr咖^除以Payload _取得余数,再用Payload _减去此余数,其差值为PayloadfirSt。3.如权利要求2所述的一种硬件封包的基于PCIe的DMA传输方法,其特征在于:所述的确定Payloadfl?t时单个数据包中所携带有效数据不穿越系统的4K物理地址边界。
【专利摘要】本发明涉及一种数据传输方法,具体涉及一种基于PCIe的DMA传输方法。一种硬件封包的基于PCIe的DMA传输方法,在基于PCIe总线的板卡设备中,以板卡设备向X86平台传输数据一方为发送侧,以X86平台向板卡设备传输数据为接收侧;其特征在于:包括以下步骤:(1)为发送侧以及接收侧分别设立独立的数据封包控制单元;(2)获取PCIe链路上的Payloadmax;(3)确定首个数据包中携带的最大有效数据量Payloadfirst并在起始系统物理地址开始以Payloadmax进行传输,直至剩余数据量不足Payloadmax则停止使用Payloadmax进行传输;(4)确定最后一个数据包中的有效数据量Payloadlast,并传递剩余数据。通过本发明提供的方法,软件的处理负担得以大幅降低,从而保证了数据传输过程更加的流畅和高效。
【IPC分类】G06F13/28, G06F13/38
【公开号】CN105320625
【申请号】CN201510669692
【发明人】郭恩全, 郑霖
【申请人】陕西海泰电子有限责任公司
【公开日】2016年2月10日
【申请日】2015年10月16日