在存储网络环境中,性能问题是经常遇到的故障。当性能问题发生时,设备处理速度明显降低、或报I/O的告警,这都会对业务系统造成影响。

性能问题的成因可以是主机、存储,或者是交换机端口。由于某种原因,它们不能及时返回缓存信用(Buffer Credit)到上游设备,于是发生延迟、拥塞甚至(超过规定时间时)丢帧,从而引发性能问题。造成瓶颈设备的可能因素可以是物理层面(如光纤模块(SFP)、光纤线(Cable)、配线架(Patch Panel或ODF)),或是终端设备(如主机CPU、内存不足,有问题的SQL语句,存储性能不足等),也可以是由于SAN环境本身设计的问题,如实际业务量超过设备最大处理能力等。本文将介绍如何在Cisco MDS交换机的SAN网络下排查瓶颈设备。

 

一、瓶颈设备(Slow Drain Device)的成因
要理解瓶颈设备出现的原因,首先要理解交换机是如何实现流量控制的。上文中提及的缓存信用,在流量控制中起到关键作用。每个交换机端口都有若干个缓存信用,其数量在链路起来的时候由该端口和所连设备协商确定。只有当存在可用收发缓存信用时,端口才能够发送流量,同时会消耗其一个可用的缓存信用。当对端接收到这个帧,并且回复了一个确认消息,即分发成功,发送端的可用缓存信用个数才会恢复。由于缓存信用是有限的,当交换机端口没有可用的缓存信用时,不能发送新的帧而进入等待状态,便会产生延时。当然,没有分发出去的帧不会一直占用缓存信用。当占用时间达到500ms(默认配置下)而仍未分发成功时,该帧会被抛弃,链路重置并释放出缓存信用。此时在终端设备上(如主机或存储)一般会提示有I/O报错,而在思科MDS交换机上,对应的计数器值会增长。

 

二、清零SAN中所有思科MDS交换机的计数器(Counter)是排错的第一步
由于计数器的值是累加的,所以性能故障出现后,单纯在第一时间收集日志往往并不能及时帮助判断出问题所在。如果性能故障持续,将交换机计数器(Counter)清零是排错的第一步。清零计数器的命令行(CLI)命令如下:
清除普通端口计数器
To clear interface counters:
MDS-9509# clear counters interface all
清除Port-Channel端口计数器
To clear interface counters if port-channels are configured:
MDS-9509# clear counters interface port-channel <1-256>
清除ASIC计数器
To clear ASIC counters it's required to 'attach' to all line cards:
MDS-9509# attach module 1
Attaching to module 1 ...
To exit type 'exit', to abort type '$.'
Bad terminal type: "ansi". Will assume vt100.
module-1# clear asic-cnt all
在FCIP的拓扑网络中,我们需要用如下命令与IP相关的计数器:
To clear IPS stats on a GigabitEthernet port:

MDS-9509# clear ips stats all
计数器清零后,一般我们推荐等待4-6个小时,或者在严重性能问题出现后等待半小时,再收集以下两条命令的输出:
show tech-support details
show logging onboard
如果知道出现性能问题的初始时间点,我们可以收集:
show logging onboard starttime  mm/dd/yy-HH:MM:SS
比如15年9月29日6点23分50秒:
show logging onboard starttime 09/29/15-06:23:50

 

三、确定SAN网络的拓扑图
对于多交换机网络,会有级联链路(ISL)和级联端口(E-Port)。确定SAN网络的拓扑图有助于梳理有性能问题的数据传输路径。
如下所示,show topology的输出显示了本机与相邻交换机之间的级联情况。show fcs ie的输出显示了本机所在VSAN中所有交换机信息。
Sh9222i-2# show topology
FC Topology for VSAN 1 :
--------------------------------------------------------------------------------
       Interface  Peer Domain Peer Interface     Peer IP Address(Switch Name)
--------------------------------------------------------------------------------
  port-channel100   0x01(1)  port-channel 100  10.32.167.225(Sh9222i-1)
