CN104239248A - Pci-e多缓冲区dma数据传输方法 - Google Patents

Pci-e多缓冲区dma数据传输方法 Download PDF

Info

Publication number
CN104239248A
CN104239248A CN201410472222.3A CN201410472222A CN104239248A CN 104239248 A CN104239248 A CN 104239248A CN 201410472222 A CN201410472222 A CN 201410472222A CN 104239248 A CN104239248 A CN 104239248A
Authority
CN
China
Prior art keywords
data
memory
object system
source systems
data source
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.)
Granted
Application number
CN201410472222.3A
Other languages
English (en)
Other versions
CN104239248B (zh
Inventor
云晓春
周游
包秀国
谢铭
周康成
童晓民
唐剑琪
周渊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BEIJING SCISTOR TECHNOLOGY Co Ltd
National Computer Network and Information Security Management Center
Original Assignee
BEIJING SCISTOR TECHNOLOGY Co Ltd
National Computer Network and Information Security Management Center
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by BEIJING SCISTOR TECHNOLOGY Co Ltd, National Computer Network and Information Security Management Center filed Critical BEIJING SCISTOR TECHNOLOGY Co Ltd
Priority to CN201410472222.3A priority Critical patent/CN104239248B/zh
Publication of CN104239248A publication Critical patent/CN104239248A/zh
Application granted granted Critical
Publication of CN104239248B publication Critical patent/CN104239248B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Bus Control (AREA)

Abstract

本发明提供了一种PCI-E多缓冲区DMA数据传输方法,涉及PCI-E数据传输技术领域。本方法在数据源***和数据目的***中各自分配N块物理内存,分别对两个***中的N块物理内存通过双向链表建立空闲内存池及工作内存池;从空闲内存池获取用于写入数据的内存,写入数据的内存加入工作内存池;在环形缓冲区中写入所要操作的内存的物理起始地址和大小。本发明通过空闲内存池及工作内存池的使用减少内存拷贝次数和***调用次数;通过环形缓冲区增加DMA的数据传输速率。本发明在大数据量的传输下降低了***的等待开销,提高了传输效率。

Description

PCI-E多缓冲区DMA数据传输方法
技术领域
本发明涉及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 Programming Interface,应用程序编程接口)从数据源***的空闲内存池取得内存空间后填入数据。填入数据的内存加入到数据源***的工作内存池。同时,将填入数据的内存的物理起始地址及大小写入数据源***的环形缓冲区。
步骤三、在数据源***中的用户应用程序使用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块物理内存通过双向链表建立空闲内存池及工作内存池;同时,在两个***中都建立一个以上的环形缓冲区以及其对应的读写指针;
步骤二、在数据源***中的用户应用程序使用API从数据源***的空闲内存池获得内存并填入数据,将填入数据的内存加入到数据源***的工作内存池中,将填入数据的内存的物理起始地址及大小写入数据源***的环形缓冲区;
步骤三、在数据源***中的用户应用程序使用API发起数据传输请求;数据目的***中的内核从数据目的***的空闲内存池选取空闲内存,并将所选内存的物理起始地址及大小填入数据目的***的环形缓冲区中,更新数据目的***的环形缓冲区的写指针并通知数据源***;
步骤四、数据源***中的内核收到数据目的***的环形缓冲区更新的通知后,取得数据目的***要写入数据的内存物理起始地址及大小,发起DMA完成数据传输;
步骤五、数据传输完成后,数据源***更新数据源***的环形缓冲区读指针并通知数据目的***;
步骤六、数据目的***把写入数据的内存放入数据目的***的工作内存池供用户应用程序使用。
CN201410472222.3A 2014-09-16 2014-09-16 Pci‑e多缓冲区dma数据传输方法 Active CN104239248B (zh)

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 true CN104239248A (zh) 2014-12-24
CN104239248B 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)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101438A (zh) * 2018-07-25 2018-12-28 百度在线网络技术(北京)有限公司 用于存储数据的方法和装置
CN110046114A (zh) * 2019-03-06 2019-07-23 上海熠知电子科技有限公司 基于pcie协议的dma控制器及dma数据传输方法
CN112286688A (zh) * 2020-11-05 2021-01-29 北京深维科技有限公司 一种内存管理和使用方法、装置、设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294330A1 (en) * 2005-06-27 2006-12-28 Stanfill Craig W Managing memory pages
CN102467473A (zh) * 2010-11-03 2012-05-23 Tcl集团股份有限公司 一种在用户空间和内核之间传输数据的方法和装置
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294330A1 (en) * 2005-06-27 2006-12-28 Stanfill Craig W Managing memory pages
CN102467473A (zh) * 2010-11-03 2012-05-23 Tcl集团股份有限公司 一种在用户空间和内核之间传输数据的方法和装置
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101438A (zh) * 2018-07-25 2018-12-28 百度在线网络技术(北京)有限公司 用于存储数据的方法和装置
CN110046114A (zh) * 2019-03-06 2019-07-23 上海熠知电子科技有限公司 基于pcie协议的dma控制器及dma数据传输方法
CN110046114B (zh) * 2019-03-06 2020-08-14 上海熠知电子科技有限公司 基于pcie协议的dma控制器及dma数据传输方法
CN112286688A (zh) * 2020-11-05 2021-01-29 北京深维科技有限公司 一种内存管理和使用方法、装置、设备和介质
CN112286688B (zh) * 2020-11-05 2024-01-05 北京深维科技有限公司 一种内存管理和使用方法、装置、设备和介质

Also Published As

Publication number Publication date
CN104239248B (zh) 2017-06-06

Similar Documents

Publication Publication Date Title
EP2936325B1 (en) Techniques to configure a solid state drive to operate in a storage mode or a memory mode
CN102467473B (zh) 一种在用户空间和内核之间传输数据的方法和装置
TWI718969B (zh) 記憶體裝置、記憶體定址方法與包括非暫時性儲存媒體的物品
KR20150083741A (ko) 임베디드 멀티미디어 카드 및 이의 동작 방법
CN104239249A (zh) Pci-e零拷贝dma数据传输方法
US9690720B2 (en) Providing command trapping using a request filter circuit in an input/output virtualization (IOV) host controller (HC) (IOV-HC) of a flash-memory-based storage device
WO2015180513A1 (zh) 一种数据传输方法及计算机
CN102566939B (zh) 一种固态硬盘及其读-修改-写操作的数据管理方法
CN106775477B (zh) Ssd主控数据传输管理装置及方法
US9405477B2 (en) Method and system for maintaining release consistency in shared memory programming
CN104239248A (zh) Pci-e多缓冲区dma数据传输方法
US9436395B2 (en) Mechanisms to save user/kernel copy for cross device communications
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
CN103324599A (zh) 处理器间通信方法与***级芯片
US20190310964A1 (en) Speculative read mechanism for distributed storage system
US20140149528A1 (en) Mpi communication of gpu buffers
CN102291298A (zh) 一种高效的面向长消息的计算机网络通信方法
US9904622B2 (en) Control method for non-volatile memory and associated computer system
TWI454928B (zh) 使用可程式匯流排仲裁器改良固態驅動器效能的方法與系統及其儲存媒體
CN104461977B (zh) 记忆卡存取装置、其控制方法与记忆卡存取***
US10296256B2 (en) Two stage command buffers to overlap IOMMU map and second tier memory reads
US20130282971A1 (en) Computing system and data transmission method
CN101720040B (zh) 融合高速存储器和dma通道的视频解码优化方法
CN103838694B (zh) 一种fpga高速读取usb接口数据的方法
CN105825880B (zh) 用于ddr控制器的访问控制方法、装置及电路

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