基于TCAM 的高速路由查找

来源:互联网 发布:vs编写windows程序 编辑:程序博客网 时间:2024/06/06 01:46
摘要
  随着路由器接口速率的提高,传统的软件路由查找机制已经不能满足要求。目前常见的硬件解决方案是采用TCAM实现高速路由查找。由于路由查找具有最长前缀匹配的特点,因此采用TCAM 需要解决路由表如何存储和管理等问题。本文设计和实现了基于TCAM 的高速路由查找机制,重点解决了路由表的存储和管理机制。该方案已经用于国家“863”重大项目“核心路由器”中,取得了良好的效果。
关键词
  TCAM,路由查找,最长前缀匹配。
1、引言
  路由器转发IP 分组时,转发引擎需要在路由表中查找该IP 报文中目的地址所对应的路由信息,从而决定IP 报文的转发方式。在报文转发的这一系列工作过程中,以路由查找过程最为关键,因此设计快速的路由查找算法已经成为提高路由器整体性能的关键之一。随着路由器接口速率的提高,传统的基于软件的路由查找机制已经不能满足要求。本文设计和实现了一种基于TCAM 的硬件路由查找机制,重点解决了路由表的存储和管理
2、CAM 与TCAM
  目前研究人员已经提出了基于RAM 的路由查找算法。但是工业界中使用最多的硬件实现路由查找的方法仍然是使用内容寻址存储器(CAM,Content Addressable Memory)来进行快速的路由查找,CAM 或者全相联存储器能够在一个硬件时钟周期内完成关键字的精确匹配查找。我们常用的随机存储器通过输入地址来返回该地址处所对应的数据信息,但是CAM 的访问方式不同,它只需要输入关键字的内容,CAM 就会将此关键字与CAM 中所有的表项同时进行匹配比较,最后返回匹配表项在CAM 中所对应的地址
  路由查找具有最长前缀匹配的特点,为了能够使用CAM 来进行最长前缀路由的查找,我们可以为每一类可能的地址前缀长度使用一个CAM,每个CAM 保存对应长度的所有前缀集合。对于IPv4 来说,一共需要使用32 个CAM。这种方法有一个明显的缺点,在对地址前缀长度具体分布没有准确的了解之前,为了能够保证能够存储N 个前缀表项,每个CAM都需要有N 个表项的空间,因此CAM 存储空间的利用率大大降低了。
  为了能够克服上述方法的缺点,又提出了一种CAM 实现机制TCAM (ternary CAM) ,TCAM 的优点是它所保存的表项在长度要求上非常灵活,可以在同一个TCAM 芯片中保存任意长度的关键字表项
  TCAM 中每一个表项都是以<地址、掩码>序偶的形式保存,假设地址关键字的长度范围从1 到W,那么地址和掩码分别占用W 比特对于关键字长度为Y(1≤Y≤W)的表项来说,它的掩码前Y 个比特为1,而剩下的W-Y 比特为0,它的地址后W-Y 个比特可以是0 或者1
  例如,假设W 为5,那么地址前缀10*就可以用序偶<10000,11000>表示。在表项的匹配查找中,TCAM 判断(查找关键字Bitwise And掩码)是否与(目的地址Bitwise And 掩码)相等,如果相等表示关键字与该表项匹配;否则不匹配。
  TCAM 的查找结构如图1 所示。
     基于TCAM 的高速路由查找 - loving you - 天道酬勤
   TCAM 通过保存关键字掩码的方式使得它可以保存任意长度的关键字表项,因此使用TCAM 非常适合进行最长前缀路由的查找,目前不少工业界的厂商都在进行对TCAM 的设计研究。 由于可能存在多个表项匹配的情况,因此TCAM 需要在这些匹配的表项中选取一个表项作为最后的查找结果,TCAM 规定在所有匹配的表项中选取地址最低的表项作为最后的结果
   为了能够进行最长前缀路由的查找,我们就需要保证在TCAM 的低地址存储前缀较长的关键字表项,而在地址高的区域存储前缀较短的关键字表项
  TCAM 具有速度快、实现简单的优点,但是它也具有三个不足之处:
  第一、与一般的随机存储器RAM 相比, 单位比特的TCAM 更为昂贵,而且存储芯片的容量相对要小一些;
  第二、由于TCAM 使用的是 并行匹配比较方式,所以TCAM 芯片的 功耗较大。 查找过程所有关键字表项都进行了比较,但是实际能够匹配上的关键字只是几项,因此 大部分的比较操作都被浪费了
  第三、 TCAM 需要保证前缀较长的关键字保存在前缀较短的关键字之前,这种关键字之间的顺序关系使得TCAM
的关键字更新工作变得相对复杂了
  例如,当加入一条新的表项时,为了能够仍然保持关键字间的顺序关系,就需要移动一些前缀长度比新表项要长的一些表项,因此TCAM 的更新操作较为复杂。
  由于TCAM 具有非常高的查找速度,目前TCAM 厂商提供的芯片每秒钟可以完成50M 次的最长地址前缀查找,因此TCAM 可以满足骨干路由器的高速查找要求。
3、基于TCAM 的路由查找
  图2 是使用Ternary CAM 进行路由查找的示意图。
 
     基于TCAM 的高速路由查找 - loving you - 天道酬勤
  图中的所有表项按照路由前缀的长度降序排列,假设为目的地址103.23.3.7 的IP 报文查找转发路径,CAM 同时将它保存的所有表项与关键字103.23.3.7 进行匹配查找,发现表项P1 以及P2均与关键字相互匹配,但是TCAM 的优先级仲裁器返回地址最小的匹配表项,即表项P1。
  路由表是动态的,也就是说路由表项会随着网络拓扑结构的不断变化而相应的增加或者删除一般来说,在路由更新的同时,路由查找是不能够进行的,在这段时间内报文需要缓存在报文缓冲区内等待路由更新的完成,因此慢的路由更新对系统报文缓冲区的容量增加很大的要求。因此,我们希望能够尽可能的减小路由更新的时间。
  由于TCAM 需要维持所有的路由表项按照前缀长度有序,所以对于路由的动态更新来说,效率就会比较低
  还是以 图2 为例,假设现在需要在转发表中增加新的表项 103.23.128/18,按照表项组织的方式,新的表项应该保存在表项103.23.3/24(P1)和表项103.23/16(P2)之间,但是目前在这两个表项之间没有空闲的表项空间,所以需要通过移动其它表项的方式来为新表项腾出空间
4、TCAM 表项管理算法 
     基于TCAM 的高速路由查找 - loving you - 天道酬勤
  4.1 顺序移动法
  整个TCAM 表按照图3 的方式组织,所有关键字表项按照它们的前缀长度组成一个个表项集合块,并且从TCAM 的低地址开始顺序排列,所有的空闲空间存放在TCAM 的高地址
  图2 采用的就是这种方式。 如果我们需要在TCAM 中加入长度为20 的地址前缀,该地址前缀应该保存在表项P1 和P2 之间。为了能够在P1和P2 之间腾出一个空闲空间,那么最简单的方法就是将P2 到P5 这四个表项依次向下移动一个位置,这种方式的效率很低,最差情况下的算法复杂度为O(N),其中N 为目前TCAM 中保存的表项数目。 
  4.2 预留表项空间的顺序移动法
  为了尽量避免表项插入造成其它表项大规模的移动,可以为每个长度的前缀集合预留一些空闲的表项,如图4 所示。
  当需要加入新的前缀表项时,如果对应前缀长度的前缀集合中包含空闲表项,那么就不需要进行表项移动操作;如果不存在空闲表项,那么需要从相邻的前缀集合块中借用空闲表项,路由更新带来的表项移动次数大大降低了。这种方法能够提高路由更新的平均效率,但是在最差情况下,路由更新的算法复杂度仍然为O(N)。
  4.3 选择移动法
  TCAM 要求所有的路由按照前缀长度降序排列,令Pj 代表的是前缀长度为j 的所有路由集合,如果j>k,那么所有Pj中的路由表项都应该保存在Pk中的路由表项之前。TCAM 只要求前缀长度集合块之间的顺序关系,对于每个前缀长度集合块内部各个路由前缀之间的顺序关系没有严格规定。选择移动法就利用了这一思想,算法实现如图5 所示。
 
     基于TCAM 的高速路由查找 - loving you - 天道酬勤
  当需要在TCAM中加入长度为k(8≤k≤32)的路由前缀时,首先从长度8 的前缀块开始,将前缀块的第一项移动到最后一项(即TCAM 的空闲表项区域),这样在长度为8 的前缀块处就有了一个空闲表项;然后将长度为9 前缀块中的第一项移动到这一个空闲表项处,使得长度为9 前缀块中出现了空闲表项;以此类推,直到新加入表项所在的前缀块为止,那时就只需要将该新表项加入到分配处的空闲表项处就
可以了。显然,这种算法的复杂度为O(W),其中W 是路由前缀的长度。使用选择移动法,在图2 的例子中,只需要移动P5、P4、P2 三个表项就可以在P1 与P2 之间腾出空间并且仍然保持TCAM 前缀长度有序。 
  还可以对选择移动法进行改进来提高算法的效率,如图6 所示,我们将TCAM 的空闲前缀块从TCAM 的底部移动到TCAM 的中间,其它算法的思想维持不变,显然此时算法的复杂度 进一步降低为O(W/2)
  与顺序移动法相比,选择移动法大大减少了更新过程的表项移动次数,因而提高了算法的运行效率。
  4.4  预留表项空间的选择移动法
  可以将预留表项空间的思想运用到选择移动法当中,预留表项空间的选择移动法是TCAM 更新平均性能最好的管理算法
  4.5 表项管理算法的实现
  为了维护整个TernaryCAM 的路由前缀结构,我们设计了一个struct tcamBlock 数据结构来表示每一个路由前缀块的状态信息,其中start 变量指示该路由前缀块在TCAM 中的起始位置,end 变量指示路由前缀块在TCAM 中的终止位置,number 表示路由前缀块中真正有效的路由前缀表项数。这三个表量之间的关系为number≤end-start+1,其中等号成立当且仅当该路由前缀块中不存在无效路由前缀表项。 
   基于TCAM 的高速路由查找 - loving you - 天道酬勤   
  由于选择移动法的性能远远优于顺序移动法,所以我们设计实现了选择移动法(包括改进算法)和预留表项的选择移动法。不管采用哪一种实现方案,TCAM 更新过程的操作都可以归纳为路由前缀块上移或者路由前缀块下移这两种基本的路由移动方法。
5、结论  
  本文所提出的基于TCAM 的路由管理方案已经在“863”重大项目“核心路由器”中实现了。具体实现时采用的是LaraTech 公司的CAM 存储器条LTM7160,每条由8 片LTI7020构成,一共可以支持256K 个表项。我们采用两条进行 度级联以满足512k 路由表项的存储要求。性能测试表明,我们实现的基于TCAM 的路由查找引擎完全能够支持2.5Gbps速率的OC-48 端口的线速转发的要求。
0 0
原创粉丝点击