一种提高多数据缓冲区dma效率的系统和方法

文档序号:6439338阅读:247来源:国知局
专利名称:一种提高多数据缓冲区dma效率的系统和方法
技术领域
本发明属于数字信息传输领域,具体讲涉及一种提高多数据缓冲区DMA效率的系统和方法。
背景技术
在现有技术中,从网卡请求数据到数据从主机内存中返回需要较长时间。在单队列的DMA系统中,从请求发送到数据返回的这段时间内,主机IO总线一直处于空闲状态,浪费了大量总线带宽,这种现象在使用中断的描述符机制系统中更为严重。同时,现有的网卡并未考虑对多个应用的数据缓冲区进行支持,对于运行在高速网络上的服务器,由操作系统对多个数据缓冲区进行管理会占用相当多的CPU资源,进而影响对主机IO总线的使用效率。专利号为ZL200680011384. 0、名称为“完成事件中包括描述符队列空事件”的 PCT披露了一种基于事件通知的主机子系统和网络接口设备间的管理数据传输的方法。该方法主机将数据缓冲区描述符写入到一 DMA描述符队列中,并且当数据缓冲区的处理已经完成时,网络接口设备写入完成事件来通知主机。每个完成事件描述符通知主机在NIC和一个或更多个数据缓冲区之间的数据传输的完成,并且也可以将一队列空通知嵌入在完成事件里。专利号为ZL02U8709. 0的、名称为“多通道数据直接内存访问系统和方法”的发明披露了一种涉及数字信息传输的多通道数据直接内存访问系统和方法。该方法利用空闲队列描述子、完成队列描述子等数据结构信息,用一个接收DMA模块不连续地接收各通道的数据,在FREE_FIF0存储器中的空闲队列描述子数目少于某个设定的门限时,根据其内部实时调整的读空闲队列指针通过总线接口控制模块从片外主存中的空闲队列;在发送 DMA模块中,利用待发送队列描述子、发送完成队列描述子、配置RAM、待发包数据描述子的数据结构信息用一个发送DMA模块不连续地发送多通道数据,将各通道在主存中的连续数据正确发送到各通道。论文“高速网卡芯片设计中一种新的多队列描述符机制”(戴斌,孙志刚,国防科技大学计算机学院,CCIC2007)中记录了一种方法,该方法根据网络上报文大小的分布情况的分析,提出了一种可应用于高速网卡芯片设计的多队列描述符机制。以上发明和论文都是对传统描述符机制的优化和扩展,并未解决描述符传输所带来的时间开销和系统总线开销;而且在操作系统对多个数据缓冲区进行管理所带来的开销也未考虑。

