常常听到客户反映在其环境中的Brocade交换机上很多端口显示状态异常,但是异常报错内容或是端口具体信息并未做更详尽的说明;还有的时候会听到客户反映遇到严重的性能问题,但是哪些具体的设备受到了影响却不能明确告知。

 

那么,当EMC交换机技术支持工程师遇到此类信息不完整的情况时,通常怎样做初步的故障排查呢?答案是通过porterrshow的输出结果初步了解端口报错。

 

但在此之前,还有一项非常重要的内容需要检查,那就是计数器的有效性。什么是计数器的有效性?

举个简单的例子,倘若故障发生点为20151212日,但是交换机上计数器的最后一次清空时间为20141212日,那么该计数器便是无效的,因为该值为累计值,整一年的时间,沧海桑田,今非昔比,大量的历史累积值对当前的故障排查是没有帮助的。

那么是不是说清空计数器的时间点距离故障发生时间点越近越好?非也。若是客户在20151211日清空过计数器,可是之后客户为了排查故障又执行过其它操作,如重启相关主机/重置交换机端口/更换光纤模块/光纤线等,那么该计数器也是无效的。因为此时我们看到的porterrshow输出结果中除包含故障报错增长外,还包含外界操作带来的计数器增长。

另外一种情况是在发生故障之后,计数器被清空了,若是此时的清空计数器行为是为了监测之后的故障重现,这一定是高级工程师会执行的操作,更有经验的工程师会建议先收日志再清计数器然后监测故障。若是在20151212日故障发生后清空了计数器,再之后收集了日志交给工程师调查初始故障发生原因,那工程师只能含怨问苍天了。

当计数器有效时,porterrshow的输出结果才有了意义。


通常porterrshow输出内容如下:

Capture.JPG.jpg

接下来我们解释一下各项指标代表的含义,以及我们在看到该项指标时都在关注些什么。

frames tx/rx: tx代表端口发送的数据帧,rx代表端口收到的数据帧。这两个值反映了通过该端口的数据流量,通常可用来粗略判断哪些端口为使用中,哪些端口为闲置状态。

enc_in: 8bit/10bit数据帧帧内的编码错误。数据的损坏会造成该值增长,因此该项指标用于标记数据帧内的编码错误。有时相连末端设备重置/重启也会造成该值增长。

crc_err: 数据帧 CRC 校验错误。数据帧在Payload之后,在EOF (end of frame)之前会添加一个可用于接收端口校验所接收数据是否损坏的校验码。若数据帧损坏,接收端会发现该值不一致,继而该报错值增长。

crc_g_eof: 数据帧 CRC 校验错误,且数据帧 EOF是好的。当数据帧首次被交换机检测到CRC错误时,交换机在转发该帧时,会把EOF置为bad(EOFni);所以后续接收该帧的交换机的端口上,只会有crc_err增长,而crc_g_eof的值保持不变,这样就能很直观的找到产生CRC错误的源头。

too_long: 通常FC数据帧最大为 2148 字节。若EOF损坏或数据帧生成不正确,则该值随之增长。
too_short: 如果在SOF (start of frame) EOF间的长度小于28(24 Header+ 4 CRC)个字节,则该值随之增长。数据发送方故障和链路的不稳定均可能造成该计数器的增长。
bad_eof: 数据帧 EOF 报错。

enc_out: 8bit/10bit 数据帧帧外编码错误造成的错误值累积,通常反映了线缆质量问题,或末端设备异常。此外,由于末端设备的重启带来的端口上下线也可能会引起enc_out的增长。

disc c3: Class 3数据帧被交换机丢弃。若目标地址不可达或者源端口还没有登录到交换机,以及由于拥塞产生超时丢帧(timeout discards)后,该值均会增长。这个参数仅仅代表有丢包发生,但不能说是这个端口本身存在故障。

Brocade Fabric OS微码版本v6.3.1之前,c3 timeout discards值是不分方向的,v6.3.1之后被分为er_rx_c3_timeouter_tx_c3_timeout两项,rx表示接收数据,tx表示发送数据。当端口发送或者接收帧之后,会消耗掉相应的方向上的缓存,Buffer-to-Buffer credit值减少。如果超过500毫秒(默认情况下,依配置不同可能会有改变)credit值始终为0,则认为后续分发动作无法完成,丢弃尚在缓存中的帧,计数器值增加。有大量er_tx_c3_timeout数值累积的F_Port通常为性能问题的故障点,也就是我们常说的瓶颈设备。

关于瓶颈设备的检查,请参照之前的Blog“如何在博科交换机的SAN环境中排查瓶颈设备(Slow Drain Device)?”:

https://community.emc.com/community/support/chinese/storagehw/blog

link fail: 当交换机端口在 LR (Link Reset)接收状态的时间超过 R_A_TOV值时,该错误计数器增长。Link Reset的超时通常会导致Link Failure,且该状态通常说明端口loss of signal loss of sync的时长大于R_A_TOV

loss sync: bit 或者 transmission-word无法被准确区分确认时会引起信号同步失败。末端设备的重启,光纤线的拔插,或交换机端口的上下线均可能带来该问题。
loss sig: 接收方没有成功收到信号。与loss sync类似,末端设备的重启,光纤线的拔插,或交换机端口的上下线都有可能信号的丢失。

link fail, loss sync, loss sig这三个报错在链路初始化的过程中都会产生。而当链路不稳定时,这些错误计数值通常也会随之增长。

frjt: class 2数据帧无法处理时会返回F_RJT报错。
fbsy: class 2数据帧无法在E_D_TOV时间内处理时会被丢弃并返回F_BSY报错。
frjtfbsy用于 class 2。通常说来,FC SAN多用class 3数据帧,因此这两类错误较少见,一般多出现在FICON环境中。


porterrshow的输出结果能够使我们对当前网络中的所有端口报错有一个全局性的了解,当遇到具体问题时,还需查看日志中的其它输出以定位故障点。

 

 

 

#############

# 扩展:er_bad_os #

#############

Brocade交换机中,另外一种常见的问题是不正确的填充字(fillword)配置。当该值设置有悖于最佳实践时,我们用portstatsshow命令可以在端口上观察到大量的er_bad_os

对于8G及以上速率的FC链路,为了减少电磁干扰,T11协议组织在FC-PI-4FC-FS-3 标准里规定了应用arb(ff)信号作为填充字。当末端设备以F_Port/8G速率连入Brocade 8G平台(Condor 2或GoldenEye2 ASIC)时,交换机上需对fillword模式做修改。

Brocade交换机的fillword配置方式为以下4(8G平台,Fabric OS 6.3及后续版本)

     0 | -idle-idle (默认)

          使用idle信号作为端口初始化信号,使用idle作为端口填充字

     1 | -arbff-arbff

          使用arb(ff)信号作为端口初始化信号,使用arb(ff)作为端口填充字

     2 | -idle-arbff

          使用idle信号作为端口初始化信号,使用arb(ff)作为端口填充字

     3 | -aa-then-ia

          先尝试模式1再尝试模式2

EMC的最佳实践是将fillword模式设置为3此模式下交换机首先会尝试先用arb(ff)信号作为端口初始化信号,并使用arb(ff)作为端口填充字;若此法不通,则尝试用idle信号作为端口初始化信号,并使用arb(ff)作为端口填充字。




关于作者:

Vivien Wang

Capture1.JPG.jpg

2014年加入EMC远程技术支持交换机团队。对存储区域网络有较为深入的研究和较为突出的排错能力。持有EMC SAN Specialist及VMware VCP等证书。