本发明专利技术公开了一种数据传输方法及系统,应用于I/O设备通过DMA将数据传输至主机。该方法包括:根据预设缓存大小S和平均数据包长度P计算出索引数量S / P,然后根据索引单元的大小U计算出索引内存块的大小I=(S / P)× U,并按照此大小申请索引内存块;根据预设的缓存大小S和每块数据内存块M的大小计算出需要分配的数据内存块的数量N=S / M,并按照预设数据块大小M申请N块数据内存块;将索引内存块的起始物理地址、长度和所有的数据内存块的起始物理地址和数据内存块的大小写入到I/O设备;控制I/O设备通过DMA传输上行数据;主机读取索引信息并根据索引单元的记录获取上行数据包内容。本发明专利技术可以提高主机系统的内存资源申请的成功率并能有效利用较小的连续内存块,以便为I/O设备提供更多的主机内存资源。
【技术实现步骤摘要】
数据传输的方法及系统
本专利技术涉及数据传输领域,具体涉及面向PCIE等I/O设备的数据传输控制,主要是为PCIE等I/O设备的DMA传输提供内存资源分配管理和数据传输的方法及系统。
技术介绍
I/O设备在进行数据传输时,一般使用直接内存存取(DirectMemoryAccess,简称DMA)技术传输I/O设备上的数据,从而实现独立于CPU的后台批量数据传输。在DMA操作中,主机为DMA操作分配DMA内存地址空间,I/O设备直接在DMA内存地址空间上进行数据读写,从而完成DMA方式数据传输。DMA操作通过DMA报文实现,I/O设备向主机发送DMA报文,DMA报文中包含DMA地址,DMA地址位于主机为DMA操作所分配的DMA内存地址空间上。通过DMA报文中的DMA地址,I/O设备可以直接对主机的DMA内存地址空间上的数据进行读写,具体的,例如,当主机对I/O设备进行写操作时,DMA报文为对内存的读报文,数据通过对该读报文所响应的一个或多个完成命令包携带,从内存拷贝到I/O设备上;当主机对I/O设备进行读操作时,根据需要拷贝的数据大小,I/O设备生成的DMA报文为一个或者多个写报文,报文携带拷贝的数据,写报文到达目标主机的DMA内存地址空间,将报文中的数据载荷复制到对应的内存空间中。由于DMA操作中,数据传输的过程无需主机CPU进行参与,从而实现了I/O设备对主机数据独立的高速读写。随着计算机技术的不断发展,各种计算机PCIE设备所需带宽也越来越大,对应的PCIE设备也需要在主机中分配更大的上下行数据缓存。而以往的主机在分配上行DMA缓存时一般是申请一块或者两块较大的连续内存进行数据缓存,但是随着所需缓存越来越大,传统方法的的弊端也越来越明显:弊端1:较大的连续内存申请成功几率低,一旦系统无法提供预期的连续内存资源,那么只能减小尺寸继续申请直至申请成功,这样常常无法得到预期缓存大小;弊端2:主机系统内存资源未得到充分利用,因为需要申请较大块的连续内存,所以系统中的较小的连续内存块无法被使用,这样可能导致即使系统中有足够的内存资源,但是也只能被对应的PCIE设备使用其中一部分。
技术实现思路
鉴于上述现有技术的不足,本专利技术提出了一种用于I/O设备和主机设备之间进行DMA数据传输的方法以及数据传输系统,以提高主机系统的内存资源申请的成功率并能有效利用较小的连续内存块以便为I/O设备提供更多的主机内存资源。根据本专利技术的一个方面,提供了一种数据传输方法,所述方法应用于I/O设备通过DMA将数据传输至主机,所述方法包括:根据预设缓存大小S和平均数据包长度P计算出索引数量S/P,然后根据索引单元的大小U计算出索引内存块的大小I=(S/P)×U,并按照此大小申请索引内存块;根据预设的缓存大小S和每块数据内存块M的大小计算出需要分配的数据内存块的数量N=S/M,并按照预设数据块大小M申请N块数据内存块;将索引内存块的起始物理地址、长度和所有的数据内存块的起始物理地址和数据内存块的大小写入到I/O设备;控制I/O设备通过DMA传输上行数据;主机读取索引信息并根据索引单元的记录获取上行数据包内容。所述索引单元中包括数据包长度、数据包所在数据内存块序号、数据包起始位置的偏移地址、索引单元有效标记、索引单元完结标记等信息,其中,数据包长度用来记录当前索引单元对应的数据包的长度信息;数据包所在数据内存块序号,用来记录当前索引单元对应的数据包位于第几个数据内存块中;数据包起始位置的偏移地址,用来记录当前索引单元对应的数据包的起始位置在其存放的数据内存块的开始地址往后偏移的字节数;索引单元有效标记,用来表示当前索引单元是否有效;索引单元完结标记,用来表示下一个数据包的索引单元是否要从头开始检索在一种可能的设计中,当所述主机获取了当前索引单元对应的数据包后,将当前索引单元有效标记置为无效,当所述I/O设备存入新的数据包到数据内存块中,将当前索引单元有效标记置为有效。在一种可能的设计中,当主机检查到待读取的索引单元的有效标记被置为有效时,即根据索引单元中记录的数据包所在数据内存块序号和数据包起始位置的偏移地址在数据内存块中找到对应数据包的位置,然后根据索引单元记录的数据包长度来获取上行数据包。在一种可能的设计中,所述主机获取数据包后,还检查索引单元的完结标记,如果完结标记有效,则将完结标记置为无效,同时将主机记录的正在检查的索引单元位置变更为第一个索引单元;如果完结标记无效,则将主机记录的正在检查的索引单元位置则变更为下一个索引单元。根据本专利技术的另一个方面,提供了一种数据传输系统,所述系统包括主机及与主机连接的I/O设备,所述I/O设备通过DMA将数据传输至主机,所述主机包括:索引内存申请单元,用于根据预设缓存大小S和平均数据包长度P计算出索引数量S/P,然后根据索引单元的大小U计算出索引内存块的大小I=(S/P)×U,并按照此大小申请索引内存块;数据内存申请单元,用于根据预设的缓存大小S和每块数据内存块M的大小计算出需要分配的数据内存块的数量N=S/M,并按照预设数据块大小M申请N块数据内存块;内存分配信息发送单元,用于将索引内存块的起始物理地址、长度和所有的数据内存块的起始物理地址和数据内存块的大小写入到I/O设备;上行数据读取单元,用于读取索引信息并根据索引单元的记录获取上行数据包内容。本专利技术因为不用一次申请较大块的连续物理内存,这样主机申请每块连续物理内存块成功的概率将大大增加,从而可较好的解决现有技术的弊端,提高主机系统的内存资源申请的成功率并能有效利用较小的连续内存块,以便为包括诸如PCIE设备在内的各种I/O设备提供更多的主机内存资源。附图说明图1示出本专利技术的主机内存资源图。图2示出本专利技术的上行数据包填充流程图。图3示出本专利技术的主机数据包接收流程图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。由于本专利技术应用于I/O设备和主机设备之间进行上行DMA数据传输,为了方便对本专利技术的理解,对现有技术中DMA写操作的流程进行简要的介绍。DMA写操作可以实现将数据从I/O设备拷贝到目标主机的DMA内存地址中,DMA写操作包括如下步骤:1、根据接收到的DMA操作启动请求,I/O设备驱动软件生成一个IO命令包,包含DMA拷贝I/O设备中的数据到内存的指令信息,IO设备上源数据地址和目标内存DMA地址;2、IO设备接收到该命令包,根据需要拷贝的数据大小,生成一个或者多个DMA写报文,报文的目标地址为内存DMA地址,报文携带拷贝的数据;3、将DMA写报文发送至对应的通道(一般为PCIE链路);4、DMA写报文到达主机的物理内存空间,将报文中的数据载荷复制到对应的目标内存DMA地址上。本专利技术中由I/O设备控制上行DMA传输,主机需要申请两种物理内存块:1)用来存储数据包描述信息的一小块连续物理内存(后文中将简称为索引内存块);2)多块用来存储上行数据包的多个等长的连续物理内存块信息(后文中将简称为数据内存块)。这些内存块每本文档来自技高网...