发明内容
为克服上述缺陷,本发明提供了一种提高多数据缓冲区DMA效率的系统和方法, 基于非描述符机制的多队列DMA引擎,并对多个数据缓冲区进行支持,以提高主机IO总线的利用率和报文发送速度。
为实现上述目的,本发明提供一提高多数据缓冲区DMA效率的系统,其包括主机和与其通过IO总线连接的网卡,所述主机包括数据缓冲区、数据缓冲区信息模块和DMA 控制器,其特征在于,所述网卡包括数据缓冲区信息管理单元以及与所述DMA控制器分别通信的DMA请求队列和返回数据接收队列;所述数据缓冲区信息模块中的数据缓冲区信息 (Buffer Info)通过主机IO总线传输到所述数据缓冲区信息管理单元。本发明提供的优选技术方案中,所述DMA请求队列与所述返回数据接收队列的数量相等并有一一对应关系;所述数据缓冲区的数量有64个。本发明提供的第二优选技术方案中,所述数据缓冲区信息管理单元包括Buffer Info 模块、Lock 模块、Buffer Number 模块 l、Block Address 模块、Block Length 模块、DMA Info Available 模块禾口 Ack for DMA Read Pointer Write Back 模块。本发明提供的第三优选技术方案中,所述DMA请求队列包括:Ack for DMA hfo模 Buffer NumberIl^i2>DMA Read PointerH^i>DMA Read Pointer Write Back Request
模块禾口 DMA Read Request Sender 模块。本发明提供的第四优选技术方案中,所述网卡使用型号为V5110T的fpga芯片。本发明提供的第五优选技术方案中,提供一种提高多数据缓冲区DMA效率的方法,其改进之处在于,所述方法包括如下步骤(1).向数据缓冲区填入数据时,数据缓冲区信息通过主机10总线送往网卡并存储在数据缓冲区信息管理单元;(2).从缓冲区相关信息中提取出待发送数据的地址和长度,并送往DMA请求队列;(3). DMA请求队列将对数据块的请求组织为一个或多个符合主机10总线要求的 DMA请求,并发送到主机;(4).主机的DMA控制器响应接收到的DMA请求,将被请求的数据通过主机10总线发送网卡上;其中,步骤1和步骤2中,从所述数据缓冲区中提取的相关信息包括待发送数据的地址和长度。本发明提供的第六优选技术方案中,在所述步骤2中,所述数据缓冲区信息管理单元优先处理DMA Read Pointer Write Back Request,随后检查是否有缓冲区正在等待处理,如果等待处理的缓冲区请求未被DMA请求队列所接受,则重新执行此流程,否则将所述 DMA Info Available 模块置 0。本发明提供的第七优选技术方案中,在所述步骤4中,如果已有数据缓冲区正在等待处理,且能仲裁出空闲的请求队列,则将等待处理的缓冲区信息送往空闲的DMA请求队列,将所述Ack for DMA hfo模块置为1并保持一周期。本发明提供的第八优选技术方案中,所述数据缓冲区信息管理单元提供数据缓冲区号和读指针信息;内部号为缓冲区号的数值模DMA请求队列数量所得的余数;所述DMA Read Pointer Write Back Request的过程包括仲裁出一个已处理完缓冲区数据请求任务的DMA请求队列,将要写回的数据缓冲区号和读指针信息送往数据缓冲区信息管理单元并将 DMA Read Pointer Write Back Request 模块置为 1 ;如果此时 Ack for DMA Read Pointer Write Back 模块置 1,贝叫f DMA Read Pointer Write Back Request 模块置 0 ;其中,缓冲区号的低位由DMA请求队列号(RRS Number)构成,高位由内部号(Internal Number)构成。与现有技术比,本发明提供的一种提高多数据缓冲区DMA效率的系统和方法,基于非描述符机制的多队列DMA引擎,并对多个数据缓冲区进行支持,以提高主机IO总线的利用率和报文发送速度。而且解决了描述符传输所带来的时间开销和系统总线开销大以及操作系统在对多个数据缓冲区进行管理时会带来额外的开销的问题。


