一种Scatter-GatherDMA的数据传输方法及装置与流程

文档序号:17160373发布日期:2019-03-20 00:36阅读:523来源:国知局
一种Scatter-Gather DMA的数据传输方法及装置与流程

本发明涉及计算机数据传输领域,并且更具体地,特别是指一种scatter-gatherdma的数据传输方法及装置。



背景技术:

dma(directmemoryaccess),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从io设备到内存,从内存到io设备或从一段内存到另一段内存。利用它进行数据传送时不需要cpu的参与。每台电脑主机板上都有dma控制器,通常计算机对其编程,并用一个适配器上的rom(如软盘驱动控制器上的rom)来储存程序,这些程序控制dma传送数据。一旦控制器初始化完成,数据开始传送,dma就可以脱离cpu,独立完成数据传送。

scatter-gatherdma(sgdma,分散-收集dma)方式是与blockdma方式相对应的一种dma方式。在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中连续的存储器地址在物理上不一定是连续的,所以dma传输要分成多次完成。如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为blockdma方式。scatter-gatherdma方式则不同,它使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉dmamaster。dmamaster在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直到传输完毕后再发起一次中断。scatter-gatherdma方式比blockdma方式效率高。

通常使用scatter-gatherdma数据发送流程如图1所示,首先创建sgdma数据传输链表,然后驱动程序在内核空间创建一组物理地址不连续的缓冲区,并将缓冲区的物理地址填入数据传输链表的节点中,cpu需要将用户空间的数据通过memcpy拷贝如内核空间缓冲区,将链表地址写入设备dma寄存器,启动dma传输,dma开始数据传输,并在传输完成后发送中断,中断处理程序进行下一次的数据传输。这种传输方式数据从用户空间到内存空间的数据拷贝同内存空间数据通过dma到设备是串行传输,cpu同dma无法同时参与数据传输工作,这样数据造成无法充分利用dma的数据传输带宽。

现有技术中尚未披露一种sgdma的数据传输方法及装置,该方法和装置通过创建两个sgdma数据传输链表和两组内核空间缓冲区,在sgdma传输数据的同时通过cpu将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,解决了cpu同dma无法同时参与数据传输的问题,提高数据在dma传输时的效率。



技术实现要素:

有鉴于此,本发明实施例的目的在于提出一种sgdma的数据传输方法及装置,该方法和装置通过创建两个sgdma数据传输链表和两组内核空间缓冲区,在sgdma传输数据的同时通过cpu将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,解决了cpu同dma无法同时参与数据传输的问题,提高数据在dma传输时的效率。

基于上述目的,本发明实施例的一方面提供了一种sgdma的数据传输方法,包括:

1)以数组形式创建sgdma数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;

2)通过cpu将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入io设备;

3)启动sgdma数据传输,并通过cpu将另外的用户空间数据拷贝入第二组缓冲区;

4)待sgdma传输完成后,cpu将链表二的地址写入io设备;

5)启动进一步的sgdma数据传输,并通过cpu将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的sgdma传输完成后,cpu将链表一的地址写入io设备并且重复步骤3)到5)直到用户空间数据完全写入io设备内存位置。

在一些实施方式中,在内核空间中创建第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。

在一些实施方式中,缓冲区数量对应链表节点数。

在一些实施方式中,每个链表节点包括一个连续的物理缓冲区的物理地址。

在一些实施方式中,内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。

在一些实施方式中,启动sgdma数据传输,并通过cpu将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。

在一些实施方式中,待sgdma传输完成后,cpu将链表二的地址写入io设备包括:cpu响应于接收到sgdma设备发送的数据传输中断信号将链表二的地址写入io设备。

在一些实施方式中,数据传输包括用户空间到内核空间、内核空间到io设备空间的并行数据传输。

在一些实施方式中,将链表一或链表二的地址写入io设备包括将链表一或链表二地址写入io设备的sgdma寄存器。

本发明实施例的另一方面,还提供了一种sgdma的数据传输装置,包括:

处理器;

