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

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

【技术领域】
[0001] 本发明涉及PCI-E数据传输【技术领域】,具体是一种多缓冲区的DM数据传输方法。

【背景技术】
[0002] 传统的PCI-E数据传输方法是采用DMA (Direct Memory Access,直接内存访问)。 具体方法是在数据源及数据目的系统中均需分配一块连续的物理内存,启动前在数据源系 统中用户应用程序负责把数据拷贝至物理内存中,DM传输时由DM控制器负责把数据从 数据源物理内存传输至数据目的系统的物理内存中,DMA结束后在数据目的系统中由应用 程序拷贝至用户空间使用,然后原2块物理内存(数据源系统与数据目的系统的物理内存) 可作下一次的数据传输用。图1是传统的数据传输方法示意图:
[0003] (1)数据源系统:用户应用程序把数据拷贝至内核空间中物理内存中;
[0004] (2) DMA 传输;
[0005] (3)数据目的系统:用户应用程序把数据从内核空间中物理内存拷贝至用户空间 使用。
[0006] 该方法在数据传输过程中在数据源及数据目的的系统中,只有一个供数据转移的 缓冲区,在一次DM完成前无法再进行下一次DMA,降低了传输效率。


【发明内容】

[0007] 本发明的目的是为了提高PCI-E的数据传输效率,减轻CPU压力,提出一种PCI-E 多缓冲区DM数据传输方法。
[0008] 本发明提供的PCI-E多缓冲区DM数据传输方法,包括如下步骤:
[0009] 步骤一、在数据源系统和数据目的系统中各自分配N块物理内存,分别对两个系 统中的N块物理内存通过双向链表建立空闲内存池及工作内存池;同时,在两个系统中都 建立一个以上的环形缓冲区以及其对应的读写指针;
[0010] 步骤二、在数据源系统中的用户应用程序使用API从数据源系统的空闲内存池获 得内存并填入数据,将填入数据的内存加入到数据源系统的工作内存池中,将填入数据的 内存的物理起始地址及大小写入数据源系统的环形缓冲区;
[0011] 步骤三、在数据源系统中的用户应用程序使用API发起数据传输请求;数据目的 系统中的内核从数据目的系统的空闲内存池选取空闲内存,并将所选内存的物理起始地址 及大小填入数据目的系统的环形缓冲区中,更新数据目的系统的环形缓冲区的写指针并通 知数据源系统;
[0012] 步骤四、数据源系统中的内核收到数据目的系统的环形缓冲区更新的通知后,取 得数据目的系统要写入数据的内存物理起始地址及大小,发起DM完成数据传输;
[0013] 步骤五、数据传输完成后,数据源系统更新数据源系统的环形缓冲区读指针并通 知数据目的系统;
[0014] 步骤六、数据目的系统把写入数据的内存放入数据目的系统的工作内存池供用户 应用程序使用。
[0015] 本发明的多缓冲区DM数据传输方法,删除了不必要的内存拷贝,极大地减轻了 CPU的压力;在大数据量的传输下降低了系统的等待开销,提高了传输效率。

【专利附图】

【附图说明】
[0016] 图1是传统的数据传输方法示意图;
[0017] 图2是本发明的PCI-E多缓冲区数据传输方法示意图;

