一種硬件封包的基于PCIe的DMA傳輸方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)傳輸方法,具體涉及一種基于PCIe的DMA傳輸方法。
【背景技術(shù)】
[0002]目前市場上現(xiàn)有的基于PCIe鏈路進行數(shù)據(jù)傳輸?shù)陌蹇ㄔO(shè)備中,在與基于X86平臺的上位機進行數(shù)據(jù)通訊的過程中,由于X86平臺中北橋芯片的架構(gòu)限制,從X86平臺向板卡設(shè)備傳輸數(shù)據(jù)時,如果由X86平臺發(fā)起并主導傳輸過程,則在每個TLP數(shù)據(jù)包(即PCIe協(xié)議中會話層的數(shù)據(jù)傳輸格式,一個TLP數(shù)據(jù)包由至少12個字節(jié)的包頭和可選的包內(nèi)數(shù)據(jù)組成)中都僅能夠攜帶最多4個字節(jié)的有效數(shù)據(jù),而TLP數(shù)據(jù)包的包頭最小也需要12個字節(jié),由于有效數(shù)據(jù)僅占據(jù)了 TLP數(shù)據(jù)包大小的最多1/4,因此在這種模式下,數(shù)據(jù)傳輸?shù)男史浅5拖?,無法充分發(fā)揮PCIe鏈路的高速傳輸性能。
[0003]為了解決此問題,一般的做法都是在板卡設(shè)備側(cè)實現(xiàn)相應的DMA傳輸控制功能,即由板卡設(shè)備來發(fā)起并主導控制數(shù)據(jù)傳輸?shù)娜^程。
[0004]市場上現(xiàn)有的基于PCIe鏈路進行數(shù)據(jù)傳輸?shù)陌蹇ㄔO(shè)備中,一般都是從基于PCI鏈路的模式上修改和移植過來的,其DMA處理模式也是如此,一般都是通過軟件配置和計算主要的傳輸參數(shù),之后由板卡設(shè)備側(cè)的硬件來完成傳輸過程。
【發(fā)明內(nèi)容】
[0005]本發(fā)明旨在提出一種由硬件控制的數(shù)據(jù)包封裝機制,即通過硬件獲取數(shù)據(jù)傳輸鏈路上的數(shù)據(jù)包所允許的最大有效數(shù)據(jù)量,根據(jù)具體的物理內(nèi)存映射地址來進行獨立的數(shù)據(jù)封包操作,從而大幅減少處理過程中對底層驅(qū)動軟件的依賴和底層軟件的操作,以實現(xiàn)最優(yōu)的數(shù)據(jù)傳輸性能。
[0006]本發(fā)明的技術(shù)方案在于:
一種硬件封包的基于PCIe的DMA傳輸方法,在基于PCIe總線的板卡設(shè)備中,以板卡設(shè)備向X86平臺傳輸數(shù)據(jù)一方為發(fā)送側(cè),以X86平臺向板卡設(shè)備傳輸數(shù)據(jù)為接收側(cè);包括以下步驟:
(1)為發(fā)送側(cè)以及接收側(cè)分別設(shè)立獨立的數(shù)據(jù)封包控制單元;
(2)獲取PCIe鏈路上的Payload_;
(3)確定首個數(shù)據(jù)包中攜帶的最大有效數(shù)據(jù)量Payloadfi?t并在起始系統(tǒng)物理地址開始以Payload_進行傳輸,直至剩余數(shù)據(jù)量不足Payload _則停止使用Payload _進行傳輸;
(4)確定最后一個數(shù)據(jù)包中的有效數(shù)據(jù)量Payloadlast,并傳遞剩余數(shù)據(jù)。
[0007]所述的確定Payloadfirs^方法為:以Addr start^以Payload max取得余數(shù),再用Payload_減去此余數(shù),其差值為Payload firsto
[0008]所述的確定PayloadfirSt時單個數(shù)據(jù)包中所攜帶有效數(shù)據(jù)不穿越系統(tǒng)的4K物理地址邊界。
[0009]本發(fā)明的技術(shù)效果在于: 通過本發(fā)明提供的方法,將之前軟件需要設(shè)定三個寄存器進而只需要兩個寄存器就可以完成全部數(shù)據(jù)傳輸過程;且根據(jù)起始系統(tǒng)物理地址和總共需要傳輸?shù)臄?shù)據(jù)量的不同,如果要完成一次數(shù)據(jù)傳輸,軟件最少需要將上述三個參數(shù)配置一次,最多時需要將上述三個參數(shù)配置3次。通過本發(fā)明提供的方法,軟件的處理負擔得以大幅降低,從而保證了數(shù)據(jù)傳輸過程更加的流暢和高效。
【具體實施方式】
[0010]—種硬件封包的基于PCIe的DMA傳輸方法,在基于PCIe總線的板卡設(shè)備中,以板卡設(shè)備向X86平臺傳輸數(shù)據(jù)一方為發(fā)送側(cè),以X86平臺向板卡設(shè)備傳輸數(shù)據(jù)為接收側(cè);包括以下步驟:
(1)為發(fā)送側(cè)以及接收側(cè)分別設(shè)立獨立的數(shù)據(jù)封包控制單元;
(2)獲取PCIe鏈路上的Payload_;
(3)確定首個數(shù)據(jù)包中攜帶的最大有效數(shù)據(jù)量Payloadfi?t并在起始系統(tǒng)物理地址開始以Payload_進行傳輸,且單個數(shù)據(jù)包中所攜帶有效數(shù)據(jù)不穿越系統(tǒng)的4K物理地址邊界,直至剩余數(shù)據(jù)量不足PayloaUj停止使用Payload _進行傳輸;其中,確定Payload first的方法為:以AddrstaJ*以Payload _取得余數(shù),再用Payload _減去此余數(shù),其差值為
Payloadfirst0
[0011](4)確定最后一個數(shù)據(jù)包中的有效數(shù)據(jù)量Payloadlast,并傳遞剩余數(shù)據(jù)。
[0012]實施例:
Addrstart^ 5231,Payload 咖為 32,數(shù)據(jù)總量為 9753,以 Addr start5231 除以 PayloaU〗取得余數(shù)為15,再用Payload_32減去此余數(shù)15,得到Payloadfi?t大小為17,首個數(shù)據(jù)包傳輸完之后,對應的系統(tǒng)物理地址也增加到5248,為即5231+17所得,數(shù)據(jù)總量9753減去?&710&(1£11^后,剩余數(shù)據(jù)量為9736。之后從地址5248開始,以Payload _32作為數(shù)據(jù)包的有效數(shù)據(jù)容量進行數(shù)據(jù)傳輸,由于下一個4K邊界的物理地址對應于8192,即4096*2,由于5248+ (91*32)=8160,由于下一個數(shù)據(jù)包的容量仍為32,而8160+32=8192,所以在此邊界處未出現(xiàn)數(shù)據(jù)包中數(shù)據(jù)穿越4K邊界的情況。同理,在下個數(shù)據(jù)邊界12288處也不會發(fā)生這種情況。由于9736整除32所得到商為304,余數(shù)為8,所以從地址5248開始以Payload_32作為數(shù)據(jù)包的有效數(shù)據(jù)容量進行數(shù)據(jù)傳輸后,傳輸了 304個數(shù)據(jù)包之后,系統(tǒng)物理地址增加到14976,即5248+32*304,由于此時總共傳輸了 9745個字節(jié)的數(shù)據(jù),而總數(shù)據(jù)量為9753個數(shù)據(jù),因此最后一次傳輸?shù)臄?shù)據(jù)包中的有效數(shù)據(jù)為8,且最后一個數(shù)據(jù)包傳輸過程中也沒有出現(xiàn)數(shù)據(jù)包中數(shù)據(jù)穿越4K邊界的情況。
[0013]綜上,在硬件實現(xiàn)過程中,由于全部使用了二進制的數(shù)據(jù)表示方法,在計算系統(tǒng)物理地址Addrstart除以Payload_的過程中,由于Payloadmax為2的整數(shù)冪,因此可以通過取Addrstart最低幾位的操作來實現(xiàn),譬如10進制數(shù)5231以2進制表示就是1010001101111,在Payloadmax為32的情況下,由于32對應的2進制數(shù)據(jù)為100000,因此只需取52312進制表示數(shù)據(jù)結(jié)果的低5位,即可得到5231除以32的余數(shù)15,再用32-15即可得到了 Payloadfl?t為17。之后再以總的數(shù)據(jù)量9753-17先得到剩余數(shù)據(jù)量9736,之后再每次傳輸開始前,將其與Payload_比較,如果大于Payload _則使用Payload _進行數(shù)據(jù)傳輸,并將剩余數(shù)據(jù)量減去Payload_,重復此過程直至剩余數(shù)據(jù)量小于等于PayloacLJ^,使用剩余數(shù)據(jù)量作為最后一個數(shù)據(jù)包中的有效數(shù)據(jù)量即可完成此次數(shù)據(jù)傳輸。
[0014]使用此方法設(shè)計的板卡設(shè)備,使用在PCIe Genl,XI的鏈路上時,實際測試得到的結(jié)果為進行單向傳輸時,板卡設(shè)備向上位機發(fā)送數(shù)據(jù)時,有效數(shù)據(jù)傳輸速率為230MBps ;上位機向板卡設(shè)備發(fā)送數(shù)據(jù)時,有效數(shù)據(jù)傳輸速率為220MBps ;板卡設(shè)備向上位機發(fā)送數(shù)據(jù)和上位機向板卡設(shè)備發(fā)送數(shù)據(jù)同時進行時,兩個方向的總的數(shù)據(jù)傳輸速率為410Mbps,傳輸PCIe鏈路的傳輸性能得到了大幅的提升。
【主權(quán)項】
1.一種硬件封包的基于PCIe的DMA傳輸方法,在基于PCIe總線的板卡設(shè)備中,以板卡設(shè)備向X86平臺傳輸數(shù)據(jù)一方為發(fā)送側(cè),以X86平臺向板卡設(shè)備傳輸數(shù)據(jù)為接收側(cè);其特征在于:包括以下步驟: (1)為發(fā)送側(cè)以及接收側(cè)分別設(shè)立獨立的數(shù)據(jù)封包控制單元; (2)獲取PCIe鏈路上的Payload_; (3)確定首個數(shù)據(jù)包中攜帶的最大有效數(shù)據(jù)量Payloadfi?t并在起始系統(tǒng)物理地址開始以Payload_進行傳輸,直至剩余數(shù)據(jù)量不足Payload _則停止使用Payload _進行傳輸; (4)確定最后一個數(shù)據(jù)包中的有效數(shù)據(jù)量Payloadlast,并傳遞剩余數(shù)據(jù)。2.如權(quán)利要求1所述的一種硬件封包的基于PCIe的DMA傳輸方法,其特征在于:所述的確定Payloadfi?t的方法為:以Addr咖^除以Payload _取得余數(shù),再用Payload _減去此余數(shù),其差值為PayloadfirSt。3.如權(quán)利要求2所述的一種硬件封包的基于PCIe的DMA傳輸方法,其特征在于:所述的確定Payloadfl?t時單個數(shù)據(jù)包中所攜帶有效數(shù)據(jù)不穿越系統(tǒng)的4K物理地址邊界。
【專利摘要】本發(fā)明涉及一種數(shù)據(jù)傳輸方法,具體涉及一種基于PCIe的DMA傳輸方法。一種硬件封包的基于PCIe的DMA傳輸方法,在基于PCIe總線的板卡設(shè)備中,以板卡設(shè)備向X86平臺傳輸數(shù)據(jù)一方為發(fā)送側(cè),以X86平臺向板卡設(shè)備傳輸數(shù)據(jù)為接收側(cè);其特征在于:包括以下步驟:(1)為發(fā)送側(cè)以及接收側(cè)分別設(shè)立獨立的數(shù)據(jù)封包控制單元;(2)獲取PCIe鏈路上的Payloadmax;(3)確定首個數(shù)據(jù)包中攜帶的最大有效數(shù)據(jù)量Payloadfirst并在起始系統(tǒng)物理地址開始以Payloadmax進行傳輸,直至剩余數(shù)據(jù)量不足Payloadmax則停止使用Payloadmax進行傳輸;(4)確定最后一個數(shù)據(jù)包中的有效數(shù)據(jù)量Payloadlast,并傳遞剩余數(shù)據(jù)。通過本發(fā)明提供的方法,軟件的處理負擔得以大幅降低,從而保證了數(shù)據(jù)傳輸過程更加的流暢和高效。
【IPC分類】G06F13/28, G06F13/38
【公開號】CN105320625
【申請?zhí)枴緾N201510669692
【發(fā)明人】郭恩全, 鄭霖
【申請人】陜西海泰電子有限責任公司
【公開日】2016年2月10日
【申請日】2015年10月16日