图1为提高多数据缓冲区DMA效率的系统的结构示意图。图2为数据缓冲区与DMA请求队列的数据结构示意图。图3为数据缓冲区信息管理模块流程图。图4为缓冲区请求信号控制流程图。图5为数据缓冲区请求处理流程图。图6为数据缓冲区写回请求流程图。图7为直接相联模式示意图。图8为直接相联模式流程图。
具体实施例方式图1为此系统的整体结构图。一种提高多数据缓冲区DMA效率的系统,其包括 主机和与其通过IO总线连接的网卡,所述主机包括数据缓冲区、数据缓冲区信息模块和 DMA控制器,其特征在于,所述网卡包括数据缓冲区信息管理单元以及与所述DMA控制器分别通信的DMA请求队列和返回数据接收队列;数据缓冲区信息模块中的数据缓冲区信息 (Buffer Info)通过主机IO总线传输到所述数据缓冲区信息管理单元。所述DMA请求队列与所述返回数据接收队列的数量各为4 ;所述数据缓冲区有64 个。所述数据缓冲区信息管理单元,包括Buffer hfo模块、Lock模块、Buffer Number模块 1、Block Address 模块、Block Length 模块、DMA Info Available 模块禾口 Ack for DMA Read Pointer Write Back模块。所述DMA请求队列,包括Ack for DMA hfo模块、Buffer Number 模块 2、DMA Read Pointer 模块、DMA Read Pointer Write Back Request 模块禾口 DMA Read Request Sender模块。所述网卡使用型号为M6110T的fpga芯片。提高多数据缓冲区DMA效率的系统和方法,包括(1)当应用程序向数据缓冲区填入数据时,缓冲区的相关信息(如读写指针)通过主机10总线送往网卡并存储在数据缓冲区信息管理模块。(2)数据缓冲区信息管理模块检测到数据缓冲区中有数据需要发送时, 就从缓冲区相关信息中提取出待发送数据的地址和长度,并送往DMA请求队列。C3)DMA请求队列将对数据块的请求组织为一个或多个符合主机10总线要求的DMA请求,并发送到主机。(4)主机的DMA控制器响应接收到的DMA请求,将被请求的数据通过主机10总线发送网卡上。图1中的数据缓冲区、DMA请求队列、返回数据接收队列可以为多个,其中DMA请求队列与返回数据接收队列的数量相等并有一一对应关系。DMA请求队列与返回数据接收队列之间需要流控信号,以保证请求数据的速度不超过整个系统的处理能力。
下面以使用FPGA作为网卡控制器和PCI Express总线的系统为例,其中数据缓冲区的数量为64,DMA请求队列与返回数据接收队列的数量各为4。数据缓冲区与DMA请求队列采用全相联模式连接,即任意一个数据缓冲区的数据发送请求可以由任意一个空闲的DMA请求队列完成。如图2所示,数据缓冲区的数据结构与DMA请求队列包括如下数据结构=Buffer Info 数据缓冲区信息,可存放在FPGA片内RAM上。缓冲区读指针由驱动程序维护,每次读指针变化时,就通过PCI Express总线将读指针位置发送到网卡中。缓冲区写指针由网卡维护,每次缓冲区数据传输结束后,将更新的缓冲区读指针写回到缓冲区信息中。为避免因主机频繁的读取缓冲区读指针而影响数据发送效率,可以等到缓冲区中已保存了一些待发送数据后(如缓冲区空闲空间小于缓冲区总大小一半时)再更新读指针。Lock 数据缓冲区锁定标记。对应于每个数据缓冲区,有1位的Lock信号控制此缓冲区能否被访问。当一个数据缓冲区被选中并正在等待处理,或已经与某一对DMA请求—— 数据返回队列进行数据传输时,此缓冲区不能被轮询选中,Lock标记为1,直到DMA请求队列已经处理完该数据缓冲区上一次提交的全部传输请求且更新后的读指针被写回到DMA Buffer Info 中。Buffer Number 正在等待处理的缓冲区号。Block Address 请求传输的数据在内存中的起始地址。Block Length 请求传输的数据长度,由数据缓冲区的读写指针决定。DMA Info Available :DMA信息有效信号,表示已检测一个缓冲区在请求数据传输。Ack for DMA Info :DMA信息响应信号,表示当前缓冲区的数据传输请求已被接受。DMA RRS (DMA Read Request Sender) :DMA读请求发送器将对缓冲区数据块的请求组织为一个或多个符合主机10总线要求的DMA请求,并发送到主机。DMA Read Pointer :DMA 读指针,由 Block Address+Block Length 计算得出,需写回到数据缓冲区信息中。DMA Read Pointer Write Back Request :DMAi卖指针写回请求。Ack for DMA Read Pointer Write Back :DMA读指针写回请求响应,表示该请求已被接受。在图3所示的数据缓冲区信息管理流程中,优先处理读指针的写回请求。随后检查是否有缓冲区正在等待处理,如果等待处理的缓冲区请求未被DMA请求队列所接受,则重新执行此流程。所有正在等待处理和处理请求已被接受但尚未写回读指针的队列都必须被锁定(Lock位置为1),以防止因同一缓冲区同时被多个DMA请求队列同时访问而产生的缓冲区指针错误。数据缓冲区信息管理模块对64个缓冲区轮询检查,被锁定的缓冲区直接跳过轮询。由于每次检查缓冲区是否有数据需要发送所用时间很短,远小于等待DMA请求从主机返回的时间,所以轮询查找方式对缓冲区数据传输请求的响应时间不会产生太大影响。图4显示数据缓冲区信息管理模块与DMA请求队列之间的数据交换流程。图5显示如和给正在等待处理的缓冲区请求分配一个DMA请求队列。空闲DMA之间的仲裁可以选用任意的仲裁方法(包括固定优先级仲裁)。因为DMA请求队列与数据缓冲区并无一一对应关系,所以数据缓冲区之间的响应机会均等由图3所示的顺序轮询所保证,而与空闲DMA之间的仲裁方式无关。如图6所示为数据缓冲区写回请求流程图,对于图6中选择一个已处理完缓冲区数据请求任务的DMA请求队列的仲裁方式,可使用与图5中选择空闲DMA相同的仲裁方式。所述数据缓冲区信息管理单元提供数据缓冲区号和读指针信息;内部号为缓冲区号的数值模DMA请求队列数量所得的余数;数据缓冲区与DMA请求队列采用直接联模式连接,即一个数据缓冲区的数据发送请求只能由一个指定的DMA请求队列完成。具体数据结构如图7所示。如图7所示,64个缓冲区被分为4组,每组的16个缓冲区传输请求只能被一个指定的DMA请求队列处理。缓冲区号(Buffer Number)的低位由DMA请求队列号(RRS Number)构成,高位由内部号(Internal Number)构成。图8为直接相联模式流程图,由于采用直接相联的分组模式,同组的缓冲区传输请求只能被同一个DMA请求队列处理,与图2所示全相联模式相比,不需要对正在传输数据的缓冲区进行锁定操作。需要声明的是,本发明内容及具体实施方式
意在证明本发明所提供技术方案的实际应用,不应解释为对本发明保护范围的限定。本领域技术人员在本发明的精神和原理启发下,可作各种修改、等同替换、或改进。但这些变更或修改均在申请待批的保护范围内。
权利要求
1.一种提高多数据缓冲区DMA效率的系统,其包括主机和与其通过IO总线连接的网卡,所述主机包括数据缓冲区、数据缓冲区信息模块和DMA控制器,其特征在于,所述网卡包括数据缓冲区信息管理单元以及与所述DMA控制器分别通信的DMA请求队列和返回数据接收队列;所述数据缓冲区信息模块中的数据缓冲区信息(Buffer Info)通过主机IO总线传输到所述数据缓冲区信息管理单元。
2.根据权利要求1所述的系统,其特征在于,所述DMA请求队列与所述返回数据接收队列的数量各为4 ;所述数据缓冲区的数量有64个。
3.根据权利要求1所述的系统,其特征在于,所述数据缓冲区信息管理单元包括 Buffer Info 模块、Lock 模块、Buffer Number 模块 1、Block Address 模块、Block Length 模块、DMA Info Available 模块禾口 Ack for DMA Read Pointer Write Back 模块。
4.根据权利要求1所述的系统,其特征在于,所述DMA请求队列包括Ackfor DMA Info Illfe>Buffer Number 2>DMA Read Pointer DMA Read Pointer Write Back Request 模块禾口 DMA Read Request Sender 模块。
5.根据权利要求1所述的系统,其特征在于,所述网卡使用型号为V5110T的fpga芯片。
6.根据1-5项权利要求任一项所述的提高多数据缓冲区DMA效率的系统的提高多数据缓冲区DMA效率的方法,其特征在于,所述方法包括如下步骤(1).向数据缓冲区填入数据时,数据缓冲区信息通过主机IO总线送往网卡并存储在数据缓冲区信息管理单元;(2).从缓冲区相关信息中提取出待发送数据的地址和长度,并送往DMA请求队列;(3).DMA请求队列将对数据块的请求组织为一个或多个符合主机IO总线要求的DMA请求,并发送到主机;⑷.主机的DMA控制器响应接收到的DMA请求,将被请求的数据通过主机10总线发送网卡上。
7.根据权利要求6所述的方法,其特征在于,在所述步骤2中,所述数据缓冲区信息管理单元优先处理DMA Read Pointer Write Back Itequest,随后检查是否有缓冲区正在等待处理,如果等待处理的缓冲区请求未被DMA请求队列所接受,则重新执行此流程,否则将所述 DMA Info Available 模块置 0。
8.根据权利要求6所述的方法,其特征在于,在所述步骤4中,如果已有数据缓冲区正在等待处理,且能仲裁出空闲的请求队列,则将等待处理的缓冲区信息送往空闲的DMA请求队列,将所述Ack for DMA hfo模块置为1。
9.根据权利要求7所述的方法,其特征在于,所述数据缓冲区信息管理单元提供数据缓冲区号和读指针信息;内部号为缓冲区号的数值模DMA请求队列数量所得的余数;所述 DMA Read Pointer Write Back Request的过程包括仲裁出一个已处理完缓冲区数据请求任务的DMA请求队列,将要写回的数据缓冲区号和读指针信息送往数据缓冲区信息管理单元并将 DMA Read Pointer Write Back Request 模块置为 1 ;如果此时 Ack for DMA Read Pointer Write Back|f|feSDMA Read Pointer Write Back Request HlfeS 0 ;其中,缓冲区号的低位由DMA请求队列号(RRS Number)构成,高位由内部号(Internal Number)构成。
全文摘要
本发明提供了一种提高多数据缓冲区DMA效率的系统和方法,包括(1)当应用程序向数据缓冲区填入数据时,缓冲区的相关信息通过主机IO总线送往网卡并存储在数据缓冲区信息管理模块。(2)数据缓冲区信息管理模块检测到数据缓冲区中有数据需要发送时,就从缓冲区相关信息中提取出待发送数据的地址和长度,并送往DMA请求队列。(3)DMA请求队列将对数据块的请求组织为一个或多个符合主机IO总线要求的DMA请求,并发送到主机。(4)主机的DMA控制器响应接收到的DMA请求,将被请求的数据通过主机IO总线发送网卡上。本发明提供的提高多数据缓冲区DMA效率的系统和方法,基于非描述符机制的多队列DMA引擎,提高主机IO总线的利用率和报文发送速度。
文档编号G06F13/28GK102541779SQ201110383370
公开日2012年7月4日 申请日期2011年11月28日 优先权日2011年11月28日
发明者张磊, 张英文, 李旭, 李静, 白宗元, 窦晓光, 纪奎 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1