面向骨干网流量分析的统计计数方法

文档序号:7859590阅读:169来源:国知局
专利名称:面向骨干网流量分析的统计计数方法
技术领域
本发明是一种面向骨干网流量分析的统计计数方法,属于计算机网络技术领域。
背景技术
网络流量分析和流量管理需要统计计数器的支持。随着链路数据率的飞速提升,在高速骨干网中,统计计数器的设计面临着极大的挑战一方面,所需要的计数器的数目巨大;另一方面,所允许的更新和查询时间极短。以骨干网数据流的流量测量为例,已有的研究结果表明,在高速骨干网链路中,并发数据流的数目通常达到百万条数量级,为了进行逐流的流量统计,所需的计数器的数目至少应与数据流的数目一致;如果每条数据流需要多个统计项,则所需的计数器数目更为庞大。另一方面,在骨干网链路中,报文的到达时间间隔极短,例如,在0C-768链路中,假设最短报文长度为64字节,则链路满负载时,报文到达间隔最小为12. 8ns。这就需要统计计数器能够在极短的时间内完成更新和查询。通过上述分析可见,面向高速骨干网链路的统计计数器必须采用容量大且速度快的存储器来实现。 但是,存储器的容量和速度是一对相互矛盾的性能指标,容量大的存储器,如DRAM,其速度相对较慢;而速度快的存储器,如SRAM,其容量相对较小。如何实现大容量的高速统计计数器,这是骨干网流量分析及管理中所面临的一个难点问题。已有的研究成果主要从两个不同的角度来处理大容量高速统计计数器设计这一难题。第一类方法是进行近似计数,而非准确计数。近似计数可以减小计数器的位宽,从而降低总的空间需求,使得整个统计计数器可以用高速存储器实现。第二类方法假设计数器仅仅需要支持在线更新,而不需要支持在线查询。这样,通过对计数值进行在线压缩,或者采用SRAM+DRAM的混和存储结构,以减小对高速存储器空间的需求。不支持在线查询的计数器也称作被动式计数器(passive counters);与之相对,支持在线查询的计数器称作主动式计数器(active counters)ο显然,理想的统计计数器需要既能够支持准确计数,也能够支持在线查询。现有的准确计数的主动式统计计数器仅仅只有BRICK[1]。在典型的网络流量参数条件下,与原始的计数器向量相比,BRICK可以将空间效率提升一倍,且几乎不会产生计数误差。这里“几乎”的含义是产生计数误差的概率足够小,在实际应用中可以忽略不计。与近似计数的或者被动式的统计计数器相比,准确计数的主动式统计计数器显然更具价值。但是,BRICK的缺点在于其时间效率较低;此外,BRICK需要基于64位硬件平台进行实现,且需要特定的处理器指令的支持,实现方式不够灵活。参考文献[I]Nan Hua, Jun(Jim)Xu, Bill Lin, and Haiquan(Chuck)Zhao. BRICK:A NovelExact Active Statistics Counter Architecture. IEEE/ACM TRANSACTIONS ONNETWORKING, VOL. 19,NO. 3,JUNE 2011.