FC Topology for VSAN 30 :
--------------------------------------------------------------------------------
       Interface  Peer Domain Peer Interface     Peer IP Address(Switch Name)
--------------------------------------------------------------------------------
  port-channel100  0x0a(10)  port-channel100  10.32.167.225(Sh9222i-1)
FC Topology for VSAN 40 :
--------------------------------------------------------------------------------
       Interface  Peer Domain Peer Interface     Peer IP Address(Switch Name)
--------------------------------------------------------------------------------
  port-channel100 0x91(145)  port-channel100  10.32.167.225(Sh9222i-1)
Sh9222i-2# show fcs ie
IE List for VSAN: 1
-------------------------------------------------------------------------------
IE-WWN                   IE     Mgmt-Id  Mgmt-Addr (Switch-name)
-------------------------------------------------------------------------------
20:01:00:05:73:ad:26:01  S(Loc) 0xfffc03 10.32.167.226 (Sh9222i-2)
20:01:00:05:73:ad:2a:01  S(Adj) 0xfffc01 10.32.167.225 (Sh9222i-1)
[Total 2 IEs in Fabric]
IE List for VSAN: 30
-------------------------------------------------------------------------------
IE-WWN                   IE     Mgmt-Id  Mgmt-Addr (Switch-name)
-------------------------------------------------------------------------------
20:1e:00:05:73:ad:26:01  S(Loc) 0xfffc14 10.32.167.226 (Sh9222i-2)
20:1e:00:05:73:ad:2a:01  S(Adj) 0xfffc0a 10.32.167.225 (Sh9222i-1)
[Total 2 IEs in Fabric]
IE List for VSAN: 40
-------------------------------------------------------------------------------
IE-WWN                   IE     Mgmt-Id  Mgmt-Addr (Switch-name)
-------------------------------------------------------------------------------
20:28:00:05:73:ad:26:01  S(Loc) 0xfffc90 10.32.167.226 (Sh9222i-2)
20:28:00:05:73:ad:2a:01  S(Adj) 0xfffc91 10.32.167.225 (Sh9222i-1)
[Total 2 IEs in Fabric]

其中Loc代表本交换机,Adj代表直接级联的交换机,Rem代表非直接级联但是在同一个VSAN中的远端交换机。

 

四、存储网络性能分析
一个典型的SAN拓扑如下:
两台交换机级联,均接有设备,中间由四根ISL捆绑成port-channel。4.jpg

 

瓶颈可能出现在如下节点:
边界交换机:

- 服务器性能问题:应用或者操作系统
- HBA问题:驱动或者硬件错误
- 速度不 匹配:存储网络中一个快设备,一个瓶颈设备
- 在虚拟环境中非正常的虚机,导致FC的帧在HBA队列里面无法发出
- 存储子系统性能问题,包括过载

级联链路:

- 缺少buffer信用,尤其是对于长距离传输的拓扑来说
- 终端设备有瓶颈设备存在
- 边界交换机的速度大于网络中间级联口的速度

首先我们需要查看端口计数器的值,检查是否出现discard或者CRC的情况;其次,查看在show logging onboard命令输出中,搜索一些端口是否timeout、credit loss、packet drop之类的错误信息。
下图是用于考量性能问题的计数器及其说明:
5.jpg

其中比较重要的是
FCP_SW_CNTR_TX_AVG_B2B_ZERO
代表端口剩余的缓存信用(Buffer Credit)数量为0的时间。当然缓存信用数量降为0是常见现象,特别是在级联端口或者被共享的存储端口上。该值增长并不等同于出现性能问题,但是如果这个数值的占时间的比例比较高,则意味着可能出现了拥塞。一般来说如果,这个数值如果小于所传输帧数的30%,则被视为是正常的。
c3_timeout
用于判断是否出现丢帧。分为rx_c3_timeout和tx_c3_timeout两种,rx表示接收数据,tx表示发送数据。当端口发送或者接受一个帧之后,消耗掉相应的方向上的缓存信用,并开始计时,如果超过500ms依然没有收到对方的回应,则认为该分发动作没有完成,丢弃该帧,计数器加1。这个数值往往意味着性能故障。

