一种缓冲区配置方法及装置制造方法

文档序号:7819070阅读:238来源:国知局
一种缓冲区配置方法及装置制造方法
【专利摘要】本发明涉及数据传输技术。本发明针对现有技术DMA数据传输系统对缓存占用大的问题公开了一种缓冲区配置方法,包括步骤:A、构建一个长度为n的缓冲区描述符BD环,初始化为不可接收状态;n为正整数,由系统参数决定;B、申请m个缓冲区,存放于缓冲区池;m为正整数,m<n;C、申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,启动硬件接收,k为正整数,k≤m;D、BD完成直接存储器访问DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。本发明算法简单,能够保证在性能不受影响的情况下,减少缓存占用。
【专利说明】一种缓冲区配置方法及装置

【技术领域】
[0001]本发明涉及数据传输技术,特别涉及数据传输系统缓冲区配置方法及装置。

【背景技术】
[0002]随着网络的飞速发展,网络设备性能大幅提升。以路由器设备为例,接口速度从以前的百兆口发展到现在的万兆口。在呈现形式上,固化口和可扩展口数目也在不断增加。网络设备性能的提升,必然要求CPU处理速度和内存容量相应增加。对于任何一种设备,内存都是重要资源,在性能一定的情况下,软件对内存的消耗越小越好。
[0003]数据通信设备中,路由器是一种工作于网络边缘的数据选路设备。路由器中的各个通信接口在实现数据传输的方式上可能各有不同。其中非常重要的一种传输方式是DMA (Directory Memory Access,直接存储器访问)传输。DMA传输是相对于中断传输的一种数据传输方式,其基本原理是通过DMA控制器,将数据在内存和外设之间进行独立传输,而不需要CPU中断的干预,从而节约CPU资源。
[0004]一个完整的DMA传输过程必然经过下面4个步骤:
[0005]1、DMA 请求
[0006]CPU对DMA控制器初始化,并向I/O (input/output)接口发出操作命令,I/O接口提出DMA请求。
[0007]2、DMA 响应
[0008]DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期,即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。
[0009]3、DMA 传输
[0010]DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM (Random-Access Memory)与I/O接口进行DMA传输。在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。
[0011]4、DMA 结束
[0012]当完成规定的数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/o接口收到结束信号后,一方面停止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。
[0013]由此可见,DMA传输方式无需CPU直接控制,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为内存与外设开辟一条直接传送数据的通路,使CPU的效率大为提闻。
[0014]在数据通信领域,主流CPU通信处理子模块都大量使用了 DMA传输机制。DMA传输机制的实现,均需要在内存中分配一片环状缓冲区,用于存放DMA操作所需要的状态和数据,行业里面称成这片区域为BD (Buffer Descriptor,缓冲区描述符)。
[0015]DMA数据接收过程中,BD通常配置成环状,称为BD环。BD环结构一般可以分成两部分:状态域和指针域,分别为4字节,合计8个字节长度。状态域一般包含接收使能位、中断使能位和接收状态域;指针域用于存放待操作的缓存地址。实现DMA数据接收处理流程,当前业界通常的作法主要有下面两种方案。
[0016]方案一
[0017]申请包含η个BD的BD环;
[0018]申请η个缓冲区(buffer),挂到BD环上;
[0019]将BD环信息设置到硬件;
[0020]初始化所有BD,并打开中断,设置BD状态为可以接收状态;
[0021]使能硬件接收;
[0022]每个BD完成DMA接收后会产生中断,在中断服务程序中唤醒接收任务;
[0023]接收任务主要是查询状态为“接收完成”的BD,摘除其缓存交给上层模块处理,同时申请新的缓冲区,挂接到该BD上,并将该BD重新置为“可以开始接收”状态。
[0024]BD环结构图1所示。
[0025]接受任务中获取在中断处理函数中释放的信号量,防止接收任务空转以节约CPU资源。接收任务处理流程如图2所示。
[0026]该方案的优点是实现简单,尤其是初始化过程,一开始就挂满BD环,只需要在接收任务中,逐个回收并重新挂接。但是有一个缺点:在任何时候BD环都是满的,占用了 η个缓冲区。如果接口密度大,并且BD环比较长,就会占用大量的缓存。比如一个千兆以太口,BD个数为1024,当存在20个GE (Gigabit Ethernet) 口的时候,任何时间都会至少需要20k个缓冲区。
[0027]方案二
[0028]与方案一基本上相同,主要区别在于不用打开DMA中断。根据系统不同,接收数据的操作可能是单独任务,也可能是专用模块的轮询调用接收处理接口。与方案一存在同样的缺点,这里不再赘述。
[0029]上述两种方案,在低速率低密度接口上缺陷不太明显,但是一旦在高速率和高密度设备上,占用的缓存的数目就会很大,缺陷就会非常明显。


