CN104239248B - Pci‑e多缓冲区dma数据传输方法 - Google Patents
Pci‑e多缓冲区dma数据传输方法 Download PDFInfo
- Publication number
- CN104239248B CN104239248B CN201410472222.3A CN201410472222A CN104239248B CN 104239248 B CN104239248 B CN 104239248B CN 201410472222 A CN201410472222 A CN 201410472222A CN 104239248 B CN104239248 B CN 104239248B
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- purpose system
- source systems
- buffer circle
- 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
Landscapes
- Bus Control (AREA)
Abstract
本发明提供了一种PCI‑E多缓冲区DMA数据传输方法,涉及PCI‑E数据传输技术领域。本方法在数据源***和数据目的***中各自分配N块物理内存,分别对两个***中的N块物理内存通过双向链表建立空闲内存池及工作内存池;从空闲内存池获取用于写入数据的内存,写入数据的内存加入工作内存池;在环形缓冲区中写入所要操作的内存的物理起始地址和大小。本发明通过空闲内存池及工作内存池的使用减少内存拷贝次数和***调用次数;通过环形缓冲区增加DMA的数据传输速率。本发明在大数据量的传输下降低了***的等待开销,提高了传输效率。
Description
技术领域
本发明涉及PCI-E数据传输技术领域,具体是一种多缓冲区的DMA数据传输方法。
背景技术
传统的PCI-E数据传输方法是采用DMA(Direct Memory Access,直接内存访问)。具体方法是在数据源及数据目的***中均需分配一块连续的物理内存,启动前在数据源***中用户应用程序负责把数据拷贝至物理内存中,DMA传输时由DMA控制器负责把数据从数据源物理内存传输至数据目的***的物理内存中,DMA结束后在数据目的***中由应用程序拷贝至用户空间使用,然后原2块物理内存(数据源***与数据目的***的物理内存)可作下一次的数据传输用。图1是传统的数据传输方法示意图:
(1)数据源***:用户应用程序把数据拷贝至内核空间中物理内存中;
(2)DMA传输;
(3)数据目的***:用户应用程序把数据从内核空间中物理内存拷贝至用户空间使用。
该方法在数据传输过程中在数据源及数据目的的***中,只有一个供数据转移的缓冲区,在一次DMA完成前无法再进行下一次DMA,降低了传输效率。
发明内容
本发明的目的是为了提高PCI-E的数据传输效率,减轻CPU压力,提出一种PCI-E多缓冲区DMA数据传输方法。
本发明提供的PCI-E多缓冲区DMA数据传输方法,包括如下步骤:
步骤一、在数据源***和数据目的***中各自分配N块物理内存,分别对两个***中的N块物理内存通过双向链表建立空闲内存池及工作内存池;同时,在两个***中都建立一个以上的环形缓冲区以及其对应的读写指针;
步骤二、在数据源***中的用户应用程序使用API从数据源***的空闲内存池获得内存并填入数据,将填入数据的内存加入到数据源***的工作内存池中,将填入数据的内存的物理起始地址及大小写入数据源***的环形缓冲区;
步骤三、在数据源***中的用户应用程序使用API发起数据传输请求;数据目的***中的内核从数据目的***的空闲内存池选取空闲内存,并将所选内存的物理起始地址及大小填入数据目的***的环形缓冲区中,更新数据目的***的环形缓冲区的写指针并通知数据源***;
步骤四、数据源***中的内核收到数据目的***的环形缓冲区更新的通知后,取得数据目的***要写入数据的内存物理起始地址及大小,发起DMA完成数据传输;
步骤五、数据传输完成后,数据源***更新数据源***的环形缓冲区读指针并通知数据目的***;
步骤六、数据目的***把写入数据的内存放入数据目的***的工作内存池供用户应用程序使用。
本发明的多缓冲区DMA数据传输方法,删除了不必要的内存拷贝,极大地减轻了CPU的压力;在大数据量的传输下降低了***的等待开销,提高了传输效率。
附图说明
图1是传统的数据传输方法示意图;
图2是本发明的PCI-E多缓冲区数据传输方法示意图;
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明的目的是为了提高PCI-E的数据传输效率,减轻CPU压力,提出一种零拷贝的数据传输方法。
如图2所示,本发明提供的PCI-E多缓冲区DMA数据传输方法具体包括以下步骤:
步骤一、在数据源***和数据目的***中各自分配N块适当大小的物理内存,分别对两个***中的N块物理内存建立空闲内存池及工作内存池。同时在两个***中都建立单个或多个环形缓冲区以及环形缓冲区的读写指针。
N的大小根据需要或者实践,由用户设定。空闲内存池和工作内存池采用双向链表来表示。数据源***和数据目的***分别对应有一个空闲内存池和一个工作内存池。从空闲内存池获取用于写入数据的内存,写入数据的内存加入工作内存池。在环形缓冲区中写入所要操作的内存的物理起始地址和大小。
如图2所示,在数据源***和数据目的***中建立的环形缓冲区,包括至少两个缓冲区。
步骤二、在数据源***中的用户应用程序,使用API(Application ProgrammingInterface,应用程序编程接口)从数据源***的空闲内存池取得内存空间后填入数据。填入数据的内存加入到数据源***的工作内存池。同时,将填入数据的内存的物理起始地址及大小写入数据源***的环形缓冲区。
步骤三、在数据源***中的用户应用程序使用API发起数据传输请求。数据目的***中的内核从数据目的***的空闲内存池挑选空闲的物理内存块后,在数据目的***的环形缓冲区中填入所选的内存的物理起始地址及大小通知,并把数据目的***的环形缓冲区写指针更新并通知数据源***。
步骤四、数据源***中的内核收到数据目的***的环形缓冲区更新的通知后,取得数据目的***中要写入数据的内存的物理起始地址及大小,发起DMA完成数据传输。
数据源***中的内核根据数据源***的环形缓冲区中内存的物理起始地址及大小,从对应的物理内存中读取数据,并传输给数据目的***。数据目的***将接收到的数据根据数据目的***的环形缓冲区中内存的物理起始地址,写入数据目的***中相应的物理内存中。
步骤五、数据传输完成后,数据源***更新环形缓冲区读指针并通知数据目的***。
步骤六、目的***把已经获得数据的内存块放入工作池供用户程序使用。
本发明方法中,实现了直接将用户应用程序在数据源***中的数据传输给数据目的***中进行使用,减少了数据拷贝次数和***调用次数,同时,采用环形缓冲区增加了DMA传输数据的速率和大小。采用本发明方法作PCI-E数据传输,与背景技术中的现有的传统数据传输方案的对比效果如表1所示。测试采用1台DELL2950服务器+1块PCI-E加速卡,先后以2K/8K/16K为单位进行PC至加速卡的数据传输,各进行5次测试后平均而得的传输率。
表1本发明零拷贝数据传输方案与传统方案的对比表
如表1所示,与传出方案相比,采用本发明方法具有更高的传输速率,更加适用于大数据量的传输,可有效降低***的等待开销。
Claims (1)
1.一种PCI-E多缓冲区DMA数据传输方法,其特征在于,包括如下步骤:
步骤一、在数据源***和数据目的***中各自分配N块物理内存,分别对两个***中的N块物理内存通过双向链表建立空闲内存池及工作内存池;同时,在两个***中都建立多个环形缓冲区以及其对应的读写指针,在环形缓冲区中写入所要操作的内存的物理起始地址和大小;所述的数据源***和数据目的***之间为PCI-E接口传输数据;
步骤二、在数据源***中的用户应用程序使用API从数据源***的空闲内存池获得内存并填入数据,将填入数据的内存加入到数据源***的工作内存池中,将填入数据的内存的物理起始地址及大小写入数据源***的环形缓冲区;
步骤三、在数据源***中的用户应用程序使用API发起数据传输请求;数据目的***中的内核从数据目的***的空闲内存池选取空闲内存,并将所选内存的物理起始地址及大小填入数据目的***的环形缓冲区中,更新数据目的***的环形缓冲区的写指针并通知数据源***;
步骤四、数据源***中的内核收到数据目的***的环形缓冲区更新的通知后,取得数据目的***要写入数据的内存物理起始地址及大小,发起DMA完成数据传输;
步骤五、数据传输完成后,数据源***更新数据源***的环形缓冲区读指针并通知数据目的***;
步骤六、数据目的***把写入数据的内存放入数据目的***的工作内存池供用户应用程序使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410472222.3A CN104239248B (zh) | 2014-09-16 | 2014-09-16 | Pci‑e多缓冲区dma数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410472222.3A CN104239248B (zh) | 2014-09-16 | 2014-09-16 | Pci‑e多缓冲区dma数据传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104239248A CN104239248A (zh) | 2014-12-24 |
CN104239248B true CN104239248B (zh) | 2017-06-06 |
Family
ID=52227355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410472222.3A Active CN104239248B (zh) | 2014-09-16 | 2014-09-16 | Pci‑e多缓冲区dma数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104239248B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101438B (zh) * | 2018-07-25 | 2020-07-28 | 百度在线网络技术(北京)有限公司 | 用于存储数据的方法和装置 |
CN110046114B (zh) * | 2019-03-06 | 2020-08-14 | 上海熠知电子科技有限公司 | 基于pcie协议的dma控制器及dma数据传输方法 |
CN112286688B (zh) * | 2020-11-05 | 2024-01-05 | 北京深维科技有限公司 | 一种内存管理和使用方法、装置、设备和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102467473A (zh) * | 2010-11-03 | 2012-05-23 | Tcl集团股份有限公司 | 一种在用户空间和内核之间传输数据的方法和装置 |
CN103645994A (zh) * | 2013-11-05 | 2014-03-19 | 华为技术有限公司 | 一种数据处理方法及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7673105B2 (en) * | 2005-06-27 | 2010-03-02 | Ab Inition Technology LLC | Managing memory pages |
-
2014
- 2014-09-16 CN CN201410472222.3A patent/CN104239248B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102467473A (zh) * | 2010-11-03 | 2012-05-23 | Tcl集团股份有限公司 | 一种在用户空间和内核之间传输数据的方法和装置 |
CN103645994A (zh) * | 2013-11-05 | 2014-03-19 | 华为技术有限公司 | 一种数据处理方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104239248A (zh) | 2014-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9934160B1 (en) | Bit-mapped DMA and IOC transfer with dependency table comprising plurality of index fields in the cache for DMA transfer | |
US20160210229A1 (en) | Accelerating cache state transfer on a directory-based multicore architecture | |
CN104239249B (zh) | Pci‑e零拷贝dma数据传输方法 | |
JP6009692B2 (ja) | グラフィックスプロセッシングユニットベースのメモリ転送動作を行うためのマルチモードメモリアクセス技法 | |
CN109564545B (zh) | 用于压缩地址的方法和设备 | |
CN102467473B (zh) | 一种在用户空间和内核之间传输数据的方法和装置 | |
US10055150B1 (en) | Writing volatile scattered memory metadata to flash device | |
CN104239248B (zh) | Pci‑e多缓冲区dma数据传输方法 | |
DE102011101202A1 (de) | Non-volatile storage for graphics hardware | |
CN106339061A (zh) | 一种移动终端及其运行应用程序的方法 | |
CN111062858A (zh) | 高效的提前渲染方法、装置及计算机存储介质 | |
TW201714090A (zh) | 記憶體裝置、記憶體定址方法與包括有形儲存媒體的物品 | |
US20220159286A1 (en) | Low-latency consumption of an encoded video bitstream | |
CN102314400B (zh) | 一种分散聚合式dma方法及装置 | |
CN106775477B (zh) | Ssd主控数据传输管理装置及方法 | |
GB2500082A (en) | Delaying the transmission of data from a memory device until the output buffer of the memory device contains the data for the transfer | |
WO2018119738A1 (en) | Speculative read mechanism for distributed storage system | |
CN102291298A (zh) | 一种高效的面向长消息的计算机网络通信方法 | |
US9904622B2 (en) | Control method for non-volatile memory and associated computer system | |
CN113377288B (zh) | 硬件队列管理***、方法、固态硬盘控制器及固态硬盘 | |
TW201351276A (zh) | 計算工作的排程和執行 | |
CN105843631B (zh) | 一种提高***固件烧写速度的方法 | |
US20150347320A1 (en) | ENCRYPTION FOR SOLID STATE DRIVES (SSDs) | |
US9652560B1 (en) | Non-blocking memory management unit | |
US20120011295A1 (en) | Method and apparatus for wireless broadband systems direct data transfer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |