CN109491937A - 一种Scatter-Gather DMA的数据传输方法及装置 - Google Patents
一种Scatter-Gather DMA的数据传输方法及装置 Download PDFInfo
- Publication number
- CN109491937A CN109491937A CN201811244093.7A CN201811244093A CN109491937A CN 109491937 A CN109491937 A CN 109491937A CN 201811244093 A CN201811244093 A CN 201811244093A CN 109491937 A CN109491937 A CN 109491937A
- Authority
- CN
- China
- Prior art keywords
- dma
- chained list
- data
- buffer area
- group
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/28—DMA
- G06F2213/2806—Space or buffer allocation for DMA transfers
Abstract
本发明公开了一种SG DMA的数据传输方法,包括:以数组形式创建SG DMA数据传输链表一和链表二并且创建第一组缓冲区和第二组缓冲区;通过CPU将用户空间数据拷贝入第一组缓冲区、将链表一的地址写入IO设备;在启动SG DMA数据传输的同时通过CPU将用户空间数据拷贝入第二组缓冲区;创建中断处理程序,待SG DMA传输完成后,CPU接收SG DMA发送的传输完成中断指令将链表二的地址写入IO设备;依次循环直到用户空间数据完全写入IO设备内存位置。本发明还公开了一种SG DMA的数据传输装置。该方法和装置解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
Description
技术领域
本发明涉及计算机数据传输领域,并且更具体地,特别是指一种 Scatter-GatherDMA的数据传输方法及装置。
背景技术
DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从IO设备到内存,从内存到IO设备或从一段内存到另一段内存。利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制 DMA传送数据。一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。
Scatter-gather DMA(SG DMA,分散-收集DMA)方式是与block DMA方式相对应的一种DMA方式。在DMA传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中连续的存储器地址在物理上不一定是连续的,所以DMA传输要分成多次完成。如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为block DMA方式。Scatter-gather DMA方式则不同,它使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMA master。DMA master在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直到传输完毕后再发起一次中断。scatter-gather DMA 方式比blockDMA方式效率高。
通常使用scatter-gather DMA数据发送流程如图1所示,首先创建SGDMA数据传输链表,然后驱动程序在内核空间创建一组物理地址不连续的缓冲区,并将缓冲区的物理地址填入数据传输链表的节点中,CPU 需要将用户空间的数据通过memcpy拷贝如内核空间缓冲区,将链表地址写入设备DMA寄存器,启动DMA传输,DMA开始数据传输,并在传输完成后发送中断,中断处理程序进行下一次的数据传输。这种传输方式数据从用户空间到内存空间的数据拷贝同内存空间数据通过DMA 到设备是串行传输,CPU同DMA无法同时参与数据传输工作,这样数据造成无法充分利用DMA的数据传输带宽。
现有技术中尚未披露一种SG DMA的数据传输方法及装置,该方法和装置通过创建两个SG DMA数据传输链表和两组内核空间缓冲区,在 SG DMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了 CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
发明内容
有鉴于此,本发明实施例的目的在于提出一种SG DMA的数据传输方法及装置,该方法和装置通过创建两个SG DMA数据传输链表和两组内核空间缓冲区,在SG DMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
基于上述目的,本发明实施例的一方面提供了一种SG DMA的数据传输方法,包括:
1)以数组形式创建SG DMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;
2)通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;
3)启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;
4)待SG DMA传输完成后,CPU将链表二的地址写入IO设备;
5)启动进一步的SG DMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SG DMA传输完成后,CPU 将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。
在一些实施方式中,在内核空间中创建第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。
在一些实施方式中,缓冲区数量对应链表节点数。
在一些实施方式中,每个链表节点包括一个连续的物理缓冲区的物理地址。
在一些实施方式中,内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。
在一些实施方式中,启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。
在一些实施方式中,待SG DMA传输完成后,CPU将链表二的地址写入IO设备包括:CPU响应于接收到SG DMA设备发送的数据传输中断信号将链表二的地址写入IO设备。
在一些实施方式中,数据传输包括用户空间到内核空间、内核空间到IO设备空间的并行数据传输。
在一些实施方式中,将链表一或链表二的地址写入IO设备包括将链表一或链表二地址写入IO设备的SG DMA寄存器。
本发明实施例的另一方面,还提供了一种SG DMA的数据传输装置,包括:
处理器;
存储器,该存储器存储有所述处理器可执行的指令,该处理器在执行所述指令时实现上述方法。
本发明具有以下有益技术效果:本发明实施例提供的一种SG DMA 的数据传输方法及装置,通过创建两个SG DMA数据传输链表和两组内核空间缓冲区,在SG DMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中SG DMA的数据传输的流程示意图;
图2为本发明提供的SG DMA的数据传输方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
基于上述目的,本发明实施例的第一个方面,提出了一种SG DMA 的数据传输方法的实施例。图2示出的是本发明提供的SG DMA的数据传输方法的实施例的流程示意图。
一种SG DMA的数据传输方法,可选地,包括以下步骤:
步骤S201,以数组形式创建SG DMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;
步骤S202,通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;
步骤S203,启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;
步骤S204,待SG DMA传输完成后,CPU将链表二的地址写入IO 设备;
步骤S205,启动进一步的SG DMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SG DMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。
如图2所示,本发明在使用scatter-gather DMA进行计算机主存到IO 设备间的数据传输时,实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,提高数据在DMA传输时的效率。本发明为实现数据从用户空间到内核空间、内核空间到IO设备空间的并行传输,同时创建两个scatter-gather DMA链表,并创建两组内核空间缓冲区,将两个scatter-gather DMA链表分别指向两组不连续的内核空间缓冲区,首先将用户空间数据拷贝入第一组缓冲区,将链表一的地址告知设备,开始 DMA传输,在DMA传输的同时,由于DMA传输不需要CPU参与,CPU 此时可以将用户空间的数据拷贝入第二组缓冲区,当DMA传输完成,DMA设备发送传输完成中断之后,中断处理程序则会将第二个 scatter-gather DMA链表地址告知DMA设备,并启动DMA传输,同时 CPU将用户空间数据拷贝入第二组缓冲区,以此方式循环直到将用户空间数据完全写入设备内存位置。
在一个实施方式中,在内核空间中创建两组内核空间缓冲区,即,第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。
在一个实施方式中,缓冲区数量对应链表节点数。
在一个实施方式中,每个链表节点包括一个连续的物理缓冲区的物理地址。
在一个实施方式中,内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。
在一个实施方式中,启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。
创建中断处理程序,中断处理程序需要实现以下功能:判断当前完成传输的是第几组数据,之后将另一组缓冲区对应的链表地址告知设备,并开启DMA。
在一个实施方式中,待SG DMA传输完成后,CPU将链表二的地址写入IO设备包括:CPU响应于接收到SG DMA设备发送的数据传输中断信号将链表二的地址写入IO设备。
在一个实施方式中,数据传输包括用户空间到内核空间、内核空间到IO设备空间的并行数据传输。
在一个实施方式中,将链表一或链表二的地址写入IO设备包括将链表一或链表二地址写入IO设备的SG DMA寄存器。
从上述实施例可以看出,本发明实施例提供的SG DMA的数据传输方法,通过创建两个SG DMA数据传输链表和两组内核空间缓冲区,在 SG DMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了 CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
需要特别指出的是,上述SG DMA的数据传输方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于SG DMA的数据传输方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。
以上是本发明公开的示例性实施例,上述本发明实施例公开的顺序仅仅为了描述,不代表实施例的优劣。但是应当注意,以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子,在不背离权利要求限定的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
基于上述目的,本发明实施例的第二个方面,提出了一种SG DMA 的数据传输装置,包括:处理器;存储器,所述存储器存储有所述处理器可执行的指令,所述处理器在执行所述指令时实现上述方法。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包括在本发明实施例的保护范围之内。
Claims (10)
1.一种SG DMA的数据传输方法,其特征在于,包括以下步骤:
1)以数组形式创建SG DMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;
2)通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;
3)启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;
4)待SG DMA传输完成后,CPU将链表二的地址写入IO设备;
5)启动进一步的SG DMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SG DMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。
2.根据权利要求1所述的方法,其特征在于,在内核空间中创建第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。
3.根据权利要求2所述的方法,其特征在于,缓冲区数量对应链表节点数。
4.根据权利要求3所述的方法,其特征在于,每个链表节点包括一个连续的物理缓冲区的物理地址。
5.根据权利要求2所述的方法,其特征在于,所述内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。
6.根据权利要求1所述的方法,其特征在于,启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。
7.根据权利要求1所述的方法,其特征在于,待SG DMA传输完成后,CPU将链表二的地址写入IO设备包括:CPU响应于接收到SG DMA设备发送的数据传输中断信号将链表二的地址写入IO设备。
8.根据权利要求1所述的方法,其特征在于,所述数据传输包括用户空间到内核空间、内核空间到IO设备空间的并行数据传输。
9.根据权利要求1所述的方法,其特征在于,将链表一或链表二的地址写入IO设备包括将链表一或链表二地址写入IO设备的SG DMA寄存器。
10.一种SG DMA的数据传输装置,其特征在于,包括:
处理器;
存储器,所述存储器存储有所述处理器可执行的指令,所述处理器在执行所述指令时实现上述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811244093.7A CN109491937A (zh) | 2018-10-24 | 2018-10-24 | 一种Scatter-Gather DMA的数据传输方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811244093.7A CN109491937A (zh) | 2018-10-24 | 2018-10-24 | 一种Scatter-Gather DMA的数据传输方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109491937A true CN109491937A (zh) | 2019-03-19 |
Family
ID=65691447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811244093.7A Pending CN109491937A (zh) | 2018-10-24 | 2018-10-24 | 一种Scatter-Gather DMA的数据传输方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109491937A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857686A (zh) * | 2019-03-26 | 2019-06-07 | 北京简约纳电子有限公司 | 一种dma数据同步传输变异步传输的方法 |
CN109992543A (zh) * | 2019-04-02 | 2019-07-09 | 山东超越数控电子股份有限公司 | 一种基于zyzq-7000的pci-e数据高效传输方法 |
CN112492014A (zh) * | 2020-11-19 | 2021-03-12 | 广州橙行智动汽车科技有限公司 | 一种车载数据传输方法和装置 |
CN113127391A (zh) * | 2021-05-13 | 2021-07-16 | 西安微电子技术研究所 | 一种多设备兼容的dma数据传输引擎设计方法 |
CN115658351A (zh) * | 2022-12-27 | 2023-01-31 | 北京象帝先计算技术有限公司 | 2d拷贝方法、装置、电子设备和计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1797378A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 采用直接存储器访问方式进行数据交换的方法 |
CN101334761A (zh) * | 2008-06-11 | 2008-12-31 | 南京磐能电力科技股份有限公司 | 一种点到多点数据分配dma控制器实现方法 |
US20140181249A1 (en) * | 2012-12-20 | 2014-06-26 | Fujitsu Limited | Storage medium, information processing apparatus, and object transmission method |
US9952979B1 (en) * | 2015-01-14 | 2018-04-24 | Cavium, Inc. | Methods and systems for direct memory access operations |
CN109189702A (zh) * | 2018-08-22 | 2019-01-11 | 山东超越数控电子股份有限公司 | 一种Scatter-Gather DMA的数据传输缓冲区设计方法 |
-
2018
- 2018-10-24 CN CN201811244093.7A patent/CN109491937A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1797378A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 采用直接存储器访问方式进行数据交换的方法 |
CN101334761A (zh) * | 2008-06-11 | 2008-12-31 | 南京磐能电力科技股份有限公司 | 一种点到多点数据分配dma控制器实现方法 |
US20140181249A1 (en) * | 2012-12-20 | 2014-06-26 | Fujitsu Limited | Storage medium, information processing apparatus, and object transmission method |
US9952979B1 (en) * | 2015-01-14 | 2018-04-24 | Cavium, Inc. | Methods and systems for direct memory access operations |
CN109189702A (zh) * | 2018-08-22 | 2019-01-11 | 山东超越数控电子股份有限公司 | 一种Scatter-Gather DMA的数据传输缓冲区设计方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857686A (zh) * | 2019-03-26 | 2019-06-07 | 北京简约纳电子有限公司 | 一种dma数据同步传输变异步传输的方法 |
CN109857686B (zh) * | 2019-03-26 | 2020-12-29 | 北京简约纳电子有限公司 | 一种dma数据同步传输变异步传输的方法 |
CN109992543A (zh) * | 2019-04-02 | 2019-07-09 | 山东超越数控电子股份有限公司 | 一种基于zyzq-7000的pci-e数据高效传输方法 |
CN112492014A (zh) * | 2020-11-19 | 2021-03-12 | 广州橙行智动汽车科技有限公司 | 一种车载数据传输方法和装置 |
CN112492014B (zh) * | 2020-11-19 | 2024-01-09 | 广州橙行智动汽车科技有限公司 | 一种车载数据传输方法和装置 |
CN113127391A (zh) * | 2021-05-13 | 2021-07-16 | 西安微电子技术研究所 | 一种多设备兼容的dma数据传输引擎设计方法 |
CN113127391B (zh) * | 2021-05-13 | 2023-03-14 | 西安微电子技术研究所 | 一种多设备兼容的dma数据传输引擎设计方法 |
CN115658351A (zh) * | 2022-12-27 | 2023-01-31 | 北京象帝先计算技术有限公司 | 2d拷贝方法、装置、电子设备和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491937A (zh) | 一种Scatter-Gather DMA的数据传输方法及装置 | |
US6078970A (en) | System for determining adapter interrupt status where interrupt is sent to host after operating status stored in register is shadowed to host memory | |
KR101817932B1 (ko) | 임베디드 메모리들에서의 커맨드 큐잉의 제공 방법 및 그의 장치 | |
JP5948628B2 (ja) | 記憶システム及び方法 | |
US11481352B2 (en) | Method for interface initialization using bus turn-around | |
US6941391B2 (en) | Fencepost descriptor caching mechanism and method therefor | |
JP2004348246A (ja) | データ転送制御装置、電子機器及びデータ転送制御方法 | |
CN110462599A (zh) | 用于循环缓冲器的自主硬件管理的设备和方法 | |
US10956347B2 (en) | Data transfer device, arithmetic processing device, and data transfer method | |
TWI387961B (zh) | 用以於串列進階附接技術通訊中之經改良主機/啟動器使用之方法及裝置 | |
CN1331070C (zh) | 数据通信的方法及设备 | |
WO2020177252A1 (zh) | 基于pcie协议的dma控制器及dma数据传输方法 | |
CN109189702A (zh) | 一种Scatter-Gather DMA的数据传输缓冲区设计方法 | |
JP2010198171A (ja) | Usbホストコントローラ、及びusbホストコントローラの制御方法 | |
JP2005182751A (ja) | データ伝達機構 | |
US8151015B2 (en) | Systems and methods for effecting DMA data transfers | |
US10733127B2 (en) | Data transmission apparatus and data transmission method | |
JP6430710B2 (ja) | データ転送制御装置及びデータ転送の制御方法 | |
US9336172B2 (en) | Parallel computer system, data transfer device, and method for controlling parallel computer system for performing arbitration | |
TWI774618B (zh) | 通用序列匯流排指令的傳輸方法及相關的電子裝置 | |
TWI724608B (zh) | 微控制器架構及架構內資料讀取方法 | |
KR20120066999A (ko) | 다이렉트 메모리 액세스 컨트롤러 및 그것의 동작 방법 | |
CN110399322B (zh) | 一种数据传输方法及乒乓dma架构 | |
JP4567373B2 (ja) | データ転送装置及び通信データ処理システム | |
CN115396250A (zh) | 具有一致事务排序的多插槽网络接口控制器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190319 |
|
WD01 | Invention patent application deemed withdrawn after publication |