CN101673253A - 直接存储器访问的实现方法 - Google Patents
直接存储器访问的实现方法 Download PDFInfo
- Publication number
- CN101673253A CN101673253A CN200910091053A CN200910091053A CN101673253A CN 101673253 A CN101673253 A CN 101673253A CN 200910091053 A CN200910091053 A CN 200910091053A CN 200910091053 A CN200910091053 A CN 200910091053A CN 101673253 A CN101673253 A CN 101673253A
- Authority
- CN
- China
- Prior art keywords
- buffer zone
- data
- write
- dma
- register
- 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
Images
Landscapes
- Bus Control (AREA)
Abstract
本发明提供了一种直接存储器访问的实现方法,该方法包括:DMA引擎将数据写入缓冲区,并在每次写入完成后在预设寄存器中更新下一次在缓冲区中进行写入的起始地址;DMA引擎从缓冲区中读取已写入的数据,并在每次读取完成后在寄存器中更新下一次从缓冲区中进行读取的起始地址。通过使用本发明,避免了相关技术中由于计算机侧操作***的介入以及描述符的传输导致占用大量CPU资源和总线带宽的问题,能够有效节省总线带宽资源并降低CPU负荷,还能够有效消除处理产生的中断和延迟,从而有效提高DMA操作的处理效率。
Description
技术领域
本发明涉及通信领域,尤其涉及一种直接存储器访问(Direct MemoryAccess,简称为DMA)的实现方法。
背景技术
DMA是一种高速的数据传输操作,其允许在外部设备和存储器之间直接进行数据的读写,CPU需要在数据传输开始和结束时做一点处理,而整个读写的过程既不通过CPU也不需要CPU干预,在传输过程中CPU可以进行其他的工作。也就是说,在DMA操作的大部分时间里,CPU执行的处理和存储器的输入输出操作处于并行执行状态,因此能够大大提高整个计算机***的效率。
但是,传统的DMA模式大多是基于描述符的,需要操作***的参与才能实现DMA操作。为了接收或者发送数据,上层应用程序必须进入操作***的核心,这样才能进行相关的现场保护恢复、***作页面的锁定/解锁、虚拟/物理地址变换、读写DMA控制器的相关寄存器、中断处理等操作。这些操作均需要占用大量CPU资源,导致***性能受到很大影响。
此外,由于传统的DMA操作需要基于描述符进行,因此每次DMA操作都需要进行描述符的传输,占用大量总线带宽。
针对DMA操作占用大量CPU资源和总线带宽的问题,目前的DMA技术主要采用增大每次DMA操作过程的描述符数量、增大中断粒度的方式来减少中断频率,从而解决中断占用大量CPU资源以及描述符占用总线带宽的问题。但是这种减小中断频率的方式会使数据在设备上的延迟增大,并不能够从根本上提高DMA操作的处理效率。
针对相关技术中DMA操作的处理效率低、DMA操作降低***性能并且会占用大量总线带宽的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中直接存储器访问操作的处理效率低、直接存储器访问操作降低***性能并且会占用大量总线带宽的问题,本发明的目的在于提供一种直接存储器访问的实现方案,以解决上述问题中的至少之一。
为实现上述目的,根据本发明,提供了一种直接存储器访问的实现方法。
根据本发明的直接存储器访问的实现方法包括:
直接存储器访问引擎即DMA引擎将数据写入缓冲区,并在每次写入完成后在预设寄存器中更新下一次在缓冲区中进行写入的起始地址;DMA引擎从缓冲区中读取已写入的数据,并在每次读取完成后在寄存器中更新下一次从缓冲区中进行读取的起始地址。
优选地,该方法还可以包括:预先在寄存器中存储缓冲区的长度和起始地址。并且,每次写入和/或读取后在寄存器中更新的起始地址为相对于缓冲区的起始地址的偏移地址。
此外,DMA引擎将数据写入缓冲区的方式可以为:以缓冲区中从低位到高位的顺序进行写入。相应地,DMA引擎从缓冲区读取数据的方式可以为:以缓冲区中从低位到高位的顺序进行读取。
并且,在写入的数据占用了缓冲区的最高位的情况下,DMA引擎可以从缓冲区的最低位继续进行写入,并用写入的数据覆盖已经读取的数据。
此外,该方法还可以进一步包括:主机对每次从缓冲区中读取的数据进行处理,并获取寄存器中每次更新的进行读取和写入的起始地址。
借助本发明上述至少一个技术方案,通过利用DMA引擎来实现数据的写入和读取,可以使DMA操作在网卡上执行,避免了相关技术中由于计算机侧操作***的介入以及描述符的传输导致占用大量CPU资源和总线带宽的问题,能够有效节省总线带宽资源并降低CPU负荷,还能够有效消除处理产生的中断和延迟,从而有效提高DMA操作的处理效率。
附图说明
图1是根据本发明实施例的直接存储器访问的实现方法的流程图;
图2是根据本发明实施例的直接存储器访问的实现方法中在缓冲区进行数据的读取和写入的操作示意图。
具体实施方式
功能概述
针对相关技术中由于DMA操作基于描述符而导致DMA操作处理效率低、影响***性能并且会占用大量总线带宽的问题,本发明提出预先为网卡侧的DMA引擎分配固定的缓冲区,DMA引擎自行计算DMA操作的地址(例如,计算在缓冲区进行写入和读取的地址),并进行DMA操作并实时在缓冲区进行数据的读取和写入,主机(与网卡相连的计算机的CPU)通过查询方式获取DMA操作的完成信息,使DMA操作在网卡上独立完成,避免了描述符的发送以及应用程序的介入,从而有效降低了***的总线带宽开销以及CPU的负担,并且能够提高DMA操作的处理效率。
下面将结合附图详细描述本发明的实施例。
在本发明的实施过程中,首先需要响应于与网卡绑定的驱动序的请求,为计算机的一个或多个CPU分配缓冲区,缓冲区的大小可以是几兆、数十兆、数百兆字节,缓冲区的数量可以是一个或多个,缓冲区与CPU的对应关系可以是一对多或多对一,优选地,为了保证更高的处理效率,可以为每个CPU分别配置一个与之一一对应的缓冲区,该缓冲区可以是连续的缓冲区。并且,在实际操作过程中,需要响应于,
除了分配缓冲区之外,还需要设置一个寄存器,该寄存器可以独立设置,也可以在DMA引擎中设置。
图1是根据本发明实施例的直接存储器访问的实现方法的流程图。如图1所示,根据本发明实施例的直接存储器访问的实现方法包括:
步骤S102,DMA引擎将数据写入缓冲区,并在每次写入完成后在寄存器中更新下一次在缓冲区中进行写入的起始地址;
步骤S104,DMA引擎从缓冲区中读取已写入的数据,并在每次读取完成后在寄存器中更新下一次从缓冲区中进行读取的起始地址。
这样,主机就可以对当前读取的DMA数据进行处理,以轮询的方式查询并获取一个或多个缓冲区中DMA操作的完成信息,之后还可以查询DMA引擎中的缓冲区偏移寄存器,获取新的DMA数据(下一次将要处理的DMA数据)的信息。
应当注意,图1中以先后顺序示出了步骤S102和步骤S104得逻辑关系,但是这仅仅是一个实例,在实际应用当中,步骤S102的写入处理和步骤S104的读取处理的可以并行执行,或连续执行多次写入后再连续相应次数的读取,并不局限于图1中所示的顺序。
可以看出,通过本发明的上述处理,可以使DMA操作在网卡上执行,由DMA引擎实现数据的写入和读取,避免了计算机侧操作***的介入以及描述符的传输,能够有效节省总线带宽资源并降低CPU负荷,并且,由于上述方案中的读取和写入操作可以并行进行,并且主机可以轮询查询多个缓冲区的DMA操作完成信息,因此能够有效消除处理产生的中断和延迟,从而有效提高DMA操作的处理效率。
优选地,在对缓冲区进行写入和读取操作之前,可以预先在寄存器中存储缓冲区的长度和起始地址信息,从而使得驱动程序能够锁定(标识)缓冲区。
每次进行写入和/或读取后在寄存器中更新的起始地址可以是一个完整的地址段,优选地,考虑到在存储时节省存储空间,每次更新的起始地址也可以是相对于缓冲区的起始地址的偏移地址,即,可以是相对值。
在对缓冲区进行数据写入时,DMA引擎可以以缓冲区中从低位到高位的顺序进行写入,即,从缓冲区的低位开始存储;相应地,DMA引擎可以缓冲区中从低位到高位的顺序进行数据的读取。
图2是根据本发明的DMA的实现方法的处理过程中在缓冲区进行数据写入和读取的操作示意图。
如图2所示,假设缓冲区的首地址(StartPhyAddress)为addrS,结束地址(EndPhyAddress)为addrE。在本发明的实现过程中,可以通过指针的指向来确定在缓冲区中进行读取和写入地址,并且寄存器(可以是通常所采用的硬件寄存器)也可以划分为多个存储区域,如图2所示,可以划分为:首地址寄存器,用于存储缓冲区的起始地址(起始地址)addrS;读指针寄存器,用于存储读指针当前所指的位置,该位置可以是相对于缓冲区起始地址的偏移值offsetR,即,下一次在缓冲区中读取数据时的起始位置(也可以理解为本次读取数据结束时的位置);写指针寄存器,用于存储写指针当前所指的位置,该位置可以是相对于缓冲区起始地址的偏移值offsetW,即,下一次在缓冲区中写入数据时的起始位置(也可以理解为本次写入数据结束时的位置);缓冲区大小寄存器,用于存储缓冲区的大小,其大小等于addrE-addrS。
写指针可以首先指向缓冲区的低位,DMA引擎可以根据寄存器中当前进行数据写入的起始位置确定写指针所指的位置,并从写指针指向的位置开始向缓冲区的高位写入数据Packet x,在本次写入完成后,写指针指向本次写入数据结束的位置,同时需要更新写指针寄存器中存储的写指针的位置,以供DMA引擎下一次进行写入时参照;之后,写指针可以根据这种方式继续写入多个数据。
可选地,在每次完成数据写入之后,DMA引擎可以立刻读取这些写入的数据,也可以首先连续写入多个数据,例如,3个,在将要写入第4个数据时读取首先写入的第1个数据,在将要写入第5个数据时读取首先写入的第2个数据,以此类推。
在本发明的实施例中,假设在写指针指向将要写入的数据Packet y的起始位置时,DMA引擎进行数据的读取,此时,读指针可以指向首先写入的数据Packet x的起始位置,在DMA引擎读取完数据Packet x后,读指针指向本次读取数据结束的位置,同时需要更新读指针寄存器中存储的读指针的位置,以供DMA引擎下一次进行读取时参照。
在写入的数据占用了缓冲区的最高位的情况下(例如,写入的数据占用了缓冲区的结束地址EndPhyAddress),DMA引擎可以从缓冲区的最低位继续进行写入,并用写入的数据覆盖已经读取的数据,此时,写指针又回到缓冲区的低位;类似地,当读指针到达缓冲区的结束地址EndPhyAddress)时,读指针也需要回到缓冲区的低位。
其中,在写指针又回到缓冲区的低位后,由于此时写指针所指向的位置处存储的数据已经被DMA引擎读取,因此DMA引擎可以向该位置写入新的数据,覆盖已经读取的旧数据(即,已处理数据,可以将这些数据所占用的存储区域理解为空闲区域)。
应当注意,尽管之前以从低位到高位的顺序为例描述了根据本发明的DMA操作中进行数据写入和读取的一种方式,但是,在缓冲区中进行数据的写入和读取的顺序也可以是从缓冲区的高位开始向低位进行,只是指针的移动方向相反,本文不再详细描述。
综上所述,借助本发明上述至少一个技术方案,通过利用DMA引擎来实现数据的写入和读取,可以使DMA操作在网卡上执行,避免了相关技术中由于计算机侧操作***的介入以及描述符的传输导致占用大量CPU资源和总线带宽的问题,能够有效节省总线带宽资源并降低CPU负荷;此外,由于上述方案中的读取和写入操作可以并行进行,主机可以轮询查询多个缓冲区的DMA操作完成信息,DMA操作旁路操作***,因此能够有效消除处理产生的中断和延迟,从而有效提高DMA操作的处理效率。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种直接存储器访问的实现方法,其特征在于,包括:
直接存储器访问引擎即DMA引擎将数据写入缓冲区,并在每次写入完成后在预设寄存器中更新下一次在所述缓冲区中进行写入的起始地址;
所述DMA引擎从所述缓冲区中读取已写入的数据,并在每次读取完成后在所述寄存器中更新下一次从所述缓冲区中进行读取的起始地址。
2.根据权利要求1所述的方法,其特征在于,还包括:预先在所述寄存器中存储所述缓冲区的长度和起始地址。
3.根据权利要求2所述的方法,其特征在于,每次写入和/或读取后在所述寄存器中更新的起始地址为相对于所述缓冲区的起始地址的偏移地址。
4.根据权利要求1所述的方法,其特征在于,所述DMA引擎将数据写入所述缓冲区的方式为:以所述缓冲区中从低位到高位的顺序进行写入。
5.根据权利要求4所述的方法,其特征在于,所述DMA引擎从所述缓冲区读取数据的方式为:以所述缓冲区中从低位到高位的顺序进行读取。
6.根据权利要求4所述的方法,其特征在于,在写入的数据占用了所述缓冲区的最高位的情况下,所述DMA引擎从所述缓冲区的最低位继续进行写入,并用写入的数据覆盖已经读取的数据。
7.根据权利要求1所述的方法,其特征在于,进一步包括:主机对每次从所述缓冲区中读取的数据进行处理,并获取所述寄存器中每次更新的进行读取和写入的起始地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910091053A CN101673253A (zh) | 2009-08-21 | 2009-08-21 | 直接存储器访问的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910091053A CN101673253A (zh) | 2009-08-21 | 2009-08-21 | 直接存储器访问的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101673253A true CN101673253A (zh) | 2010-03-17 |
Family
ID=42020483
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910091053A Pending CN101673253A (zh) | 2009-08-21 | 2009-08-21 | 直接存储器访问的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101673253A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102420749A (zh) * | 2011-11-28 | 2012-04-18 | 曙光信息产业(北京)有限公司 | 一种网卡发包功能的实现装置和方法 |
CN102521179A (zh) * | 2011-11-28 | 2012-06-27 | 曙光信息产业股份有限公司 | 一种dma读操作的实现装置和方法 |
CN102541779A (zh) * | 2011-11-28 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种提高多数据缓冲区dma效率的***和方法 |
CN104123250A (zh) * | 2013-04-25 | 2014-10-29 | 上海联影医疗科技有限公司 | 基于dma的数据传输方法 |
CN106776393A (zh) * | 2016-12-26 | 2017-05-31 | 北京旋极信息技术股份有限公司 | 一种无中断的串口数据接收方法和装置 |
CN107589821A (zh) * | 2016-07-07 | 2018-01-16 | 上海中兴软件有限责任公司 | 一种时间显示方法和智能手表 |
CN108572798A (zh) * | 2017-03-10 | 2018-09-25 | 三星电子株式会社 | 针对快速数据传输执行监听操作的存储装置及其方法 |
CN108595351A (zh) * | 2018-05-11 | 2018-09-28 | 湖南华芯通网络科技有限公司 | 一种面向网络转发处理的dma发送控制方法 |
CN109144906A (zh) * | 2017-06-15 | 2019-01-04 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN110138553A (zh) * | 2019-05-10 | 2019-08-16 | 郑州信大捷安信息技术股份有限公司 | 一种IPSec VPN网关数据包处理装置及方法 |
CN110825674A (zh) * | 2019-10-30 | 2020-02-21 | 北京计算机技术及应用研究所 | 基于fpga的pcie dma交互***及交互方法 |
CN113360077A (zh) * | 2020-03-04 | 2021-09-07 | 华为技术有限公司 | 数据存储方法及计算节点 |
CN115237353A (zh) * | 2022-08-12 | 2022-10-25 | 青岛汉泰智能科技有限公司 | 一种arm查询fpga长度寄存器的方法 |
-
2009
- 2009-08-21 CN CN200910091053A patent/CN101673253A/zh active Pending
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521179A (zh) * | 2011-11-28 | 2012-06-27 | 曙光信息产业股份有限公司 | 一种dma读操作的实现装置和方法 |
CN102541779A (zh) * | 2011-11-28 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种提高多数据缓冲区dma效率的***和方法 |
CN102541779B (zh) * | 2011-11-28 | 2015-07-08 | 曙光信息产业(北京)有限公司 | 一种提高多数据缓冲区dma效率的***和方法 |
CN102420749A (zh) * | 2011-11-28 | 2012-04-18 | 曙光信息产业(北京)有限公司 | 一种网卡发包功能的实现装置和方法 |
CN104123250B (zh) * | 2013-04-25 | 2019-02-01 | 上海联影医疗科技有限公司 | 基于dma的数据传输方法 |
CN104123250A (zh) * | 2013-04-25 | 2014-10-29 | 上海联影医疗科技有限公司 | 基于dma的数据传输方法 |
CN107589821A (zh) * | 2016-07-07 | 2018-01-16 | 上海中兴软件有限责任公司 | 一种时间显示方法和智能手表 |
CN106776393A (zh) * | 2016-12-26 | 2017-05-31 | 北京旋极信息技术股份有限公司 | 一种无中断的串口数据接收方法和装置 |
CN106776393B (zh) * | 2016-12-26 | 2020-01-31 | 北京旋极信息技术股份有限公司 | 一种无中断的串口数据接收方法和装置 |
CN108572798B (zh) * | 2017-03-10 | 2023-02-21 | 三星电子株式会社 | 针对快速数据传输执行监听操作的存储装置及其方法 |
CN108572798A (zh) * | 2017-03-10 | 2018-09-25 | 三星电子株式会社 | 针对快速数据传输执行监听操作的存储装置及其方法 |
CN109144906A (zh) * | 2017-06-15 | 2019-01-04 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN109144906B (zh) * | 2017-06-15 | 2019-11-26 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN110737614A (zh) * | 2017-06-15 | 2020-01-31 | 北京忆芯科技有限公司 | 具有dma加速器的电子设备及其dma命令处理方法 |
CN108595351A (zh) * | 2018-05-11 | 2018-09-28 | 湖南华芯通网络科技有限公司 | 一种面向网络转发处理的dma发送控制方法 |
CN110138553A (zh) * | 2019-05-10 | 2019-08-16 | 郑州信大捷安信息技术股份有限公司 | 一种IPSec VPN网关数据包处理装置及方法 |
CN110825674A (zh) * | 2019-10-30 | 2020-02-21 | 北京计算机技术及应用研究所 | 基于fpga的pcie dma交互***及交互方法 |
CN113360077A (zh) * | 2020-03-04 | 2021-09-07 | 华为技术有限公司 | 数据存储方法及计算节点 |
CN113360077B (zh) * | 2020-03-04 | 2023-03-03 | 华为技术有限公司 | 数据存储方法、计算节点及存储*** |
CN115237353A (zh) * | 2022-08-12 | 2022-10-25 | 青岛汉泰智能科技有限公司 | 一种arm查询fpga长度寄存器的方法 |
CN115237353B (zh) * | 2022-08-12 | 2023-12-22 | 青岛汉泰智能科技有限公司 | 一种arm查询fpga长度寄存器的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101673253A (zh) | 直接存储器访问的实现方法 | |
CN100590609C (zh) | 一种基于非连续页的动态内存管理方法 | |
CN101650698B (zh) | 直接存储器访问的实现方法 | |
USRE47659E1 (en) | Memory system having high data transfer efficiency and host controller | |
CN104424113A (zh) | 存储设备及数据处理方法 | |
CN100389420C (zh) | 用协处理器加速文件***操作的方法及装置 | |
US9569381B2 (en) | Scheduler for memory | |
CN101504632B (zh) | 一种dma数据传输方法、***及一种dma控制器 | |
CN100565486C (zh) | 数据传送装置及数据传送*** | |
CN107870879A (zh) | 一种数据搬移方法、加速器板卡、主机及数据搬移*** | |
CN103809922A (zh) | 图像形成*** | |
CN111783933A (zh) | 一种对深度卷积神经网络计算加速的、结合主存储器的数据载入装置的硬件电路设计及方法 | |
CN103577119A (zh) | 用于下一代固态硬盘控制器中乱序传输数据的***和方法 | |
CN103559079A (zh) | 一种基于共享内存的数据存取方法及装置 | |
CN101751338A (zh) | 数据存取控制装置及数据存取方法 | |
CN112988621A (zh) | 一种张量数据的数据载入装置及方法 | |
US20100257329A1 (en) | Apparatus and method for loading and storing multi-dimensional arrays of data in a parallel processing unit | |
CN107861887B (zh) | 一种串行易失性存储器的控制方法 | |
CN102420749A (zh) | 一种网卡发包功能的实现装置和方法 | |
CN115586943A (zh) | 一种智能网卡虚拟机脏页的硬件标记实现方法 | |
CN101794276B (zh) | 适用于soc的dct_idct协处理器 | |
CN113094170B (zh) | 一种5g通信虚拟化网元的内存总线分配方法和终端 | |
CN103853675A (zh) | 一种访问内存的方法和设备 | |
CN117991995B (zh) | 一种sd卡文件连续读或写控制方法、***及存储设备 | |
CN114840458B (zh) | 读写模块、片上***和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100317 |