直接存储器访问的实现方法技术

技术编号:3854512 阅读:173 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种直接存储器访问的实现方法,该方法包括:DMA引擎将数据写入缓冲区,并在每次写入完成后在预设寄存器中更新下一次在缓冲区中进行写入的起始地址;DMA引擎从缓冲区中读取已写入的数据,并在每次读取完成后在寄存器中更新下一次从缓冲区中进行读取的起始地址。通过使用本发明专利技术,避免了相关技术中由于计算机侧操作系统的介入以及描述符的传输导致占用大量CPU资源和总线带宽的问题,能够有效节省总线带宽资源并降低CPU负荷,还能够有效消除处理产生的中断和延迟,从而有效提高DMA操作的处理效率。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种直接存储器访问(Direct Memory Access,简称为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是根据本专利技术实施例的的流程图。如图l所示,根据本专利技术实施例的包括步骤S102, DMA引擎将数据写入緩冲区,并在每次写入完成后在寄存器中更新下一次在緩冲区中进行写入的起始地址;步骤S104, DMA引擎从缓沖区中读取已写入的数据,并在每次读取完成后在寄存器中更新下一次从緩沖区中进行读取的起始地址。这样,主机就可以对当前读取的DMA凄t据进行处理,以4仑询的方式查询并获取一个或多个緩冲区中DMA操作的完成信息,之后还可以查询DMA引擎中的緩沖区偏移寄存器,获取新的DMA数据(下一次将要处理的DMA数据)的信息。应当注意,图1中以先后顺序示出了步骤S102和步骤S104得逻辑关系,但是这仅仅是一个实例,在实际应用当中,步骤S102的写入处理和步骤S104的读取处理的可以并行执行,或连续执行多次写入后再连续相应次数的读取,并不局限于图1中所示的顺序。可以看出,通过本专利技术的上述处理,可以使DMA操作在网卡上执行,由DMA引擎实现数据的写入和读取,避免了计算机侧才喿作系统的介入以及描述符的传输,能够有效节省总线带宽资源并降低CPU负荷,并且,由于上述方案中的读取和写入操作可以并行进行,并且主机可以轮询查询多个缓冲区的DMA操作完成信息,因此能够有效消除处理产生的中断和延迟,^v而有效^提高DMA操作的处理效率。优选地,在对緩沖区进行写入和读取操作之前,可以预先在寄存器中存储缓冲区的长度和起始地址信息,从而使得驱动程序能够锁定(标识)緩沖区。每次进行写入和/或读取后在寄存器中更新的起始地址可以是一个完整的地址段,优选地,考虑到在存储时节省存储空间,每次更新的起始地址也可以是相对于緩冲区的起始地址的偏移地址,即,可以是相对值。在对缓冲区进行数据写入时,DMA引擎可以以緩冲区中从低位到高位的顺序进行写入,即,从緩冲区的低位开始存储;相应地,DMA引擎可以緩冲区中从低位到高位的顺序进行数据的读取。图2是根据本专利技术的DMA的实现方法的处理过程中在緩沖区进行数据写入和读取的#:作示意图。如图2所示,假设緩冲区的首地址(StartPhyAddress )为addrS,结6束地址(EndPhyAdd ress)为 addrE。 在本专利技术的实现过程中,可以通过指针的指向来确定在緩冲区中进行读取和写入地址,并且寄存器(可以是通常所采用的硬件寄存器)也可以划分为多个存储区域,如图2所示,可以划分为首地址寄存器,用于存储緩冲区的起始地址(起始地址)addrS;读指针寄存器,用于存储读指针当前所指的位置,该位置可以是相对于緩沖区起始地址的偏移值offse本文档来自技高网...

【技术保护点】
一种直接存储器访问的实现方法,其特征在于,包括:  直接存储器访问引擎即DMA引擎将数据写入缓冲区,并在每次写入完成后在预设寄存器中更新下一次在所述缓冲区中进行写入的起始地址;  所述DMA引擎从所述缓冲区中读取已写入的数据,并在每次读取完成后在所述寄存器中更新下一次从所述缓冲区中进行读取的起始地址。

【技术特征摘要】

【专利技术属性】
技术研发人员:聂华邵宗有历军窦晓光刘新春刘朝辉李永成贺志强刘兴奎
申请(专利权)人:曙光信息产业北京有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1