【具体实施方式】
[0018] 下面将结合附图和实施例对本发明作进一步的详细说明。
[0019] 本发明的目的是为了提高PCI-E的数据传输效率,减轻CPU压力,提出一种零拷贝 的数据传输方法。
[0020] 如图2所示,本发明提供的PCI-E多缓冲区DM数据传输方法具体包括以下步骤:
[0021] 步骤一、在数据源系统和数据目的系统中各自分配N块适当大小的物理内存,分 别对两个系统中的N块物理内存建立空闲内存池及工作内存池。同时在两个系统中都建立 单个或多个环形缓冲区以及环形缓冲区的读写指针。
[0022] N的大小根据需要或者实践,由用户设定。空闲内存池和工作内存池采用双向链表 来表示。数据源系统和数据目的系统分别对应有一个空闲内存池和一个工作内存池。从空 闲内存池获取用于写入数据的内存,写入数据的内存加入工作内存池。在环形缓冲区中写 入所要操作的内存的物理起始地址和大小。
[0023] 如图2所示,在数据源系统和数据目的系统中建立的环形缓冲区,包括至少两个 缓冲区。
[0024] 步骤二、在数据源系统中的用户应用程序,使用API (Application Programming Interface,应用程序编程接口)从数据源系统的空闲内存池取得内存空间后填入数据。填 入数据的内存加入到数据源系统的工作内存池。同时,将填入数据的内存的物理起始地址 及大小写入数据源系统的环形缓冲区。
[0025] 步骤三、在数据源系统中的用户应用程序使用API发起数据传输请求。数据目的 系统中的内核从数据目的系统的空闲内存池挑选空闲的物理内存块后,在数据目的系统的 环形缓冲区中填入所选的内存的物理起始地址及大小通知,并把数据目的系统的环形缓冲 区写指针更新并通知数据源系统。
[0026] 步骤四、数据源系统中的内核收到数据目的系统的环形缓冲区更新的通知后,取 得数据目的系统中要写入数据的内存的物理起始地址及大小,发起DMA完成数据传输。
[0027] 数据源系统中的内核根据数据源系统的环形缓冲区中内存的物理起始地址及大 小,从对应的物理内存中读取数据,并传输给数据目的系统。数据目的系统将接收到的数据 根据数据目的系统的环形缓冲区中内存的物理起始地址,写入数据目的系统中相应的物理 内存中。
[0028] 步骤五、数据传输完成后,数据源系统更新环形缓冲区读指针并通知数据目的系 统。
[0029] 步骤六、目的系统把已经获得数据的内存块放入工作池供用户程序使用。
[0030] 本发明方法中,实现了直接将用户应用程序在数据源系统中的数据传输给数据目 的系统中进行使用,减少了数据拷贝次数和系统调用次数,同时,采用环形缓冲区增加了 DM传输数据的速率和大小。采用本发明方法作PCI-E数据传输,与【背景技术】中的现有的传 统数据传输方案的对比效果如表1所示。测试采用1台DELL2950服务器+1块PCI-E加速 卡,先后以2K/8K/16K为单位进行PC至加速卡的数据传输,各进行5次测试后平均而得的 传输率。
[0031] 表1本发明零拷贝数据传输方案与传统方案的对比表
[0032]

【权利要求】
1. 一种PCI-E多缓冲区DMA数据传输方法,其特征在于,包括如下步骤: 步骤一、在数据源系统和数据目的系统中各自分配N块物理内存,分别对两个系统中 的N块物理内存通过双向链表建立空闲内存池及工作内存池;同时,在两个系统中都建立 一个以上的环形缓冲区以及其对应的读写指针; 步骤二、在数据源系统中的用户应用程序使用API从数据源系统的空闲内存池获得内 存并填入数据,将填入数据的内存加入到数据源系统的工作内存池中,将填入数据的内存 的物理起始地址及大小写入数据源系统的环形缓冲区; 步骤三、在数据源系统中的用户应用程序使用API发起数据传输请求;数据目的系统 中的内核从数据目的系统的空闲内存池选取空闲内存,并将所选内存的物理起始地址及大 小填入数据目的系统的环形缓冲区中,更新数据目的系统的环形缓冲区的写指针并通知数 据源系统; 步骤四、数据源系统中的内核收到数据目的系统的环形缓冲区更新的通知后,取得数 据目的系统要写入数据的内存物理起始地址及大小,发起DMA完成数据传输; 步骤五、数据传输完成后,数据源系统更新数据源系统的环形缓冲区读指针并通知数 据目的系统; 步骤六、数据目的系统把写入数据的内存放入数据目的系统的工作内存池供用户应用 程序使用。
【文档编号】G06F13/28GK104239248SQ201410472222
【公开日】2014年12月24日 申请日期:2014年9月16日 优先权日:2014年9月16日
【发明者】云晓春, 周游, 包秀国, 谢铭, 周康成, 童晓民, 唐剑琪, 周渊 申请人:国家计算机网络与信息安全管理中心, 北京赛思信安技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1