CN109189702A - 一种Scatter-Gather DMA的数据传输缓冲区设计方法 - Google Patents
一种Scatter-Gather DMA的数据传输缓冲区设计方法 Download PDFInfo
- 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
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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program 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/126—Program 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
-
- 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
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的数据传输缓冲区设计方法。
背景技术
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传输,直至将用户空间数据完全写入设备。
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)
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)
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 |
-
2018
- 2018-08-22 CN CN201810957576.5A patent/CN109189702A/zh active Pending
Patent Citations (4)
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)
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 |