发明内容
技术问题本发明提出了一种面向骨干网流量分析的统计计数方法,涉及一种支持准确计数器的主动式统计计数器一DALCA (Direct Addressing Layered CounterArray)。DALCA的空间效率和现有的主动式统计计数器BRICK接近,但时间效率明显优于BRICK ;此外,DALCA的实现方式较BRICK更为灵活。技术方案DALCA对原始的计数器向量进行分层,将之拆分成多层子计数器向量。计数值的高位存放在高层子计数器向量中,低位存放在低层子计数器向量中。随着层次的提高,一层中所包含的子计数器的数目也逐步减少。正是基于这一原理,与原始的不分层的计数器向量相比,DALCA可以有效降低整个计数器向量所需的存储空间。除第一层子计数器向量外,其他各层子计数器向量采用多级哈希表的形式进行组织。更新过程中,若第i层中的子计数器溢出,则向第i+Ι层中的子计数器进位,并将其后继子计数器在多级哈希表中的块地址存储下来;在需要访问该后继子计数器时,通过读取事先存储的块地址,再经过一次哈希运算,即可直接寻址到该子计数器。查询时,将分布在 多个层中的子计数器“串联”起来,以获得完整的计数值。本发明的面向骨干网流量分析的统计计数方法包括计数器向量的组织,计数器的更新以及计数器的查询这三个步骤;计数器向量的组织计数器向量由多层子计数器向量构成,各层子计数器向量的长度随着层数的提高而递减,计数值的高位存放在高层的子计数器向量中,计数值的低位存放在低层的子计数器向量中;除最低层子计数器向量外,其他各层子计数器向量采用多级哈希表进行组织,除最高层子计数器向量外,其他各层子计数器向量中,每个子计数器均设置有I比特的溢出标志位;计数器的更新对计数器进行更新时,从最低层的子计数器开始;若某个子计数器在更新之后发生溢出,则根据其溢出标志位进行判断,若溢出标志位为1,则查找其后继子计数器,并向其后继子计数器进位,若溢出标志位为0,则为其分配后继子计数器,并向后继子计数器进位;计数器的查询对计数器进行查询时,首先从最低层的子计数器开始,若低层子计数器的溢出标志为1,则查找其后继子计数器,并且将其后继子计数器的值也累加到查询结果中,如此循环,直至查询到某个子计数器,发现其溢出标志为0,或者查询到最高层子计数器为止。为子计数器分配后继子计数器的方法如下假设需要为子计数器a分配后继子计数器,首先,通过多次哈希运算,在存放高层子计数器向量的多级哈希表中,找到第一个空的子计数器b ;然后,将空的子计数器b在多级哈希表中的块地址存储在子计数器a中,并且将子计数器a的溢出标志位设置为I ;完成上述两个步骤后,该空的子计数器b即为分配给子计数器a的后继子计数器。查找子计数器的后继子计数器的方法如下首先,读取存储在子计数器a中的、子计数器a的后继子计数器在多级哈希表中的块地址;然后,根据块地址,经过一次哈希运算,即可在相应的块中寻址到子计数器a的后继子计数器。有益效果与现有的主动式统计计数器BRICK相比,DALCA的空间效率与其接近,但是时间效率明显优于BRICK。采用真实的骨干网流量数据的实验结果表明,执行查询操作时,DALCA的访存带宽需求不到BRICK的1/8,如图I所示;执行更新操作时,DALCA的访存带宽需求不到BRICK的1/4,如图2所示。此外,DALCA无需基于64位硬件平台实现,实现方式比BRICK更为灵活。


