mi文件类型: 故障类 | 头英语怎么写版本号:V1.0(28/09/08) |
文档作者:王雁 | 文档密级: 受控(和页面一致) |
企业管理创新内审人: | 使用对象:一线工程师 |
| |
端口丢包原因解析及排查指南
2010-9-28
福建星网锐捷网络有限公司
书籍封面设计图片 版权所有 侵权必究
修订记录
日期 北京旅游景区 | 修订说明 | 执行人葱的功效 |
2010-9-28 | 第一次发布叹金莲 | 王雁 |
| | |
| | |
| | |
| | |
| | |
1 数据包处理流程说明
2
2.1 交换机芯片结构
2.2
交换芯片是交换机的灵魂,交换芯片注定了交换机的数据转发性能及部分功能。例如不同型号产品的芯片型号便有所不同,但芯片的总体逻辑架构基本都如下图所示,模块化的交换机也基本都是多线卡组合起来的,实质就是单芯片通过Hi-Gig口连接到背板形成星型结构,由引擎来进行集中管理和控制功能。
说明:强烈推荐大家阅读此篇文档,加深对交换机硬件的理解。
《千兆位以太网交换芯片BCM5690及其在交换机中的应用》
名词解释:
ASIC(MAC 芯片):为所有端口提供线速交换,
ASIC:内部提供多种tables,如MAC地址表,VLAN表,MSTP表,链路聚合表,链路聚合流量平衡表, IPMC表(IP组播表),用于策略控制的FFP(Fast Filter Process)表等。这些都是在MAC芯片内部存贮,以CAM或TACM的方式寻址,硬件实现,完全满足数据包需要线速处理和转发的需要。
MMU: memory management unit,管理和存贮交换缓存单元,并暂存数据帧。
2.3 数据包处理流程
2.4
以上图片中是最常见的数据处理逻辑。
所有的数据流通过交换芯片都要经过输入部分(Ingress)、内存管理单元(MMU)和输出部分(Egress)这三个流程.其数据流程如上图。
Ingress(输入逻辑)是数据包在每端口上的逻辑流程.每端口都有自己的输入逻辑,输入逻辑负责所有包的转发(交换)策略,(例如进行MAC表查询、路由表查询、FFP过滤(ACL、QOS染色)等)决定将包送给哪个端口,根据转发信息将数据包发送给MMU,进行缓冲和调度,并以线速对包进行处理.输入逻辑与大部分交换功能关联。
MMU(内存管理单元)主要负责数据包的缓冲与调度,它接收从输入逻辑过来的数据包并缓冲这些包,同时对这些包进行调度并将它们送给输出逻辑.数据包进入MMU时将存储在CBP里.CBP有1MB(不同芯片容量不一致)的大小供所有端口共用.MMU主要有四部分功能: 资源计数、背压、HOL预防机制、调度.其中资源计数主要是统计当前消耗的CBP单元数或CBP数据包个数,决定数据包什么时候进入背压或HOL预防;调度则是根据优先级和COS的多种调度准则(也就是我们常见的QOS调度)来确定包发送的先后顺序和权重。
Egress(输出逻辑)主要从MMU获取数据包并将其送入各个端口,这是整个流程中最简单的一环.它先将包发给输出端口,然后确定是否在发送的数据包上添加tag.具体流程如下:首先从MMU请求数据包,如果发送的包要求不带tag,则负责将tag去掉;然后计算数据包的CRC;最后将包交给MAC发送(特殊情况下,CMIC(CPU管理接口)将直接把数据包以DMA方式发送给CPU),基于端口的限速功能也在Egress阶段完成。
了解以上数据在芯片中的调度转发流程有助于我们理解数据在哪些地方可能会被丢弃。
2.5 缓冲区
2.6
涉及到缓冲区的两个概念就是:CBP和MMU
公共缓冲池CBP CBP实际上是1M共享的包缓冲区.本案例中以BCM5690为参考进行介绍。CBP由8192(8K)个单元组成,每个单元128字节。设备里的每个数据包消耗一至多个单元。
结实近义词内存管理单元MMU:BCM5690有一个单独的内存管理单元。每个MMU与设备的功能块(GPIC、IPIC等) 相关联。GIGA接口控制器GPIC:用于提供GE口与交换逻辑之间的接口。内联端口(HiGig)控制器IPIC:主要提供HiGig口与内部交换逻辑之间的接口,有时也被用于多片BCM5690之间的堆叠操作}
MMU负责数据包的缓冲和调度.它首先接收数据包,然后再将数据包缓冲,并在发送时加以调度,同时它还管理交换单元的流控特性.概括来说,就是缓冲逻辑、调度逻辑、流控逻辑.缓冲逻辑从CP-BUS(总线)接收包并存放在CBP,同样也从CBP获取包并将它们发送到CP-BUS(总线)上去。包的发送顺序由调度逻辑根据包的优先级别确定。流控逻辑包括Head-of-Line HOL 阻塞预防和Backpressure两种方式.
缓冲区的大小由芯片决定,但缓冲区的分配方式可以进行调整。例如每端口固定分配或动态共享。
BCM芯片系列一般采用平均分配的方式,因为考虑到Fair公平性的原则,这是一种比较理想的设计。目前的设计采用了静态+动态共享的方式(静态分配一部分缓冲区+动态全局共享一部分,智能调整)
Mavell芯片系列可以进行人工调整,例如可以使用buffer manage FC|QOS来进行调整。QOS模式可以共享缓冲区大小,并根据报文的COS优先传输高优先级的报文,低优先级的报文进行缓冲或给高优先级报文提供更多的缓冲空间,来不及缓冲的直接丢弃。当采用FC模式时,平均分配缓冲区大小并通过发送Pau帧,要求对方减少发送速率,从而避免丢弃。(当出现no buffer丢包时,发送pau帧,需要两端开启Flow control)。
2.7 IBP与HOL
2.8
2.8.1 IBP
2.8.2 纳粹全称
IBP(ingress black pressure)是一种关注每个Ingress入端口CBP Bufffer率用率的方法,当缓冲率用率达到一定比率时,一个Pau帧就由Ingress口发出,如果对端支持流控,那么就会暂停一段时间,从而宏观上减少了发送速率,从而可以减小本机缓冲区的利用率,达到不丢包的目的。
2.8.3 HOL
2.8.4
HOL(head of line 队头阻塞)是一种关注每个Egress出端口Buffer利用率的方法,当利用率达到一定比率时,从CBP Buffer送到端口的TX 队列的报文就会被丢弃。出端口其实并没有物理上的缓冲区,只是做了一个出端口的队列(Transaction Queue,其实就是我们的COS队列),这个队列的指针指向CBP缓冲区。队列根据端口的速率固定分配了长度,当报文在经历Ingress—MMU阶段中,会决定报文的某个Egess出接口,于是将TX队列尾指针指向CBP中此报文的缓冲区位置,HOL就是关注这个Transaction Queue的使用率,当在实际应用中,例如某个千兆口向百兆口快速发包就可能导致TX队列超出limit,那么后续需要将CBP报文写入TX队列的报文将会被丢弃,从而导致丢包,如果入接口开启了流控,H
OL溢出也会在入接口发送Pau流控帧。
2.8.5 IBP与HOL的联系
2.8.6
从上面IBP与HOL的描述,我们可以看出,IBP关注于:入接口的缓冲区率用率情况。
HOL关注于:出接口的队列使用情况(类似于缓冲区的率用率情况)。两者的关联关系可以这样描述:
所以入丢包和出丢包时两个不同的阶段,HOL丢包,不一定回同时有IBP事件产生。有IBP事件产生也不一定会导致HOL丢包,但有IBP存在的时候,HOL出现的几率更大。因为某端口的入速率变大,那么往另外一个某出口的出速率也可能增大,导致HOL溢出丢包。
当入端口有限速(非QOS限速,即rate-limit)如果朝这个端口发包超过这个速率,也会导致此端口发送PAUSE流控帧,如果配置了出端口限速(即rate-limit),那么交换机转发到此端口的速率超出了限制,也会发生流控。另外,广播包(组播、单播)限速(storm control)和COS限速不会导致发生流控,而是直接丢弃。
那么我们如何判定是否有IBP的情况呢?怎样又表明HOL存在溢出导致的丢包呢?
IBP导致的丢包,一般通过上层命令都可以查看到:
例如:
show interfaces gigabitEthernet 0/1结果:
Index(dec):1 (hex):1
GigabitEthernet 0/1 is DOWN , line protocol is DOWN
Hardware is marvell GigabitEthernet
Description: TO-ZGE-S8610-2_GE2/1
Interface address is: no ip address
MTU 1500 bytes, BW 1000000 Kbit
Encapsulation protocol is Bridge, loopback not t
Keepalive interval is 10 c , t
Carrier delay is 2 c