【发明内容】

[0030]本发明的目的就是提供一种缓冲区配置方法,在不影响系统性能的前提下,减少DMA数据传输系统对缓存的占用。
[0031]为达到上述目的,本发明采用的技术方案是,一种缓冲区配置方法,包括步骤:
[0032]A、构建一个长度为η的缓冲区描述符BD环,初始化为不可接收状态;η为正整数,由系统参数决定;
[0033]B、申请m个缓冲区,存放于缓冲区池;m为正整数,m < η ;
[0034]C、申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,启动硬件接收,k为正整数,k^m;
[0035]D、BD完成直接存储器访问DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取Z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。
[0036]优选的,所述方法还包括如下步骤:
[0037]E、接收任务获取接收信号量,从软件记录的当前BD开始轮询,依次处理当前已经接收完成的BD,将其接收状态清零,并释放所述已经接收完成的BD挂接的缓冲区;
[0038]F、在缓冲区池中的m个缓冲区已经取出z个缓冲区后,再申请z个缓冲区补充到缓冲区池中。
[0039]优选的,m<n/2。
[0040]优选的,当η取值为1024时,m取值为128。
[0041]具体的,所述步骤D具体为:BD完成DMA数据接收后,产生中断,在中断服务程序中查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环挂接的第k个缓冲区后面,并置为可接收状态,释放接收信号量,唤醒接收任务。
[0042]本发明的另一个目的是,提供一种缓冲区配置装置,包括BD构造模块、缓存申请模块和中断处理模块,
[0043]所述BD构造模块,用于构建一个长度为η的BD环,初始化为不可接收状态;η为正整数,由系统参数决定;
[0044]所述缓存申请模块,用于申请m个缓冲区,存放于缓冲区池;m为正整数,m<n ;并用于申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,k为正整数,k ^ m ;
[0045]所述中断处理模块,用于BD完成DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。
[0046]优选的,所述装置还包括数据传输模块,所述数据传输模块,用于从记录的当前BD开始轮询,依次处理当前已经接收完成的BD,将其接收状态清零,并释放所述已经接收完成的BD挂接的缓冲区;
[0047]所述缓存申请模块,还用于在缓冲区池中的m个缓冲区已经取出z个缓冲区后,再申请z个缓冲区补充到缓冲区池中。
[0048]优选的,m<n/2。
[0049]优选的,当η取值为1024时,m取值为128。
[0050]具体的,所述中断处理模块具体用于:BD完成DMA数据接收后,在中断服务程序中查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个缓冲区后面,并置为可接收状态,释放接收信号量,唤醒接收任务。
[0051]本发明的有益效果是,本发明算法简单,能够保证在性能不受影响的情况下,减少缓存占用。有利于整个系统的缓存利用率的提升。

【专利附图】

【附图说明】
[0052]图1是BD环结构示意图;
[0053]图2是现有技术DMA数据传输流程示意图;
[0054]图3是本发明流程示意图;
[0055]图4是本发明装置结构示意图。

