在工作的过程中接触到了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如何参与其中并实现呢?

1、 输入一个key要求输出一个index
2、 输入的key要能设置掩码
3、 高效率的硬件查找。
对于其硬件原理,也可以用一张图来表示。

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


对于database如下:

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