在高速网络中,为了提高查表速度,满足高速网络的性能要求,越来越需要像CAM这样专用的硬件。CAM方法比散列法、树或其它基于算法的解决方案性能都要优越,也更具可扩充性。
使用现成的CAM可以减少开发和测试专用检索算法的成本。通过把查表交由CAM完成可以节省CPU时间,使CPU运行更复杂的应用。另外,将复杂的查表任务由CAM处理,还能实现一些新功能,比如服务级协议(SLA)的线速增强。
CAM基础
图1为典型的CAM方框图。虽然“内容可寻址存储器”指出CAM是一种存储器,但是从图1可以很明显地看出,CAM更像是逻辑器件。事实上,在CAM中的存储功能部分只占CAM不到一半的空间,其余部分由CAM阵列的支持逻辑电路部分(该部分使CAM能处理多重匹配)和提供增强功能的控制逻辑部分(配置电路)组成。
在CAM架构中还舍弃了SRAM和DRAM中传统的总线结构,取而代之的是使CAM能够在单个周期内完成管线检索的接口。单周期管线对处理峰值容量的长周期操作是必不可少的,因此,用户接口由四个独立的总线组成。
与数据总线相似,比较总线(CBUS)用来加载数据和访问内部寄存器。指令总线( IBUS)用来给CAM发送指令,每一时钟周期发送一条指令。将搜索结果发送到结果总线(RBUS)上,然后下一个释放地址总线(NFABUS)保存一个指针,该指针指向一个最低物理地址的空记录。
在三进制CAM应用中,比如数据包分类,要求记录按数据相关特性顺序保存。对于这些应用,用户必须根据数据和已存入CAM中的记录项数目来人为地选择要存入的物理地址,这样NFABUS就可以不用连接。
在检索指令下将CAM阵列中的每个记录的内容同比较寄存器中的值相比较。CAM阵列中的每个记录有一个与之相关的有效位,该位用来表示该记录是否包含有效数据,这可以避免在检索期间空记录项中的随机数据与所检索的数据产生误匹配。
性能要求
用CAM进行设计的第一步是确定CAM峰值查表要求。简而言之, CAM必须处理许多查寻,查询量至少应等于各个接口数据速率的总和除以最小数据包的大小,再乘以每个包的查寻次数。例如,一个能支持两个OC-192 ATM接口,而每一信元具有一个虚通路标识符/虚通道标识符( VPI/VCI)的CAM的峰值查表需求为
需要注意的是,实际的需求经常小于这个计算值,任何额外开销(比如 SONET组帧)都没有计算在内,而在计算实际的峰值需求时应该加以考虑。由于CAM可以在单个周期内完成管线查寻,它的运行频率至少应达到47MHz。
查寻表格之后必须进行表格维护和更新,然而,更新操作一般每秒发生数千次,而不是一些应用程序的数百万次。对于大多数的应用来说,要在一百万次每秒的操作(MOPS)能力上增加一定处理余量,此时要求的最小运行频率达48MHz。由于CAM是完全静态的CMOS器件,它可以工作在最大额定频率与直流之间的任何频率,因此设计人员可以灵活地设置电路板上的时钟。
简化接口
在不需要单周期检索性能时,可以不通过专用总线而由CBUS读取寄存器内容(包括下一个释放地址和搜索结果),这样可以降低系统复杂性并降低成本。 由于在读周期无法执行新搜索且总线周转时需要额外的时间,这就降低了最大搜索率。通过提高系统频率可以弥补这种性能的降低。当查寻速度在每秒1,500万到2,000万次以内时,此技术非常适用。对于用ASIC或FPGA设计的控制电路,该技术可以节省30到50个管脚。
通过使用一半CBUS以及写使能控制管脚,在32/36位块上进行加载或读数据,还可以再节省32到36个管脚(具体数量决定于所选的CAM)。在印刷电路板上,CBUS的两部分应连接在一起。由于包括写使能在内的全部输入信号都是同步的,因而不存在因三态重叠引起的逻辑冲突。
图2为一个只需要CAM接口的56个管脚的路由器或交换机线卡的高层框图。该简化接口达到运行频率为66MHz、72位字宽、每秒1,900万次的查寻能力。
直接与FPGA接口
虽然CAM总线结构与大多数微处理器不兼容,但某些处理器可以直接与CAM连接,它们不需要采用FPGA或ASIC来适配总线周期时序,如摩托罗拉的PowerQUICC-II MPC8260通信处理器。这些处理器可以编程产生与CAM接口兼容的任意总线周期。处理器的地址总线连接到指令总线和控制信号(字使能引脚),数据总线连接到CBUS(见图3)。
在内存控制器配置完成后,CAM就可以看作是一个存储器映射的外围设备。它将对某些地址进行读写,并完成查找、读取、写入以及其它CAM操作。在这种配置下,通过CBUS读取结果。
直接微处理器接口的一个缺点是: 由软件实现保存管线搜索操作的顺序。如果一个搜索操作完成而其它搜索操作正在进行,不管处理器的状态和负载如何,软件代码必须保证处理器在完成第二个搜索之前读取第一个搜索结果。
因此,在查找未完成之前,软件必须禁止中断,这是系统设计所不希望出现的。使用直接微处理器接口的设计工程师通常不使用管线搜索,以避免写入对时间要求苛刻的代码时出现不便,除非系统性能有这样的要求。
另一方面,FPGA接口很容易实现高性能的管线操作,这是与一个没有可编程存储总线控制器的处理器实现接口的唯一方式。该类处理器还包括很多网络处理器。另外,实现更复杂功能,比如支持多线程或多处理器的唯一方法是通过FPGA或ASIC。一些CAM供应商已经提供与各种网络处理器和微处理器的可编程逻辑接口的源代码。
这样,即使在对软件进行必要修改的过程中要添加用户专用功能或IP,系统开发时间也可以大大缩短。
充分使用CAM
今天的CAM单片电路的密度已经达到4.5兆位,设计工程师采用几个CAM就可以满足所有的路由表和速度要求。例如,一个4.5兆位三进制CAM可以同时支持96k第3层信息包转发记录(entry)、16k第2层MAC地址以及8k信息包分类记录。
即使不同类型的查表具有不同的记录宽度,设计工程师仍然可以通过有效地把记录打包装入表格而充分利用CAM的密度。采用分区和标记(partitioning and tagging)两个方法可以实现器件内部配置。
分区处理允许多个记录存储在一个CAM记录里。每个记录被分割成多个区域,用全局掩码来把检索限制在一个或多个区域中。通过有效利用CAM宽度,使记录深度比CAM配置要大很多。
标记是一种把用户定义位附加到数据上来优化检索的方法,这样可把搜索限制在可用记录的某些子集内。标记可以定义记录的类型说明(对在单个器件中集合多个表时有用),或者定义在检索期间可能使用的其他特征,例如将路由查表限制在一个特别的路由协议。
图4为一个将第2层和第3层路由表一起存入单个CAM阵列的例子。该阵列已经分区,允许在每个CAM记录中存储两个IP地址。这里使用了三个标记位:一个说明该记录的类型(第2层或第3层),另外两个用作附加的有效位。在搜索时,用户必须通过恰当地设置类型标记位来说明要查找哪个表。附加的有效位可以防止检索数据与空位置的随机数据匹配。
通配符
三进制CAM使得用户能够用一个位屏蔽记录,此功能为表示单个记录的数值范围提供了一个有效方法。适当地设置优先权后,这些范围可以和其它范围组合起来,提供单周期路由器查表。
IP地址是三进制CAM最普通的数值范围。由于这些值一般落在二进制边界上,表示整个子网或一个路由集合的IP地址范围可以通过使用本地掩码在单个CAM记录内表示(位是1的被屏蔽)。例如:一个具有本地掩码0.0.0.255(1表示被屏蔽)的CAM字193.177.2.99,与子网193.177.2/24中的任何IP地址匹配。
其它类型的查表范围可能未发生在二进制边界上。例如,一个用户可能想规定访问控制列表(ACL)记录,以拒绝或允许访问一个特定范围的TCP端口。这些范围可能没有发生在二进制边界,因为端口编号与该端口提供的服务类型相符。三进制CAM的通配符能力允许用户生成一个压缩形式的描述整个范围的表达式。表1显示了只用5个表格记录就表示了一个38端口范围。
在一个时钟周期内,还可以利用内部并行CAM查寻实现对多个区域进行对比的复杂路由表。由于可能存在多个记录与搜索项匹配,必须注意CAM多重匹配解决方案所设置的顺序。在一个CAM中,当返回多重匹配时,返回的索引号为一个最靠近0的物理地址。因此,通过确保少量特定记录设定为较低优先级,查询时一个多分支决策树可能简化为单个查寻,从而解决多重匹配的问题。
表2是一个ACL检索表的例子。索引号为991,9012和32767的表记录与输入项匹配,可是, 因为索引号991在匹配记录中具有最小的物理地址,所以被认为是具有最高优先级的匹配。
本文小结
由于CAM 应用范围广泛,未来的CAM将更加灵活,在密度、宽度和频率上将得到扩展。受最终用户对新网络设备中基于表格查询的需求推动,新的CAM将能够进行更深的单周期数据包头分析。由于新增功能已经超越了现行CAM标准,因而新器件被称为“硅检索引擎”。随着上述技术的应用,设计中采用的搜索方案将很快由CAM单芯片解决方案所取代。
录入时间:2007-10-05 来源:中国工控展览网
相关文章:
• UG/ CAM在复杂型面加工中的应用