存储器,该存储器存储有所述处理器可执行的指令,该处理器在执行所述指令时实现上述方法。

本发明具有以下有益技术效果:本发明实施例提供的一种sgdma的数据传输方法及装置,通过创建两个sgdma数据传输链表和两组内核空间缓冲区,在sgdma传输数据的同时通过cpu将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,解决了cpu同dma无法同时参与数据传输的问题,提高数据在dma传输时的效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中sgdma的数据传输的流程示意图;

图2为本发明提供的sgdma的数据传输方法的流程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

基于上述目的,本发明实施例的第一个方面,提出了一种sgdma的数据传输方法的实施例。图2示出的是本发明提供的sgdma的数据传输方法的实施例的流程示意图。

一种sgdma的数据传输方法,可选地,包括以下步骤:

步骤s201,以数组形式创建sgdma数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;

步骤s202,通过cpu将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入io设备;

步骤s203,启动sgdma数据传输,并通过cpu将另外的用户空间数据拷贝入第二组缓冲区;

步骤s204,待sgdma传输完成后,cpu将链表二的地址写入io设备;

步骤s205,启动进一步的sgdma数据传输,并通过cpu将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的sgdma传输完成后,cpu将链表一的地址写入io设备并且重复步骤3)到5)直到用户空间数据完全写入io设备内存位置。

如图2所示,本发明在使用scatter-gatherdma进行计算机主存到io设备间的数据传输时,实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,提高数据在dma传输时的效率。本发明为实现数据从用户空间到内核空间、内核空间到io设备空间的并行传输,同时创建两个scatter-gatherdma链表,并创建两组内核空间缓冲区,将两个scatter-gatherdma链表分别指向两组不连续的内核空间缓冲区,首先将用户空间数据拷贝入第一组缓冲区,将链表一的地址告知设备,开始dma传输,在dma传输的同时,由于dma传输不需要cpu参与,cpu此时可以将用户空间的数据拷贝入第二组缓冲区,当dma传输完成,dma设备发送传输完成中断之后,中断处理程序则会将第二个scatter-gatherdma链表地址告知dma设备,并启动dma传输,同时cpu将用户空间数据拷贝入第二组缓冲区,以此方式循环直到将用户空间数据完全写入设备内存位置。

在一个实施方式中,在内核空间中创建两组内核空间缓冲区,即,第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。

在一个实施方式中,缓冲区数量对应链表节点数。

在一个实施方式中,每个链表节点包括一个连续的物理缓冲区的物理地址。

在一个实施方式中,内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。

在一个实施方式中,启动sgdma数据传输,并通过cpu将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。

创建中断处理程序,中断处理程序需要实现以下功能:判断当前完成传输的是第几组数据,之后将另一组缓冲区对应的链表地址告知设备,并开启dma。

在一个实施方式中,待sgdma传输完成后,cpu将链表二的地址写入io设备包括:cpu响应于接收到sgdma设备发送的数据传输中断信号将链表二的地址写入io设备。

在一个实施方式中,数据传输包括用户空间到内核空间、内核空间到io设备空间的并行数据传输。

在一个实施方式中,将链表一或链表二的地址写入io设备包括将链表一或链表二地址写入io设备的sgdma寄存器。

从上述实施例可以看出,本发明实施例提供的sgdma的数据传输方法,通过创建两个sgdma数据传输链表和两组内核空间缓冲区,在sgdma传输数据的同时通过cpu将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,解决了cpu同dma无法同时参与数据传输的问题,提高数据在dma传输时的效率。

需要特别指出的是,上述sgdma的数据传输方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于sgdma的数据传输方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。

以上是本发明公开的示例性实施例,上述本发明实施例公开的顺序仅仅为了描述,不代表实施例的优劣。但是应当注意,以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子,在不背离权利要求限定的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

基于上述目的,本发明实施例的第二个方面,提出了一种sgdma的数据传输装置,包括:处理器;存储器,所述存储器存储有所述处理器可执行的指令,所述处理器在执行所述指令时实现上述方法。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包括在本发明实施例的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1