专家问答“SAN网络交换机的端口填充字原理及相关配置”精华整理

无评分
5 Rhenium

专家问答“SAN网络交换机的端口填充字原理及相关配置”精华整理

专家问答“SAN网络交换机的端口填充字原理及相关配置”精华整理

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

介绍

      本文整理了201411月的专家问答“SAN网络交换机的端口填充字原理及相关配置”中的精华问题。原问答贴地址:【专家问答】SAN网络交换机的端口填充字原理及相关配置

更多信息

问题1:什么是“端口填充字”?

回答:要深入地讨论填充字,需要从FC协议的底层说起。相信大家都知道FC网络里面,数据是被分成数据帧发送的,当链路上没有足够多的数据帧时,交换机与设备之间就会发送填充字来保证链路的激活及时钟的同步。填充字同时在端口初始化时被用作初始化的信号,当端口的参数协商完成后,交换机收到第一个填充字时就会把端口状态设为up

      在2G4GFC协议里规定了填充字应为idle信号(0x3EAA2AAAAA),而在8GFC协议里,为了减少电磁干扰,T11协议组织在FC-PI-4FC-FS-3标准里规定了填充字应为arb(ff)信号(0x3E8B2A654E)。

      由此,博科引入了填充字的设置以让客户能够自由更改端口填充字来适配连接着的设备。填充字设置一共有以下4种:

0 | -idle-idle (默认)

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

1 | -arbff-arbff

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

2 | -idle-arbff

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

3 | -aa-then-ia

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

      大家会问为什么博科不把端口填充字在出厂时便设置好,其实他们尝试过,但是发现使用模式3的填充字时HDS有一款存储不支持,会使端口直接进入faulty状态,所以默认的填充字设置仍然是-idle-idle

      那么问题就来了,不正确的端口填充字会有什么坏处咧?在日常工作中我们普遍看到,端口跑在8G,填充字使用默认的模式0时,端口计数器里的er_bad_os增长非常迅速,同时伴随着一定量的enc_outer_bad_osos是指ordered setenc_out是指数据帧之外有编码错误。

New_DS_5100B:root> portstatsclear 2

New_DS_5100B:root> portstatsshow 2

stat_wtx                1734        4-byte words transmitted

stat_wrx                4912        4-byte words received

......

er_bad_os               852032805   Invalid ordered set

      以上的er_bad_os是把端口计数器清干净2秒以后的累积值,很惊人吧?er_bad_os增长到一定程度时,交换机会以invalid word过高为由而把端口设置成faulty状态,而某些HBA也会因为错误值积累到一定的程度而出现端口不停上下线的症状。

问题2:如何确认和更改端口填充字呢?

回答:在博科的FOS系统里,我们可以使用portcfgshow命令来查看:

New_DS_5100B:root> portcfgshow 2

Area Number:              2

Speed Level:              AUTO(HW)

Fill Word(On Active)      0(Idle-Idle)

Fill Word(Current)        0(Idle-Idle)

......

      使用portcfgfillword命令来更改填充字:

New_DS_5100B:root> portcfgfillword 2 3

New_DS_5100B:root> portcfgshow 2

Area Number:              2

Speed Level:              AUTO(HW)

Fill Word(On Active)      3(A-A then SW I-A)

Fill Word(Current)        3(A-A then SW I-A)

......

      需要注意的是,portcfgfillword命令会使端口下线,并以新的填充字上线,总共耗时大概3秒。在使用这条命令的时候,主机上可能会报disk operation error的错误,是正常的。

      另外在FOS 7.0以后,portcfgshow的输出里会有两行fillword的设置(如上),第一行是下一次端口上下线后使用的填充字设置,第二行是目前端口的填充字设置。portcfgfillword里多出了一个参数叫mode(passive),可以使端口记住填充字设置,在下一次端口上下线时才更改配置,以免对生产造成不必要的影响。

      在16G平台上(DCX-851016G板卡,DS6500系列),端口填充字已经在代码层面上解决,由此这些平台上也不需要考虑端口填充字的配置。

      思科的交换机里没有填充字的概念,协议上的更改已经在代码里实现。

问题3SAN交换机的端口填充字配置错误,会引发哪些问题?

回答:简单来说,端口填充字的配置不正确的话会导致端口的错误计数器内er_bad_os的计数快速上升,达到一定程度后会引起交换机自动关闭该端口并将端口设为faulty状态。某些HBA也会因为错误值积累到一定的程度而出现端口不停上下线的症状。

问题4SAN故障三板斧:换SFP,换HBA,换光纤。如果Brocade交换机报disk operation error,那作为SAN管理员该如何排查故障?是否有类似的三板斧,比如先看porterrshow或者errshow

回答:一般我们看交换机日志先看switchshow端口状态,再看porterrshow端口计数器,同时关注fabriclog --show里的端口上下线记录。

      porterrshow里主要关注以下几个错误类型:

crc_err               说明端口收到CRC校验和错误,可能是SFP或者HBA的物理错误。

crc_g_eof           说明收到的CRC错误帧的结尾(end of frame)是好的,这个CRC是由本端口产生的,即SFP物理错误。

enc_out              单独的enc_out说明光纤线收发光不良或有干扰,插拔光纤线时这个计数器会增长迅速。

disc_c3              说明端口上有数据帧被丢弃,需要使用portstatsshow命令来单个查看端口计数器以确定丢帧原因。

c3timeout_tx       说明端口上的丢帧是由于对端无法及时传回R_RDY消息,导致数据帧积压在交换机的缓存内超时而被丢弃。

c3timeout_rx       说明端口上的丢帧是由于无法将收到的数据帧传给相应的内部芯片,导致数据帧积压在交换机的缓存内超时而被丢弃。

      一般c3timeout_tx如果出现在F-port上,说明与其相连的设备是slow drain device;如果出现在E-port上,说明ISL对端的交换机上有slow drain device

      看errshow或者errdump我们主要关注在C2或者C3开头的错误,比如C2-1010Internal monitoring has identified suspect hardware, blade may need to be reset or replaced 说明有硬件错误。平时可以使用errdump -r来使输出反向显示,再加上| more的参数来分屏显示。

问题5:默认安装的情况下,初始化交换机的时候需要特别注意这个问题或者去设置吗?还是可以自适应?

回答:在安装时,博科交换机的填充字默认为mode 0,使用-idle-idle的模式。

      具体设置需要根据网络的规划来手动更改,最终目的是消除端口计数器里的er_bad_os错误。注意这个设置只需要应用于8G的交换机端口,在2G4G端口上反而会影响设备运行。

      在新的DS6500系列交换机和DCX-851016G板卡上,由于使用是新的condor3芯片,所以不需要更改填充字。

      在DS300B/5100/5300MP7500/7600/7800DCX/DCX-4S8G板卡上使用的是condor2golden eye2芯片,所以才需要进行填充字的更改。

版本历史
修订号
1 / 1
上次更新时间:
‎01-27-2015 10:39 AM
更新依据: