硬件单周期查找——TCAM

1,913 阅读3分钟

在工作的过程中接触到了PCL(Policy control list)这个概念,主要用法是在一个报文进入时查找是否匹配相应的PCL条目,如果匹配到了,那么就会执行相应的动作,所以一般我们的PCL条目就会包含以下几个参数————模式,掩码,偏移量,和action。试想一下,如果采用正常的软件逻辑,我们会将这条条目存放在RAM中,然后利用查找算法匹配,执行相应动作,如图。

但是这样查找最明显的问题就是————速度太慢。

对于一个千兆口的交换机,交换机内部需要维护一个非常大的FDB表,当学习的MAC地址不断增加,查找的时间也线性增加,影响转发效率,那么我们就需要一种查找手段,对这种查找手段有以下几个要求:

1、 单周期查找时间,必须控制查找时间,不能随线性增加。

2、 基于硬件,减少软件过程中IO的时间。

以上的要求,其实也是这篇文章的主角TCAM的特性。 按照惯例,这里需要插入一段科普性表达。TCAM (ternary content addressable memory)是一种三态内容寻址存储器,主要用于快速查找ACL、路由等表项。

接下来会从工作流程和工作原理来总结和归纳一下TCAM。以最简单的交换机的转发功能来窥探一下TCAM的工作流程。

首先简要介绍一下FDB,交换机内部会维护一张表格,表格记录了MAC地址和相应的端口, 也就是说,当一个报文通过交换机时,便会记录其中的源mac和端口号生成一条FDB条目,这是对于新地址表学习。对于转发,会查找当前报文的目的MAC地址,如果找到,发往相应的端口,如果没找到,广播到所有端口,这是最基本的交换机转发功能。

对于这种查表转发的任务,TCAM如何参与其中并实现呢?

首先通过入口的策略,通过偏移量等信息,把一个包相应的bit位打包成一个key送入TCAM,也就是源mac地址,然后通过TCAM进行查表得到数据的索引,最后从RAM中读取相应索引的数据,返回到集成电路中,具体而言就是查找到相应的port。最后将报文从相应的port转发出去。 从这张图里,很容易就会知道TCAM在其中担任的功能:

1、 输入一个key要求输出一个index

2、 输入的key要能设置掩码

3、 高效率的硬件查找。

对于其硬件原理,也可以用一张图来表示。

##引用自www.cnblogs.com/pandaroll/p…

广播实现了高效率的单周期查找,mask相与实现了掩码,输出的index也是条目唯一值。至于优先选路器的作用,是因为掩码的存在,所以一个key可能会匹配上很多不同的条目,但是对于输出的index只有一个,所以这就涉及到选路算法,这在路由上非常常见。理解转发流程和硬件原理之后,观察具体芯片的参数和寄存器,我们也就能很容易的上手使用。以下是找到的NL3280芯片参数。

包含了16个block,每个block可以分成不同的规格———16K72bit、8k144bit、4k288bit、2k576bit

每个block包括了8个BMR,每个BMR的bit对于相应的列掩码,从理解上来讲,这个寄存器的角色就是担当了当前block的默认掩码,有八个寄存器是为了对不同的规格能保证掩码位数。

对于database如下:

Data word和Mask好理解,parity负责奇偶校验,VBIT主要用于使能条目。

提供的寄存器如上图,涵括了上述所有功能的设置。