【具体实施方式】
[0056]下面结合附图及具实施例,详细描述本发明的技术方案。
[0057]本发明的技术方案,通过创建缓冲区池,事先申请一定数量的缓冲区存放于其中,数据传输的时候不需要现场申请。在中断服务程序中直接从缓冲区池中获取已经分配好的缓冲区,节约了中断处理时间,提高了 DMA控制器的工作效率。本发明中BD环分批次挂接缓冲区,可以根据系统参数,如接口速率、CPU时钟频率,数据流量等进行优化配置,以最少的缓冲区占用率完成DMA数据传输。
[0058]实施例
[0059]下面以千兆以太口为例对本发明的技术方案进行详细描述。如图3所示,本例包括步骤:
[0060]1、构建一个长度为η的BD环,先初始化为不可接收状态。
[0061 ] 2、初始化时,先预申请m个缓冲区,存放于缓冲区池,用于批量挂接BD的时候索取缓冲区,以避免向系统申请缓冲区,减少时间开销。再申请m个缓冲区,挂接到BD环的前m个BD,并初始化对应BD为“可接收”状态,启动硬件接收。
[0062]3、当有BD完成DMA数据接收后,产生中断。
[0063]4、在中断服务程序中查询当前完成接收的BD个数,假设为z。从缓冲区池中获取z个缓冲区,从上一次挂接的最后一个BD后面开始挂。并初始化对应BD为可接收状态。释放接收信号量,唤醒接收任务。
[0064]5、接收任务中,拿到接收信号量,从软件记录的当前BD开始轮询,依次处理当前已经接收完成的BD。将其状态清零,并摘除其挂接的缓冲区交给上层模块处理。同时申请z个缓冲区存放于缓冲区池。
[0065]本例中,关于BD环长度η和批次挂接缓冲区数量最大值m的取值,主要依据如下。
[0066]BD环的长度η:影响因素较复杂,没有一个精确的计算方式。其值主要由接口速率和CPU时钟频率决定,要求有相当数量的缓冲能力以提供足够的缓存处理能力,以及避免由于软件调度时延引起的缓冲区挂接不及时对DMA数据传输效率的影响。一般千兆口的BD数量可以设置为1024,百兆口的数量可以设置为512。即当η = 1024,l〈m〈1024/2。
[0067]批次挂接BD数量的最大值m:与接口速率和CPU时钟频率有关。批次挂接是在中断服务程序中挂接的,由于涉及的因素比较多,无法精确计算,只能先估算,然后根据实验结果进行调整。假设 CPU 频率为 600MHz, RISC (Reduced Instruct1n Set Computing)架构,中断响应时间按照10个时钟周期计算,中断处理函数按照200行代码计算,汇编之后大约为600行汇编指令,每个指令都按照单周期指令计算。因此中断响应及中断处理时间为610*(1/600) μ s,即大约是1μ s时间。由于影响中断响应的因素很多,理论值与实际值差异比较大,只能估算到时间为ys级别。我们这里按照100 μ S来计算。按照千兆以太口速率,100 μ S最多产生的64字节的突发数据,报文个数为:1000*100/(64*8) = 195,考虑到线路中的循环冗余校验码字节和填充字节,该值会变更小,故m初值可以暂取为128。
[0068]批次挂接BD数量的最大值k的实验调整:与优化前的方案做接收性能对比实验,实施调整k值,直到接收性能不差于旧的方案即可。本例取k = m可以简化处理流程。
[0069]本发明具备两个可以保证高性能和低缓冲区的必要条件:
[0070]在挂接缓冲区的时候,不需要在一开始的时候就挂满BD和在接收过程中逐个处理BD的时候申请新缓冲区并挂接。而是在中断服务程序中直接从缓冲区池中获取一批(k个)缓冲区直接挂到BD上,保证BD环中始终有k个可用BD供接收DMA使用。
[0071]本发明的缓冲区配置装置结构如图4所示,包括BD构造模块、缓存申请模块、中断处理模块和数据传输模块,
[0072]所述BD构造模块,用于构建一个长度为η的BD环,初始化为不可接收状态;η为正整数,由系统参数决定;
[0073]所述缓存申请模块,用于申请m个缓冲区,存放于缓冲区池;m为正整数,m<n ;并用于申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,k为正整数,k ^ m ;
[0074]所述中断处理模块,用于BD完成DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。
[0075]所述数据传输模块,用于从记录的当前BD开始轮询,依次处理当前已经接收完成的BD,将其接收状态清零,并释放所述已经接收完成的BD挂接的缓冲区;
[0076]所述缓存申请模块,还用于在缓冲区池中的m个缓冲区已经取出z个缓冲区后,再申请z个缓冲区补充到缓冲区池中。
[0077]所述中断处理模块具体用于:BD完成DMA数据接收后,在中断服务程序中查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个缓冲区后面,并置为可接收状态,释放接收信号量,唤醒接收任务。
【权利要求】
1.一种缓冲区配置方法,其特征在于,包括步骤: A、构建一个长度为η的缓冲区描述符BD环,初始化为不可接收状态;η为正整数,由系统参数决定; B、申请m个缓冲区,存放于缓冲区池;m为正整数,m<n; C、申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,启动硬件接收,k为正整数,k彡m; D、BD完成DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。
2.根据权利要求1所述的缓冲区配置方法,其特征在于,所述方法还包括如下步骤: E、接收任务获取接收信号量,从软件记录的当前BD开始轮询,依次处理当前已经接收完成的BD,将其接收状态清零,并释放所述已经接收完成的BD挂接的缓冲区; F、在缓冲区池中的m个缓冲区已经取出z个缓冲区后,再申请z个缓冲区补充到缓冲区池中。
3.根据权利要求1或2所述的缓冲区配置方法,其特征在于,m< n/2。
4.根据权利要求1或2所述的数据传输系统缓存配置方法,其特征在于,当η取值为1024时,m取值为128。
5.根据权利要求1或2所述的缓冲区配置方法,其特征在于,所述步骤D具体为:BD完成DMA数据接收后,产生中断,在中断服务程序中查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环挂接的第k个缓冲区后面,并置为可接收状态,释放接收信号量,唤醒接收任务。
6.一种缓冲区配置装置,其特征在于,所述装置包括BD构造模块、缓存申请模块和中断处理模块, 所述BD构造模块,用于构建一个长度为η的BD环,初始化为不可接收状态;η为正整数,由系统参数决定; 所述缓存申请模块,用于申请m个缓冲区,存放于缓冲区池;m为正整数,m < η ;并用于申请k个缓冲区,挂接到所述BD环的前k个上,对应BD置于可接收状态,k为正整数,k ^ m ; 所述中断处理模块,用于BD完成DMA数据接收后,查询当前完成接收的BD个数z,从缓冲区池中取Z个缓冲区,挂接到所述BD环的第k个BD后面,对应BD置为可接收状态,释放接收信号量,唤醒接收任务。
7.根据权利要求6所述的缓冲区配置装置,其特征在于,所述装置还包括数据传输模块, 所述数据传输模块,用于从记录的当前BD开始轮询,依次处理当前已经接收完成的BD,将其接收状态清零,并释放所述已经接收完成的BD挂接的缓冲区; 所述缓存申请模块,还用于在缓冲区池中的m个缓冲区已经取出z个缓冲区后,再申请z个缓冲区补充到缓冲区池中。
8.根据权利要求6或7所述的缓冲区配置装置,其特征在于,m< n/2。
9.根据权利要求6或7所述的缓冲区配置装置,其特征在于,当η取值为1024时,m取值为128。
10.根据权利要求6或7所述的缓冲区配置装置,其特征在于,所述中断处理模块具体用于:BD完成DMA数据接收后,在中断服务程序中查询当前完成接收的BD个数z,从缓冲区池中取z个缓冲区,挂接到所述BD环的第k个缓冲区后面,并置为可接收状态,释放接收信号量,唤醒接收任务。
【文档编号】H04L12/883GK104468404SQ201410628304
【公开日】2015年3月25日 申请日期:2014年11月7日 优先权日:2014年11月7日
【发明者】王刚, 杨大川 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1