1 / 52

包分类算法

包分类算法. 主要内容. 包分类问题的产生背景 典型的包分类算法 Bitmap-RFC 算法 TIC 算法. 参考文献. D. E. Taylor. Survey & Taxonomy of Packet Classification Techniques . Technical Report, Department of Computer Science & Engineering, Washington University in Saint Louis, May 2004.

shira
Download Presentation

包分类算法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 包分类算法

  2. 主要内容 • 包分类问题的产生背景 • 典型的包分类算法 • Bitmap-RFC算法 • TIC算法

  3. 参考文献 • D. E. Taylor. Survey & Taxonomy of Packet Classification Techniques. Technical Report, Department of Computer Science & Engineering, Washington University in Saint Louis, May 2004. • D.Liu, B.Hua, X.Hu, X.Tang. High-performance Packet Classification Algorithm for Many-core and Multithreaded Network Processor. In Proceedings of CASES 2006. • H.Cheng, Z.Chen, B.Hua, X.Tang. Scalable Packet Classification Using Interpreting: A Cross-platform Multi-core Solution. In Proceedings of PPoPP 2008.

  4. 1. IP分类问题(1) • 术语: • 包头H是有K个域的实体,每个域表示成H[i],每个域为一个比特串。 • 过滤规则F具有K个域,表示为F[i]。 • 与每个F[i]相关联的有一个匹配方式,可以是: • 精确匹配:F[i]用一个值来表示,若H[i]=F[i],称H[i]与F[i]精确匹配。 • 前缀匹配: F[i]通过一个前缀来指定,若H[i]与F[i]表示的前缀匹配,称H[i]与F[i]前缀匹配。 • 范围匹配: F[i]通过一个范围指定,即F[i]=[val1, val2],若满足val1≤ H[i] ≤ val2,称H[i]与F[i]范围匹配。 • 过滤规则F与包头H匹配,当且仅当H的每个域H[i]都与F相应的域F[i]匹配。

  5. IP分类问题(2) • 定义: • 给定一个具有N条过滤规则的规则库Fdat,与每条规则f相联系有一个代价函数,记为cost(f),给定一个包头H,最佳规则匹配问题为在Fdat中查找满足下列条件的过滤规则fbest: • fbest是H的一个匹配过滤规则; • 在Fdat中不存在其它的过滤规则f,f与H匹配且满足cost(f)<cost(fbest)。 • IP分类问题是最佳过滤规则匹配问题的一个实例。 • IP分类问题中与每条规则相联系有一个ACTION,用来表示对满足相应过滤规则的包的处理动作。

  6. IP分类问题(3) • 算法的评价指标: • 速度,这是评价IP分类算法的最重要标准。算法时间复杂度的3种评价标准: • 最坏情况:对一个包进行IP分类查找的最长可能时间。 • 平均情况:在随机情况下,对一个包进行分类查找的平均时间。 • 统计情况:在符合某种预先指定的包或过滤规则匹配率的分布下,对一个包进行分类查找的平均时间。 • 占用内存,包括规则库本身以及为高速查找而建立的各种数据结构占用的内存。 • 更新代价: • 完全更新:重新建立全部的查找数据结构。 • 增量更新:在查找数据结构中增加或删除一条过滤规则。 • 重组或平衡:在适当的时间重组数据结构使其恢复原来的效率。

  7. IP分类问题(4) • 从数学上看,IP分类问题与多维空间中的点定位问题相似,但更加复杂。 • 基本的解决思路: • 根据数据流的分布特点以及规则集中规则的分布特点设计分类算法。 • 将高维问题转化为二维乃至一维的问题,降低问题的复杂度。

  8. 2. 典型的IP分类算法 • 以Grid-of-Tries为代表的基于Trie树的算法 • 以比特矢量为代表的算法 • 以HiCuts为代表的决策树算法 • 以RFC为代表的算法

  9. 2.1 Hierarcical Trie 优点:算法简单、直接、便于硬件实现。 缺点:回溯时间长,对规则维数的扩展性差,不能直接支持范围匹配。

  10. 2.2 Set-Pruning Trie 优点:不需要回溯,查找时间短 缺点:空间复杂度高,不易更新。

  11. 2.3 Grid-of-Trie 优点:内存空间小 缺点:更新困难,在需要更新时最好重建这棵树。

  12. 多维IP分类 • 假定所有过滤规则的协议只取三个值:TCP、UDP和通配符(*),对于取值为通配符的过滤规则,将一条规则重复3次,分别对应TCP、UDP和所有其它情况(OTHER)。 • 根据目的端口和源端口的不同组合建立4个哈希表,分别对应(目的端口,源端口)二元组为(DstPort,*)、(DetPort,SrcPort)、(*,SrcPort)和(*,*)的情况。 • 每个哈希表项为一棵Grid of Tries树,哈希表的索引为相应的端口地址和协议号的某种组合(或函数)。 • 查找时,同时查找4个哈希表,分别用协议号和端口号的某种组合(或函数)作为索引,找到相应的Grid of Tries树;然后再根据Grid of Tries树的查找方法找到最小代价的过滤规则;取所有哈希表中的最好结果即为最佳匹配的规则。

  13. 2.4 比特矢量算法 缺点:算法运行时间随N的增大而线性增长,因而可扩展性差。

  14. 2.5 HiCuts算法 优点:占用内存空间小,规则集更新容易,直接支持范围匹配。 缺点:预处理时间较长,分类速度比一些快速包分类算法低。

  15. 2.6 Recursive Flow Classification(RFC) • S为包头中d个域形成的比特串的长度,若S位比特串的每一种可能取值对应一个等价类(用eqID表示),则分类问题可看成是根据包头中S位比特串确定其对应的eqID的问题。 • 当S很大时,从S位比特串直接映射到eqID需要消耗巨大的内存空间。 • RFC的基本思想是将一次映射转变为多阶段映射,其结果是将一个较大的集合映射成若干个较小的集合,达到减小内存需求的目的。 • 每一阶段映射称为一次缩减(reduction),由多阶段映射构建的数据结构称为缩减树。

  16. 一个三维规则集例子

  17. index eqID eqID CBM 0 0 0 0001 1 1 P 1 1 1101 2 2 2 0011 ... 7 0 index eqID eqID 0 Chunk0 0 0 eqID CBM eqID CBM 0 0 ... 0 0 0001 0 0001 1 0 8 0 1 1001 P 2 1 1001 2 1 9 1 2 0101 2 0111 ... 10 3 0011 0 7 0 11 2 eqID 1 OIndex Chunk1 12 0 eqID CBM 0 0 ... 0 0 0011 1 0 15 0 P 1 1111 3 2 0 16 3 3 17 3 1 eqID 2 cross-producting table ... 7 0 Chunk2 Phase 0 Phase 1 2阶段RFC缩减树 域的可能值 CBM位串标识 比特串:用于指示哪些规则匹配该域 由 eqID0-eqID2指示的CBM位串逐位相与而成 由eqID0-eqID2 的值级联而成

  18. RFC的特点 • RFC是目前除硬件方案之外较快的多维包分类算法。 • 易于并行处理 • 处于同一阶段的预处理表或交叉乘积表可被并行地索引; • 处于不同阶段的表也可被并行地索引。 • 这些表各自独立,可分布于不同的存储单元中。 • RFC构建的交叉乘积表占用内存空间较多,存储空间消耗随规则集规模增大而迅速增大。

  19. 3. Bitmap-RFC

  20. Bitmap RFC的数据结构 One entry

  21. 查找

  22. Compact table的数据结构设计考虑 • Element array的单元宽度:16比特 • Bitmap string长度:32比特的倍数 • Compact table的表项:由bitmap string和element array组成,长度不超过16个长字。

  23. 算法优化实现 • 内存压缩 • 指令选择:POP_COUNT,分支指令 • 数据分配:预处理表及各阶段CCPT表的存放 • 任务划分:multi-processing和context-pipelining • 延迟隐藏

  24. 实验设置 • 对IPv4数据包进行四维分类,应用三阶段的RFC和Bitmap-RFC: • 四个域:源IP地址,目的IP地址,源端口,目的端口,其中IP地址分为低16位和高16位两部分。 • 第一个阶段为6个预处理表,第二阶段为2个交叉乘积表,第三阶段为1个交叉乘积表。

  25. 实验设置(续) • 三组规则集(根据现有规则集的特征随机生成),每条规则定义4个域,IP地址采用CIDR前缀表示,端口采用数据范围表示: • CL#1: 1000条规则 • CL#2: 2000条规则 • CL#3: 3000条规则 • 测试数据包:使用49字节(20字节TCP头 + 20字节IP头 + 9字节PPP头) 的最小长度数据包作为输入,OC-192线速要求25.5Mpps的分类速度。

  26. 内存需求比较 • X, Y, Z: RFC的阶段1 (X, Y)和阶段2 (Z)交叉乘积表 (CPT) • X’,Y’,Z’: Bitmap-RFC的阶段1 (X’,Y’)和阶段2 (Z’)压缩的交叉乘积表 (CCPT)

  27. 不同数据分配下的包分类速率

  28. 相对加速比 • 实验使用最坏情况下的最小数据包作为输入,即每个包都要二次访存。 • 使用32个线程可以达到25.65Mpps,满足线速分类的要求。 • 相对加速比接近线性。

  29. 支持OC-192线速所需的最少线程数 • 这个实验使用随机生成的最小数据包作为输入

  30. 任务划分 • Context-pipelining的两种配置

  31. multi-processing和context-pipelining的分类速度(Mpps)比较multi-processing和context-pipelining的分类速度(Mpps)比较

  32. 延迟隐藏

  33. 4. Two-stage Interpreting based Classification(TIC) • 三个观察事实: • 在定义IP分类规则时,地址用前缀表示,端口用范围表示。大多数分类算法只适用于前缀查找,对于范围查找,必须先进行范围-前缀转换,增加了规则数量。 • 前缀查找是访存密集的操作,范围查找是计算密集的操作,将两者分开处理有助于提高查找的效率。 • 对实际分类规则集统计特性的分析表明,在99.9%的情况下,匹配一对给定的<源IP地址,目的IP地址>的规则数不大于5。即在匹配了一对给定的IP地址后,进一步要匹配的范围个数非常有限。

  34. 两阶段的基于解释的包分类(TIC)算法 • 算法要点: • 降维:将匹配一对<源IP地址,目的IP地址>的过程与匹配其余3个域的过程分开,前者使用适合前缀查找的算法,后者使用适合范围查找的算法。 • 第二阶段用计算代替查找:在预处理阶段先将匹配一对<源IP地址,目的IP地址>的规则编成代码,第二阶段通过解释执行找到匹配的规则。

  35. TIC的设计 • 第一阶段采用RFC算法,找到匹配一对<源IP地址,目的IP地址>的规则集,实际上得到的是指向对应该规则集的代码块的地址。 • 第二阶段查找由端口号和协议组成的范围表达式列表,范围被编码成一系列的ALU指令以进一步减小内存需求。 • 一个解释器从外部存储器装载代码块到内部存储器(如cache),然后解码并顺序执行指令,以找到一个匹配。

  36. RFC与TIC的访存次数 • RFC需要13次访存,TIC至少需要8次访存。 • 94.9%的情况下,匹配一对地址的候选范围可以编码成一个64字节的代码块,在x86多核结构上TIC只需访存8次。 TIC 4阶段RFC

  37. 指令编码 • ClassBench定义了5种端口范围:WC(Wildcard)、HI(高端)、LO(低端)、AR(任意范围)和EM(精确匹配),以及两种协议范围:WC和EM。 • 采用CISC风格的指令,总共需要约5×5×2=50种操作符。 • 三种指令格式,分别带有1个、3个和5个操作数。

  38. 源端口和目的端口的分布 • 12字节的指令非常少见。 • 平均指令长度为1.8个长字。

  39. 范围解释器

  40. 算法实现平台 • 两种多核体系结构: • Intel Core 2 Duo: • 双核,4MB L2 Cache,64B Cache行大小。 • 用Linux的Pthread库实现TIC。 • Intel IXP2800: • 16个微引擎,每个微引擎8个硬件线程,4个SRAM控制器,3个DRAM控制器,640W本地存储器,没有cache,SRAM平均访问延迟150个时钟周期,DRAM平均访问延迟300个时钟周期。 • 用MicroengineC实现TIC。

  41. 基于体系结构的设计 • 空间压缩 • 数据局部性和对齐 • 数据分割 • 延迟隐藏

  42. 空间压缩 • 空间压缩的好处: • 压缩后的数据结构可放到较高等级的存储器中,减小访存延迟。 • 压缩可使cache或片上存储器存放更多的数据,减少访存次数。 • 压缩可提高cache或片上存储器的效率(命中率)。 • 减少访存次数和访存延迟可显著提高CPU的利用率。 • 两种压缩技术: • 两阶段包分类,消除了范围-前缀转换,抑制了规则数的增长。 • 采用CISC风格的指令编码进一步压缩范围列表占用的空间。

  43. RFC和TIC的内存需求 • TIC算法最多可比RFC算法节省97%的存储空间。 • TIC的分类数据结构基本上可以放入4MB的L2 cache中。

  44. TIC每个阶段的内存需求 • 第二阶段的代码块大多只有几百KB,完全可以放入L2 cache中。

  45. 数据局部性和对齐 • Intel Core 2 Duo(具有两级cache ): • 应将数据尽可能放入L2 cache。 • 为利用空间局部性,代码块长度应等于L2 cache行大小。 • 为避免cache行伪共享和代码块占据两个cache行,代码块首地址必须对齐。 • 本文选择代码块大小为64B。 • IXP2800(没有cache): • 可使用本地存储器存放要执行的代码块。 • 32B是合适的代码块长度; • 取64字节的代码块在很多情况下不必要。 • 每次读64字节使得SRAM通道利用率提高,SRAM read FIFO增大,从而导致SRAM访存延迟增大。

  46. 代码块大小对算法速度的影响

  47. 数据分割(IXP2800) • 为避免SRAM控制器成为瓶颈,缩减树和代码块被均匀分布到四个SRAM控制器上。

  48. 延迟隐藏 • IXP2800(多线程结构): • 尽可能一次发射多条访存指令,例如第一阶段的phase 0中四个访存操作可以一次发射。 • 重叠访存操作和ALU计算。 • Intel Core 2 Duo(多核结构): • 一个CPU核可用作助手线程填充L2 cache,其它CPU核就可快速地执行。 • 统一的L2 cache可以被用来减少访存延迟。

  49. 仿真实验设置 • 两个平台: • Intel Xeon 5160,两个酷睿双核核心封装在一个芯片中,2×2MB L2 cache,3.0GHz主频,1333MHZ总线。 • Intel IXP2800,1.2GHz主频,16个微引擎,4个SRAM控制器,每个SRAM通道64MB。 • 规则集: • 使用ClassBench生成10个规则集,规模为2K和4K。 • 输入包流: • 使用最小长度的包(49字节)作为最坏情况下的输入,OC-192线速要求包的处理速度为25.5Mpps。

  50. 加速比实验的结果 • 在Intel Xeon 5160上的实验: • 平均来说,TIC需要3个CPU核达到10Gbps线速及以上。 • TIC和RFC在速度上相当,速度差异在个位数内。 • 如果RFC的内存空间小于L2 cache的大小,则RFC的分类速度高于TIC,否则TIC的分类速度一般高于RFC。 • 在IXP2800上的实验: • 平均来说,TIC需要4个微引擎达到10Gbps线速。 • RFC运行得比TIC快。

More Related