CM交換芯片實際上是查錶轉發(table lookups),有多個表項,如L2_ENTRY, L2_USER_ENTRY, L2MC, IPMC,VLAN等,為了實現線速轉發,查表的速度一定要快,BCM芯片中三種類型的搜索引擎(Search Engines):
1)Hash Search Engine
2)Binary Search Engine
3)TCAM 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。
TCAM Search Engine
TCAM(Ternary content addressable memory)是一種三態內容尋址存儲器,主要用於快速查找ACL、路由等表項。
一般的CAM存儲器中每個bit位的狀態只有兩個,0和1。TCAM中每個bit位有三種狀態,0、1和don't card狀態,所以稱為“三態”,它是通過掩碼來實現的,當掩碼位置0時,表示don't card狀態。正是TCAM的don't care狀態特徵,使其既可以進行精確匹配查找,又可以進行模糊匹配查找;而CAM沒有don't care狀態,所以只能進行精確匹配查找。TCAM表內所有條目都可以並行訪問,比如有100條ACL,TCAM可以一次對這100條ACL進行對比操作,而不用一條接一條對比。
使用TCAM策略查找的表項包括IFP、EFP、VFP和L3_DEFIP。
參考文獻:《TCAM在高速路由查找中的應用及其FPGA實現》