以最新的LightSpeed(单芯片400G)为例,它的对外接口有第三代PCIe标准的控制通道,通往前面板的400G Serdes,通往后面板的400G Fabric,以及DRAM和TCAM接口。 提取IP头部,比对TCAM,发现是指向VXLAN VSI接口,进入VXLAN处理流程; 2. 提取UDP目的端口号,发现是4789,继续VXLAN处理流程; 3. 提取VXLAN VNI,在TCAM中查询VXLAN AC接口表项,得到对应的VLAN,并剥离50字节VXLAN头部; 4. 在TLU中可以接收TCAM查询请求,转化为TCAM查询指令,并接收TCAM查询结果。 计数器与速率监测; TCAM加速引擎,可以对表项进行Hash运算,配合TCAM进一步提升表项读写效率; 数据包重排序引擎,对于一条流在多个包处理器上进行处理的情况,可以进行重排序,避免数据包处理不同步造成的乱序现象
之后,是ACL和QoS分类,让NP查询TCAM,确定匹配的ACL和QoS策略。 接着,NP开始执行最关键的步骤:转发表查找,在这一步中,NP将会在TCAM中查询FIB表。 这些表项都在TCAM中存储和检索。 对于出方向,省却了FIB表的查找,但需要根据数据包头的Metadata将数据包转发到对应的端口,并查找出方向ACL/QoS策略并执行。这些也需要访问TCAM。 前面提到,TCAM的查询,可以某些bit为Not Care,如下图: 选择TCAM Bank。 而对于LightSpeed线卡,二层业务是不需要TCAM资源的。NP芯片内置了SRAM以及哈希引擎实现LEM(精确匹配查找),只有FIB和ACL需要消耗TCAM资源。 下表是不同TCAM的分区的用途。 实际上,无论是在路由器还是交换机上,TCAM资源都是非常宝贵的。一般用于需要高速查表的FIB表和ACL表。
TCAM是三态内容寻址存储器的缩写,它比起传统的CAM来,多了一个模糊查找的选择,Key的某些bit位可以设定为Not Care。 而TCAM查找,使用的是模糊匹配,部分键值的bit位可以设为Not Care,最后将返回匹配的bit位最多的表项索引。 但基于TCAM模糊匹配的机制,最后返回的是标红色的条目100.64.10.8/29。 令狐冲经过一年多的封闭开发,在交换机ASIC中增加了TCAM之后,一方面,控制平面CPU可以将精简后的路由表直接写入TCAM中,这样避免了大量新数据流报文去CPU触发FIB下发,另一方面,由于大量的32 令狐冲不吃不睡,静坐了三天三夜,终于悟出了—— 既然交换机可以通过TCAM查找转发表项,让它转发匹配表项的包, 那么,也可以让它通过TCAM查找表项,让它丢弃特定的包!
这样一来,无论是离散的IP地址,还是可以聚合的网段,我们都可以把它做为查询键值,放在TCAM中—— 再让我们复习一下新一代交换机芯片的工作过程,以Broadcom Trident-3 (以下简称TD3) 工程师们可以通过编程,让其中的3级流水线分别承担以下工作: 根据源IP,在TCAM中查找其Group ID; 根据目的IP,在TCAM中查找其Group ID; 根据源Group ID和目的Group ID查找相关策略值; 这样,就能够利用TCAM的O(1)查找机制,快速根据离散的IP地址查询相关的策略,实现微分段。 今天留一个问题: 交换机的TCAM资源是有限的, 一般在500K以内。我们刚才提到,实现微分段需要在TCAM内查找,这会不会大量消耗交换机的TCAM资源,影响其他业务呢? 请看下回分解。
NP芯片具有外接TCAM的能力,可以在O(1)的时间内,在TCAM内查找到基于32bit (IPv4)或128bit (IPv6)的转发表,如这张图: 但是,防火墙与交换机/路由器的查表机制,有着本质的区别 这也将成倍增加TCAM的使用量。 因此,在路由器中,NP外扩TCAM可以实现的4M会话表项,在防火墙中大概只能实现不到1M的会话wing数,折合会话数量不超过50万。 一种思路是,增加TCAM的容量,但带来的是成本也迅速提升。而且,NP外挂TCAM的规格也受到NP芯片的限制。 令狐冲迅速打消了这个念头。 什么便宜容量大呢?
前面提到,NP线卡上的FIB表项,是存储在TCAM处理器中的。 由于TCAM可以将Key的某些位设为not care,因此可以用于实现FIB表的最长匹配查找。 因此,只有近期匹配过数据包的路由条目,才会被下发到转发平面高成本的TCAM存储的FIB表中,其余的路由条目存储在主控板的RAM中。 对于高端路由器,主控板能够存储的路由条目数可多达20M以上,而线卡上的FIB条目受限于TCAM容量,一般在256K-4M之间。 方法2:在主控板的CPU上,外挂较小的TCAM,仅用来存储路由表项的索引。查找到路由表的索引后,再去RAM中读取对应的路由表。 如下图所示: CPU通过路由前缀,快速从TCAM内读取到DRAM中存储该路由信息的偏移量,再去DRAM中读取该条路由信息,这样可以利用较少的TCAM资源,节约大量在RAM中查询Radix Tree的时间
先回答上一期的遗留问题: 交换机的TCAM资源是有限的, 一般在500K以内。我们刚才提到,实现微分段需要在TCAM内查找,这会不会大量消耗交换机的TCAM资源,影响其他业务呢? 那么,我们需要理解一下,在分布式任意播网关模式下,TCAM的使用方式: 让我们回顾这篇:《局域网SDN硬核技术内幕 20 亢龙有悔——规格与限制(上)》。 我们只需要为其增加微分段的Group ID值,就可以在不消耗额外的TCAM资源的前提下,实现从IP地址查找其Group ID的功能。
双击桌面的artcam快捷方式图标打开软件首先看到如下 的界面。点击“通过图像产生模型” 利用ART CAM 软件制作浮雕刀路的方法
template <typename TCam, typename TCamTraits>sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId String16& clientPackageName, int clientUid) { sp<TCam > c = new TCam(cameraId); // BnCameraClient sp<TCamCallbacks> cl = c; status_t status = NO_ERROR
StrataConnect属于Broadcom的园区网络产品,提供千兆、2.5G、5G及中低密度的万兆交换芯片,一般内置CAM和TCAM,MAC表项不超过64K,路由表项不超过32K,主打低成本园区网络场景 除了前面介绍的外挂TCAM、外挂DRAM数据缓存等功能,它还支持VoQ (Virtual Output Queue,虚拟输出队列)、HQoS(Hierarchy Quality of Service, 上回遗留问题答案: 在路由器的NP(Network Processor)芯片中,早就具有将外挂的TCAM资源灵活分配给不同表项使用的技术。 如H3C SR8800的SPE系列路由处理板,默认FIBv4表项为512K,但通过调整TCAM资源分配,最大可达810K。
要支持任意字段匹配,只能用TCAM,而传统芯片中通常只是ACL用TCAM,而ACL能执行的动作也有限(如丢弃、统计、重定向等),无法做到任意的编辑和任意的转发,而且表项大小也很有限(因为TCAM是昂贵的资源 第四,大容量的多级流表 表项大小是OpenFlow芯片的一个硬伤,因为你如果用TCAM,想把表项做大,一定意味着成本的上升,这是一个矛盾。 GoldenGate芯片进一步改进了N-Flow技术,在继续使用eDRAM做hash的基础上,引入更灵活的表项控制,可以做到接近于TCAM的灵活性,但是在基本上不增加成本的基础上,将表项大小做到64K。 除此之外,GoldenGate还设计了两级真正的TCAM流表,以及另外的两级hash流表,理论上可以支持到4级流表,而且流表之间可以传递真正的metadata。 相比较而言,使用传统芯片封装,最多只有一级真正的TCAM流表。 第五,对网络虚拟化的支持 用SDN来实现网络虚拟化,是SDN的一大应用场景。
“有TCAM红字的箱子里边,是路由器的数据库。” “这里是路由器的NP处理器。每个机器人都是NP处理器流水线的一个单元。” “机器人会根据TCAM数据库的内容,确定每个数据包的去向。” 因此,科学家们发明了一类特殊的存储器,叫做TCAM。它能够以第一时间找到后缀长度最长(不确定的位数最多)的数据库条目。 (想知道TCAM的具体工作原理,可以看这里——交换机篇 8 还是选择原谅她) 在路由器中,利用TCAM,就可以快速在数据库中,查找数据包应该去的下一跳以及出方向接口了。
经过了MAC之后,我们才能看到完整的报文(之前是比特流);接下来是表项,芯片里面其实只有两种RAM,一种是SRAM,一种是TCAM。 SRAM一般用于直接寻址的表和精确匹配查找表(EM);然后TCAM是什么?TCAM其实是增强型CAM,而CAM就是基于内容的快速匹配查找的一种硬件存储。 那TCAM是什么? 我们通常熟知的门电路只有‘0’和‘1’两个状态,而TCAM是有第三个状态的“do not care”,的意思就是你可以忽略它的值,它需要我们的把所有存储器的门电路设计成是拥有第三态,这会极大的增加它的功耗和成本 而交换芯片本质上就是在一个芯片内实现把这种高速SERDES加上表项(TCAM、SRAM)再加上查询、转发、封装的逻辑,再加上MAC、MMU等几个关键部件组成、封装在一起,并且满足足够低的功耗、成本要求的产物
在另外一篇论文里 我们了解到真正的创新点 不仅仅是源地址还有TCAM爆炸问题 二维路由方案通过同时考虑目的地址和源地址实现了灵活、细粒度地流量控制,并通过二维转发表的方案,解决二维转发匹配造成的TCAM
与Jericho BCM88670系列不同的是,它裁剪掉了去交换网板的36个25G Serdes接口,而用来外挂TCAM芯片和外挂数据包缓存的接口依然保留,可以作为实现盒式大缓存大表项交换机的方案。 在FF5980中,就利用48个万兆Serdes接口实现了48个万兆光口,24个25G接口实现了6个QSFP28接口,外挂TCAM芯片实现了750K MAC/375K ARP/256K FIBv4的大表项 今天留给大家的思考题是,这种将TCAM资源灵活分配给不同的表项的技术,在Broadcom引入交换机芯片以前,在什么地方应用了?
5.1表容量测试 OpenFlow1.3.0被设计为采用TCAM实现一个或多个表的规则(流),TCAM是一种存储器,被几乎所有的交换机使用,它首先搜索内存中的内容而不是存储中的内容。 不同的交换机具有不同的TCAM大小,TCAM的使用量由不同供应商的优化技术和插入的流规则决定。 一些交换机厂商也支持掩盖表容量的优化法,如将只匹配二层报头字段的OpenFlow规则放到二层内存而不是TCAM。
OpenFlow形成流表的源数据来源只是TCAM(Ternary Content Addressable Memory,即三态内容可寻址存储器)。而为实现管理目标,既有网络设备还有大量其他技术方式。 而基于TCAM所导致的另一问题是网络规模不可能太大。因为,毕竟厂商提供TCAM的初衷只是针对一台设备,而非整个网络。 第二个问题是架构缺陷,即缺乏网管网的设计。 解决方法也很简单,就是直接修改网络操作系统,让Openflow的管理数据来源从TCAM延伸到ASIC、CPU、FPGA。
大多数ASIC将使用一种特殊的存储器,称为TCAM(三重内容可寻址存储器)。该内存将用于存储各种查找表。 CAM及其更高级的同门兄弟TCAM令人着迷,因为它们的操作与传统的随机存取存储器(RAM)有本质上的不同。 为此,ASIC会将此计算出的FIB安装(写入)到TCAM中,因此可以尽快进行任何查找。 ? 2. 在此HMC中,他们还决定放置FIB,MAC和其他表(因此没有TCAM)。 它是一个功能丰富的ASIC,具有400Gbps的转发能力,显着的缓冲区和TCAM容量(这是路由平台ASIC所期望的)。
大多数ASIC将使用一种特殊的存储器,称为TCAM(三重内容可寻址存储器)。该内存将用于存储各种查找表。 CAM及其更高级的同门兄弟TCAM令人着迷,因为它们的操作与传统的随机存取存储器(RAM)有本质上的不同。 为此,ASIC会将此计算出的FIB安装(写入)到TCAM中,因此可以尽快进行任何查找。 2. 在此HMC中,他们还决定放置FIB,MAC和其他表(因此没有TCAM)。 它是一个功能丰富的ASIC,具有400Gbps的转发能力,显着的缓冲区和TCAM容量(这是路由平台ASIC所期望的)。
上回问题: 为什么LEM表也可以不需要在TCAM中存储? 答案:由于LEM表的查询键值(Key)是确定的值,可以利用哈希表(Hash Table)组织数据结构。 实际上,在交换机中,MAC表/MPLS标签表默认会使用这种方式组织,这样,LEM可以用相对成本较低的SRAM存放,无需消耗成本较高的TCAM资源。