CN102521179A - 一种dma读操作的实现装置和方法 - Google Patents
一种dma读操作的实现装置和方法 Download PDFInfo
- Publication number
- CN102521179A CN102521179A CN2011103831770A CN201110383177A CN102521179A CN 102521179 A CN102521179 A CN 102521179A CN 2011103831770 A CN2011103831770 A CN 2011103831770A CN 201110383177 A CN201110383177 A CN 201110383177A CN 102521179 A CN102521179 A CN 102521179A
- Authority
- CN
- China
- Prior art keywords
- buffer zone
- ptr
- cpu
- reg
- dma
- 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
- Information Transfer Systems (AREA)
Abstract
本发明提供了一种DMA读操作的实现装置和方法,实现装置包括:主机单元和与所述主机单元连接的网卡单元;所述主机单元包括CPU和内存模块;所述网卡单元包括DMA读写操作模块和DMA读引擎;所述DMA读引擎控制所述DMA读写操作模块的操作。实现方法包括读取缓冲区读指针寄存器的值,并计算出当前缓冲区空闲空间大小;判断当前缓冲区空闲空间大小是否小于当前待传送的数据块大小,如果判断结果为“否”,则CPU将这块数据写到缓冲区的地址为base_addr+wr_ptr处,然后将缓冲区写指针更新到wr_ptr+cur_wr_len处,并写到所述缓冲区写指针寄存器中。本发明提供的DMA读操作的实现装置和方法避免了描述符交换和CPU中断,将大大减少CPU的参与,降低CPU负担,提高IO总线利用率。
Description
技术领域
本发明属于计算机IO通信领域,具体涉及一种DMA读操作的实现装置和方法。
背景技术
DMA(Direct Memory Access,直接内存存取),允许不同速度的硬件装置来沟通,而不需要依于CPU的大量中断负载。否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA传输对于高效能的嵌入式系统算法和网络是很重要的。
现有的外设在进行DMA读操作时,首先需要CPU将当前DMA读操作的描述符信息通过写寄存器的方式告知外设,外设DMA引擎分析DMA读描述符后发起DMA读操作,最后外设通过中断请求告知CPU DMA读操作完成。
专利号为ZL200810004252.6的专利披露了一种高速多协议数据传输系统和方法,该方法数据传输的流程如上所述,存在几个影响性能的问题:1)每次DMA读操作开始之前都需要CPU将描述符写到外设,每次DMA读操作结束之后都需要外设中断CPU,这对CPU是一个不小的负担;2)由于IO总线的特性所致,DMA操作的长度较大时效率较高,如果存在很多小的DMA操作,将严重影响系统性能。
专利号为ZL200910091053.8的专利披露了一种直接存储器访问的实现方法,该方法采用固定连续缓冲区以及查询方式实现DMA,避免了CPU中断以及大量寄存器写操作带来的开销,但是存在以下问题:1)该方法只针对DMA写操作了设计。2)在大量小块数据传输时,同样存在总线利用率利用不高。
发明内容
本发明的目的在于,提供一种DMA读操作的实现装置和方法,解决现有技术中利用DMA方式从主机内存读取数据效率不高的问题。
为实现上述的目的,本发明提供一种DMA读操作的实现装置,所述实现装置包括:主机单元和与所述主机单元连接的网卡单元;其改进之处在于,所述主机单元包括CPU和内存模块;所述CPU控制所述内存模块;所述网卡单元包括DMA读写操作模块和DMA读引擎(DMAReadEngine);所述DMA读引擎(DMAReadEngine)控制所述DMA读操作模块。
本发明提供的优选技术方案中,所述内存模块包括:缓冲区写指针(wr_ptr)、缓冲区读指针(rd_ptr)、缓冲区基地址(base_addr)、缓冲区长度(len);所述网卡单元包括基地址寄存器(base_addr reg)、长度寄存器(len reg)、缓冲区写指针寄存器(wr_ptr reg)和缓冲区读指针寄存器(rd_ptr reg)。
本发明提供的第二优选技术方案中,所述CPU包括缓冲区读指针模块(rd_ptr_cpu)。
本发明提供的第三优选技术方案中,所述DMA读引擎(DMAReadEngine)比较所述缓冲区写指针(wr_ptr)和所述缓冲区读指针(rd_ptr),计算出缓冲区BUF当前待读取数据长度cur_rd_len;
所述DMA读引擎(DMAReadEngine)向主机单元发送DMA读请求,请求地址为base_addr+rd_ptr,长度为cur_rd_len;
所述DMA读引擎(DMAReadEngine)等待DMA读请求返回,然后更新所述缓冲区读指针(rd_ptr)到rd_ptr+cur_rd_len处。
本发明提供的第四优选技术方案中,提供一种DMA读操作的实现方法,其改进之处在于,所述方法包括如下步骤:
1:分别对所述网卡单元中的所述基地址寄存器(base_addr reg)、所述长度寄存器(len reg)、所述缓冲区写指针寄存器(wr_ptr reg)和所述缓冲区读指针寄存器(rd_ptr reg)初始化,所述所有寄存器的初始值设置为0;2:所述CPU将缓冲区的基地址(base_addr)和长度信息(len)分别写到所述基地址寄存器(base_addr reg)和所述长度寄存器(len reg)中;3:所述CPU读取缓冲区读指针寄存器(rd_ptr reg)的值,并计算出当前缓冲区(BUF)空闲空间大小;4:判断当前缓冲区(BUF)空闲空间大小是否小于当前待传送的数据块大小,如果判断结果为“是”,则返回步骤3;如果判断结果为“否”,则所述CPU将这块数据写到缓冲区(BUF)的地址为base_addr+wr_ptr处,然后将所述缓冲区写指针(wr_ptr)更新到wr_ptr+cur_wr_len处,并写到所述缓冲区写指针寄存器(wr_ptr reg)中。
本发明提供的第五优选技术方案中,在所述步骤3中,所述CPU定时读取所述缓冲区读指针寄存器(rd_ptr reg)的值,并将其保存在所述缓冲区读指针模块(rd_ptr_cpu)中,所述CPU比较所述缓冲区读指针模块(rd_ptr_cpu)和所述缓冲区写指针(wr_ptr)计算出当前缓冲区空闲空间大小。
与现有技术比,本发明提供的DMA读操作的实现装置和方法,避免了描述符交换和CPU中断,将大大减少CPU的参与,降低CPU负担,提高IO总线利用率;再者,解决了在现有的DMA读操作中,在出现大量的小数据块的交换时,由于描述符交换和中断所占的开销比例相对很大,总线的利用率将会非常低的问题;而且DMA读操作的实现装置和方法可以将较小的DMA读操作合并成较大的DMA读操作,使DMA读操作对于小数据块交换和大数据块交换没有差别。
附图说明
图1为DMA读操作的实现装置的结构图。
图2为DMA读操作的实现方法的流程图。
具体实施方式
如图1所示,DMA读操作的实现装置,包括:主机单元和网卡单元;所述主机单元和网卡单元相连接;所述主机单元包括CPU和内存模块;所述CPU控制所述内存模块进行操作;所述内存模块包括:缓冲区写指针(wr_ptr)、缓冲区读指针(rd_ptr)、基地址寄存器(base_addr reg)、长度寄存器(len reg)、缓冲区写指针寄存器(wr_ptr reg)和缓冲区读指针寄存器(rd_ptr reg);所述基地址寄存器(base_addrreg)、所述长度寄存器(len reg)、所述缓冲区写指针寄存器(wr_ptr reg)和所述缓冲区读指针寄存器(rd_ptr reg)设置在所述内存模块的一块连续的缓冲区中;所述网卡单元包括DMA读写操作模块和DMA读引擎(DMAReadEngine);所述DMA读引擎控制所述DMA读写操作模块的操作;所述CPU包括缓冲区读指针模块(rd_ptr_cpu)。
如图2所示,DMA读操作的实现方法,该方法将多个DMA操作合并成一个DMA操作,可以带来较大的益处。该方法的具体实施步骤如下:
主机CPU在设备驱动程序中申请一块连续的内存区域BUF,设备上设计四个寄存器:base_addr reg、len reg、wr_ptr reg和rd_ptr reg,分别存储发包缓冲区缓冲区基地址base_addr、缓冲区长度len、缓冲区写指针wr_ptr和缓冲区读指针rd_ptr,所有寄存器初始化为0;主机CPU侧:
步骤1:对所述内存模块中的所述基地址寄存器(base_addr reg)、所述长度寄存器(len reg)、所述缓冲区写指针寄存器(wr_ptr reg)和所述缓冲区读指针寄存器(rd_ptr reg)进行初始化,将所述所有寄存器的初始值设置为0;
步骤2:所述CPU将缓冲区的基地址(base_addr)和长度信息(len)分别写到所述基地址寄存器(base_addr reg)、所述长度寄存器(len reg)中;
步骤3:所述CPU等待到网卡单元的数据传输请求,读取缓冲区读指针寄存器(rd_ptr reg)的值,并计算出当前缓冲区(BUF)空闲空间大小;在所述步骤3中,所述CPU定时读取所述缓冲区读指针寄存器(rd_ptr reg)的值,并保存在所述缓冲区读指针模块(rd_ptr_cpu)中,所述CPU等待到设备的数据传输请求,然后比较所述缓冲区读指针模块(rd_ptr_cpu)和所述缓冲区写指针(wr_ptr)计算出当前缓冲区空闲空间大小;
步骤4:判断当前缓冲区(BUF)空闲空间大小是否小于当前待传送的数据块大小(cur_wr_len),如果判断结果为“是”,则返回步骤3;如果判断结果为“否”,则所述CPU将这块数据写到缓冲区(BUF)的地址为base_addr+wr_ptr处,然后将所述缓冲区写指针(wr_ptr)更新到wr_ptr+cur_wr_len处,并写到所述缓冲区写指针寄存器(wr_ptr reg)中。
由于写外设寄存器的操作开销较大,主机CPU可以不用每个数据块传输都进行,而是采用定时写的方式实现,主机CPU维护一个变量wr_ptr_cpu,并定时的将wr_ptr_cpu资额到外设寄存器wr_ptr_reg中。设备侧:
所述DMA读引擎(DMAReadEngine)比较所述缓冲区写指针(wr_ptr)和所述缓冲区读指针(rd_ptr),计算出缓冲区BUF当前待读取数据长度cur_rd_len;
所述DMA读引擎(DMAReadEngine)向主机单元发送DMA读请求,请求地址为base_addr+rd_ptr,长度为cur_rd_len;
所述DMA读引擎(DMAReadEngine)等待DMA读请求返回,然后更新所述缓冲区读指针(rd_ptr)到rd_ptr+cur_rd_len处。
需要声明的是,本发明内容及具体实施方式意在证明本发明所提供技术方案的实际应用,不应解释为对本发明保护范围的限定。本领域技术人员在阅读本申请说明书后,在其精神和原理启发下,可作各种修改、等同替换、或改进。但这些变更或修改均在申请待批的保护范围内。
Claims (6)
1.一种DMA读操作的实现装置,所述实现装置包括:主机单元和与所述主机单元连接的网卡单元;其特征在于,所述主机单元包括CPU和内存模块;所述CPU控制所述内存模块;所述网卡单元包括DMA读写操作模块和DMA读引擎(DMAReadEngine);所述DMA读引擎(DMAReadEngine)控制所述DMA读操作模块。
2.根据权利要求1所述的实现装置,其特征在于,所述内存模块包括:缓冲区写指针(wr_ptr)、缓冲区读指针(rd_ptr)、缓冲区基地址(base_addr)、缓冲区长度(len);所述网卡单元包括基地址寄存器(base_addr reg)、长度寄存器(len reg)、缓冲区写指针寄存器(wr_ptrreg)和缓冲区读指针寄存器(rd_ptr reg)。
3.根据权利要求1所述的实现装置,其特征在于,所述CPU包括缓冲区读指针模块(rd_ptr_cpu)。
4.根据权利要求1所述的实现装置,其特征在于,所述DMA读引擎(DMAReadEngine)比较所述缓冲区写指针(wr_ptr)和所述缓冲区读指针(rd_ptr),计算出缓冲区BUF当前待读取数据长度cur_rd_len;
所述DMA读引擎(DMAReadEngine)向主机单元发送DMA读请求,请求地址为base_addr+rd_tr,长度为cur_rd_len;
所述DMA读引擎(DMAReadEngine)等待DMA读请求返回,然后更新所述缓冲区读指针(rd_ptr)到rd_ptr+cur_rd_len处。
5.根据1-4项权利要求任一项所述的DMA读操作的实现装置的DMA读操作的实现方法,其特征在于,所述方法包括如下步骤:
1:分别对所述网卡单元中的所述基地址寄存器(base_addr reg)、所述长度寄存器(len reg)、所述缓冲区写指针寄存器(wr_ptr reg)和所述缓冲区读指针寄存器(rd_ptr reg)初始化,所述所有寄存器的初始值设置为0;2:所述CPU将缓冲区的基地址(base_addr)和长度信息(len)分别写到所述基地址寄存器(base_addr reg)和所述长度寄存器(len reg)中;3:所述CPU读取缓冲区读指针寄存器(rd_ptr reg)的值,并计算出当前缓冲区(BUF)空闲空间大小;4:判断当前缓冲区(BUF)空闲空间大小是否小于当前待传送的数据块大小,如果判断结果为“是”,则返回步骤3;如果判断结果为“否”,则所述CPU将这块数据写到缓冲区(BUF)的地址为base_addr+wr_ptr处,然后将所述缓冲区写指针(wr_ptr)更新到wr_ptr+cur_wr_len处,并写到所述缓冲区写指针寄存器(wr_ptr reg)中。
6.根据权利要求5所述的实现方法,其特征在于,在所述步骤3中,所述CPU定时读取所述缓冲区读指针寄存器(rd_ptr reg)的值,并将其保存在所述缓冲区读指针模块(rd_ptr_cpu)中,所述CPU比较所述缓冲区读指针模块(rd_ptr_cpu)和所述缓冲区写指针(wr_ptr)计算出当前缓冲区空闲空间大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103831770A CN102521179A (zh) | 2011-11-28 | 2011-11-28 | 一种dma读操作的实现装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103831770A CN102521179A (zh) | 2011-11-28 | 2011-11-28 | 一种dma读操作的实现装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102521179A true CN102521179A (zh) | 2012-06-27 |
Family
ID=46292108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103831770A Pending CN102521179A (zh) | 2011-11-28 | 2011-11-28 | 一种dma读操作的实现装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521179A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015042884A1 (zh) * | 2013-09-27 | 2015-04-02 | 华为技术有限公司 | 一种存储资源的调度方法及设备 |
CN105335309A (zh) * | 2014-05-30 | 2016-02-17 | 华为技术有限公司 | 一种数据传输方法及计算机 |
CN106708601A (zh) * | 2016-12-12 | 2017-05-24 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向GPU实现的虚拟IOringbuffer的方法 |
CN107329917A (zh) * | 2017-06-26 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种数据传输方法及装置 |
CN109144906A (zh) * | 2017-06-15 | 2019-01-04 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN109814925A (zh) * | 2018-12-24 | 2019-05-28 | 合肥君正科技有限公司 | 一种硬件模块通用自配置的方法及装置 |
CN110010167A (zh) * | 2019-03-26 | 2019-07-12 | 记忆科技(深圳)有限公司 | 一种提高获取描述符状态的方法、装置、计算机设备及存储介质 |
CN110955618A (zh) * | 2019-11-26 | 2020-04-03 | 盛科网络(苏州)有限公司 | 采用dma实现定时发包的方法及装置 |
CN110990309A (zh) * | 2019-10-30 | 2020-04-10 | 西安电子科技大学 | Tte端系统适配卡pcie控制器的高效中断操作方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101673253A (zh) * | 2009-08-21 | 2010-03-17 | 曙光信息产业(北京)有限公司 | 直接存储器访问的实现方法 |
CN102147786A (zh) * | 2010-12-29 | 2011-08-10 | 中国航空工业集团公司第六三一研究所 | 一种双端口虚拟fifo数据交换的方法 |
-
2011
- 2011-11-28 CN CN2011103831770A patent/CN102521179A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101673253A (zh) * | 2009-08-21 | 2010-03-17 | 曙光信息产业(北京)有限公司 | 直接存储器访问的实现方法 |
CN102147786A (zh) * | 2010-12-29 | 2011-08-10 | 中国航空工业集团公司第六三一研究所 | 一种双端口虚拟fifo数据交换的方法 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015042884A1 (zh) * | 2013-09-27 | 2015-04-02 | 华为技术有限公司 | 一种存储资源的调度方法及设备 |
CN105335309A (zh) * | 2014-05-30 | 2016-02-17 | 华为技术有限公司 | 一种数据传输方法及计算机 |
CN105335309B (zh) * | 2014-05-30 | 2018-09-11 | 华为技术有限公司 | 一种数据传输方法及计算机 |
CN106708601A (zh) * | 2016-12-12 | 2017-05-24 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向GPU实现的虚拟IOringbuffer的方法 |
CN109144906B (zh) * | 2017-06-15 | 2019-11-26 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN109144906A (zh) * | 2017-06-15 | 2019-01-04 | 北京忆芯科技有限公司 | 电子设备及其dma命令处理方法 |
CN110737614B (zh) * | 2017-06-15 | 2022-02-11 | 北京忆芯科技有限公司 | 具有dma加速器的电子设备及其dma命令处理方法 |
CN110737614A (zh) * | 2017-06-15 | 2020-01-31 | 北京忆芯科技有限公司 | 具有dma加速器的电子设备及其dma命令处理方法 |
CN107329917A (zh) * | 2017-06-26 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种数据传输方法及装置 |
CN109814925A (zh) * | 2018-12-24 | 2019-05-28 | 合肥君正科技有限公司 | 一种硬件模块通用自配置的方法及装置 |
CN110010167A (zh) * | 2019-03-26 | 2019-07-12 | 记忆科技(深圳)有限公司 | 一种提高获取描述符状态的方法、装置、计算机设备及存储介质 |
CN110990309A (zh) * | 2019-10-30 | 2020-04-10 | 西安电子科技大学 | Tte端系统适配卡pcie控制器的高效中断操作方法 |
CN110990309B (zh) * | 2019-10-30 | 2023-04-28 | 西安电子科技大学 | Tte端系统适配卡pcie控制器的高效中断操作方法 |
CN110955618A (zh) * | 2019-11-26 | 2020-04-03 | 盛科网络(苏州)有限公司 | 采用dma实现定时发包的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521179A (zh) | 一种dma读操作的实现装置和方法 | |
US11036650B2 (en) | System, apparatus and method for processing remote direct memory access operations with a device-attached memory | |
Pandey et al. | DMA-aware memory energy management | |
US7844752B2 (en) | Method, apparatus and program storage device for enabling multiple asynchronous direct memory access task executions | |
US20150143057A1 (en) | Adaptive data prefetching | |
US9098209B2 (en) | Communication via a memory interface | |
CN103207846A (zh) | 内存控制器及控制方法 | |
KR101512743B1 (ko) | 반도체 저장 장치 기반 시스템에서 메인 메모리가 없는 직접 메모리 엑세스 시스템 | |
EP3335124B1 (en) | Register files for i/o packet compression | |
EP2798461B1 (en) | Low latency cluster computing | |
US8954644B2 (en) | Apparatus and method for controlling memory | |
CN101727414A (zh) | 用于在计算机系统中传递中断的技术 | |
CN102968395B (zh) | 用于微处理器的内存拷贝加速方法及装置 | |
US9183150B2 (en) | Memory sharing by processors | |
US9274860B2 (en) | Multi-processor device and inter-process communication method thereof | |
EP2788882A1 (en) | Auto-ordering of strongly ordered, device, and exclusive transactions across multiple memory regions | |
CN102033818A (zh) | 媒体缓冲和流水线式处理组件 | |
US20140129751A1 (en) | Hybrid interface to improve semiconductor memory based ssd performance | |
KR101317760B1 (ko) | 반도체 저장 장치 기반 시스템용 동적 랜덤 액세스 메모리 | |
US20140281107A1 (en) | Efficient input/output (i/o) operations | |
US20120278819A1 (en) | Polling-driven device driver interface | |
CN103559079A (zh) | 一种基于共享内存的数据存取方法及装置 | |
CN102945214B (zh) | 基于io延迟时间分布优化中断处理任务的方法 | |
TWI474254B (zh) | 用於在一記憶體系統中執行命令的方法與裝置及資料儲存系統 | |
CN101720040A (zh) | 融合高速存储器和dma通道的视频解码优化方法 |
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: 20120627 |