一种从多缓冲区收取数据的优化轮询系统和方法

文档序号:6439454阅读:213来源:国知局
专利名称:一种从多缓冲区收取数据的优化轮询系统和方法
技术领域
本发明属于网络数据处理领域,具体涉及一种从多缓冲区收取数据的优化轮询系统和方法。
背景技术
网络数据采集系统中,经常需要在一台处理设备上安装多块数据采集卡,每个采集卡有自己的数据缓冲区,或者一个采集卡上有多个数据缓冲区,也就需要软件从多个缓冲区轮询收取数据。现有技术的一般系统的轮询方式有两种第一种方式是贪婪访问;软件从第一个缓冲区开始,依次轮询每个缓冲区,不论缓冲区有多少数据,都读取出来,直到读空一个缓冲区后,再去访问下一个缓冲区。比如假设有三个缓冲区,软件先从第一个缓冲区读取数据,直到第一个缓冲区的所有数据被取空后, 再查看第二个缓冲区,读取数据,读空第二个缓冲区后,再读第三个缓冲区,读空第三个缓冲区后,再从第一个缓冲区读取数据。第二种方式是平均访问;软件从第一个缓冲区开始,依次轮询每个缓冲区,如果缓冲区有数据,不论缓冲区有多少数据,只读取一个数据,就去访问下一个缓冲区。比如假设有三个缓冲区,软件先查看第一个缓冲区,如果有数据,就读取一个数据出来,然后直接查看第二个缓冲区,如果有数据,也是只读一个,然后再读第三个缓冲区,再回到第一个缓冲区。现有技术的轮询方式存在以下问题采用第一种贪婪访问的方式,在一个时间段内处理一个缓冲区的数据,会导致缓冲区对应的处理CPU的负载不平衡,也就是说,假设每个缓冲区内都有较多数据,按照贪婪访问方式,软件会把一个缓冲区的数据全部处理完才去处理下一个缓冲区内的数据,在这个处理过程中,与当前处理缓冲区所对应的CPU负载很大,同时其他缓冲区所对应的CPU是空闲的,CPU负载不均衡会导致整个系统的性能低下。采用第二种平均访问的方式,当多个缓冲区之间的负载不均衡时,会导致软件频繁的查看空缓冲区,也就是说,假设多个缓冲区中只有一个缓冲区中有大量数据,其他都是空缓冲区,按照平均访问方式,软件会轮流查看每个缓冲区,对有数据的缓冲区,每次访问只取一个数据,对没有数据的缓冲区,每次也要去查看,查看缓冲区时需要软件切换缓冲区,其中包括连接缓冲区,取出缓冲区读写指针,进行比较判断等操作,如果多数缓冲区是空的,频繁的缓冲区切换带来的开销会导致不必要的系统性能损失。一般系统实现中,缓冲区轮询采用的贪婪访问和平均访问模式,每次启动缓冲区访问,都是按缓冲区编号依次轮询的,也没有考虑到缓冲区不平衡的情况。假设有η个缓冲区,只有最后一个,即第η个缓冲区有数据,前面η-1个缓冲区都是空的,那么,每次启动轮询都要从第1个缓冲区开始,都要访问η-1个空缓冲区,也会带来不必要的额外开销。

发明内容
为克服上述缺陷,本发明提供了一种从多缓冲区收取数据的优化轮询系统和方法,在轮询多缓冲区时,在尽量保证多缓冲区之间的负载均衡的同时,又尽量减少查看空缓冲区的额外开销。为实现上述目的,本发明提供一种从多缓冲区收取数据的优化轮询系统,所述轮询系统包括缓冲区和访问所述缓冲区的轮询控制模块;其改进之处在于,所述轮询控制模块包括步长数组和静态变量;所述步长数组和所述静态变量分别对所述缓冲区进行轮询访问O本发明提供的优选技术方案中,所述缓冲区数量为η个。本发明提供的第二优选技术方案中,所述步长数组,在每个缓冲区设置一个步长, 所述步长表示每次轮询到该缓冲区时,每次最多从缓冲区内读取的数据长度。本发明提供的第三优选技术方案中,所述静态变量记录每次轮询起始的缓冲区编号,在每次启动轮询时,从所述静态变量记录的上次轮询到的、有数据的缓冲区开始。本发明提供的第四优选技术方案中,所述缓冲区步长最小为1。本发明提供的第五优选技术方案中,提供一种从多缓冲区收取数据的优化轮询方法,其改进之处在于,所述方法包括如下步骤(1).初始化所述轮询控制模块,其中把所述静态变量的起始缓冲区编号初始化为 0,并把所述步长数组的每个缓冲区的步长初始化为1 ;(2).轮询所述静态变量获得当前开始轮询的缓冲区编号,从所述步长数组中获得当前缓冲区的步长;(3).按照步长,从当前缓冲区中读取相应长度的数据;(4).如果当前缓冲区内的数据长度超过了它的步长,则把该缓冲区对应的步长加一,起始缓冲区编号保持不变;否则把该缓冲区的步长减一,且修改起始缓冲区编号。与现有技术比,本发明提供的一种从多缓冲区收取数据的优化轮询系统和方法, 采用轮询控制变量,根据缓冲区负载情况,动态调整每次轮询的起始缓冲区和每个缓冲区的读取步长,避免缓冲区之间的负载不均和频繁访问空缓冲区的额外开销,提高了从多缓冲收取数据的轮询效率。从多缓冲区收取数据的优化轮询系统和方法通过对步长的控制, 避免了贪婪访问时读取出全部数据和平均访问时只读取一个数据的问题,在每次轮询缓冲区后,根据缓冲区空满情况,对每个缓冲区的步长变量动态调整,当缓冲区数据较多时,步长会逐渐增加,使每次轮询到该缓冲区读取的数据会越来越多,当缓冲区数据较少时,步长会逐渐减少,使每次轮询到该缓冲区读取的数据会越来越少;且不采用按照缓冲区号依次轮询的方式,而是从静态变量记录上次轮询到的有数据的缓冲区开始,从而降低了第一个访问的缓冲区是空缓冲区的概率,减少了每次启动轮询对空缓冲区访问的次数。


