CN109189702A - 一种Scatter-Gather DMA的数据传输缓冲区设计方法 - Google Patents

一种Scatter-Gather DMA的数据传输缓冲区设计方法 Download PDF

Info

Publication number
CN109189702A
CN109189702A CN201810957576.5A CN201810957576A CN109189702A CN 109189702 A CN109189702 A CN 109189702A CN 201810957576 A CN201810957576 A CN 201810957576A CN 109189702 A CN109189702 A CN 109189702A
Authority
CN
China
Prior art keywords
scatter
dma
kernel spacing
gather
buffer area
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
Application number
CN201810957576.5A
Other languages
English (en)
Inventor
赵瑞东
王朝晖
陈亮甫
吴登勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Chaoyue CNC Electronics Co Ltd
Original Assignee
Shandong Chaoyue CNC Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong Chaoyue CNC Electronics Co Ltd filed Critical Shandong Chaoyue CNC Electronics Co Ltd
Priority to CN201810957576.5A priority Critical patent/CN109189702A/zh
Publication of CN109189702A publication Critical patent/CN109189702A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/126Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer And Data Communications (AREA)
  • Bus Control (AREA)
  • Communication Control (AREA)

Abstract

本发明公开一种Scatter‑Gather DMA的数据传输缓冲区设计方法,涉及数据传输技术领域;使用scatter‑gather DMA进行数据传输时,创建两个scatter‑gather DMA链表,并将两个scatter‑gather DMA链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter‑gather DMA链表节点数,用户空间数据拷贝到一组内核空间缓冲区并进行DMA传输的同时,利用CPU将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次DMA传输完成,利用中断处理程序启动下一次DMA传输,直至将用户空间数据完全写入设备。

Description

