提到存储介质,大家应该很容易想到RAM。相比于RAM,CAM可能就显得有些陌生了。实际上,TCAM对于交换芯片非常重要。比如了解OpenFlow的人都知道流表,最典型的流表都是用TCAM来做的。TCAM,主要用于快速查找ACL、路由等表项。
什么是CAM?
CAM是Content Addressable Memory的缩写,即“内容寻址存储器”的意思,它是在传统的存储技术的基础上实现的联想记忆存储器,关于CAM的基本操作有三种:
1)写操作:输入地址和数据,将数据写到指定的地址上,写入速度与RAM相同;
2)读操作:输入地址,返回该地址上的数据,读取速度与RAM相同;
3)查找操作:输入待查数据,返回该数据被存储的地址。这也是CAM的最主要用途,它能够从巨大的数据库中进行快速查找,并且返回最佳的匹配地址,最快查找速度能达到每秒一亿次以上。
CAM和RAM有何区别?
相对于CAM,我们可能更加熟悉RAM。SRAM、DRAM大家可能或多或少有所接触。
举个例子。
一个表(table)被放在RAM中以便进行高速操作,提供一个地址并从表中获取与该地址相匹配的数据。然而,使用RAM进行查找可能需要多个周期来完成,它的速度不是很理想。
因此,CAM应运而生。在原理上,它反其道而行之,数据被当作搜索其所在地址的钥匙。根据CAM设计的性质,搜索是并行的,这意味着查找可以在一个周期内完成。这使得CAM更适合做数据表的查找,它的速度更快。
与具有简单存储单元的静态 RAM (SRAM) 不同,全并行 CAM 中的每个单独的存储位都必须具有与自身相关的比对电路,以检测存储位和输入位之间的匹配情况。此外,在使用 CAM 时,必须将数据字中每个单元的匹配输出组合起来,才能产生完整的数据字匹配信号。
因而在搜索层面,CAM具有性能优势,而代价则是需要更大的面积和更高的功耗。
而TCAM是Ternary Content Addressable Memory的缩写,即“三态内容寻址存储器”的意思,它是从CAM的基础上发展而来的。
这个“三态”,就非常有意思了。
一般的CAM存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个“don’t care”状态,也可以称作“wildcard”,也可以表示为“X”,从中文理解,就是忽略的意思。所以称为“三态”,它是通过掩码来实现的。
正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,而BCAM没有第三种状态,所以只能进行精确匹配查找。
例如,当我们写下1.1.1.0/24时,它描述了从1.1.1.0到1.1.1.255的IP地址范围。数字24表示IP地址的前24位必须被匹配,而后8位是什么并不重要。
TIP:
路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。
基于硬件的实现,整个表空间Database在同一时刻被查询
TCAM之所以能做到一个bit表示三个值,原因是它的一条entry其实在物理上由两条entry组成,一条存放data,另外一条存放相应的mask。由此可以实现0/1/X的表示。有了TCAM,就可以支持各种LOOKUP KEY的任何组合查找,任意地MASK掉任何不关心的字段,只有TCAM可以做这样的事情,HASH做不到。