BCM交换芯片原理概要本文使用的寄存器图片非摘录自56620的寄存器说明文档,可能存在部分文字与图片描述不一致的地方。其匹配寄存器文档为“56620-PR101-R”(网络上没找到)——byM.CArchitecturalACLBufferManagementL2VLANLinkAggregationMirroringL3OutlineArchitectural系统逻辑视图IngressChip解析报文128字节的头部(MMUCell的最小单位)隧道终结报文头分类,以决定VRF通过VRF与报文头的信息,进行L2/L3/MPLS查找入口ACL处理;基于ACL进行计数与统计报文缓存、准入控制与调度修改报文(如基于报文类型进行修改)SwitchFabric基于HiGig头部信息进行报文的交换选路多播处理支持基于服务的流量控制EgressChip解析HiGig报文头根据HiGig头部信息决定出端口报文缓存、准入控制与调度修改报文出口ACL处理芯片逻辑视图入端处理通道负责报文解析,隧道终结与VRF配置,L2/L3/MPLS使用隧道终结阶段获得的VRF信息进行查找与ACL处理。TCAM:ternarycontentaddressablememory。从CAM的基础上发展而来的。一般的CAM存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个“don’tcare”状态,所以称为“三态”,它是通过掩码来实现的,正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,而CAM没有第三种状态,所以只能进行精确匹配查找。TCAM表内所有条目都可以并行访问,比如,如果你有100条ACL,TCAM能一次就能对比这100条ACL进行对比操作,过去如果有100条ACL的话,需要第一条ACL对比完后再对比第二条,然后第三条,直至N条,效率很明显没有TCAM高。TCAM的组件FM(特性管理器)软件将匹配语句编译(合并)为TCAM表项,这样就可以以帧转发速度查询TCAM芯片框图芯片框图GPIC:端口的配置信息驻留在GPIC(GigabitEthernetPortInterfaceController)里。GPIC可以配置为SGMII模式或者SerDes模式。SGMII模式可以直接连外部PHY设备;SerDes模式可以直接连光模块。HiGig:HiGig模式端口用于多个芯片的互连来增加整个系统的端口密度。CMIC:通过PCI外接CPU,实现对芯片寄存器的读写设置操作。CPU口发包的处理逻辑与端口接收报文一样(一般CPU是0口,就像0口接收到了报文一样),处理过程也会出现报文重新被送CPU的情况。MIIMCPUMACRJ45PHYPCI-ETXDTXENTXCLKRXDRXENRXCLKMDIOMDCTX/RXDMA交换架构采用模块化、高性能的管道式报文交换处理架构。在管道上的每个模块都有各自的处理功能,并把处理的结果提供给下一模块进行处理。IntelligentParser:包括两个独立的解析器,全解析器和HiGig解析器。全解析器负责解析来自端口与CMIC的报文(面板口与CPU口),需要的信息都可以在头128字节里获得,全解析器必须保存所有的解析信息,以备各种搜索引擎使用。HiGig解析器负责解析来自HiGig口的报文。SecurityEngine:早期的硬件安全检测机制,防止DoS攻击。L2Switching:分配VLAN、优先级,源MAC学习,目的MAC查找转发。L3Routing:源/目的IP查找ContenAwareProcessing:CAP用来提供ACL、差分服务、QoS等类型的应用。图中的IFP、EFP即CAP。BufferManagement:控制端口的传输行为与流量整形。每个出口关联有8个CoS队列,调度器可配置为不同的模式对这8个队列进行不同的仲裁。调试器仲裁的一个主要方面是提供最小带宽保证与最大带宽限速,通过监视每个CoS队列的计数机制实现。Modification:根据搜索引擎的的结果,进行VLAN转换、隧道封装与L3路由变更。CAP在过去称为过滤引擎(filterprocessor),所以IFP(ingressfilterprocessor)、EFP(egressfilterprocessor)沿用了这样的命名IntelligentParser可以从逻辑上看成是硬件内部有一个微程序(硬件电路实现)负责解析报文,并把报文的各个字段(如MAC,IP等)保存到结构体的各个成员变量里,以便高效地提供给后续的搜索引擎使用。CAP芯片内部主要的搜索引擎有两种,HASH搜索引擎与CAM搜索引擎。HASH搜索引擎:L2表、L3表、VLAN表、IPMC表等等CAM搜索引擎:ACL表每个搜索引擎都带有一定的存储空间,用来存储相应的内容表项。搜索引擎采用管道式的架构,进行每个引擎的处理。ACLCAPIFP(ICAP)、EFP(ECAP)都属于CAP。IFP采用的是有16个并行内容查找处理器的CAM,CAM被分成16个slice,16个查找处理器并行进行查找,产生16个结果,如果结果的行为不是冲突的,则全部执行;如果行为是冲突的,则根据优先级选择最高优先级的行为执行。查找处理器的主要组成部件:Intelligentprotocol-awareselector:选择匹配域作为查找的关键字ContentAwarelookupengine:执行关键字查找并且输出完全匹配的那条表项索引。ContentAwarepolicyengine:匹配结果将执行的动作行为。根据lookupengine的索引来选择。ContentAwaremeteringandstatisticsengine:策略与统计收集。ContentAwareactionresolutionengine:多重匹配的处理方式。Intelligentprotocol-awareselectorContentAwarelookupengineContentAwarepolicyengineContentAwaremeteringandstatisticsengineIntelligentprotocol-awareselectorIntelligentprotocol-awareselector:FP_PORT_FILED_SEL用来选择选择Intelligentprotocol-awareselector里的哪些匹配域作为解析器解析的关键字(这些关键字将作为Look-Upengine的输入)。Intelligentprotocol-awareselector已经由硬件固定形成了几种不同的组合,只能从这些组合里进行选择(如果想要自定义匹配域,芯片有另外提供UDF_OFFSETtable)。ContentAwarelookupengine:lookup可以设置F域(F1,F2,F3)的值及F域的掩码,F域与F掩码的bit位宽是一致的,F掩码=1则表示关心上一步解析后输入的关键字的相应bit位与F域设置的值是否一样,如果所有关心的bit位都一样则表示匹配成功,否则匹配失败;如果F掩码=0则表示不关心相应的bit位。ContentAwarepolicyengine:当lookupengine查找匹配时,其匹配项的索引值作为policyengine的索引值(lookup与policy的表项一一对应),由policyengine设置的action来决定对报文的处理方式,如drop、permit、to_cpu等动作。ContentAwaremeteringandstatisticsengine:由FP_METER_TABLE与FP_COUNTER_TABLE组成。Policyengine的METER_INDEX与CONTER_INDEX分别作为索引指向其配套的METER与COUNTERtable。METER用来测量报文的状态并使用srTCM/trTCM进行着色,把着色的结果反馈给配套的lookupengine进行处理。METER一般是两条表项配对使用,由policyengine的METER_INDEX_ODD与METER_INDEX_EVEN进行索引,分别对应srTCM的C桶与E桶或者trTCM的C桶与P桶。COUNTER根据policy选择的COUNTER_MODE进行Green/Yellow/Red报文的着色个数统计。Policyengine的COUNTER_INDEX与COUNTER_INDEX+1分别指向LOWER_COUNTER与UPPER_COUNTER。BufferManagementMMUMMU主要功能是负责在正常与拥塞的传输情景下,高效地管理CBP(CellBufferPool)和报文指针资源。能够以最大115Gbps的速率接收端口的报文数据流单播与组播报文能够以16Gbps的速率从出端口发送出去计算ingress/egress的容量使用情况高效地管理组播传输支持12k字节的巨帧存储与处理每个报文的12/16字节头部信息支持HiGig协议允许CPU从端口接收,或者往端口发送支持802.1p的队列优先级基于每个CoS队列的流量控制动态容量管理拥塞控制消息的处理与生成缓存管理入端:监视入端口CoS队列的可用缓存使用情况。如果超过阈值,则产生流量控制消息,发往该端口队列。如果对端处理流控报文,则对端会停止发送,以缓解入端的压力。出端:监视出端口CoS队列的缓存使用情况。如果超过阈值,新到来的入口报文如果目的出口是超过阈值的端口,那么拥塞控制将会把入口报文立即丢弃。报文缓存管理缓存以cell为最小单位,每个cell大小为128字节。32768个cell提供了最大4MB的缓存容量。同时提供了11k个packetpointer(XQ),每个报文分片存储在cell里,指针(XQ)用来指示报文的第一个cell。入端与出端分别独立地统计进入芯片的报文。对于多播或者泛洪的报文,存在多个出口,入端只统计一个报文计数,所有出端也只统计一个报文计数。MMU转发框架MMUPortxq1xq6xq2xq3CBPheadqueuexq1,xq6L2/L3/ACLxq6xq1CoSQueueSearchEngineMACCMICMIIMPCI-EGPICIngressControl缓存空间分为3个部分MinimumGuaranteedspace:为端口提供最小保证可用空间PORT_MIN。Sharedspace:当最小保证空间不足时,为端口提供的共享缓存空间。TOTAL_SHARED_LIMIT指示总的共享缓存空间,PORT_SHARED_LIMIT指示每个端口的最大可用共享缓存空间。Headrommspace:当最小保证空间与共享缓存空间不足时,提供一些额外的缓存能力•PGHeadroom:流控帧发送出去到对端停止发送报文这段时期,可能收到对端发送过来的部分报文,这分部缓存空间即用于接收这部分报文。由PG_HDRM_LIMIT指示其缓存空间。•GlobalHeadroom:如果没有为每个端口单独分配PGHeadroom,则使用这分部缓存空间作为所有端口的PGHeadroom共享空间。如果使用此空间,则每个端口只允许保存一个报文。此空间允许存储的总报文个数由PORT_MAX_PKT_SIZE指示。缓存规则:报文接收时,优先使用Guaranteedspace,然后使用Sharedspace,最后是Headroom。当报文发送后,则优先释放Headromm,然后是Sharedspace,最后是Guaranteedspace。PAUSEMetering每个端口都有单独的漏桶算法机制,用来监测其缓存的使用情况。PAUSEmetering功能用来在入端口触发流量控制,以反压对端的流量,