一种Scatter-Gather DMA的数据传输缓冲区设计方法
技术领域
本发明公开一种数据传输缓冲区设计方法,涉及数据传输技术领域,具体地说是一种Scatter-Gather DMA的数据传输缓冲区设计方法。
背景技术
DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从IO设备到内存,从内存到IO设备或从一段内存到另一段内存。利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。
Scatter-gather DMA方式是与block DMA方式相对应的一种DMA方式。在DMA传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中连续的存储器地址在物理上不一定是连续的,所以DMA传输要分成多次完成。如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为block DMA方式。Scatter-gather DMA方式则不同,它使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMA master。DMA master在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直到传输完毕后再发起一次中断。scatter-gather DMA方式比block DMA方式效率高。
通常使用scatter-gather DMA数据发送流程,首先创建sgDMA数据传输链表,然后驱动程序在内核空间创建一组物理地址不连续的缓冲区,并将缓冲区的物理地址填入数据传输链表的节点中,CPU需要将用户空间的数据通过memcpy拷贝如内核空间缓冲区,将链表地址写入设备DMA寄存器,启动DMA传输,DMA开始数据传输,并在传输完成后发送中断,中断处理程序进行下一次的数据传输。这种传输方式数据从用户空间到内存空间的数据拷贝同内存空间数据通过DMA到设备是串行传输,CPU同DMA无法同时参与数据传输工作,造成数据无法充分利用DMA的数据传输带宽。基于上述情况,本发明提供一种Scatter-Gather DMA的数据传输缓冲区设计方法,在使用scatter-gather DMA进行计算机主存到IO设备间的数据传输时,实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,提高数据在DMA传输时的效率。
发明内容
本发明针对现有技术存在的不足和问题,提供一种Scatter-Gather DMA的数据传输缓冲区设计方法,
本发明提出的具体方案是:
一种Scatter-Gather DMA的数据传输缓冲区设计方法,使用scatter-gather DMA进行数据传输时,创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,
用户空间数据拷贝到一组内核空间缓冲区并进行DMA传输的同时,利用CPU将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次DMA传输完成,利用中断处理程序启动下一次DMA传输,直至将用户空间数据完全写入设备。
所述的方法中中断处理程序判断当前完成传输的是第几组数据,再将另一组内核空间缓冲区对应的链表地址告知设备,并启动下一次DMA传输。
所述的方法中进行DMA传输的具体过程为:先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gather DMA链表的地址告知设备,开始DMA传输,
在DMA传输的同时,CPU将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当DMA传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherDMA链表地址告知设备,并启动DMA传输,直至将用户空间数据完全写入设备。
所述的方法中具体步骤为:
创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,两组内核空间缓冲区的物理地址不连续,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,并将两组内核空间缓冲区的物理地址分别填入相应的scatter-gather DMA链表节点中,
先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gather DMA链表的地址告知设备,开始DMA传输,
在DMA传输的同时,CPU将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当DMA传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherDMA链表地址告知设备,并启动DMA传输,直至将用户空间数据完全写入设备。
本发明的有益之处是:
本发明提供一种Scatter-Gather DMA的数据传输缓冲区设计方法,创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,
用户空间数据拷贝到一组内核空间缓冲区并进行DMA传输的同时,利用CPU将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次DMA传输完成,利用中断处理程序启动下一次DMA传输,直至将用户空间数据完全写入设备;利用本发明在使用scatter-gather DMA进行计算机主存到IO设备间的数据传输时,CPU与DMA同时参与数据传输工作,数据可以充分利用DMA的数据传输带宽,实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,提高数据在DMA传输时的效率。
附图说明
图1本发明方法流程示意图。
具体实施方式
本发明提供一种Scatter-Gather DMA的数据传输缓冲区设计方法,使用scatter-gather DMA进行数据传输时,创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,
用户空间数据拷贝到一组内核空间缓冲区并进行DMA传输的同时,利用CPU将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次DMA传输完成,利用中断处理程序启动下一次DMA传输,直至将用户空间数据完全写入设备。
利用本发明方法在在使用scatter-gather DMA进行计算机主存到IO设备间的数据传输时,创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,两组内核空间缓冲区的物理地址不连续,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,并将两组内核空间缓冲区的物理地址分别填入相应的scatter-gather DMA链表节点中,
先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gather DMA链表的地址告知设备,开始DMA传输,
在DMA传输的同时,CPU将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当DMA传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherDMA链表地址告知设备,并启动DMA传输,直至将用户空间数据完全写入设备。
利用上述本发明方法,实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,提高数据在DMA传输时的效率。

Claims (4)

1.一种Scatter-Gather DMA的数据传输缓冲区设计方法,其特征是使用scatter-gather DMA进行数据传输时,创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,
用户空间数据拷贝到一组内核空间缓冲区并进行DMA传输的同时,利用CPU将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次DMA传输完成,利用中断处理程序启动下一次DMA传输,直至将用户空间数据完全写入设备。
2.根据权利要求1所述的方法,其特征是所述中断处理程序判断当前完成传输的是第几组数据,再将另一组内核空间缓冲区对应的链表地址告知设备,并启动下一次DMA传输。
3.根据权利要求2所述的方法,其特征是进行DMA传输的具体过程为:先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gather DMA链表的地址告知设备,开始DMA传输,
在DMA传输的同时,CPU将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当DMA传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherDMA链表地址告知设备,并启动DMA传输,直至将用户空间数据完全写入设备。
4.根据权利要求3所述的方法,其特征是具体步骤为:
创建两个scatter-gather DMA链表,并将两个scatter-gather DMA链表分别指向两组内核空间缓冲区,两组内核空间缓冲区的物理地址不连续,每组内核空间缓冲区的数量对应相应的scatter-gather DMA链表节点数,并将两组内核空间缓冲区的物理地址分别填入相应的scatter-gather DMA链表节点中,
先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gather DMA链表的地址告知设备,开始DMA传输,
在DMA传输的同时,CPU将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当DMA传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherDMA链表地址告知设备,并启动DMA传输,直至将用户空间数据完全写入设备。
CN201810957576.5A 2018-08-22 2018-08-22 一种Scatter-Gather DMA的数据传输缓冲区设计方法 Pending CN109189702A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810957576.5A CN109189702A (zh) 2018-08-22 2018-08-22 一种Scatter-Gather DMA的数据传输缓冲区设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810957576.5A CN109189702A (zh) 2018-08-22 2018-08-22 一种Scatter-Gather DMA的数据传输缓冲区设计方法