图I、DALCA和BRICK查询操作的时间效率比较,图2、DALCA和BRICK更新操作的时间效率比较,图3、DALCA的结构示意图,
图4、DALCA的参数设定结果。
具体实施例方式下面分别从DALCA的结构设计、参数设定、更新操作过程和查询操作过程这四个方面,对本发明的具体实施方式
进行说明。I) DALCA的结构设计假设计数器的总数目为N;计数周期内总的更新次数,或者说,所有计数器的计数值之和为M。将计数器向量划分为L层,第i层子计数向量记做CpCi中的子计数器个数为N^N1 = N)。第I层到第L-I层中的各个子计数器均拥有I比特的溢出标志。第i层子计数器向量对应的溢出标志向量记做0i。在计数周期开始时将溢出标志初始化为O ;如果某个子计数器在计数过程中发生了溢出,则将其溢出标志置为I。为简化设计,我们假设各层子计数器的位宽相等,均为W比特;第L层子计数器向量因为无需溢出标志,故其位宽设置为W+1比特。从第2层开始到第L层,子计数器向量组织成多级哈希表(Multilevel HashTable)的形式。将子计数器向量Ci (2 ^ i ^ L)划分为长度相等的d个块(不妨设d为2的正整数次幂),每块长度为第i层子计数器的第j个块记作C/,C/的块地址为j_l。若Ci中的某个子计数器Ci [X]计数溢出时,需向Ci+1中的子计数器Ci+1[y]进位,则称Ci+1[y] SciIix]的后继子计数器。当(^[1]首次溢出时,依次查询C^1 [H](X)],Q;,[H^(X)],,并将第一个非空的子计数器,假设是 dFfW],作为CJx]的后继子计数器。H]Ml 是一组哈希函数,用于计算Ci中子计数器的后继子计数器在Ci+1中所有可能的地址。//€[1,内。
若CiW首次溢出时,发现均不为空,则在第i层的溢出列表中为CJx]分配后继子计数器,溢出列表的结构下文将详细说明。在确定了后继子计数器的具体位置后,需要将后继子计数器的块地址(即,P-1)存入CJx]的高Iog2(d)比特中。这样,下次访问CJx]的后继子计数器时,根据块地址p-1和相应的哈希函数#00,就可直接寻址到Ci[X]的后继子计数器CI1JHI1(X)] 4ALCA名字中的“DA”(DirectAddressing)的含义正源于此。通过上文的描述可见,Ci [x] —旦发生溢出,其有效的计数位宽为W-l0g2(d)比特;此时,CiW的高l0g2(d)比特用于存放其后继子计数器的块地址。第I层至第L-I层的子计数器向量设置有溢出列表,分别记做T1, T2, , Th。溢出列表的查表关键字为发生溢出的子计数器的地址,表项值为发生溢出的子计数器及其所有后继子计数器的计数值。表项关键字的位宽为「log2#l比特,表项值的位宽为「log:CV/ -fl)]比特。如果需要将某个子计数器放入溢出列表时,发现溢出列表已满,则称此计数器更新失败。DALCA的设计目标是设置T1, T2,, Th的长度之和小于门限值Tw = 32,并且在此前提下,保证各级子计数器发生更新失败的概率均小于门限值Pf = 10_1(1。在实际应用中,如此低的更新失败概率基本可以忽略不计。因为溢出列表的总容量很小,因此,在软件实现时,可以将溢出列表放置在处理器内部的寄存器中,从而实现非常快速的查找。图3给出了 DALCA的结构示意图,为突出主题,图3中略去了溢出列表。图3中,计数器向量中共有8个计数器,划分为3层,S卩N = 8,L=3。第1、2、3层子计数器向量的长度分别为8、4、2。为方便表述,对第i层中的子计数器,按照图3中自上而下的顺序开始编址,记作CJO],CU1],...。第2层和第3层子计数器向量划分为两个长度相等的块,即d = 2。第I层子计数器向量采用哈希函数# (·)和#f(·)对后继子计数器进行进位寻址;第2层子计数器向量采用哈希函数吨·)和#〗(·)对后继子计数器进行进位寻址。以图3中子计数器C1M为例,当其首次溢出时,首先访问(1[//丨(0)] = Γ)
,发现其不为空;然后,访问(I[斫(0)] = Γ|
,发现其为空。于是,确定CJ0]的后继子计数器为C〗
:并且将C22
的块地址I存入C1 [O]的高I比特中。图3中,带箭头的直线表示哈希函数;其中实线表示 某一子计数器和其后继子计数器之间的最终映射关系。2) DALCA的参数设定本发明中,设定哈希表级数d = 8,哈希表负载率r=0. 65。在N = 22°, M = 224这一典型流量特性参数下,设定子计数器位宽W = 7,设定子计数器级数为L=5。在上述d、r、W和L取值下,第2层至第5层子计数器的数目分别是217、213、29和25个;第I层至第4层的溢出列表长度分别为15、6、3和2。此溢出列表长度已经可以保证各层子计数器向量更新失败的概率均小于Pf = 10,。参数设定的详细结果见图4。3)更新操作的详细流程DALCA的更新算法的描述如下。算法输入为待更新的计数器的地址i(i e
),输出为空。算法的基本流程是从第I层子计数器C1 [i]开始更新,若C1Ei]在更新完之后发生了溢出,则继续更新C1 [i]的后继子计数器,如此迭代,直至更新完某个子计数器之后没有发生溢出为止。假设变量j表示当前所更新到的子计数器向量的层数,变量a为当前层中待更新的子计数器的地址。当更新Cja]时,首先判断Cja]及其后继子计数器是否在第j层的溢出列表1中,若是,则更新1^(幻并退出循环。若(^_[8]不在Tj中,则更新(^_[8]。若更新之后没有发生溢出,则退出循环;否则,进入溢出处理流程。需要指出的是,判断Cj[a]是否溢出应当结合0j[a]进行,若0j[a] = 0,则(办]的有效计数位宽为W比特;若Oj [a] = 1,则Cj [a]的有效计数位宽为W-log2d比特。在溢出处理流程中,首先判断Cja]是否是首次溢出。若Cja]不是首次溢出,则计算Cja]的后继子计数器的地址,更新地址指针a,继续迭代过程;若Cj [a]是首次溢出,则进行首次溢出处理流程。当Cj[a]首次溢出时,首先尝试为Cja]在第j+Ι层中分配后继子计数器。若能够成功的在Cj+1中为Cj [a]分配后继子计数器,则存储后继子计数器的块地址,计算后继子计数器的地址,并更新后继子计数器;若无法为Cja]在第j+Ι层分配后继子计数器,则将Cja]连同其后继子计数器一起放入第j层的溢出列表中,并更新1(a)。4)查询操作的详细流程
DALCA的查询算法描述如下。算法输入为待查询的计数器地址i (i e [O, N_l]),输出为计数值c[i]。由于计数值C[i]可能由位于多个层中的子计数器组合而成,因此,查询算法的基本流程就是按照从低层到高层的顺序,将这些子计数器依次读取并“串联”起来,从而获得完整的计数值c[i]。假设变量j表示当前查询到第j层,a为该层中待查询的子计数器的地址,b为前j-Ι层中C[i]的各个子计数器的有效 计数位宽之和。在查询到第j层中的子计数器C』a]时,首先判断C』a]是否在第j层的溢出列表L中,若是,则将Tj(a)的值移位累加到C[i]中并退出循环;否则,判断子计数器(^[&]是否发生了溢出。gCj[a]没有发生溢出,则将Cj[a]的值移位累加到C[i]中并退出循环;SCj[a]已经溢出,则取得Cj[a]的有效计数值,移位累加到C[i]中,并更新地址指针a和有效计数位宽之和b,继续迭代过程。
权利要求
1.一种面向骨干网流量分析的统计计数方法,其特征在于该方法包括计数器向量的组织,计数器的更新以及计数器的查询这三个步骤; 计数器向量的组织计数器向量由多层子计数器向量构成,各层子计数器向量的长度随着层数的提高而递减,计数值的高位存放在高层的子计数器向量中,计数值的低位存放在低层的子计数器向量中;除最低层子计数器向量外,其他各层子计数器向量采用多级哈希表进行组织,除最高层子计数器向量外,其他各层子计数器向量中,每个子计数器均设置有I比特的溢出标志位; 计数器的更新对计数器进行更新时,从最低层的子计数器开始;若某个子计数器在更新之后发生溢出,则根据其溢出标志位进行判断,若溢出标志位为1,则查找其后继子计数器,并向其后继子计数器进位,若溢出标志位为O,则为其分配后继子计数器,并向后继子计数器进位; 计数器的查询对计数器进行查询时,首先从最低层的子计数器开始,若低层子计数器的溢出标志为1,则查找其后继子计数器,并且将其后继子计数器的值也累加到查询结果中,如此循环,直至查询到某个子计数器,发现其溢出标志为O,或者查询到最高层子计数器为止。
2.按照权利要求I所述的面向骨干网流量分析的统计计数方法,其特征在于为子计数器分配后继子计数器的方法如下假设需要为子计数器a分配后继子计数器,首先,通过多次哈希运算,在存放高层子计数器向量的多级哈希表中,找到第一个空的子计数器b ;然后,将空的子计数器b在多级哈希表中的块地址存储在子计数器a中,并且将子计数器a的溢出标志位设置为I ;完成上述两个步骤后,该空的子计数器b即为分配给子计数器a的后继子计数器。
3.按照权利要求I或2所述的面向骨干网流量分析的统计计数方法,其特征在于查找子计数器的后继子计数器的方法如下首先,读取存储在子计数器a中的、子计数器a的后继子计数器在多级哈希表中的块地址;然后,根据块地址,经过一次哈希运算,即可在相应的块中寻址到子计数器a的后继子计数器。
全文摘要
本发明公开了一种面向骨干网流量分析的统计计数方法,其新颖之处在于对计数器向量进行分层,除第一层外,其他各层子计数器向量采用多级哈希表的形式进行组织,从而获得了良好的空间效率和时间效率。与现有的主动式统计计数器BRICK相比,DALCA的空间效率与其接近,但是时间效率明显优于BRICK。执行查询操作时,DALCA的访存带宽需求不到BRICK的1/8;执行更新操作时,DALCA的访存带宽需求不到BRICK的1/4。此外,DALCA的实现方式比BRICK更为灵活。
文档编号H04L12/801GK102882798SQ20121032359
公开日2013年1月16日 申请日期2012年9月4日 优先权日2012年9月4日
发明者张进, 黄清杉, 赵文栋, 吴泽民, 彭来献, 田畅 申请人:中国人民解放军理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1