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