Publications (1)

Publication Number Publication Date
CN109189702A true CN109189702A (zh) 2019-01-11

Family

ID=64919424

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810957576.5A Pending CN109189702A (zh) 2018-08-22 2018-08-22 一种Scatter-Gather DMA的数据传输缓冲区设计方法

Country Status (1)

Country Link
CN (1) CN109189702A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109491937A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种Scatter-Gather DMA的数据传输方法及装置
CN109800194A (zh) * 2019-01-24 2019-05-24 湖南国科微电子股份有限公司 基于Linux系统的SDIO接口数据传输方法及装置
CN112689223A (zh) * 2021-01-04 2021-04-20 重庆矢崎仪表有限公司 汽车组合仪表语音播放系统和方法

Citations (4)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109491937A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种Scatter-Gather DMA的数据传输方法及装置
CN109800194A (zh) * 2019-01-24 2019-05-24 湖南国科微电子股份有限公司 基于Linux系统的SDIO接口数据传输方法及装置
CN112689223A (zh) * 2021-01-04 2021-04-20 重庆矢崎仪表有限公司 汽车组合仪表语音播放系统和方法

Similar Documents

Publication Publication Date Title
CN109189702A (zh) 一种Scatter-Gather DMA的数据传输缓冲区设计方法
US20160378709A1 (en) Enforcing transaction order in peer-to-peer interactions
US7707346B2 (en) PCI express multi-root IOV endpoint retry buffer controller
US20210117365A1 (en) Method for interface initialization using bus turn-around
CN109491937A (zh) 一种Scatter-Gather DMA的数据传输方法及装置
US9684613B2 (en) Methods and systems for reducing spurious interrupts in a data storage system
KR20180116717A (ko) 직렬 시스템 버스 인터페이스 및 직접메모리액세스 컨트롤러를 갖는 전자 시스템 및 그 동작 방법
US20110238869A1 (en) Autonomous Multi-Packet Transfer for Universal Serial Bus
CN112106032A (zh) I/o主设备和cpu之间优化数据共享的有序写存储的高性能流
CN109983741A (zh) 经由直接存储器访问设备在虚拟机之间传送分组
US20070150683A1 (en) Dynamic memory buffer allocation method and system
US20140149528A1 (en) Mpi communication of gpu buffers
US8074232B2 (en) Method for improving the communication of the human interface device
US8891523B2 (en) Multi-processor apparatus using dedicated buffers for multicast communications
CN105808345A (zh) 数据处理方法、加速引擎、控制板和系统
US7139848B1 (en) DMA protocol extension for packet-based transfer
CN104615558A (zh) 一种数据传送方法及电子装置
TWI494763B (zh) 分時緩衝器存取系統及記憶體控制器
US10733127B2 (en) Data transmission apparatus and data transmission method
JP2008502977A (ja) バス・コントローラのための割り込み方式
TW201701161A (zh) 用於分離突發頻寬裁定之方法及裝置
US9965193B2 (en) Apparatus, system, and method of sequencing, shadowing, and queuing operations in a non-volatile storage memory
JP2008503833A (ja) 並列通信バスに連結された装置内で割込みメッセージを待ち行列に入れるためのコンピュータシステム及び方法
JPH03142650A (ja) 優先使用遅延回路
CN113434441A (zh) 一种dma传输方法、装置、控制器及可读存储介质

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190111