【技术保护点】
一种数据传输方法,其特征在于,所述方法应用于I/O设备通过DMA将数据传输至主机,所述方法包括:根据预设缓存大小S和平均数据包长度P计算出索引数量S / P,然后根据索引单元的大小U计算出索引内存块的大小I =(S / P)× U,并按照此大小申请索引内存块;根据预设的缓存大小S和每块数据内存块M的大小计算出需要分配的数据内存块的数量N = S / M,并按照预设数据块大小M申请N块数据内存块;将索引内存块的起始物理地址、长度和所有的数据内存块的起始物理地址和数据内存块的大小写入到I/O设备;控制I/O设备通过DMA传输上行数据;主机读取索引信息并根据索引单元的记录获取上行数据包内容。
【技术特征摘要】
1.一种数据传输方法,其特征在于,所述方法应用于I/O设备通过DMA将数据传输至主机,所述方法包括:根据预设缓存大小S和平均数据包长度P计算出索引数量S/P,然后根据索引单元的大小U计算出索引内存块的大小I=(S/P)×U,并按照此大小申请索引内存块;根据预设的缓存大小S和每块数据内存块M的大小计算出需要分配的数据内存块的数量N=S/M,并按照预设数据块大小M申请N块数据内存块;将索引内存块的起始物理地址、长度和所有的数据内存块的起始物理地址和数据内存块的大小写入到I/O设备;控制I/O设备通过DMA传输上行数据;主机读取索引信息并根据索引单元的记录获取上行数据包内容。2.如权利要求1所述的数据传输方法,其特征在于,所述索引单元中包括数据包长度、数据包所在数据内存块序号、数据包起始位置的偏移地址、索引单元有效标记、索引单元完结标记等信息,其中,数据包长度用来记录当前索引单元对应的数据包的长度信息;数据包所在数据内存块序号,用来记录当前索引单元对应的数据包位于第几个数据内存块中;数据包起始位置的偏移地址,用来记录当前索引单元对应的数据包的起始位置在其存放的数据内存块的开始地址往后偏移的字节数;索引单元有效标记,用来表示当前索引单元是否有效;索引单元完结标记,用来表示下一个数据包的索引单元是否要从头开始检索。3.如权利要求2所述的数据传输方法,其特征在于,当所述主机获取了当前索引单元对应的数据包后,将当前索引单元有效标记置为无效,当所述I/O设备存入新的数据包到数据内存块中,将当前索引单元有效标记置为有效。4.如权利要求2所述的数据传输方法,其特征在于,所述主机读取索引信息并根据索引单元的记录读取上行数据包内容具体为,当主机检查到待读取的索引单元的有效标记被置为有效时,即根据索引单元中记录的数据包所在数据内存块序号和数据包起始位置的偏移地址在数据内存块中找到对应数据包的位置,然后根据索引单元记录的数据包长度来获取上行数据包。5.如权利要求4所述的数据传输方法,其特征在于,所述主机获取数据包后,还检查索引单元的完结标记,如果完结标记有效,则将完结标记置为无效,同时将主机记录的正在检查的索引单元位置变更为第一个索引单元;如果完结标记无效,则将主机记录的正在检查的索引单元位置则变更为下一个索引单元。6.一种数据传输系统,其特征在于,所述系统...
【专利技术属性】
技术研发人员:柳卯,陈宗权,刘胜杰,
申请(专利权)人:北京中航通用科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。