图1为从多缓冲区收取数据的优化轮询系统的示意图。
具体实施例方式如图1所示,从多缓冲区收取数据的优化轮询系统,所述轮询系统包括轮询控制模块和缓冲区,所述轮询控制模块可访问所述缓冲区;所述轮询控制模块包括步长数组和静态变量;所述步长数组和所述静态变量分别对所述缓冲区进行轮询访问。所述步长数组,通过该数组,本发明结合贪婪轮询和平均轮询两种轮询方式,为每个缓冲区设置一个步长变量,该步长表示每次轮询到该缓冲区时,每次最多从缓冲区内读取的数据长度,通过该步长控制,避免了贪婪访问时读取出全部数据和平均访问时只读取一个数据的问题。软件在每次轮询缓冲区后,根据缓冲区空满情况,对每个缓冲区的步长变量动态调整,当缓冲区数据较多时,步长会逐渐增加,每次轮询到该缓冲区读取的数据会越来越多,当缓冲区数据较少时,步长会逐渐减少,每次轮询到该缓冲区读取的数据会越来越少。所述静态变量,本发明使用该变量记录每次轮询起始的缓冲区编号,每次启动轮询时,不采用按照缓冲区号依次轮询的方式,而是从静态变量记录上次轮询到的有数据的缓冲区开始,从而降低了第一个访问的缓冲区是空缓冲区的概率,减少每次启动轮询对空缓冲区访问的次数。从多缓冲区收取数据的优化轮询方法,其特征在于,具体包括如下步骤(1).初始化所述轮询控制模块,把所述静态变量的起始缓冲区编号初始化为0, 并把所述步长数组的每个缓冲区的步长初始化为1 ;(2).轮询所述静态变量获得当前开始轮询的缓冲区编号,从所述步长数组中获得当前缓冲区的步长;(3).按照步长,从当前缓冲区中读取相应长度的数据;(4).如果当前缓冲区内的数据长度超过了它的步长,则说明该缓冲区当前数据较多,则把该缓冲区对应的步长加一,起始缓冲区编号保持不变;否则把该缓冲区的步长减一,且修改起始缓冲区编号。需要声明的是,本发明内容及具体实施方式
意在证明本发明所提供技术方案的实际应用,不应解释为对本发明保护范围的限定。本领域技术人员在本发明的精神和原理启发下,可作各种修改、等同替换、或改进。但这些变更或修改均在申请待批的保护范围内。
权利要求
1.一种从多缓冲区收取数据的优化轮询系统,所述轮询系统包括缓冲区和访问所述缓冲区的轮询控制模块;其特征在于,所述轮询控制模块包括步长数组和静态变量;所述步长数组和所述静态变量分别对所述缓冲区进行轮询访问。
2.根据权利要求1所述的轮询系统,其特征在于,所述缓冲区数量为η个。
3.根据权利要求1所述的轮询系统,其特征在于,所述步长数组,在每个缓冲区设置一个步长,所述步长表示每次轮询到该缓冲区时,每次最多从缓冲区内读取的数据长度。
4.根据权利要求1所述的轮询系统,其特征在于,所述静态变量记录每次轮询起始的缓冲区编号,在每次启动轮询时,从所述静态变量记录的上次轮询到的、有数据的缓冲区开始。
5.根据权利要求3所述的轮询系统,其特征在于,所述缓冲区步长最小为1。
6.根据1-5项权利要求任一项所述的从多缓冲区收取数据的优化轮询系统的从多缓冲区收取数据的优化轮询方法,其特征在于,所述方法包括如下步骤(1).初始化所述轮询控制模块,其中把所述静态变量的起始缓冲区编号初始化为0, 并把所述步长数组的每个缓冲区的步长初始化为1 ;(2).轮询所述静态变量获得当前开始轮询的缓冲区编号,从所述步长数组中获得当前缓冲区的步长;(3).按照步长,从当前缓冲区中读取相应长度的数据;(4).如果当前缓冲区内的数据长度超过了它的步长,则把该缓冲区对应的步长加一, 起始缓冲区编号保持不变;否则把该缓冲区的步长减一,且修改起始缓冲区编号。
全文摘要
本发明提供了一种从多缓冲区收取数据的优化轮询系统和方法;轮询系统包括轮询控制模块和缓冲区,所述轮询控制模块可访问所述缓冲区;所述轮询控制模块包括步长数组和静态变量;轮询方法采用轮询控制变量,根据缓冲区负载情况,动态调整每次轮询的起始缓冲区和每个缓冲区的读取步长。本发明提供的从多缓冲区收取数据的优化轮询系统和方法,避免了缓冲区之间的负载不均和频繁访问空缓冲区的额外开销,提高了从多缓冲收取数据的轮询效率。
文档编号G06F12/08GK102521149SQ201110384059
公开日2012年6月27日 申请日期2011年11月28日 优先权日2011年11月28日
发明者刘朝辉, 姬乃军, 李锋伟, 窦晓光 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1