本申请是David Skirmont、Saumitra Buragohain和Balakrishna Wusirika于2011年3月14日提交的题为“Diagnostic Port for Inter-Switch Link Testing inElectrical,Optical and Remote LoopbackModes”的美国专利申请序列号13/047,513的部分继续申请,美国专利申请序列号13/047,513是2010年9月1日提交的序列号61/379,150的非临时申请,这两者都通过引用而被包括在本文中。
具体实施方式
图1中描述了示例的FC网络。如所描述的,图1的FC网络包括两个FC结构,结构110和结构120。结构120包括交换机160、162和164,它们经由ISL互相耦接,并且也各自地连接到存储设备或计算机系统。例如,交换机164耦接到计算机系统144,交换机162耦接到存储设备142。计算机系统144可以是任何合适的节点设备,包括桌上型计算机、服务器或者用户终端。FC结构110被示出为具有经由ISL耦接在一起的三个交换机150、152和154。这些交换机也各自地耦接到一个或多个存储设备。交换机150耦接到存储设备130和132,同时交换机154耦接到存储设备136,交换机152耦接到存储设备138。交换机150和160各自具有通过链路170连接到彼此的路由器端口。通过使用路由器端口而不是典型的E端口(E_port),结构110和结构120保持独立并且不合并到单个结构中。
图1中示出的每个存储设备可以是任何合适的节点设备,包括JBOD(简单磁盘捆绑)、RAID(廉价磁盘冗余阵列)阵列、磁带库、或者网络数据存储。每个交换机可以具有少如两个、多如256个或更多的端口。
如图1中所描述的,FC网络可以是复杂的。如此,在这些网络中诊断可能的错误或者故障链路可能是有挑战性的。为了更有效率地对大型网络进行故障检测以及改进网络的速度、效率和可靠性,发明人提供了一种使用诊断端口(“D端口”)来诊断交换机间链路中的潜在问题的方法。
D端口是由用户为了运行诊断的目的而配置的端口。在本发明的优选实施例中,任何FC端口都可以被配置为D端口。然而,一旦端口被配置为D端口,其将不再是结构的一部分,因为其将不携带任何交换机间的流量或数据流量。D端口也将不合并结构。D端口仅用于链路诊断目的,以及用来隔离链路级别的错误。
因此,D端口被配置为以最小的用户干预来运行一个或多个链路级别诊断测试,并提供全面的测试结果。由D端口执行的诊断测试实现以下中的一个或多个:1)测试链路的连接性的两端以验证该链路在dB预算内;2)用典型的SAN流量配置使链路饱和以验证结构性能;3)监视光学器件在其运行生命周期内的完整性并确定其趋势。
在本发明的优选实施例中,使用了两种不同的软件模块。D端口的操作和可配置性由结构模块处理。在该优选实施例中,结构模块实现光纤通道交换结构(FCSF)标准。结构模块遵循FCSF标准用于结构初始化过程,诸如确定E端口,分配唯一的域ID给交换机,节流(throttle)端口聚合(trunking)处理,以及分发域和别名列表给该结构中的所有交换机。结构模块还执行D端口相关的操作,诸如读取小型可插拔(SFP)能力和发出D端口的状态改变通知(SCN)以通知该优选实施例中的其他模块。通过使用交换机驱动程序,结构模块执行这些D端口相关操作中的一些。“diag”模块是诊断模块并实现spinfab CLI命令。
在一些实施例中,D端口诊断可以在与结构中的网络交换机之间的ISL连接的E端口上执行。在其他的实施例中,D端口诊断可以在与到设备上的N端口的链路连接的F端口上执行。在另外其他的实施例中,D端口诊断可以在E端口、F端口和N端口上执行。为了清晰,下面的讨论通常按照使用E端口的D端口诊断来成文,但是类似的技术可以被用于F端口和N端口中的D端口诊断。这些条件中的一些可能仅适用于E端口,而其他的可能仅适用于F端口或N端口,再其他的可应用到任何端口。
图2是描述实现D端口的使用的一个实施例的FC网络的框图。图2描述了交换机260、262和264。这些交换机中的每一个耦接到一个或多个存储设备或计算机系统。例如,交换机264耦接到计算机系统244,交换机262耦接到存储设备242,并且交换机260耦接到存储设备240。该交换机中的一些还通过ISL互相耦接。例如,交换机260通过端口261和251耦接到交换机264。交换机260包括连接到主机或服务器245中的主机总线适配器(HBA)246的端口271的端口263。该链路将被描述为节点链路以将其与ISL相区别。
尽管在图2中被描述为单个机架,但交换机260和264可包括在一个或多个机架中的多个网络交换机。在网络200中,主机和设备使用交换机连接到SAN中。(存储设备和交换机的数目是描述性的并仅为举例,任何需要的数目的存储设备和交换机可以连接在网络200中。)
从图2中可以看出,交换机之间的连接创建了交换机间的链路。如此,交换机264和260通过交换机间链路270互相耦接。每个交换机间链路可以根据本发明的优选实施例而被诊断。例如,交换机间链路270可以被诊断以检测潜在的错误和验证交换机间的连接性。为了实现这一点,两个在链路的每一端处的端口首先需更被配置为D端口。在图4的流程图中描述了在将端口配置为D端口时所涉及的示例的步骤。
图3A描述了诸如交换机260、262或264的根据本发明的优选实施例的交换机250的基本框图。处理器和I/O接口复合体202提供交换机250的处理能力。处理器可以是多种合适的处理器中的任何一种,包括Freescale或IBMPowerPC。I/O接口可包括使用驱动器/接收器电路204的低速串行接口(诸如RS-232),或者使用PHY电路206以连接到局域网(LAN)的高速串行网络接口(诸如以太网)。主存储器或DRAM208、和闪存或永久性存储器210连接到处理器复合体202以提供控制该处理器并由该处理器使用的存储器。
处理器复合体202还包括I/O总线接口212(诸如PCI总线),以连接到光纤通道电路214和216。在一个实施例中,处理器202运行在执行本发明的诊断测试中使用的模块。在优选实施例中,光纤通道电路214和216各自包含8个光纤通道端口。每个端口连接到外部SERDES电路218,外部SERDES电路218又连接到媒体接口220,媒体接口220通常为SFP,其接收用于互连用来形成结构的交换机或者连接到各种设备的特定的光纤通道媒体。根据本发明的SFP包括光环回能力以允许到达的帧在SFP自身内部环回出,而不需要接收ASIC以在必要的电-光转换内执行环送。此外,根据本发明的SFP包括内部电环回能力以允许近端测试。处理器202使用结构模块以与SFP通信,来设置电环回和光环回模式两者。
图3B描述了示例的HBA246。FC芯片500连接到PCI-E和电源连接器模块524,用于PCI-E信号、电源和时钟的通信。FC芯片500还连接到SFP模块526和528。SFP模块接纳光电转换器以与光纤光缆一起使用,如在光纤通道中通常所使用的。闪存508保存用于被嵌入在FC芯片500中的CPU的固件。针对各种实施例,闪存508包含固件以允许下面描述的D端口操作,该固件等同于结构模块的相关部分和交换机的交换机驱动程序。在其他的实施例中,执行D端口操作的软件被分开在运行在主机系统及其处理器上的主机驱动程序和固件之间。
图3C描述了FC芯片500的详细框图。FC芯片500由各种模块形成。下面以表格形式简要地列出了这些模块,更详细的说明在表格之后。
表1FC芯片500模块的说明
PCIAPP560提供PCI-E接口给FC芯片500。其可作为PCI-E主控设备,以及发起DMA传送。其也可以起到用于主机访问的PCI-E目标的功能。PCIAPP560对芯片500的其余部分隐藏全部的PCI-E复杂性。其在一边与PCI-E核心562相接口,在另一边与芯片模块相接口,并且支持下列特征:
到达和来自主机存储器的高带宽数据路径。
在系统时钟和PCI-E时钟域之间的跨时钟同步。
支持在PCI-E接口上的未完存储器读取请求。
支持2k字节的最大读取请求大小。
支持2k字节的最大载荷大小。
接受来自DMA模块的2k字节对齐的存储器写入请求。
为主机编程提供寄存器接口。
提供主机-本地CPU邮箱。
针对全部四个功能,提供共享的接口给芯片的其余部分。
PCI-EAPP560将PCI-E核心562连接到FC DMA模块558。SGM模块550连接到FCDMA模块558和CPU542。FCDMA模块526允许在FC芯片500中的总线主控,即,向以及从主机存储器移动数据。
FC DMA模块558经由PCI-E核心562和PCI-E APP模块560提取I/O命令,FC DMA模块558转发该命令给CPQ模块544。两个光纤通道媒体接入控制器(MAC)534提供接口给SAN结构。FC MAC534和PCI-EAPP模块560之间的上行流路径包括在接收帧数据存储单元(Rx FDS)模块536中的接收缓冲器、加密单元556和FC DMA模块558。FC MAC534和PCI-E APP模块560之间的下行流路径包括FC DMA模块558、加密单元556和在发送帧数据存储单元(发送FDS)模块538中的发送缓冲器。Tx FDS模块526和发送FDS模块538与CPU542通信,并且发送FDS模块538另外地与发送队列(TXQ)模块552通信。交叉(crossbar)I/O处理程序(IOH)模块540接收来自FC MAC534的数据,并与发送FDS模块538、CPU542、和IOQ模块554通信。IOQ模块554与IOH模块540、FCDMA模块558以及CPU队列(CPQ)模块544通信。CPQ模块544从IOQ模块554、TXQ模块552和FCDMA模块558接收数据,并发送数据给CPU542。
如图4中所描述的,方法400在步骤410处通过禁用端口251开始。这被完成以使得该端口不再是结构的一部分并且不能携带数据流量。在该端口已经被禁用之后,在步骤420中,该方法继续以将端口251配置为静态D端口。在端口251已经被配置为D端口之后,下一步是在步骤430和440中分别禁用端口261和将端口261配置为静态D端口。在两个端口都已经被配置为D端口之后,该方法连接端口251到端口261。当两个端口被连接时,该方法在步骤460和470中分别使能端口251和端口261。在一个实施例中,当端口251和端口261都已被使能时,该方法在步骤480处已经准备好开始诊断。在另一个实施例中,当第二个端口被使能时,诊断测试将自动开始。
在一个实施例中,方法400可以由用户(例如网络管理员)通过在诸如图2的计算机系统244的管理工作站上访问的应用248而发起。应用248可以包括使得用户能够识别打算要诊断的ISL以及打开诊断模式的一个或多个用户界面或GUI(没有示出)。打开诊断模式可以在识别出的ISL上自动开始运行方法400。在其他实施例中,用户可以发起方法400中的每个步骤。在一个实施例中,用户能够决定要在ISL上运行哪些诊断测试。在诊断测试已经执行之后,结果可以被呈现给用户用于分析。
应用248可被提供在任何需要的非易失性的计算机可读程序存储媒体上,包括但不限于所有形式的光和磁的存储媒体,包括固态存储元件,包括可移动媒体。应用工作站244可以是任何所需类型的运算设备,包括在任何所需的实际硬件平台上执行的虚拟化的计算机。
除了使用应用248,D端口诊断还可以使用在交换机260或264中的一个上实现的命令行界面(CLI),以允许用户发起诊断。在这样的实施例中,可使用端口标识符作为到诊断命令的参数而发起诊断。该处理可以包括查询网络200中的交换机以得到端口的列表,并且接着发送针对所选择的端口的D端口诊断请求。诊断命令可以阻塞等待诊断请求的完成。该命令还可以产生指示诊断测试完成的成功或不成功和/或显示测试结果的消息。
在方法400的步骤480处发起的诊断测试包括以下测试中的一个或多个:1)电环回测试;2)光环回测试;和3)链路流量测试。在一个实施例中,诸如图5中描述的端口510的测试发起者端口发起诊断测试,而该链路另一端的端口做出响应,其被称为测试响应者520。在一个实施例中,基于端口的预先确定的特征,诸如它们的全球唯一名称(WWN),端口被指定为发起者和响应者。例如,具有较高的WWN的端口可以被指定为发起者,具有较低的WWN的端口可以被指定为响应者。在另一个实施例中,发起者身份由用户命令设置,允许任一个端口作为发起者。
如图5中描述的,电环回测试可以发生在发起者端口或者响应者端口本地处。相比之下,光环回和链路流量测试依赖于远程端口来发送回测试帧,应当使用远程端口以及本地端口被执行。在一个实施例中,为了执行链路流量测试,本地和远程端口都应当被编程为重传在该端口上接收到的帧。在测试期间,数以百万计的测试帧被注入到本地端口发送电路中。这些帧通过本地SFP被发送到链路上。远程端口从远程SFP接收该帧,并且将它们重传回到源端口。接着检查接收到的帧的任何错误。
在一个实施例中,链路级别的测试涉及称为spinfab的FC测试工具。Spinfab是一种在线诊断命令,其可以以最大速度验证交换机之间的ISL链路。通过建立硬件中的路由功能以使得由E端口接收到的测试帧在同一E端口上被重传,测试被完成。若干个帧接着被发送给附接到每个指定的活动E端口的端口。这些帧是在正常流量期间从不会出现的特殊的帧,并且针对这些帧的默认动作是将其路由回到发送者。这些帧在交换机之间循环,直到测试终止它们。结构模块依赖于用于运行spinfab的“diag”模块。
图6A、6B和7描述了分别示出根据一个实施例的在为实现D端口诊断而执行的高级别动作期间的D端口状态的梯形和状态图。如图7中所描述的,D端口状态机将会以状态NOT_D_PORT(N_D)开始。在端口结构被创建之后,端口将被初始化到N_D状态。当端口接收到以D端口模式开始测试的请求时,其将从N_D转变到D_PORT_INIT(D0),其中D端口模式由来自结构模块的基于来自管理工具的使该端口上线的指令的ONLINE指令、或者来自诸如使用指导测试开始的spinfab指令的“diag”的管理工具的进程间调用(IPC)而使能。如图6A、6B和7中所示,端口将保持在D0状态处,直到其接收到重新开始测试的IPC调用或ONLINE命令。这时,如果SFP模块存在,则端口将转变到D_CU_LOOPBACK(D1)状态以执行电环回测试。然而,如果在没有SFP模块存在时,端口处在D0状态处并且接收到重新开始测试的IPC调用或ONLINE命令,则该端口将转变到D_PORT_FINAL(D7)状态,并且没有测试会被执行。
在D_CU_LOOPBACK(D1)状态处,端口可以转变到三个不同状态。如果SFP不能电环回,则该端口将被触发(toggle)并且其将直接去到D_OPTIC_LOOPBACK(D3)状态。然而,如果SFP支持电环回测试,其将被使能并且该端口将经历E端口初始化的从ONLINE到AC_PORT或者活动的全部状态。在该阶段,如果AC_PORT SCN命令被从结构模块接收到并且另一个端口正在运行链路测试,则该端口将转变到D_CU_LOOP_WAIT(D1_1)状态并且等待另一个端口。在处于D1_1状态时,要么该端口等待另一个端口完成链路测试,要么交换机经历结构重配置。在任何一种情况下,端口将从D1_1转变到D_CU_LOOP_TEST(D2)状态。如果AC_PORT SCN被接收到并且没有其他端口正在运行链路测试,则该端口也可直接从D1转变到D2。
当在D2状态处时,程序将发起电环回测试,并且将使能子进程完成信号。该程序还将启动针对最差情况场景的计时器,以防测试没有完成。如果电环回测试失败或者由于超时而中止,则端口将从D2转变到D7状态,并且通过设置完成代码为失败代码,诊断测试将被停止。然而,如果电环回测试被成功地完成,则端口将从D2转变到D_OPTIC_LOOPBACK(D3)状态。此时,电环回将被清除,并且端口将由结构模块触发以向另一个端口指示测试已经成功地完成。
在D3状态处,如果外部线缆被连接并且远程端口SFP能够光环回,则端口将通过经历E端口初始化的从ONLINE到AC_PORT的全部状态而执行光环回测试。此时,发起端口发送交换链路参数(ELP)命令并且移动到状态D3_I。响应端口返回ELPACC并且移动到状态D3_T。下一步,该发起或发送端口发送D_CMD_REQ(TEST_READY,OL)以指示想要执行光环回测试。该响应或远程端口针对光环回模式设置SFP。当SFP准备好时,端口以D_CMD_RES(TEST_READY_OL)响应以指示SFP已准备好用于光环回测试。端口分别移动到状态D4_I和D4_T以执行光环回测试。然而,如果在D端口模式时SFP不支持光环回或者两个端口没有正在交换ELP和ELPACC,则该程序将不能执行光环回测试,并且端口将转变到D_REM_LOOPBACK(D5)状态。
在D3_I状态处,端口可转变到两个不同的状态。如果AC_PORT SCN被接收到并且没有其他的端口正在运行链路测试,则端口将转变到D_OPTIC_LOOP_BACK_TEST_INIT(D4_I)状态。然而,如果AC_PORTSCN被接收到并且另一个端口正在运行光环回链路测试,则端口将转变到D_OPTIC_LOOP_BACK_INIT_WAIT(D4_I0)状态并在该状态中等待。在D4_I0状态处,要么端口正在等待另一个端口完成链路测试,要么交换机正在经历结构重配置。端口将保持在D4_I0状态中,直到要么DOMAIN_VALIDSCN被接收到要么另一端口完成了链路测试。这些条件中的任何一个将引起端口从D4_I0状态转变到D4_I状态。当在D4_I状态处时,端口将确定光环回测试是否成功完成。为此,端口将开始光环回链路测试,使能子进程完成信号,并且启动针对最差情况场景的计时器,以防测试不能成功地完成。如果端口确定光环回测试已经失败或者由于超时而中止,其将设置失败代码并且将转变回到D7。然而,如果其确定光环回测试已经成功地完成,其将触发端口并且转变到D_REM_LOOPBACK(D5)状态。注意到的是,触发在图6A和6B中均被描述以允许在这两个图之间参照。
回到D3_T状态,在这个状态时,端口是光环回测试的目标,并且将要么在AC_PORT SCN被接收到时前进到D_OPTIC_LOOP_BACK_TEST_TARGET(D4_T)状态,要么如果其接收到下线SCN则转变到D5状态。在D4_T状态处,端口将等待光环回测试已经完成的指示,使能子进程完成信号,并且启动针对最差情况场景的计时器,以防该测试没有完成。如果端口确定光环回测试已经失败或者由于超时中止,其将设置失败代码并且将转变回到D7。然而,如果其发现光环回测试已经成功地完成(如由触发所指示的),则其将转变到D5状态。
当端口去到D5状态时,如果外部线缆被连接,则端口将接着经历E端口初始化的从ONLINE到AC_PORT的全部状态。下一步,发起者端口将发送ELP,远程端口将会以ELPACC答复ELP。从D5状态,端口可以转变到三个不同的状态。如果端口是发起者并且ELPACC没有被接收到,则端口将返回到状态D7。如果ELPACC被成功接收到,则端口将转变到状态D5_I,此处它可以开始远程光环回。如果端口是远程端口,则其将转变到状态D5_T。当发起者端口接收到ELPACC时,其开始用于远程光环回的处理,并发送D_CMD_REQ(TEST_READY,ROL)以指示其准备好开始用于远程光环回的握手。此时,远程端口转变到状态D5_T,并且答复D_CMD_RES(TEST_READY,ROL)以指示其将开始远程光环回测试。当发起者端口接收到D_CMD_RES(TEST_READY,ROL)时,其针对光环回设置其自身的SFP。远程端口接着执行光环回测试。当完成时,远程端口触发来指示完成。
从D5_I状态,端口将要么转变到D_REM_LOOP_BACK-TEST_INIT(D6_I)状态要么到D_REM_LOOP_BACK_INIT_WAIT(D6_I0)状态。如果AC_PORT SCN被接收到并且没有其他端口正在运行链路测试,则端口将移动到D6_I状态。然而,如果AC_PORTSCN被接收到并且另一个端口正在运行链路测试,则端口将转变到D6_I0状态。端口将保持在D6_I0状态,直到DOMAIN_VALID SCN命令被接收到或者另一端口完成了链路测试。在任何一种情况中,端口将从D6_I0转变到D6_I状态。在D6_I状态处,发起者端口发送D_CMD_REQ(TEST_READY,LF)命令以指示需要开始链路帧测试。远程端口转变到状态D6_T并针对执行链路帧测试所需要的环送设置其自身。当被设置时,远程端口发送D_CMD_RES(TEST_READY,LF)。发起者端口链路帧测试程序开始链路测试,使能子进程完成信号,并且启动针对最差情况场景的计时器,以防该测试没有完成。当链路帧测试完成并且大量的帧已经被发送时,发起者端口触发以向远程端口指示完成。发起者端口将从D6_I转变到D7,无论测试完成与否。如果测试失败,则端口转变时使能失败代码。否则,其转变时禁用失败代码。在触发时,远程端口将移动到状态D7以完成。
在测试被完成后,D7状态是最终的状态。将有与该状态相关联的完成代码。如果所有可应用的测试成功完成,则该完成代码将是SUCCESS;否则其将包含失败代码,失败代码将被传给CLI并且还被如此显示。
D端口将经历与E端口初始化相关联的直到LOOPBACK状态中的链路重设的所有步骤。对于D端口,在链路重设之后执行的通常的E端口初始化协议步骤将被跳过。在电环回和光环回以及链路帧测试期间,非常高数目的帧被循环。端口在每种情况下计数循环的帧的数目,以测量链路流量。
在跨越两个不同结构的长距离端口上可以执行D端口诊断测试,并且D端口测试可无需合并这两个结构而执行。这可通过连接长波SFP的单模光纤或者通过DWDM链路而完成。
如上所提到的,任何FC端口可以被配置为D端口。下面是其中HBA端口被配置为D端口并且和被配置为D端口的交换机端口协作的实施例。描述了三个不同的实施例,在一个中HBA端口没有被配置为D端口但提供了D端口的很多功能,在另一个中交换机D端口被静态地配置并且HBA端口被动态地配置为D端口,在又一个中交换机端口和HBA端口两者都被动态地配置为D端口。
图8和9描述了第一个HBA实施例。在步骤810中,交换机端口263被禁用。在步骤820中,交换机端口263被配置为D端口。在步骤830中,HBA端口271被禁用。在步骤840中,通过在SFP中设置O_WRAP或者以其他方式设置HBA端口为端口旁路模式,HBA端口被配置为环出端口。在步骤850中,端口263和271被连接。在步骤860中,端口263被使能。在步骤870中,HBA端口271被使能,以使得在步骤880中诊断操作可以开始。这些操作以梯形格式被示出在图9中。梯形以两个端口均上线而开始。交换机端口263在状态D0中开始,其中电环回操作被执行。当该操作完成时,状态前进到D3并且ELP命令被提供。由于HBA端口271处于环回模式,该ELP命令被简单地返回到交换机端口263。这引起交换机端口263提供ELPACC,其再次被环回。当该第二通信被检测为正被环回时,交换机端口263被设置到链路帧模式,并且被触发以重设该端口。交换机264清除其针对该端口的差错计数器,并接着发起链路帧测试,其中非常大数目的帧被发送并接着由HBA端口271环回。当已经发送了足够的帧时,差错计数器被检查并且结果被提供。当链路被测试并且至少一些结果被提供时,HBA246的很多其他部分没有被测试。
图10、11A、11B和11C描述了更充分地测试HBA端口271的实施例。图10的步骤类似于图8的步骤,除了在步骤1040中,HBA端口271被动态地配置为D端口,即由管理应用248请求时或当所连接的交换机端口处于静态D端口模式时。
图11A的梯形图以两个端口上线开始。交换机端口263处于状态D1中。HBA端口271处于状态D0中并发送正常FLOGI以登陆到结构。如所示的,这由FLOGI帧中的D0所指示。在优选的实施例中,FLOGI和FLOGIACC帧被用于在交换机端口263和HBA端口271之间传递状态。在优选实施例中,FLOGI帧中的供应商版本级别字段中的比特被使用,尽管另一个选择是也使用FLOGI帧中的标志比特。当交换机端口263接收到FLOGID0时,其以FLOGIRJT进行响应,FLOGI RJT具有静态D端口的说明原因,以指示其被配置为静态D端口。HBA端口271将该响应解释为进入D端口模式的指示,其通过前进到状态D1实现该指示。交换机端口263接着执行电环回测试。在该测试期间的任何FLOGI帧将被忽略并且最终由HBA端口271重复。当交换机端口263完成该测试时,其触发其状态,这向HBA端口271指示交换机端口263准备好前进,因此HBA端口271发送FLOGI D1帧,指示其处于状态D1中。交换机端口263通过返回FLOGIACC D1进行响应。交换机端口263接着再次触发并前进到状态D2。在该触发之后,HBA端口271发送另一个FLOGI D1。这次,交换机端口263通过返回FLOGIACC D2进行响应,指示其处于状态D2中并且HBA端口271应前进到状态D2。
在状态D2中,HBA端口271执行电环回测试并接着触发打开和关闭以指示其完成。交换机端口263前进到状态D3。HBA端口271接着发送FLOGID2到交换机端口263以指示其准备好前进。交换机端口263返回FLOGI ACC D3。HBA端口271前进到状态D3并发送D_CMD_REQ(TEST_READY,D3)以指示其希望往前移动。交换机端口263返回D_CMD_RES(TEST_READY,D3)以指示测试将开始。HBA端口271针对下一个测试阶段配置自身用于光环回。交换机端口263接着发送非常大数量的帧,这些帧被环回,以测试链路和HBASFP中的光学器件。当光环回完成时,交换机端口263触发,向HBA端口271指示完成。HBA端口271以FLOGID3响应,指示状态D3的完成。交换机端口263前进到状态D4并且返回FLOGIACC D4。HBA端口271前进到状态D4并且发送D_CMD_REQ(TEST-READY,D4)以指示其准备好开始它的光环回测试。交换机端口263配置其自身用于光环回,并且返回D_CMD_RES(TEST_READY,D4)以指示测试可以开始。HBA端口271下一步发送非常大数目的帧,这些帧被环回,以测试链路和交换机端口SFP中的光学器件。当光环回完成时,HBA端口271触发,向交换机端口263指示完成。如上,该触发在图11A和11B中均被示出用于在图之间参照。
HBA端口271接着发送FLOGID4,指示状态D4的完成。交换机端口263前进到状态D5并且返回FLOGI ACC D5。HBA端口271前进到状态D5并且准备好自身用于链路流量或端口级别循环模式(wrap mode),以使得到相关的ASIC或芯片的整个路径可以被测试。HBA端口271提供D_CMD_REQ(TEST_READY,D5)以指示其准备好移动到下一阶段。交换机端口263返回D_CMD_RES(TEST_READY,D5)以指示测试将开始。HBA端口271针对下一测试阶段配置自身用于端口环回。交换机端口263下一步发送非常大数量的帧,这些帧被环回,以测试链路、HBASFP中光学器件、以及直到芯片500和进入到芯片500中的各种组件。当端口环回或链路帧测试完成时,交换机端口263触发,向HBA端口271指示完成。HBA端口271以FLOGID5响应,指示状态D5的完成。交换机端口263前进到状态D6并且返回FLOGIACC D6。HBA端口271前进到状态D6并且发送D_CMD_REQ(TEST_READY,D6)以指示其准备好开始其链路流量或者端口环回测试。交换机端口263配置自身用于端口环回,并且返回D_CMD_RES(TEST_READY,D6)以指示测试可以开始。HBA端口271下一步发送非常大数量的帧,这些帧被环回,以测试链路、交换机端口SFP中的和进入到ASIC中的光学器件。当端口环回完成时,HBA端口271触发,向交换机端口263指示完成。
HBA端口271接着发送FLOGID6。交换机端口263前进到最后的状态一一状态D7,并且以FLOGIACCD7进行响应。HBA端口271前进到状态D7,并且提供D_CMD_REQ(Results),其包含在它这一端完成的测试的结果。交换机端口263回复以D_CMD_RES(Results),以提供其结果给HBA246。
因此,当HBA端口271被配置于D端口动态模式中时,如同用ISLD端口配置所完成的,连接的完整测试可以被执行。
图12、13A和13B指示了其中交换机端口263被配置为动态D端口并且HBA端口271被配置为按需端口的实施例。在按需模式中,端口像正常端口一样运转,但当诸如上电或错误的内部事件发生时,端口切换到D端口模式。在该模式中,交换机端口263正常地运行,直到其接收到FLOGID1,此时其改变到D端口模式。图12的步骤类似于图10的步骤,除了在步骤1220中,交换机端口263被配置为动态D端口并且HBA端口271被配置为按需端口。图13A和13B大体上与图11A和11B相同,除了HBA端口271通过发送FLOGID1而在状态D1开始。由于上电测试或内部错误,HBA端口271进入该状态。
操作如图11A和11B中前进,直到到达状态D7。在交换机端口263发送它的D_CMD_RES(Results)之后,HBA端口271通过触发进行确认。该触发是对端口263和271两者的回复到正常端口操作(即F端口和N端口)的指示。HBA端口271通过发送FLOGI D0开始正常结构登陆。交换机端口263以正常的FLOGIACC——FLOGIACCD0进行响应,并且接着操作正常地继续。
其他组合也是可能的。例如,端口263和271都可以被配置为静态D端口,因此,一经连接就开始正常的D端口操作,即交换机端口263开始如上面所讨论的电环回测试。另选地,HBA端口271可以被配置为静态D端口,并且交换机端口263可以为动态D端口。HBA端口271将以FLOGID1开始,交换机端口263将以FLOGIACCD1对其响应,以使得其可以执行它的电环回测试。接着操作将如上面地前进。
图12、13A和13B的角色可以反转,以使得当交换机264而不是HBA246上电时开始操作。交换机端口263将开始进行电环回测试,并且忽略或者拒绝任何接收到的FLOGID0帧。操作将如图11A和11B中地前进。
如果端口263和271都被配置为动态模式,则用户可以从HBA发起测试,这对于图10、11A、11B和11C中所描述的实施例会是可行的,尽管在其特定示例中,HBA端口271由于交换机端口263处于静态D端口模式而进入了D端口模式。两个端口都将正常启动。当在HBA246处接收到用户命令时,其会将HBA端口271转变到D端口模式并用来自HBA端口271的FLOGID1开始处理。FLOGID1的接收将触发交换机端口263进入D端口模式,并且完整测试将发生。
如果两个设备都被配置为按需模式,如果交换机264或者HBA246检测到指示对链路测试的需求的内部错误,则交换机264或者HBA246可以自己开始D端口操作。例如,如果HBA246确定了该需求,则操作将如图13A和13B中地前进。
在其他实施例中,动态和按需模式可以被组合,产生正常操作,直到上电、错误或者用户请求。
可以理解的是,如果所需的能力不存在或者存在已出现的错误,则上述状态中的很多个可以被跳过。要跳过的需求可以被指示,在一个实施例中,这是通过简单地将下一FLOGI或FLOGIACC帧中的状态值前进到可被执行的下一操作,或者在另一个实施例中,这可通过在给定的测试被请求或者将要开始时使用D_CMD_REQ(TEST_SKIP)命令来完成。
还可以理解的是,当交换机端口和HBA端口处于按需或动态模式时,对于每个诊断会话来说,如在图10和12中所完成的端口禁用和使能可以不是严格地必须的。这些模式可以被存储,以使得一经交换机或者HBA上电,端口直接进入这些模式,而无需进一步的特定用户指令。如上面所讨论的,诊断会话可以在稍后的时间根据用户命令而开始,在端口已经连接、活动以及通信了一段时间之后,而不需要特别地禁用和重使能端口。提供图10和12用于与图4和8形成对比,在图4和8中由于端口必须被下线以进入静态D端口模式,所以需要禁用。
因此,交换机和HBA链路、节点链路的完整测试可被以和ISL相同的方式完成,尽管由于端口性质的原因,命令稍有不同。
进一步注意到,因为交换机端口可以被配置为按需端口或者为动态端口,所以如果交换机端口中的一个被配置为按需模式并且一个被配置为动态模式,则当从按需端口被发起时,类似的自动的根据命令或根据重设的诊断测试可以发生。如果两个端口都被设置到动态模式,则根据请求的测试也可以在ISL上从任何一端完成,如果没有错误的话,则操作返回到正常ISL操作。
因此,D端口诊断测试可以被用来在光纤通道网络中执行链路级别的健全(sanity)测试。这样的测试包括执行电环回测试、光环回测试和链路流量测试。为了实现该诊断测试,两个在链路每端处的端口首先被识别出,并且接着被用户静态地配置。端口将被配置为D端口,如此其将被从结构完全地隔离,没有数据流量流经它们。端口接着被用来发送测试帧以执行诊断测试。以这种方式,D端口诊断测试改进了用于检测单链路故障的测试能力。
尽管上面一般地按照FC结构并使用FC术语来描述,但针对端口适度停止运作的问题和技术并不限于FC结构和协议,而是可以使用与上面描述的那些类似的技术而实现在以太网和其他类型的网络中,包括使用IEEE数据中心桥接的无损网络。
可以理解的是,上面的说明旨在是描述性的,而不是限制性的。例如,上面描述的实施例可以被互相组合使用。一旦阅读了上面的说明,对于本领域技术人员来说,许多其他的实施例将会是明显的。本发明的范围因此应该参考权利要求连同这些权利要求有权享有的等同物的完整范围而确定。在权利要求中,措辞“including”和“in which”被用作各自的措辞“comprising”和“wherein”的普通英语等价物。