Show logging onboard输出中的计数器种类非常多 ,简单总结了下,我们主要关注如下几个:
1)所有TX发方向的lack of credit error
FCP_CNTR_QMM_CH0_LACK_OF_TRANSMIT_CREDIT 
AK_FCP_CNTR_RCM_CH0_LACK_OF_CREDIT 
2)所有timeout 或者 packet drop的信息
FCP CNTR  LAF C3 TIMEOUT FRMAES DISCARD
THB_TMM_TOLB_TIMEOUT_DROP_CNT
FCP_CNTR_LAF_TOTAL_TIMEOUT_FRAMES
3)所有buffer average to Zero的信息
FCP_SW_CNTR_TX_AVG_B2B_ZERO
在这些计数参数频繁出现时候,我们需要特别注意交换机所连的终端设备,这些设备很可能是瓶颈设备,也就是我们常说的Slow Drain Device。

通过如下命令可以查看端口剩余的buffer credit值:
Sh9222i-2# show interface fc1/7 | inc "fc|redit"
fc1/7 is trunking
    Transmit B2B Credit is 250
    Receive B2B Credit is 250
      250 receive B2B credit remaining
      250 transmit B2B credit remaining
      250 low priority transmit B2B credit remaining

示例:

6.jpg

 

交换机1端口57上有FCP_CNTR_QMM_CH0_LACK_OF_TRANSMIT_CREDIT或者c3 Tx方向的timeout,表示该端口向下游发送数据时,对方回应不及时,Transmit B2B credit降到0超过0.5秒,即而发生丢帧。
接下来让我们看看下游端口的数据。交换机2端口55有timeout相关的counter存在,说明该端口收到上游发送来的帧之后,尝试继续向交换机2上的出口端口转发时,却也因为下一条端口没有可用Credit,超过0.5秒后丢帧。
如果交换机内部没有发生拥塞,或者级联链路没有物理层故障,那么在下游交换机2上应该有一个我们所说的瓶颈设备(Slow Drain Device)。通过show interface counters可以很快的找到这个设备。比如fc1/1是设备口,以下命令输出显示buffer credit明显不够,并且有较多的output discard信息:
Sh9222i-2# show int fc1/1 counters
fc1/1
    5148945 frames output,429093396 bytes
      100 discards, 0 errors
      100 timeout discards, 14130 credit loss
      2745464 Transmit B2B credit transitions to zero
      11 Receive B2B credit transitions to zero
      32 receive B2B credit remaining
      1 transmit B2B credit remaining
      1 low priority transmit B2B credit remaining
同时我们也可以检查在logging onboard日志中是否有credit-loss、request-timeout等出现。

 

五、性能问题排查总结
找出该瓶颈设备(Slow Drain Device)的一般步骤如下:
1.通过show topology和show fcs ie绘制SAN拓扑结构
2.检查show interface中端口是否有errors或者discards的报错;
3.检查show interface transceiver details该端口光线模块收发光情况异常;
4.检查show logging log是否有端口重置link failure的现象
5.检查show logging onboard日志查看是否有credit loss或者packet drop报错比较多的终端设备
6.如上述步骤均未现异常,则说明网络侧不是造成性能问题的原因,此时应检查末端设备(主机、阵列)自身是否有问题。

 

六、其他
排查思科SAN网络中的性能问题,认清重要计数器的含义非常重要。在设备运行正常的时候,经常清零计数器是我们极力推荐的。历

史计数器值会对排错产生误导,在性能问题出现时的统计生成的计数器数据才是排查过程中最得力的工具。




关于作者:

柴佳波 Jimmy Chai

无命名.jpg

2012年加入EMC远程技术支持部光纤交换机团队。对存储区域网络有深入的研究和极强的排错能力。持有EMC SAN Expert、思科CCIE Data Center、博科BCFA/BCFP/BANAS/BATSSVmware VCP等认证。