BCM交换芯片实际上是查表转发(table lookups),有多个表项,如L2_ENTRY, L2_USER_ENTRY, L2MC, IPMC,VLAN等,为了实现线速转发,查表的速度一定要快,BCM芯片中三种类型的搜索引擎(Search Engines):
1)Hash Search Engine
2)Binary Search Engine
3)CAM Search Engine
交换芯片报文转发流程中不同阶段,使用不同的搜索引擎。
Hash Search Engine
哈希查找是一种使用哈希算法基于数据内容计算存储位置进行查找的方法。
BCM芯片中以下表项使用Hash查找:
1) L2 MAC table (for lookup and learning)
2) L3 Host table (for IPv4 and IPv6 lookups)
3) MAC VLAN
4) IPMC
5) ECMP table (for reverse path forwarding(RPF) checks)
6) VLAN_XLATE (for Ingress/Egress VLAN translation)
全局HASH_CONTROL寄存器用来配置hashing key。例如L2/L3 Table,可以配置Hash算法为使用高/低16位或者32位的CRC值作为Hash Key。比如L2 Table有32K个表项,分为4K个buckets,每个bucket有8个表项。查找L2 Table时,通过查找的MAC计算的CRC快速定位到bucket,然后比较bucket内的8个表项;写L2 Table时,总是写bucket中的第一个可用表项,直到写满。但是有一种情况,如果bucket内只剩余1个表项资源,而有两个待学习的MAC地址表项映射到这个bucket,那么第二个MAC地址就会学习失败。
BCM芯片也支持Dual-hashing算法,从而提高hash表的利用率。这种场景下,L2/L3 Table分为两组buckets,每个bucket有4个表项。L2_ENTRY Table通过L2_AUX_HASH_CONTROL寄存器配置,L3 Table通过L3_AUX_HASH_CONTROL寄存器配置。使能Dual-hasning算法时,两组buckets可以配置不同的Hash算法,如第一组使用CRC32_UPPER,第二组使用CRC32_LOWER。
Binary Search Engine
基于index索引号进行搜索,如VLAN和PORT Tables。
CAM Search Engine
CAM类似于BSE,但是它是一种三态搜索策略,即0、1、不关心。当掩码没有置位时,表示不关心该字段;当掩码置位时,键值生效。
使用TCAM策略查找的表项包括IFP、EFP、VFP和L3_DEFIP。