《面向骨干网流量分析的统计计数方法.pdf》由会员分享,可在线阅读,更多相关《面向骨干网流量分析的统计计数方法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102882798 A (43)申请公布日 2013.01.16 C N 1 0 2 8 8 2 7 9 8 A *CN102882798A* (21)申请号 201210323593.6 (22)申请日 2012.09.04 H04L 12/801(2013.01) (71)申请人中国人民解放军理工大学 地址 210007 江苏省南京市南京御道街标营 2号32信箱 (72)发明人张进 黄清杉 赵文栋 吴泽民 彭来献 田畅 (74)专利代理机构南京苏高专利商标事务所 (普通合伙) 32204 代理人柏尚春 (54) 发明名称 面向骨干网流量分析的统计计数方法 (57)。
2、 摘要 本发明公开了一种面向骨干网流量分析的统 计计数方法,其新颖之处在于对计数器向量进行 分层,除第一层外,其他各层子计数器向量采用多 级哈希表的形式进行组织,从而获得了良好的空 间效率和时间效率。与现有的主动式统计计数器 BRICK相比,DALCA的空间效率与其接近,但是时 间效率明显优于BRICK。执行查询操作时,DALCA 的访存带宽需求不到BRICK的1/8;执行更新操作 时,DALCA的访存带宽需求不到BRICK的1/4。此 外,DALCA的实现方式比BRICK更为灵活。 (51)Int.Cl. 权利要求书1页 说明书5页 附图2页 (19)中华人民共和国国家知识产权局 (12)发。
3、明专利申请 权利要求书 1 页 说明书 5 页 附图 2 页 1/1页 2 1.一种面向骨干网流量分析的统计计数方法,其特征在于该方法包括计数器向量的组 织,计数器的更新以及计数器的查询这三个步骤; 计数器向量的组织:计数器向量由多层子计数器向量构成,各层子计数器向量的长度 随着层数的提高而递减,计数值的高位存放在高层的子计数器向量中,计数值的低位存放 在低层的子计数器向量中;除最低层子计数器向量外,其他各层子计数器向量采用多级哈 希表进行组织,除最高层子计数器向量外,其他各层子计数器向量中,每个子计数器均设置 有1比特的溢出标志位; 计数器的更新:对计数器进行更新时,从最低层的子计数器开始;。
4、若某个子计数器在 更新之后发生溢出,则根据其溢出标志位进行判断,若溢出标志位为1,则查找其后继子计 数器,并向其后继子计数器进位,若溢出标志位为0,则为其分配后继子计数器,并向后继子 计数器进位; 计数器的查询:对计数器进行查询时,首先从最低层的子计数器开始,若低层子计数器 的溢出标志为1,则查找其后继子计数器,并且将其后继子计数器的值也累加到查询结果 中,如此循环,直至查询到某个子计数器,发现其溢出标志为0,或者查询到最高层子计数器 为止。 2.按照权利要求1所述的面向骨干网流量分析的统计计数方法,其特征在于为子计 数器分配后继子计数器的方法如下:假设需要为子计数器a分配后继子计数器,首先,。
5、通过 多次哈希运算,在存放高层子计数器向量的多级哈希表中,找到第一个空的子计数器b;然 后,将空的子计数器b在多级哈希表中的块地址存储在子计数器a中,并且将子计数器a的 溢出标志位设置为1;完成上述两个步骤后,该空的子计数器b即为分配给子计数器a的后 继子计数器。 3.按照权利要求1或2所述的面向骨干网流量分析的统计计数方法,其特征在于查找 子计数器的后继子计数器的方法如下:首先,读取存储在子计数器a中的、子计数器a的后 继子计数器在多级哈希表中的块地址;然后,根据块地址,经过一次哈希运算,即可在相应 的块中寻址到子计数器a的后继子计数器。 权 利 要 求 书CN 102882798 A 1/。
6、5页 3 面向骨干网流量分析的统计计数方法 技术领域 0001 本发明是一种面向骨干网流量分析的统计计数方法,属于计算机网络技术领域。 背景技术 0002 网络流量分析和流量管理需要统计计数器的支持。随着链路数据率的飞速提升, 在高速骨干网中,统计计数器的设计面临着极大的挑战:一方面,所需要的计数器的数目巨 大;另一方面,所允许的更新和查询时间极短。以骨干网数据流的流量测量为例,已有的研 究结果表明,在高速骨干网链路中,并发数据流的数目通常达到百万条数量级,为了进行逐 流的流量统计,所需的计数器的数目至少应与数据流的数目一致;如果每条数据流需要多 个统计项,则所需的计数器数目更为庞大。另一方面。
7、,在骨干网链路中,报文的到达时间间 隔极短,例如,在OC-768链路中,假设最短报文长度为64字节,则链路满负载时,报文到达 间隔最小为12.8ns。这就需要统计计数器能够在极短的时间内完成更新和查询。通过上述 分析可见,面向高速骨干网链路的统计计数器必须采用容量大且速度快的存储器来实现。 但是,存储器的容量和速度是一对相互矛盾的性能指标,容量大的存储器,如DRAM,其速度 相对较慢;而速度快的存储器,如SRAM,其容量相对较小。如何实现大容量的高速统计计数 器,这是骨干网流量分析及管理中所面临的一个难点问题。 0003 已有的研究成果主要从两个不同的角度来处理大容量高速统计计数器设计这一 难。
8、题。第一类方法是进行近似计数,而非准确计数。近似计数可以减小计数器的位宽,从而 降低总的空间需求,使得整个统计计数器可以用高速存储器实现。第二类方法假设计数器 仅仅需要支持在线更新,而不需要支持在线查询。这样,通过对计数值进行在线压缩,或者 采用SRAM+DRAM的混和存储结构,以减小对高速存储器空间的需求。不支持在线查询的计 数器也称作被动式计数器(passive counters);与之相对,支持在线查询的计数器称作主 动式计数器(active counters)。显然,理想的统计计数器需要既能够支持准确计数,也能 够支持在线查询。现有的准确计数的主动式统计计数器仅仅只有BRICK1。在典。
9、型的网络 流量参数条件下,与原始的计数器向量相比, BRICK可以将空间效率提升一倍,且几乎不会 产生计数误差。这里“几乎”的含义是产生计数误差的概率足够小,在实际应用中可以忽略 不计。与近似计数的或者被动式的统计计数器相比,准确计数的主动式统计计数器显然更 具价值。但是,BRICK的缺点在于其时间效率较低;此外,BRICK需要基于64位硬件平台进 行实现,且需要特定的处理器指令的支持,实现方式不够灵活。 0004 参考文献 0005 1Nan Hua,Jun(Jim)Xu,Bill Lin,and Haiquan(Chuck)Zhao.BRICK:A Novel Exact Active S。
10、tatistics Counter Architecture.IEEE/ACM TRANSACTIONS ON NETWORKING,VOL.19,NO.3,JUNE 2011. 发明内容 0006 技术问题:本发明提出了一种面向骨干网流量分析的统计计数方法,涉及一种 说 明 书CN 102882798 A 2/5页 4 支持准确计数器的主动式统计计数器DALCA(Direct Addressing Layered Counter Array)。DALCA的空间效率和现有的主动式统计计数器BRICK接近,但时间效率明显优于 BRICK;此外,DALCA的实现方式较BRICK更为灵活。 0007。
11、 技术方案:DALCA对原始的计数器向量进行分层,将之拆分成多层子计数器向量。 计数值的高位存放在高层子计数器向量中,低位存放在低层子计数器向量中。随着层次的 提高,一层中所包含的子计数器的数目也逐步减少。正是基于这一原理,与原始的不分层的 计数器向量相比,DALCA可以有效降低整个计数器向量所需的存储空间。除第一层子计数 器向量外,其他各层子计数器向量采用多级哈希表的形式进行组织。更新过程中,若第i层 中的子计数器溢出,则向第i+1层中的子计数器进位,并将其后继子计数器在多级哈希表 中的块地址存储下来;在需要访问该后继子计数器时,通过读取事先存储的块地址,再经过 一次哈希运算,即可直接寻址到。
12、该子计数器。查询时,将分布在多个层中的子计数器“串联” 起来,以获得完整的计数值。 0008 本发明的面向骨干网流量分析的统计计数方法包括计数器向量的组织,计数器的 更新以及计数器的查询这三个步骤; 0009 计数器向量的组织:计数器向量由多层子计数器向量构成,各层子计数器向量的 长度随着层数的提高而递减,计数值的高位存放在高层的子计数器向量中,计数值的低位 存放在低层的子计数器向量中;除最低层子计数器向量外,其他各层子计数器向量采用多 级哈希表进行组织,除最高层子计数器向量外,其他各层子计数器向量中, 每个子计数器 均设置有1比特的溢出标志位; 0010 计数器的更新:对计数器进行更新时,从。
13、最低层的子计数器开始;若某个子计数 器在更新之后发生溢出,则根据其溢出标志位进行判断,若溢出标志位为1,则查找其后继 子计数器,并向其后继子计数器进位,若溢出标志位为0,则为其分配后继子计数器,并向后 继子计数器进位; 0011 计数器的查询:对计数器进行查询时,首先从最低层的子计数器开始,若低层子计 数器的溢出标志为1,则查找其后继子计数器,并且将其后继子计数器的值也累加到查询结 果中,如此循环,直至查询到某个子计数器,发现其溢出标志为0,或者查询到最高层子计数 器为止。 0012 为子计数器分配后继子计数器的方法如下:假设需要为子计数器a分配后继子计 数器,首先,通过多次哈希运算,在存放高。
14、层子计数器向量的多级哈希表中,找到第一个空 的子计数器b;然后,将空的子计数器b在多级哈希表中的块地址存储在子计数器a中,并 且将子计数器a的溢出标志位设置为1;完成上述两个步骤后,该空的子计数器b即为分配 给子计数器a的后继子计数器。 0013 查找子计数器的后继子计数器的方法如下:首先,读取存储在子计数器a中的、子 计数器a的后继子计数器在多级哈希表中的块地址;然后,根据块地址,经过一次哈希运 算,即可在相应的块中寻址到子计数器a的后继子计数器。 0014 有益效果:与现有的主动式统计计数器BRICK相比,DALCA的空间效率与其接近, 但是时间效率明显优于BRICK。采用真实的骨干网流量。
15、数据的实验结果表明,执行查询操作 时,DALCA的访存带宽需求不到BRICK的1/8,如图1所示;执行更新操作时,DALCA的访存 带宽需求不到BRICK的1/4,如图2所示。此外,DALCA无需基于64位硬件平台实现,实现 说 明 书CN 102882798 A 3/5页 5 方式比BRICK更为灵活。 附图说明 0015 图1、DALCA和BRICK查询操作的时间效率比较, 0016 图2、DALCA和BRICK更新操作的时间效率比较, 0017 图3、DALCA的结构示意图, 0018 图4、DALCA的参数设定结果。 具体实施方式 0019 下面分别从DALCA的结构设计、参数设定、更。
16、新操作过程和查询操作过程这四个 方面,对本发明的具体实施方式进行说明。 0020 1)DALCA的结构设计 0021 假设计数器的总数目为N;计数周期内总的更新次数,或者说,所有计数器的计数 值之和为M。将计数器向量划分为L层,第i层子计数向量记做C i ,C i 中的子计数器个数为 N i (N 1 N)。第1层到第L-1层中的各个子计数器均拥有1比特的溢出标志。第i层子计 数器向量对应的溢出标志向量记做O i 。在计数周期开始时将溢出标志初始化为0;如果某 个子计数器在计数过程中发生了溢出,则将其溢出标志置为1。为简化设计,我们假设各层 子计数器的位宽相等,均为W比特;第L层子计数器向量因。
17、为无需溢出标志,故其位宽设置 为W+1比特。 0022 从第2层开始到第L层,子计数器向量组织成多级哈希表(Multilevel Hash Table)的形式。将子计数器向量C i (2iL)划分为长度相等的d个块(不妨设d 为2的正整数次幂),每块长度为 第i层子计数器的第j个块记作 的块地址为j-1。若C i 中的某个子计数器C i x计数溢出时,需向C i+1 中的子计数器 C i+1 y进位,则称C i+1 y为C i x的后继子计数器。当C i x首次溢出时,依次查询 并将第一个非空的子计数器,假设是 作为C i x的后继子计数器。 是一组哈希函数,用于计算C i 中子计数器的 后继。
18、子计数器在C i+1 中所有可能的地址。 若C i x首次溢出时,发现 均不为空,则在第i层的 溢出列表中为C i x分配后继子计数器,溢出列表的结构下文将详细说明。在确定了后继 子计数器的具体位置后,需要将后继子计数器的块地址(即,p-1)存入C i x的高log 2 (d) 比特中。这样,下次访问C i x的后继子计数器时,根据块地址p-1和相应的哈希函数 就可直接寻址到C i x的后继子计数器 DALCA名字中的“DA”(Direct Addressing)的含义正源于此。通过上文的描述可见,C i x一旦发生溢出,其有效的计数位 宽为W-log 2 (d)比特;此时,C i x的高lo。
19、g 2 (d)比特用于存放其后继子计数器的块地址。 0023 第1层至第L-1层的子计数器向量设置有溢出列表,分别记做T 1 ,T 2 ,.,T L-1 。 溢出列表的查表关键字为发生溢出的子计数器的地址,表项值为发生溢出的子计数器及 其所有后继子计数器的计数值。表项关键字的位宽为 比特,表项值的位宽为 说 明 书CN 102882798 A 4/5页 6 比特。如果需要将某个子计数器放入溢出列表时,发现溢出列表已满,则称此 计数器更新失败。DALCA的设计目标是设置T 1 ,T 2 ,.,T L-1 的长度之和小于门限值T OV 32, 并且在此前提下,保证各级子计数器发生更新失败的概率均小。
20、于门限值P f 10 -10 。在实际 应用中,如此低的更新失败概率基本可以忽略不计。因为溢出列表的总容量很小,因此,在 软件实现时,可以将溢出列表放置在处理器内部的寄存器中,从而实现非常快速的查找。 0024 图3给出了DALCA的结构示意图,为突出主题,图3中略去了溢出列表。图3中,计 数器向量中共有8个计数器,划分为3层,即N8,L=3。第1、2、3层子计数器向量的长度 分别为8、4、2。为方便表述,对第i层中的子计数器,按照图3中自上而下的顺序开始编址, 记作C i 0,C i 1,.。第2层和第3层子计数器向量划分为两个长度相等的块,即d2。 第1层子计数器向量采用哈希函数 和 对后。
21、继子计数器进行进位寻址;第2层 子计数器向量采用哈希函数 和 对后继子计数器进行进位寻址。以图3中子计 数器C 1 0为例,当其首次溢出时,首先访问 发现其不为空;然后,访问 发现其为空。于是,确定C 1 0的后继子计数器为 并且将 的块地址1存入C 1 0的高1比特中。图3中,带箭头的直线表示哈希函数;其中实线表示 某一子计数器和其后继子计数器之间的最终映射关系。 0025 2)DALCA的参数设定 0026 本发明中,设定哈希表级数d8,哈希表负载率r=0.65。在N2 20 ,M2 24 这 一典型流量特性参数下,设定子计数器位宽W7,设定子计数器级数为L=5。在上述d、r、 W和L取值。
22、下,第2层至第5层子计数器的数目分别是2 17 、2 13 、2 9 和2 5 个;第1层至第4层 的溢出列表长度分别为15、6、3和2。此溢出列表长度已经可以保证各层子计数器向量更新 失败的概率均小于P f 10 -10 。参数设定的详细结果见图4。 0027 3)更新操作的详细流程 0028 DALCA的更新算法的描述如下。算法输入为待更新的计数器的地址 i(i0,N-1),输出为空。算法的基本流程是从第1层子计数器C 1 i开始更新,若C 1 i 在更新完之后发生了溢出,则继续更新C 1 i的后继子计数器,如此迭代,直至更新完某个 子计数器之后没有发生溢出为止。假设变量j表示当前所更新到。
23、的子计数器向量的层数, 变量a为当前层中待更新的子计数器的地址。当更新C j a时,首先判断C j a及其后继 子计数器是否在第j层的溢出列表T j 中,若是,则更新T j (a)并退出循环。若C j a不在T j 中,则更新C j a。若更新之后没有发生溢出,则退出循环;否则,进入溢出处理流程。需要 指出的是,判断C j a是否溢出应当结合O j a进行,若O j a0,则C j a的有效计数位 宽为W比特;若O j a1,则C j a的有效计数位宽为W-log 2 d比特。在溢出处理流程中, 首先判断C j a是否是首次溢出。若C j a不是首次溢出,则计算C j a的后继子计数器的 地址。
24、,更新地址指针a,继续迭代过程;若C j a是首次溢出,则进行首次溢出处理流程。当 C j a首次溢出时,首先尝试为C j a在第j+1层中分配后继子计数器。若能够成功的在C j+1 中为C j a分配后继子计数器,则存储后继子计数器的块地址,计算后继子计数器的地址, 并更新后继子计数器;若无法为C j a在第j+1层分配后继子计数器,则将C j a连同其后 继子计数器一起放入第j层的溢出列表中,并更新T j (a)。 0029 4)查询操作的详细流程 说 明 书CN 102882798 A 5/5页 7 0030 DALCA的查询算法描述如下。算法输入为待查询的计数器地址i(i0,N-1),。
25、输 出为计数值Ci。由于计数值Ci可能由位于多个层中的子计数器组合而成,因此,查询 算法的基本流程就是按照从低层到高层的顺序,将这些子计数器依次读取并“串联”起来, 从而获得完整的计数值Ci。假设变量j表示当前查询到第j层,a为该层中待查询的子 计数器的地址,b为前j-1层中Ci的各个子计数器的有效计数位宽之和。在查询到第j 层中的子计数器C j a时,首先判断C j a是否在第j层的溢出列表T j 中,若是,则将T j (a) 的值移位累加到Ci中并退出循环;否则,判断子计数器C j a是否发生了溢出。若C j a 没有发生溢出,则将C j a的值移位累加到Ci中并退出循环;若C j a已经溢出,则取得 C j a的有效计数值,移位累加到Ci中,并更新地址指针a和有效计数位宽之和b,继续 迭代过程。 说 明 书CN 102882798 A 1/2页 8 图1 图2 说 明 书 附 图CN 102882798 A 2/2页 9 图3 图4 说 明 书 附 图CN 102882798 A 。