CN107193766B - 一种PCIe设备与主机之间的多路有序数据传输方法 - Google Patents
一种PCIe设备与主机之间的多路有序数据传输方法 Download PDFInfo
- Publication number
- CN107193766B CN107193766B CN201710332590.1A CN201710332590A CN107193766B CN 107193766 B CN107193766 B CN 107193766B CN 201710332590 A CN201710332590 A CN 201710332590A CN 107193766 B CN107193766 B CN 107193766B
- Authority
- CN
- China
- Prior art keywords
- data
- dma
- pointer1
- free
- dma buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种PCIe设备与主机之间的多路有序数据传输方法,该方法用于传输PCIe设备与主机之间的多路有序数据,通过构建DMA buffer对以及控制DMA buffer按照free‑>allocated‑>used‑>DMAing‑>done‑>reading‑>free的顺序变化,不仅不需要将DMA通道与数据传输路捆绑,并且仅需要使用三个指针即可对DMA buffer进行管理,从而能够保证同一路数据有序的被传送到主机或者PCIe设备,不仅降低了PCIe设备与主机之间数据传输管理的复杂度和多余的资源消耗,而且还能够完全发挥PCIe的带宽,使得实际传输带宽接近PCIe的理论峰值带宽。
Description
技术领域
本发明涉及数据通讯技术领域,具体而言,涉及一种PCIe设备与主机之间的多路有序数据传输方法。
背景技术
PCIe(PCI-Express)是最新的总线和接口标准,越来越多的外置高速设备(如显卡、视频加速卡和千兆网卡)都使用PCIe接口与主机通信。这些通过PCIe接口与主机通信的外置高速设备被统称为PCIe设备。其中最为人熟知的就是显卡(显示接口卡)。显卡与主机之间会以DMA(Direct Memory Access)方式进行大量连续数据的传输,并且随着显卡的性能越来越高,能够同时处理的图形图像会更多,必然增加PCIe接口带宽的需求和增加大量有序数据的并发传输路数。除了显卡之外,视频加速卡当前也被视频网站大量地使用。当前网络上的视频越来越多,大型的视频网站也越来越多,例如YouTube、优酷等网站。每一分钟在线观看视频的人数就达好几亿,为了进一步加快视频的解码速度和压缩速度,越来越多的网络视频提供商在服务器上增加视频加速卡,以加快和并发上千路视频的编解码。当前的视频加速卡和显卡一样大多是使用PCIe接口与服务器主机相联。由于视频加速卡需要并发多路甚至上千路视频编解码,为了视频的正常解码和编码,要求同一路视频的数据必须有序,同时还要求达到最大的解码性能和最大的PCIe带宽使用率。一般的视频加速卡解码过程是,服务器主机将多路编码流数据通过PCIe以DMA的方式发送到视频加速卡,然后视频加速卡将编码流解码之后获得YUV(一种颜色编码方法),并将多路YUV通过PCIe以DMA方式回传到主机。传输过程中,YUV和码流在同一路中必须有序,否则会导致码流不能正常被解码,YUV不能被后续的加工(聚类或者播放等)正常处理。一般的视频加速卡编码过程是,服务器将多路YUV通过PCIe以DMA方式传送到视频加速卡,然后视频加速卡将YUV进行编码,并将编码之后的码流通过PCIe以DMA方式回传到主机。传输过程中,YUV和码流在同一路中必须有序,否则会导致码流不能正常被解码或者不能正常有序播放。无论是编码数据还是YUV数据的传输过程都由DMA控制器完成,DMA控制器将主机DMA Buffer中的数据拷贝到视频加速卡上的DMA Buffer,或者将视频加速卡上的DMA Buffer拷贝到主机的DMA Buffer。
由于DMA过程中数据长度不一致所以会导致前面DMA操作可能会晚于后面的DMA操作,如果要保证有序,一般的做法是需要完成了前面的DMA操作,才进行后面的DMA操作,这样就能够保证传送有序,但是会导致剩余DMA通道空闲。即使剩余的DMA通道被其他路的数据使用,也需要将DMA通道和对应的数据传输路进行捆绑。如果其他路的数据并没有使用该DMA通道就换另一路捆绑,为了让所有DMA通道能够有效被利用,传统的方式需要一个DMA通道捆绑很多路数据传输甚至上千路数据传输,这样会导致数据传输的管理复杂,占用更多的资源、空间和时间。
发明内容
本发明提供一种PCIe设备与主机之间的多路有序数据传输方法,用以降低PCIe设备与主机之间数据传输管理的复杂度和多余的资源消耗。
为了达到上述目的,本发明提供了一种PCIe设备与主机之间的多路有序数据传输方法,该方法用于传输PCIe设备与主机之间的多路有序数据,其中,PCIe设备和主机均设有源数据DMA Buffer单元和目的数据DMA Buffer单元,PCIe设备的源数据DMA Buffer单元包括多个用于缓存发送端欲发送的数据的DMA Buffer A1~An,PCIe设备的目的数据DMABuffer单元包括多个用于缓存接收端接收到的数据的DMA Buffer B1~Bn,主机的目的数据DMA Buffer单元包括多个用于接收端接收到的数据的DMA Buffer A1′~An′,主机的源数据DMA Buffer单元包括多个用于缓存发送端发送的数据的DMA Buffer B1′~Bn′,其中,DMA Buffer A1~An与DMA Buffer A1′~An′依次对应以构成n个DMA Buffer对“DB1~DBn”,DMA Buffer B1~Bn与DMA Buffer B1′~Bn′依次对应以构成n个DMA Buffer对“DB1′~DBn′”,每个DMA Buffer对均对应设置有一同步管理单元,每一同步管理单元中均设有一缓存状态指针p1和一缓存数据长度指针p2,每一同步管理单元中均具有本地DMA Buffer地址存储器以及远程DMA Buffer地址存储器,分别用于存储对应的发送端DMA Buffer的地址和接收端DMA Buffer的地址,PCIe设备端设有指示DB1~DBn状态的指针free pointer1、used pointer1和done pointer1,主机端设有指示DB1′~DBn′状态的指针free pointer2、used pointer2和done pointer2,于一次数据传输过程中,DMA操作端位于PCIe设备端或主机端,当由发送端向接收端传输P路数据N1~NP时,其中,每路数据均包括Np1~Npm共m个数据段,其中1≤p≤P且p为整数,若PCIe设备作为发送端,主机作为接收端,该方法包括以下步骤:
S1:初始状态下,DMA Buffer A1~An和DMA Buffer A1′~An′均为“free”状态,也即,对于DB1~DBn,均有*p1=free,以及*p2为零,free pointer1、used pointer1和donepointer1均指向DB1;
【数据发送步骤】
S2:发送端根据free pointer1的指向获取到DB1的控制权,free pointer1转而指向DB2;
S3:发送端令DB1的*p1=allocated;
S4:发送端将数据N11拷贝至DMA Buffer A1中,并令DB1的*p1=used,以及*p2=数据N11的长度;
S5:发送端根据free pointer1的指向获取到DB2的控制权,free pointer1转而指向DB3;
S6:发送端令DB2的*p1=allocated;
S7:发送端将数据N21拷贝至DMA Buffer A2中,并令DB2的*p1=used,以及*p2=数据N21的长度;
S8:发送端按照上述步骤S5~S7对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=used,之后发送端再对每一路数据中的第2个~第m个数据段依次进行数据发送;
【DMA步骤】
S9:DMA操作端根据used pointer1的指向获取到DB1的控制权,used pointer1转而指向DB2;
S10:DMA操作端令DB1的*p1=DMAing;
S11:DMA操作端获得空闲的DMA通道并对DB1进行DMA操作,以将数据N11从DMABuffer A1拷贝至DMA Buffer A1′;
S12:DMA操作端令DB1的*p1=done;
S13:DMA操作端根据used pointer1的指向获取到DB2的控制权,used pointer1转而指向DB3;
S14:DMA操作端令DB2的*p1=DMAing;
S15:DMA操作端获得空闲的DMA通道并对DB2进行DMA操作,以将数据N21从DMABuffer A2拷贝至DMA Buffer A2′;
S16:DMA操作端令DB2的*p1=done;
S17:DMA操作端按照上述步骤S13~S16对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=done,之后DMA操作端再对每一路数据中的第2个~第m个数据段依次进行DMA操作;
【数据接收步骤】
S18:接收端根据done pointer1的指向获取到DB1的控制权,done pointer1转而指向DB2;
S19:接收端令DB1的*p1=reading;
S20:接收端将DMA Buffer A1′中的数据N11传输到上层应用;
S21:接收端令DB1的*p1=free;
S22:接收端根据done pointer1的指向获取到DB2的控制权,done pointer1转而指向DB3;
S23:接收端令DB2的*p1=reading;
S24:接收端将DMA Buffer A2′中的数据N12传输到上层应用;
S25:接收端令DB2的*p1=free;
S26:接收端按照上述步骤S22~S25对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=free,之后接收端再对每一路数据中的第2个~第m个数据段依次进行数据接收操作;
上述数据发送步骤、DMA步骤和数据接收步骤同时进行,其中:
发送端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时循环检测free pointer1指向的DMA Buffer对的状态是否为“free”,若为“free”则将当前等待写入的数据写入其对应的发送端的DMA Buffer,之后将该DMA Buffer对标记为“used”状态,以表示此DMABuffer对中的数据能够执行DMA步骤,其中,当一路数据中尚有数据段未完成数据发送时,当前等待写入的数据为该路数据中的下一个数据段,直至P路数据中的每一个数据段均完成数据发送步骤,
DMA操作端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测used pointer1指向的DMA Buffer对的状态是否为“used”,若为“是”则执行DMA操作,以将发送端DMABuffer中的数据拷贝至接收端的DMA Buffer中,执行完DMA操作则将该DMA Buffer对标记为“done”状态,以表示此DMA Buffer对中的数据能够执行数据接收步骤,直至P路数据中的每一个数据段均完成DMA步骤,
接收端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测done pointer1指向的DMA Buffer对的状态是否为“done”,若为“done”则对该DMA Buffer对进行数据读取操作,以将该DMA Buffer对中的数据读取至上层应用,之后将该DMA Buffer对标记为“free”状态,以表示此DMA Buffer对能够执行数据发送步骤,直至P路数据中的每一个数据段均完成数据接收步骤,
于一次数据传输过程中,若PCIe设备作为接收端,主机作为发送端时,上述步骤中应用到的DMA Buffer对则为“DB1′~DBn′并使用free pointer2、used pointer2和donepointer2指示“DB1′~DBn′的状态,其余步骤不变。
在本发明的一实施例中,DMA通道的个数为4个。
在本发明的一实施例中,PCIe设备至主机与主机至PCIe设备两个方向共享4个DMA通道。
本发明提供的PCIe设备与主机之间的多路有序数据传输方法不仅不需要将DMA通道与数据传输路捆绑,并且仅需要使用三个pointer(指针)即可对DMA buffer进行管理,从而能够保证同一路数据有序的被传送到主机或者PCIe设备,不仅降低了PCIe设备与主机之间数据传输管理的复杂度和多余的资源消耗,而且还能够完全发挥PCIe的带宽,使得实际传输带宽接近PCIe的理论峰值带宽。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为PCIe设备和主机中的组织架构示意图;
图2为同步管理单元的示意图;
图3为P路数据的示意图;
图4-1~图4-4分别为步骤S3、S4、S6和S7的示意图;
图4-5为P=4时,步骤S8的示意图;
图5-1、图5-2、图5-3和图5-4分别为步骤S10、S12、S14和S16的示意图;
图5-5为P=4时,步骤S17的示意图;
图6-1、图6-2、图6-3和图6-4分别为步骤S19、S21、S23和S25的示意图;
图6-5为P=4时,步骤S26的示意图;
图7为利用本发明对4路视频数据进行发送的示意图。
附图标记说明:1-源数据DMA Buffer单元;2-目的数据DMA Buffer单元。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种PCIe设备与主机之间的多路有序数据传输方法,该方法用于传输PCIe设备与主机之间的多路有序数据,为了实施该方法,PCIe设备和主机需要具备相应的组织架构,如图1所示为PCIe设备和主机中的组织架构示意图,其中,PCIe设备和主机均设有源数据DMA Buffer单元1和目的数据DMA Buffer单元2,PCIe设备的源数据DMA Buffer单元包括多个用于缓存发送端欲发送的数据的DMA Buffer A1~An,PCIe设备的目的数据DMA Buffer单元包括多个用于缓存接收端接收到的数据的DMA Buffer B1~Bn,主机的目的数据DMA Buffer单元包括多个用于接收端接收到的数据的DMA Buffer A1′~An′,主机的源数据DMA Buffer单元包括多个用于缓存发送端发送的数据的DMA Buffer B1′~Bn′,其中,DMA Buffer A1~An与DMA Buffer A1′~An′依次对应以构成n个DMA Buffer对“DB1~DBn”,DMA Buffer B1~Bn与DMA Buffer B1′~Bn′依次对应以构成n个DMA Buffer对“DB1′~DBn′”,每个DMA Buffer对均对应设置有一同步管理单元,如图2所示为同步管理单元的示意图,每一同步管理单元中均设有一缓存状态指针p1和一缓存数据长度指针p2,每一同步管理单元中均具有本地DMA Buffer地址存储器以及远程DMA Buffer地址存储器,分别用于存储对应的发送端DMA Buffer的地址和接收端DMA Buffer的地址,PCIe设备端设有指示DB1~DBn状态的指针free pointer1、used pointer1和done pointer1(图中未示出),主机端设有指示DB1′~DBn′状态的指针free pointer2、used pointer2和done pointer2(图中未示出),于一次数据传输过程中,DMA操作端位于PCIe设备端或主机端,当由发送端向接收端传输P路数据N1~NP时(如图3所示为P路数据的示意图),其中,每路数据均包括Np1~Npm共m个数据段,其中1≤p≤P且p为整数,若PCIe设备作为发送端,主机作为接收端,该方法包括以下步骤:
S1:初始状态下,DMA Buffer A1~An和DMA Buffer A1′~An′均为“free”状态,也即,对于DB1~DBn,均有*p1=free,以及*p2为零,free pointer1、used pointer1和donepointer1均指向DB1;
【数据发送步骤】
S2:发送端根据free pointer1的指向获取到DB1的控制权,free pointer1转而指向DB2;
S3:发送端令DB1的*p1=allocated,如图4-1所示;
S4:发送端将数据N11拷贝至DMA Buffer A1中,并令DB1的*p1=used,以及*p2=数据N11的长度,如图4-2所示;
S5:发送端根据free pointer1的指向获取到DB2的控制权,free pointer1转而指向DB3;
S6:发送端令DB2的*p1=allocated,如图4-3所示;
S7:发送端将数据N21拷贝至DMA Buffer A2中,并令DB2的*p1=used,以及*p2=数据N21的长度,如图4-4所示;
S8:发送端按照上述步骤S5~S7对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=used,之后发送端再对每一路数据中的第2个~第m个数据段依次进行数据发送;
在本发明的一实施例中,当P=4即共有N1~N4共4路数据时,步骤S8如图4-5所示,DB1~DB4均有*p1=used,free pointer1指向DB5。
【DMA步骤】
S9:DMA操作端根据used pointer1的指向获取到DB1的控制权,used pointer1转而指向DB2;
S10:DMA操作端令DB1的*p1=DMAing,如图5-1所示;
S11:DMA操作端获得空闲的DMA通道并对DB1进行DMA操作,以将数据N11从DMABuffer A1拷贝至DMA Buffer A1′;
S12:DMA操作端令DB1的*p1=done,如图5-2所示;
S13:DMA操作端根据used pointer1的指向获取到DB2的控制权,used pointer1转而指向DB3;
S14:DMA操作端令DB2的*p1=DMAing,如图5-3所示;
S15:DMA操作端获得空闲的DMA通道并对DB2进行DMA操作,以将数据N21从DMABuffer A2拷贝至DMA Buffer A2′;
S16:DMA操作端令DB2的*p1=done,如图5-4所示;
S17:DMA操作端按照上述步骤S13~S16对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=done,之后DMA操作端再对每一路数据中的第2个~第m个数据段依次进行DMA操作;
在本发明的一实施例中,当P=4即共有N1~N4共4路数据时,步骤S17如图5-5所示,DB1~DB4均有*p1=done,free pointer1指向DB5,实际上,DMA操作端对P路数据中的第一个数据段进行DMA操作的同时,发送端正在对P路数据中的第二个数据段进行数据发送操作。
DMA操作需要选择空闲的DMA通道。一般通道数为4个左右,所以使用轮询搜索方法就可以快速获得空闲的通道。每当DMA通道被使用,就将其标记为used状态,DMA操作完成之后,该通道就被标记位free状态。只要DMA通道处于free状态,无论哪个方向的数据传输都可以使用其进行DMA操作。在这种方式下,DMA通道能够为两个方向的DMA操作分配空闲的DMA通道,而且所有DMA通道是共享,能够实现两个传输方向的按需分配。
【数据接收步骤】
S18:接收端根据done pointer1的指向获取到DB1的控制权,done pointer1转而指向DB2;
S19:接收端令DB1的*p1=reading,如图6-1所示;
S20:接收端将DMA Buffer A1′中的数据N11传输到上层应用;
S21:接收端令DB1的*p1=free,如图6-2所示;
S22:接收端根据done pointer1的指向获取到DB2的控制权,done pointer1转而指向DB3;
S23:接收端令DB2的*p1=reading,如图6-3所示;
S24:接收端将DMA Buffer A2′中的数据N12传输到上层应用;
S25:接收端令DB2的*p1=free,如图6-4所示;
S26:接收端按照上述步骤S22~S25对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=free,之后接收端再对每一路数据中的第2个~第m个数据段依次进行数据接收操作;
在本发明的一实施例中,当P=4即共有N1~N4共4路数据时,步骤S26如图6-5所示,DB1~DB4均有*p1=free,free pointer1、used pointer1和done pointer1均指向DB5,实际上,接收端对P路数据中的第一个数据段进行数据操作时,DMA操作端正在对P路数据中的第二个数据段进行DMA操作以及数据发送端正在对P路数据中的第三个数据段进行数据发送操作。
上述图4-1~图4-5、图5-1~图5-5、图6-1~图6-5均仅呈现了第一个数据段于各步骤中各个指针的变化以及DMA Buffer的状态变化,其他数据段未予显示。
上述数据发送步骤、DMA步骤和数据接收步骤同时进行,其中:
发送端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时循环检测free pointer1指向的DMA Buffer对的状态是否为“free”,若为“free”则将当前等待写入的数据写入其对应的发送端的DMA Buffer,之后将该DMA Buffer对标记为“used”状态,以表示此DMABuffer对中的数据能够执行DMA步骤,其中,当一路数据中尚有数据段未完成数据发送时,当前等待写入的数据为该路数据中的下一个数据段,直至P路数据中的每一个数据段均完成数据发送步骤,例如,如图3所示,当第一路数据N1尚有数据段(例如最后一个数据段N1m)未完成发送时,当前等待写入的数据即为数据段N1m。
DMA操作端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测used pointer1指向的DMA Buffer对的状态是否为“used”,若为“是”则执行DMA操作,以将发送端DMABuffer中的数据拷贝至接收端的DMA Buffer中,执行完DMA操作则将该DMA Buffer对标记为“done”状态,以表示此DMA Buffer对中的数据能够执行数据接收步骤,直至P路数据中的每一个数据段均完成DMA步骤,
接收端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测done pointer1指向的DMA Buffer对的状态是否为“done”,若为“done”则对该DMA Buffer对进行数据读取操作,以将该DMA Buffer对中的数据读取至上层应用,之后将该DMA Buffer对标记为“free”状态,以表示此DMA Buffer对能够执行数据发送步骤,直至P路数据中的每一个数据段均完成数据接收步骤。
可见,本发明中的DMA Buffer对的状态只能按照free->allocated->used->DMAing->done->reading->free的顺序变化,不能反向变化或跳变,本发明因此能够维持主机和PCIe设备对DMA Buffer对的互斥访问。free状态表示当前的DMA buffer对是空闲的,可以被使用。在获得free状态的DMA buffer对之后,发送端马上将其设置为allocated状态,表示该DMA Buffer对被占用。当将被发送的数据拷贝到DMA Buffer对的源DMA Buffer之后,发送端将DMA Buffer对的状态设置为used状态,表示该DMA Buffer对已经可以进行DMA操作。当DMA Buffer对在进行DMA操作的过程中,DMA控制器端(含有DMA控制器的一端)将DMA Buffer对设置为DMAing状态,表示正在进行DMA操作。当DMA操作完成之后,DMA控制器端将DMABuffer对设置为done状态,表示可以上层应用可以接收数据。当接收端接收数据过程中,会将DMA Buffer对的状态设置reading状态,表示该DMA Buffer对的数据正在被上层应用接收。上层应用完成数据接收之后,接收端将DMA Buffer对的状态设置为free状态,表示该DMA Buffer对可以重新用于传输数据。
于一次数据传输过程中,若PCIe设备作为接收端,主机作为发送端时,上述步骤中应用到的DMA Buffer对则为“DB1′~DBn′并使用free pointer2、used pointer2和donepointer2指示“DB1′~DBn′的状态,其余步骤不变。
在本发明的一实施例中,DMA通道的个数例如可以为4个,PCIe设备至主机与主机至PCIe设备两个方向可以共享4个DMA通道,以提高DMA通道的利用率。
图7为利用本发明对4路视频数据进行发送的示意图,如图所示,数据a1、b1、c1和d1为第1路视频数据中的数据段,数据a2、b2、c2和d2为第2路视频数据中的数据段,数据a3、b3、c3和d3为第3路视频数据中的数据段,数据a4、b4、c4和d4为第4路视频数据中的数据段,如图7下方的时间线所示,当发送端对数据a1、a2、a3和a4完成数据发送操作并且数据a1、a2、a3和a4进入DMA操作时,发送端就利用其余的处于free状态的DMA Buffer对每一路中的下一段数据b1、b2、b3和b4进行数据发送操作;当数据a1、a2、a3和a4进行数据接收操作时,数据b1、b2、b3和b4进入DMA操作,并且发送端利用其余的处于free状态的DMA Buffer对每一路中的下一段数据c1、c2、c3和c4进入数据发送操作。可见,本发明能够使得发送端、DMA端以及接收端均能够不间断的工作,发送端不间断利用处于free状态的DMA Buffer对进行数据发送,发送流程为:每一路数据中的第1个数据段→每一路数据中的第2个数据段→……→每一路数据中的最后一个数据段;DMA操作端不间断的利用空闲的DMA通道对已完成数据发送的数据进行DMA操作;接收端不间断的将已完成DMA操作的数据传输到上层应用。另外,由图7可知,同时使用的DMA Buffer对的数目为数据路数的三倍,因此,在设计DMABuffer对时应尽量使得DMA Buffer对的数目不低于数据路数的三倍,以免因需要等待空闲的DMA Buffer对而降低数据传输速率。
本发明提供的PCIe设备与主机之间的多路有序数据传输方法不仅不需要将DMA通道与数据传输路捆绑,并且仅需要使用三个pointer(指针)即可对DMA buffer进行管理,从而能够保证同一路数据有序的被传送到主机或者PCIe设备,不仅降低了PCIe设备与主机之间数据传输管理的复杂度和多余的资源消耗,而且还能够完全发挥PCIe的带宽,使得实际传输带宽接近PCIe的理论峰值带宽。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。
Claims (3)
1.一种PCIe设备与主机之间的多路有序数据传输方法,该方法用于传输PCIe设备与主机之间的多路有序数据,其特征在于,PCIe设备和主机均设有源数据DMA Buffer单元和目的数据DMA Buffer单元,PCIe设备的源数据DMA Buffer单元包括多个用于缓存发送端欲发送的数据的DMA Buffer A1~An,PCIe设备的目的数据DMA Buffer单元包括多个用于缓存接收端接收到的数据的DMA Buffer B1~Bn,主机的目的数据DMA Buffer单元包括多个用于接收端接收到的数据的DMA Buffer A1′~An′,主机的源数据DMA Buffer单元包括多个用于缓存发送端发送的数据的DMA Buffer B1′~Bn′,其中,DMA Buffer A1~An与DMABuffer A1′~An′依次对应以构成n个DMA Buffer对“DB1~DBn”,DMA Buffer B1~Bn与DMABuffer B1′~Bn′依次对应以构成n个DMA Buffer对“DB1′~DBn′”,每个DMA Buffer对均对应设置有一同步管理单元,每一同步管理单元中均设有一缓存状态指针p1和一缓存数据长度指针p2,每一同步管理单元中均具有本地DMA Buffer地址存储器以及远程DMA Buffer地址存储器,本地DMA Buffer地址存储器用于存储对应的发送端DMA Buffer的地址,远程DMABuffer地址存储器用于存储对应的接收端DMA Buffer的地址,PCIe设备端设有指示DB1~DBn状态的指针free pointer1、used pointer1和done pointer1,主机端设有指示DB1′~DBn′状态的指针free pointer2、used pointer2和done pointer2,于一次数据传输过程中,DMA操作端位于PCIe设备端或主机端,当由发送端向接收端传输P路数据N1~NP时,其中,每路数据均包括Np1~Npm共m个数据段,其中1≤p≤P且p为整数,若PCIe设备作为发送端,主机作为接收端,该方法包括以下步骤:
S1:初始状态下,DMA Buffer A1~An和DMA Buffer A1′~An′均为“free”状态,也即,对于DB1~DBn,均有*p1=free,以及*p2为零,free pointer1、used pointer1和donepointer1均指向DB1;
【数据发送步骤】
S2:发送端根据free pointer1的指向获取到DB1的控制权,free pointer1转而指向DB2;
S3:发送端令DB1的*p1=allocated;
S4:发送端将数据N11拷贝至DMA Buffer A1中,并令DB1的*p1=used,以及*p2=数据N11的长度;
S5:发送端根据free pointer1的指向获取到DB2的控制权,free pointer1转而指向DB3;
S6:发送端令DB2的*p1=allocated;
S7:发送端将数据N21拷贝至DMA Buffer A2中,并令DB2的*p1=used,以及*p2=数据N21的长度;
S8:发送端按照上述步骤S5~S7对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=used,之后发送端再对每一路数据中的第2个~第m个数据段依次进行数据发送;
【DMA步骤】
S9:DMA操作端根据used pointer1的指向获取到DB1的控制权,used pointer1转而指向DB2;
S10:DMA操作端令DB1的*p1=DMAing;
S11:DMA操作端获得空闲的DMA通道并对DB1进行DMA操作,以将数据N11从DMA BufferA1拷贝至DMA Buffer A1′;
S12:DMA操作端令DB1的*p1=done;
S13:DMA操作端根据used pointer1的指向获取到DB2的控制权,used pointer1转而指向DB3;
S14:DMA操作端令DB2的*p1=DMAing;
S15:DMA操作端获得空闲的DMA通道并对DB2进行DMA操作,以将数据N21从DMA BufferA2拷贝至DMA Buffer A2′;
S16:DMA操作端令DB2的*p1=done;
S17:DMA操作端按照上述步骤S13~S16对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=done,之后DMA操作端再对每一路数据中的第2个~第m个数据段依次进行DMA操作;
【数据接收步骤】
S18:接收端根据done pointer1的指向获取到DB1的控制权,done pointer1转而指向DB2;
S19:接收端令DB1的*p1=reading;
S20:接收端将DMA Buffer A1′中的数据N11传输到上层应用;
S21:接收端令DB1的*p1=free;
S22:接收端根据done pointer1的指向获取到DB2的控制权,done pointer1转而指向DB3;
S23:接收端令DB2的*p1=reading;
S24:接收端将DMA Buffer A2′中的数据N12传输到上层应用;
S25:接收端令DB2的*p1=free;
S26:接收端按照上述步骤S22~S25对P路数据中的第一个数据段依次执行上述操作,直至P路数据均执行完上述步骤或对于DB1~DBn均有*p1=free,之后接收端再对每一路数据中的第2个~第m个数据段依次进行数据接收操作;
上述数据发送步骤、DMA步骤和数据接收步骤同时进行,其中:
发送端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时循环检测free pointer1指向的DMA Buffer对的状态是否为“free”,若为“free”则将当前等待写入的数据写入其对应的发送端的DMA Buffer,之后将该DMA Buffer对标记为“used”状态,以表示此DMA Buffer对中的数据能够执行DMA步骤,其中,当一路数据中尚有数据段未完成数据发送时,当前等待写入的数据为该路数据中的下一个数据段,直至P路数据中的每一个数据段均完成数据发送步骤,
DMA操作端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测used pointer1指向的DMA Buffer对的状态是否为“used”,若为“是”则执行DMA操作,以将发送端DMA Buffer中的数据拷贝至接收端的DMA Buffer中,执行完DMA操作则将该DMA Buffer对标记为“done”状态,以表示此DMA Buffer对中的数据能够执行数据接收步骤,直至P路数据中的每一个数据段均完成DMA步骤,
接收端按照DB1、DB2……DBn-1、DBn、DB1、DB2的顺序实时检测done pointer1指向的DMA Buffer对的状态是否为“done”,若为“done”则对该DMA Buffer对进行数据读取操作,以将该DMA Buffer对中的数据读取至上层应用,之后将该DMA Buffer对标记为“free”状态,以表示此DMA Buffer对能够执行数据发送步骤,直至P路数据中的每一个数据段均完成数据接收步骤,
于一次数据传输过程中,若PCIe设备作为接收端,主机作为发送端时,上述步骤中应用到的DMA Buffer对则为“DB1′~DBn′并使用free pointer2、used pointer2和donepointer2指示“DB1′~DBn′的状态,其余步骤不变。
2.根据权利要求1所述的PCIe设备与主机之间的多路有序数据传输方法,其特征在于,DMA通道的个数为4个。
3.根据权利要求2所述的PCIe设备与主机之间的多路有序数据传输方法,其特征在于,PCIe设备至主机与主机至PCIe设备两个方向共享4个DMA通道。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710332590.1A CN107193766B (zh) | 2017-05-12 | 2017-05-12 | 一种PCIe设备与主机之间的多路有序数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710332590.1A CN107193766B (zh) | 2017-05-12 | 2017-05-12 | 一种PCIe设备与主机之间的多路有序数据传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107193766A CN107193766A (zh) | 2017-09-22 |
CN107193766B true CN107193766B (zh) | 2020-04-10 |
Family
ID=59872513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710332590.1A Active CN107193766B (zh) | 2017-05-12 | 2017-05-12 | 一种PCIe设备与主机之间的多路有序数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107193766B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865953B (zh) * | 2019-10-08 | 2021-01-26 | 华南师范大学 | 异步拷贝方法和装置 |
CN111045817B (zh) * | 2019-11-08 | 2023-09-26 | 瑞芯微电子股份有限公司 | 一种PCIe传输管理方法、系统和装置 |
CN111131873A (zh) * | 2019-12-26 | 2020-05-08 | 曙光网络科技有限公司 | 服务器音视频数据的处理方法及处理装置 |
CN117155729A (zh) * | 2022-05-24 | 2023-12-01 | 北京有竹居网络技术有限公司 | 通信方法、系统、装置和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375790A (zh) * | 2010-08-12 | 2012-03-14 | 杭州华三通信技术有限公司 | 共享总线传输系统及方法 |
CN103049409A (zh) * | 2012-12-28 | 2013-04-17 | 中国航空工业集团公司第六三一研究所 | 一种单向高速数据传输的控制方法 |
CN105676689A (zh) * | 2016-01-11 | 2016-06-15 | 中国电子科技集团公司第十研究所 | 实时软件接收机中采集数据循环存储与分发方法 |
CN106101737A (zh) * | 2016-06-15 | 2016-11-09 | 南京云恩通讯科技有限公司 | 一种支持实时视频缓存多路读取的帧调整方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8327040B2 (en) * | 2009-01-26 | 2012-12-04 | Micron Technology, Inc. | Host controller |
-
2017
- 2017-05-12 CN CN201710332590.1A patent/CN107193766B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375790A (zh) * | 2010-08-12 | 2012-03-14 | 杭州华三通信技术有限公司 | 共享总线传输系统及方法 |
CN103049409A (zh) * | 2012-12-28 | 2013-04-17 | 中国航空工业集团公司第六三一研究所 | 一种单向高速数据传输的控制方法 |
CN105676689A (zh) * | 2016-01-11 | 2016-06-15 | 中国电子科技集团公司第十研究所 | 实时软件接收机中采集数据循环存储与分发方法 |
CN106101737A (zh) * | 2016-06-15 | 2016-11-09 | 南京云恩通讯科技有限公司 | 一种支持实时视频缓存多路读取的帧调整方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107193766A (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193766B (zh) | 一种PCIe设备与主机之间的多路有序数据传输方法 | |
US7281030B1 (en) | Method of reading a remote memory | |
US7164425B2 (en) | Method and system for high speed network application | |
US20080043742A1 (en) | Transmission using multiple physical interface | |
CN109739786B (zh) | 一种dma控制器和异构加速系统 | |
CN102566958B (zh) | 一种基于sgdma的图像分割处理装置 | |
JP5194014B2 (ja) | データワードストリーム処理装置 | |
CN103841359A (zh) | 一种视频多画面合成方法、装置和系统 | |
KR100864834B1 (ko) | 메모리 재할당을 이용한 다중 프로세서 간의 데이터 전송장치 및 방법 | |
CN104731635A (zh) | 一种虚拟机访问控制方法,及虚拟机访问控制系统 | |
CN116719755B (zh) | 一种多应用内存访问的方法、装置、设备 | |
US20160127768A1 (en) | Usb sharing method for combo tv set, combo tv set and computer readable storage medium | |
US7613850B1 (en) | System and method utilizing programmable ordering relation for direct memory access | |
CN115357535A (zh) | 一种虚拟串口设计方法及装置 | |
CN109710550B (zh) | 一种基于双缓存的帧长度不固定rs422数据通信系统 | |
CN103606367A (zh) | 一种信号级联传输方法及信号级联装置 | |
US7802031B2 (en) | Method and system for high speed network application | |
CN103957445A (zh) | 一种基于应用虚拟化技术的视频重定向系统及方法 | |
CN101937362B (zh) | 一种支持多嵌入式设备计算迁移的系统和方法 | |
CN108121496B (zh) | 数据的存储方法、装置和系统 | |
CN112672100B (zh) | 多显卡数据协同处理方法、视频会议系统及云服务器 | |
US10560727B2 (en) | Server structure for supporting multiple sessions of virtualization | |
CN110764710B (zh) | 低延迟高iops的数据访问方法与存储系统 | |
CN101198050B (zh) | 一种视频数据处理方法和装置 | |
CN101521726B (zh) | 一种网络电视机及其数据报的捕获方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 215000 international science and Technology Park, No. 1355 Jinjihu Avenue, Suzhou Industrial Park, Jiangsu Province Patentee after: SUZHOU CAS IC DESIGN CENTER Patentee after: Beijing Zhongke Ruixin Technology Group Co.,Ltd. Address before: 215000 international science and Technology Park, No. 1355 Jinjihu Avenue, Suzhou Industrial Park, Jiangsu Province Patentee before: SUZHOU CAS IC DESIGN CENTER Patentee before: SMARTCORE (BEIJING) Co.,Ltd. |