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

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

Info

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
Application number
CN201410472222.3A
Other languages
English (en)
Other versions
CN104239248A (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 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完成数据传输;
步骤五、数据传输完成后,数据源***更新数据源***的环形缓冲区读指针并通知数据目的***;
步骤六、数据目的***把写入数据的内存放入数据目的***的工作内存池供用户应用程序使用。
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 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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7673105B2 (en) * 2005-06-27 2010-03-02 Ab Inition Technology LLC Managing memory pages

Patent Citations (2)

* Cited by examiner, † Cited by third party
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