本申请是2006年12月22日提交的标题为“串行高级技术附件(SATA)和串行连接小型计算机系统接口(SCSI)(SAS)桥接”的先前提交的美国专利申请No.11/644549(以下称作“SATA专利文献”)的部分延续,将其公开结合到本文中,好像是在本文完全提出。
背景技术
SATA协议概述
本文所使用的“装置”表示遵守本行业所采用的任何已知标准的外设。SATA是大容量存储装置的并行高级技术附件(ATA)附件的高速串行链路替代。所采用的串行链路是点对点高速差分链路,它利用本领域的技术人员已知的千兆位技术和8b/10b编码。SATA协议基于与开放系统互连(OSI)参考模型相似的分层通信模型。下面提供概述。关于更详细情况,读者参阅通过引用结合到本文中的SATA标准文献。在目前于串行ATA工作组网站www.serialata.org可得到的标题为“串行ATA:高速串行化ATA附件”或“串行ATA国际组织:串行ATA修订版2.5”(日期为2005年10月27日)的发布中提供SATA规范。
在SATA协议中,各协议层直接或间接地与其对等部分进行通信。串行ATA链路由按照已知标准的协议来定义,其具有四个通信层,即,用于在物理级执行通信的物理层、链路层、传输层和应用层或者有时称作命令层。发射器和接收器不能直接相互通信,而是必须在到达另一个的对应层之前经过其系统的其它层。例如,对于发射器的物理层与接收器的传输层的通信,它必须首先经过发射器的链路、传输和应用层,然后经过串行ATA链路到达接收器的应用层,最后到达接收器的传输层。
通信或交换的基本单元是帧。帧由帧起始(SOF)原语、帧信息结构(FIS)、对FIS的内容所计算的循环冗余校验和(CRC)以及帧结束(EOF)原语组成。串行ATA组织已经定义其中提供了帧的定义的规范,该规范要在本文档中使用。原语是用于控制和提供串行线路的状态的双字(Dword)实体,其中一字节包含K字符。除了SAS定义的原语之外,串行ATA组织已经定义其中提供了容许原语的定义的规范,该规范要在本文档中使用。
图1示出帧30的示例。在图1中,帧以SOF原语30a开始,之后是第一FIS内容30b,之后是指明发射器没有数据可获得的HOLD原语30c,之后是第二FIS内容30d,之后是被发送以确认接收到接收器所发送的HOLD原语、指明接收器缓冲器处于‘未就绪’状况的HOLDA原语30e,之后是CRC 30f和EOF原语30g。
在图1中,帧30包括用于流程控制的两个原语HOLD和HOLDA原语。HOLD原语指明不能够发送或接收FIS内容。发送HOLDA原语以确认接收到HOLD原语。例如,当接收节点检测到其缓冲器接近全满时,它将向传送节点发送HOLD原语,请求发射器节点停止,而当缓冲器准备好接收更多数据时,接收节点将停止发送HOLD原语。传送节点发送HOLDA原语以确认接收到HOLD原语。直至接收到HOLDA原语,接收节点才继续接收数据。为了防止缓冲器溢出,SATA协议在节点发送HOLD原语与接收HOLDA原语之间需要20个Dword的最大延迟。
存在许多不同的帧类型。例如,要经由直接存储器存取(DMA)发送数据,使用称作DMA建立FIS的帧,之后是DMA数据FIS。一般存在三种类型的FIS结构,一种用于命令,一种用于建立转递,以及另一种用于与传递相关的数据。每个帧结构用于不同目的。发送命令类型的帧来执行命令,使用建立帧来准备命令的数据传递阶段,以及使用数据帧来传递数据。
需要在多个主机单元与用于仲裁它们之间的通信的装置之间耦合的交换机,交换机具有与之关联的时间延迟,其中,尽管交换机的延迟,也满足SATA协议的定时要求。
使用SAS作为链路,三种不同类型的通信协议可用于开启连接。它们是串行ATA隧道协议(STP)、SSP和SMP。STP用于允许在SATA标准中定义的SATA通信方法,SSP和SMP用于在SAS标准中定义的SAS通信方法。SSP用于定义在小型计算机系统接口(SCSI)类型的通信中使用的通信方法。
一旦建立(又称作‘开启’)STP连接,一般遵照SATA协议。一旦建立或‘开启’SMP连接,则遵照SMP协议。更具体来说,开启连接和建立连接,请求帧由始发设备发送,响应帧由目标设备发送,并且关闭连接。上述通信技术以及与SAS有关的更多信息见于SAS标准,参阅如下网站查找其副本:www.t10.org。来自始发设备的SMP请求包括功能代码,其中保留一个区域作为厂商唯一区域,用于进一步定义要由例如目标设备、如能够接收命令的单元或装置执行的功能。
如本文使用的“始发设备”是指发送命令并且能够接收对所发送命令的响应的单元或装置。
目前,不存在已知的维护SAS或SATA通信链路而无需在发生涉及始发设备以及SATA和/或STP目标设备的差错时丢弃它们或者不容许通过链路进行通信的有效方式。此外,不存在在重置装置、如SATA驱动器的同时维护链路的灵活且提供信息的方式。也就是说,例如,与差错的原因有关的信息可能在重置驱动器时因始发设备之间的竞态条件而丢失。此外,不与驱动器相关的差错对于始发设备而言仍是未知的,因为始发设备没有方法检索与差错有关的信息。因此,当发生差错时,除了引起差错或者以某种方式与差错相关的始发设备之外的始发设备的命令被清除或丢失。
因此,上述系统当前面临的问题之一是缺乏始发设备用于获得对系统状态的更好了解的有关差错类型的信息。换言之,当前,由于始发设备仍然不知道与差错有关的信息,所以可能没有实现系统改进。作为一个示例,使始发设备知道差错是由驱动器还是其它方面所引起是适当的。除了以上所述之外,不是由驱动器所引起的差错的示例是驻留在系统中与该驱动器不同的位置的内部组件的问题。更具体来说,在装置的缓冲器的奇偶校验差错的情况下,当前没有已知的检索这种类型的差错的方式。
当始发设备向SATA驱动器发送‘软’重置时,它将重置(或清除)针对另一个始发设备的未决命令,因此,后者不知道其未决命令以及SATA驱动器上的未决命令的清除或丢失,并且仍然不知道其未决命令在该驱动器上被清除,这产生混乱。此外,后者仍然不知道已经去除重置的时间。这使后一个始发设备仍然不知道向驱动器发送其命令的时间或者其未决命令的状态。
另一个示例是无法知道差错的位置。例如,差错可能在始发设备与扩展器和/或驱动器及装置之间的链路中发生。
SATA驱动器仍然不知道多个始发设备的存在,实际上,驱动器知道的是接收命令以及向其发送响应。此外,始发设备仍然不知道其它始发设备的存在。
因此,当前没有在始发设备之间传递差错的实用方式以及始发设备相互之间通过装置或SATA驱动器进行通信的已知实用方式。此外,始发设备无法从SATA驱动器获取差错信息而没有相互冲突。在现有技术系统中,大量工作由始发设备执行以避免冲突,由此降低系统带宽和性能。
当发生差错时,始发设备仍然不知道相对于其它始发设备已经发生的差错的类型。为此,当差错不是始发设备本身的差错时,始发器甚至没有认识到已经存在差错;它们只是在驱动器成功地重置并且始发设备再次被允许访问该驱动器之前不能使用其链路进行通信。
当前,当发生差错时,知道差错的始发设备发送信息以便使到该驱动器的所有链路被丢弃(drop)或断开连接,以免任何其它命令被发送到该驱动器,因为命令在被发送时可能会丢失。链路丢弃将使所有始发设备知道拓扑结构变化。此后,所有始发设备必须查询系统以收集与新拓扑结构有关的信息。这无疑引起混乱以及对性能的不良影响,因为始发设备不是执行作为其任务的实质的输入/输出功能,而是执行查询以发现系统的拓扑结构。因此,使性能降级并且产生混乱。换言之,查询耗用可花费在输入/输出功能上的带宽,因此引起降低的系统性能。
当前系统的又一个问题是缺乏始发设备之间与除了差错之外的各种信息、即状态信息有关的通信。例如,一个始发设备可能希望其它始发设备知道它不久将退出系统。其它非差错相关信息可包括始发设备可操作的时间长度等。此外,没有始发设备检索不与驱动器关联的差错或非差错相关信息的方式。
根据前面所述,需要一种使用始发设备和链路以便进行始发设备之间以及始发设备与目标设备、如SATA驱动器之间的通信的通信系统(或桥接器),这种通信包括但不限于与差错有关的信息。
具体实施方式
在大规模存储器系统、如独立磁盘冗余阵列(RAID)中,改进的桥接装置用于在一个或多个主机(或始发设备)与目标设备之间进行通信。主机和始发设备在本文中用于指同一种装置。目标设备可以是用于存储由始发设备所提供并且由始发设备所访问的信息的磁盘驱动器。备选地,目标设备是SATA装置。本行业已经标准化这种通信中所采用的接口(链路),因此,接口符合本行业众所周知的SATA和串行连接SCSI(SAS)标准。
改进的桥接装置通过多个端口与始发设备进行通信以及通过SATA端口或者使用SATA标准与SATA装置接口的端口与SATA装置进行通信。当始发设备通过桥接装置来访问SATA装置时,桥接装置能够与多个始发设备通信。
桥接装置充当SATA装置与始发设备之间的桥接器(bridge)。为了进一步缩放系统,在始发设备与桥接装置之间采用扩展器,由此允许多个始发设备通过单个扩展器进行通信。如前面所述的存储器系统在图2中示出。
现在参照图2,示出根据本发明的一个实施例的存储器系统10,它包括耦合到一组扩展器14、E0和E1的一组始发设备12、I0和I1,其中这组扩展器与多端口桥接装置16进行通信。大家理解,虽然示出两个始发设备和两个扩展器,但是可采用任何数量的始发设备和扩展器。扩展器14是可选的,以及在这方面,在本发明的其它实施例中可以没有它们。装置16是目标设备。扩展器E0和E1用作交换机,并且通常具有与其连接的许多目标设备和/或扩展器的分级结构。
在一个备选实施例中,图2的扩展器14之中的扩展器包括始发设备。
示出装置16耦合到SATA磁盘驱动器18。磁盘驱动器18是SATA驱动器或装置,因此使用SATA标准与装置16进行通信。示出装置16包括两个SAS端口、即端口20和22,用于引起使用SAS接口与扩展器E0和E1进行通信。在本发明的另一个实施例中,装置16包括单个SAS端口,例如端口20或者端口22。
装置16使用SATA端口24、使用SATA标准协议与驱动器18进行通信。在本发明的一个实施例中,装置16是多端口的,但是可采用单端口装置16。单端口桥接装置16的一个示例在SATA专利文献的图3-5中示出。双端口或者多端口装置16允许SATA装置18成为多端口。双端口或者具有双端口是指具有多于一个通信路径,它因具有两个路径而有助于提高性能,因为两个路径是同时活动的。
虽然图2中未示出,但是在实际应用中,系统10可包括可耦合到扩展器的许多驱动器、如驱动器18。例如,扩展器26可耦合到许多驱动器,以及除了扩展器26之外的其它扩展器(未示出)可用于进一步将其它驱动器耦合到系统。在上述系统中,通常还存在许多始发设备。图2的系统10的一些示例应用包括但不限于文档存储和检索、照片存储和检索、会计软件存储。由于所采用的大存储容量,具有到装置、如始发设备的多个路径非常合乎需要,正如与其状态和差错有关的各种信息也非常合乎需要一样。这显然允许更大的灵活性、更好的系统性能和更低的成本以及其它益处。
备选地,一个以上装置16耦合到驱动器18,这进一步提高系统性能。
可以预料系统10的各种拓扑结构,其中一些在2006年12月22日提交的标题为“串行高级技术附件(SATA)和串行连接小型计算机系统接口(SCSI)(SAS)桥接”的美国专利申请No.11/644549中示出和论述,通过引用将其内容结合到本文中,好像是在本文完全提出。在上述专利文献中,图2-7示出系统10的不同拓扑结构,但可以预料其中没有包含的其它拓扑结构。所引用的专利文献的图8和图9公开了系统10的一些细节,这些细节适用于本文所述的实施例和方法,因为本专利文献的图2的装置16包括所引用的专利文献的图8和图9中所公开的结构。
在存在所使用的多于一个始发设备的情况下,出现多个问题,如先前所示,例如始发设备都希望访问驱动器,特别是当存在例如可能由驱动器引起的差错时。这些问题通过本发明的各种实施例来解决。在差错的情况下,向始发设备报告差错,以及与存储器系统的连通性有关的其它信息可选地也是始发设备可得到的。
差错可通过各种方式引起。一种常见差错在于驱动器18,因为它可能主要因其移动机械零件而挂起或者只是在某些区域变得有缺陷。另一种类型的差错在于例如始发设备或扩展器的装置的发射器或接收器(收发器)。一种示范差错可在始发设备I0与扩展器E0之间的链路、具体来说在图2的42上发生,它可能由始发设备I0的收发器中的问题引起。在现有技术系统中,在这种差错发生时或者之后,始发设备I1仍然不知道该差错及其原因,以及如果差错是在驱动器18中,则始发设备I0和I1都仍然不知道该差错及其原因。
驱动器18是可重置的,以及参照下一个附图提供和论述用于进行这种操作的方法。但是在目前,值得注意的是要指出,根据本发明的方法和设备,多个始发设备可通过一个或多个SAS端口来重置驱动器18,而无需例如在44或46丢弃到扩展器的链路。此外,允许一个端口上的重置的通信传播到另一个端口,而没有例如在44和46丢弃任何链路。
另一种示范差错可引起链路在44和46被丢弃,以及在现有技术系统中,始发设备I1没有信息来确定差错是在扩展器E0与扩展器E1之间还是在装置16中或者在装置18中。在本发明的各个实施例中,由装置16使这种信息对于始发设备I1可获得。在差错由驱动器18引起的情况下,不良状态信息由装置16传送到扩展器E0,以及该事件随后导致链路在44和46被丢弃。但是,在现有技术系统中,在这种情况下,始发设备I1不知道不良状态是否由故障的介质或驱动器18导致或者是否在44和46由链路引起。在本发明的各个实施例中,与引起差错的结构有关的信息由装置16报告,由此通知始发设备I1关于差错的原因。现在可能清楚地知道,存在本发明的实施例和方法对其促进多个始发设备12的始发设备之间的各种类型的信息的通信的更多情况。
差错的跟踪和它发生的次数以及差错是否与驱动器相关对于始发设备是重要信息,因为它可用于提高系统性能和可靠性。
在本发明的实施例中,装置16包括耦合到桥接器40的SAS复用器28。应当注意,虽然装置16示为具有多于一个端口用于耦合到主机或始发设备,但是,可以预料单端口装置16,例如SATA专利文献的图3-5所示,通过引用将其公开结合到本文中,好像是在本文完全提出。
在本发明的一个实施例中,装置16包括除了SAS端口之外的输入端口,因此,虽然本文围绕附图的论述指的是SAS端口,但是实施例并不局限于此。作为一个示例,一个或多个SATA端口可用作对装置16的输入端口。SAS端口是使用SAS标准进行接口的端口,而SATA端口是使用SATA标准进行接口的端口。
复用器28可操作以通过扩展器从两个或更多始发设备接收两个或更多输入。在图2的实施例中,示出复用器28在其端口20从扩展器E1以及在其端口22从扩展器E0接收输入。这些是SAS输入,并且必须转换成SATA,以便使驱动器18被访问。因此,复用器28的输出耦合到桥接器40,其中SAS被转换成SATA以便与驱动器18进行通信。
虽然图2中示出两个始发设备和扩展器,但是可采用任何数量的这类装置。实际上,添加的扩展器26可以可选地耦合到扩展器E0以及耦合到其它磁盘驱动器,而无需通过装置16进行通信,这进一步提供可缩放性。
这组始发设备12的始发设备I0和I1不能直接相互通信,因为它们不是目标设备,并且它们只能与目标设备进行通信。图2中,例如,在始发设备I0与I2之间没有直接路径。在这方面,例如,扩展器E0对于始发设备I1是目标设备,因此,始发设备I1能与扩展器E0以及扩展器E1进行通信,它不能直接与始发设备I0进行通信。类似地,始发设备I0能与目标设备E0和E1进行通信,但不能与始发设备I1进行通信。为此,其中,本发明的各个实施例对于促进即使都不是目标设备的始发设备之间的通信是必要的。
在始发设备发起的通信期间,串行ATA隧道协议(STP)-SAS标准连接按照STP标准被‘开启’,此后SATA标准用于与驱动器18进行通信。
不久将会清楚地知道,本发明的各个实施例允许始发设备使用预定协议相互通信。
装置16的架构允许用于传递控制信息的路径独立于用于传递输入/输出信息的路径。这一点重要之处在于,装置16为系统10提供更大的系统性能和效率。实现这一点的方式至少部分是因为装置16包括用于通过端口24与驱动器18进行通信的SATA总线48以及用于分别通过端口22、20与扩展器E0、E1进行通信的单独SAS总线50。为了更好地理解装置16的架构,读者参阅2006年12月22日提交的标题为“串行高级技术附件(SATA)和串行连接小型计算机系统接口(SCSI)(SAS)桥接”的美国专利申请No.11/644549,通过引用将其公开结合到本文中,好像是在本文完全提出。
作为简要背景,通过端口20和22的通信使用SAS标准来实现。在这方面,执行SMP以便开启由始发设备发起的针对目标设备、如扩展器的连接,以便与驱动器18通信。此后,始发设备向扩展器发送功能并且接收对其的响应,此后始发设备关闭该连接。通过端口24进行通信需要STP,其中开启连接,并且在驱动器18与装置16之间来回进行使用SATA的通信。在上述方式中,实质上独立于SATA/STP执行SMP。
在图3中,示出装置16包括可保存在例如SATA专利文献的装置16的存储器102中的通知标志表52,该表中包含三列以及与始发设备和端口、如端口20和22一样多的行。表52可通过硬件或软件来实现。这个表52用于按照通过以下示例也许会最好地理解的方式来隔离例如最近已经发生的差错。
关于表52中的信息,出现在列‘始发设备’下面的行、即行54-60均表示特定端口和特定始发设备的状态。例如,在行54中,始发设备0(I0)和端口0的状态通过标记为‘通知’的列下面的对应行中的信息示出,它实际上是‘通知标志’的状态。在行56中,始发设备I0和端口1的状态通过列‘通知’下面的对应行中的信息示出。
在行58中,始发设备1(即I1)和端口0的状态通过列‘通知’下面的对应行中的信息示出,以及在行60中,始发设备I1和端口1的状态通过列‘通知’下面的对应行中的信息示出。在采用附加始发设备/端口的情况下,该表会相应地包含信息。由装置16设置或重置的‘通知’标志用于指明与装置、如始发设备关联的例如差错(或非差错)的问题/事件。因此,处于‘通知’状态防止对应始发设备访问装置16。
在例如始发设备I0(在图2中)希望询问有关差错的更多信息或者隔离关于是在驱动器18中或者在装置16以及与其耦合的始发设备之间的差错的原因的情况下,始发设备I0执行SMP以开启连接,然后查询装置16关于装置16是否处于‘通知’事件或者设置了通知标志,不久将更详细地对此进行说明。如果装置16对其的响应为否定,并且装置16没有处于‘通知事件’,则始发设备I0知道差错是由驱动器18引起的。另一方面,如果装置16的响应为肯定,并且它处于通知事件,则与差错有关的进一步信息被传递到始发设备I0。然后,装置16将用允许始发设备知道通知的来源的信息来响应查询。因此,始发设备I0具有与通知的原因有关的知识。如果通知是差错,则以上所述将是差错的来源。
相对于下一个附图中的示例也许会更好地理解存储装置52中的信息用于隔离差错的方式。目前,可以充分地说,本发明的各个实施例允许始发设备之间的通信而无需始发设备之间的直接路径。这为始发设备提供对系统的拓扑结构的更多了解,因此通过允许更多时间使始发设备专用于输入/输出功能来提高系统性能。作为这种通信的一个示例,通过装置16在始发设备之间报告差错,正如差错的原因也报告一样。
本发明的又一个实施例允许始发设备I0和I1具有相互传递除了差错之外的信息的邮箱。邮箱允许一个或多个始发设备相互传递信息,而没有影响SATA命令、如STP。
I0和I1分别指始发设备0和1。图4中,示出示范邮箱存储装置130为装置16中保存的邮箱信息的表。在本发明的一个实施例中,邮箱存储表130位于SATA专利文献所公开的存储器102中。
表130用作使每个始发设备相互传递信息的方式和机制。例如,在图4的示范实施例中,表130包括三列以及数量取决于始发设备的数量的多行。在列132中标识始发设备,在这个示例中存在四个,即I0-I3,在列134中标识端口,端口在这个示例中为端口0和1或者P0和P1,以及在列136中包含关联的始发设备希望传递的信息。存储装置130可通过硬件、通过例如寄存器文件或者通过软件来实现。
作为示例,在SAS端口0(或P0)的始发设备I0包括列136的第一行中的信息,以此方式,始发设备I1在读取存储装置130的内容时被通知I0传递的信息。实际上,通过读取邮箱使I1知道所有始发设备在所有端口所传递的所有信息。在一个典型示例中,列136中的信息以字节为单位。由始发设备所传递的信息的示例与关于驱动器18的信息相似,例如可在驱动器18中的预定位置存储的、其它始发设备关注或者可能关注的某种信息。例如,I0可指明在扇区5和6存储需要读取的信息,得知这种情况后,I1可选择扇区7和8用于相同事情。关键在于,驱动器18中的不同扇区由I1和I1使用,由此避免它们之间的任何冲突。另一个示例是在特定始发设备转为离线之前剩余的时间长度,以及如果这个始发设备正管理系统功能,则在转为离线的始发设备已经离线之后,另一个始发设备这时可能知道进入并且接管转为离线的始发设备所处理的功能。
将从图6更清楚可见,从属关系计数器152用于跟踪装置16的当前拓扑结构的变化,然后同一个计数器在邮箱中用于跟踪始发设备对当前拓扑结构的读取。
因此,始发设备具有将信息存储到表130中其指定区域的能力以及读取表130以便知道新存储的信息和/或接收对于始发设备的先前提出的问题或请求的响应的能力。以此方式,标识与事件有关的信息的‘原因代码’可用于指明问题,它指示始发设备读取邮箱以便知道问题的性质。
在本发明的另一个实施例和方法中,始发设备正常操作的故障或者出于除了故障之外的原因导致替换(R)始发设备替换出故障(或者即将被替换)的始发设备,而系统10没有遇到任何停机时间、如重新启动或断电,并且无需物理移去出故障的始发设备、如始发设备I1,而与由出故障始发设备处理的功能相同的功能这时由替换始发设备、即始发设备1R来执行。作为示例,这种情况如图5所示。
在图5中,根据本发明的另一个实施例,示出存储器系统140包括与扩展器E0和E1进行通信的始发设备I0以及与扩展器E1和E1进行通信的始发设备I1。示出扩展器E0和E1耦合到多端口桥接装置16,示出多端口桥接装置16耦合到SATA磁盘驱动器18。
上述的一个实用示例应用是当网站要被重构时,在那种情况下,可能必须使始发设备不可操作并且实际上将它从系统中移去,而不管是故障还是其它原因,并且用另一个始发设备来替换它,且对系统没有停机时间。
在此情况下,例如,在I1出故障的情况下,它将永久地处于‘通知事件重置’,这用于不必要地消耗宝贵的系统带宽。在本发明的这个实施例中,用承担I1的功能的I1R始发设备来替换I1。为此,装置16需要回收其资源。
在装置16中,存在测量I1处于‘通知’的时间段的计时器142,以及当这个测量的时间段超过预定阈值时,装置16决定从系统10移去I1(或者使I1不可操作)。在本发明的一个实施例中,后者在表150中反映。
当从系统10移去I1时,清除其通知事件(或者重置通知标志),也移除与I1关联的所有其它功能或属性,几乎清除了I1R的状态以重新启动。
在将替换始发设备放入系统10替换另一个始发设备时,虽然被替换始发设备的任务由替换始发设备无缝接管,但未被替换的始发设备仍然不知道系统拓扑结构的这种替换或变化。因此,在本发明的又一个实施例中,使始发设备知道系统拓扑结构变化,这种始发设备替换另一个始发设备。
图6示出根据本发明的另一个实施例、均位于装置16中的从属关系表150和邮箱表130。表150存储系统中的始发设备的从属关系的表,而邮箱表130存储邮箱信息,如前面所述。两个表均由本文的实施例的装置来保存并且位于其中。
表150具有与其关联的从属关系计数器152。每当存储装置150中的任何值或状态改变时,计数器递增一。表150包括基于时隙的信息,时隙是根据端口来标识的。例如,在表150的时隙0,在表150的第一行即顶行中,在列156的对应行中的端口0(其为例如端口22(在图2中))的始发设备0即I0被指明为‘有效’。‘有效’指明对应行的条目是有效的,而无效指明对应行信息是无效的。每当存在对表150的变化时,计数器152递增一。当计数器152的计数超过计数器152的位数时,后者翻转到零。
在表150的各行的第一列,存在附加的存储的始发设备地址。例如,在表150的第一行,标识始发设备0的地址存储在第一列156中。
对于表130,每当始发设备读取表150的状态时,将表130的计数器152与表150的计数器152进行比较,这两个计数器都是物理相同的计数器,以及如果计数的状态相同,则拓扑结构读取是当前的,而如果不相同,则拓扑结构读取不是当前的。也就是说,计数器152还由始发设备用来知道拓扑结构的变化,例如被替换或新始发设备已经引入。
然后通过读取表150来通知始发设备该准确的变化。这是重要的,因为例如如果被请求信息的另一个始发设备已经出故障或者被替换,则通过表130向该另一个始发设备提出请求或输出信息的始发设备不会接收任何信息。通过读取表150,请求方始发设备知道相同情况。在计数器152的当前值和前一个值(即上一次始发设备读取表150的计数器时的值)失配时,始发设备收到拓扑结构发生变化的通知,然后知道要读取表150以便知道特定变化。
在图6中,表150用于控制系统中的参数。也就是说,通过例如SMP,各端口的表150的深度可限于固定或预定深度。通过SMP,可控制表150的列中的值,这允许一个或多个端口的附属(affiliated)SAS地址自动转移到一组新的SAS地址。也就是说,表150可由装置16单方面改变,以便控制或限制始发设备对SATA装置的访问。这样,表150的深度以及对其的访问由装置16来控制或改变。例如,可单方面改变始发设备的地址,以便有效地限制对表150的访问。这进一步允许附属始发设备的数量被限于小于特定SAS端口的从属关系的最大数量的值。
备选地,除了表150之外的表或者表150的扩展形式可用于单方面控制由扩展器对装置16的访问。例如,与表150或者扩展为包括扩展器的表150相似的扩展器从属关系表用于描述与扩展器的从属关系,装置16能够改变其深度和地址以便限制扩展器对SATA装置的访问。
在本发明的又一个实施例中,扩展器、如图2的扩展器14包括与表150相似的从属关系表,该表用于描述扩展器与装置16之间的从属关系,并且改变表的深度和地址,以便限制扩展器对SATA装置的访问。
以上所述有利于为保持从属关系的任何SAS端口,例如SAS复用器和扩展器,提供值。另外,通过以上所述,提供将从属关系从一组始发设备自动转移到另一组始发设备的方式。还有可能使得故意不允许一个或多个始发设备访问装置16。使用这种特征的一个示例是以下情况:始发设备具有高操作带宽,使得它需要对装置16执行,但它不希望其它始发设备使用任何带宽。
在本发明的另一个实施例中,额外的始发设备用于故障转移,使得当操作始发设备正工作时,故障转移始发设备不能获得对装置16的访问。但是,当发生故障时,从属关系可灵活地立即转移到故障转移始发设备,以及系统再次是可操作的。
又备选地,自动从从属关系表中清除与始发设备相关联的任何始发设备地址,该始发设备是超过对装置16进行响应或者与装置16进行通信的预定时间段的始发设备。如果发生超时,则从从属关系表中抽出与引起超时的始发设备关联的SAS地址。
图7示出装置16在希望通知(通知事件)一个或多个始发设备关于事件(称作通知事件)时所执行的步骤的流程图300。事件的示例包括但不限制为:驱动器或SATA装置中的差错或者SAS链路中的‘BREAK’原语的出现或者状态的提供。‘BREAK’原语在SAS规范中定义。下面提供通知事件的其它更具体示例。
图7中,在步骤302,装置16希望通知一个或多个始发设备、如I0或I1关于事件。这引起在通知间执行的下一个步骤304,即设置要进入的通知标志状态(或者设置事件标志)。随后,在步骤306,将通知发送给一个或多个始发设备。随后,在步骤308,执行基于事件的动作。尽管还可以预料其它示例,但是基于(步骤308的)事件的动作的几个示例为:
1.SATA装置(或驱动器)存在差错是引起通知间的事件的一个示例,以及在步骤308所执行的动作是获取(fetch)和存储读日志数据
2.始发设备请求清除其全部命令,这是通知间事件,以及动作是清除所有请求始发设备的命令。
3.通知间事件是非可恢复的驱动器差错,以及动作是重置SATA装置或驱动器
4.通知间事件是向所有始发设备发送具有原因代码的通知以便读取其邮箱的始发设备请求,以及动作是在向始发设备回送通知时使用原因代码。
尽管以上所述提供基于事件的动作的一些示例,但是还可以预料其它示例。
随后,图7中,在步骤310,清除在步骤304设置的通知标志。通知标志的清除可由始发设备或者由装置16来执行,并且通常采取原语或帧的形式。随后,在步骤312,通知过程结束。
尽管还可以预料其它示例,但是(步骤310的)清除通知标志的几个示例为:
1.装置16可自动清除通知标志,然后停止发出开启拒绝(重试),这是拒绝开启请求的原语或者拒绝开启请求的其它类型的原语。
2.始发设备可通过SMP连接来请求装置16清除通知标志,装置16可接受或拒绝清除通知标志的请求。
应当注意,虽然通知示为在步骤306发送,之后是在步骤308执行基于事件动作,但是应当理解,通知可在执行动作的同时发送,或者通知可在执行动作之后发送。这样,步骤304示为设置通知标志的步骤314,此后不是执行步骤306,而是同时执行步骤316和318。备选地,通知标志在执行动作之前设置。在步骤316发送通知,并且在步骤318执行基于事件的动作,以及当步骤316和318均如320所示完成时,在步骤322清除通知标志。
下面是通知事件的一些示例:
1.SAS总线上的ERROR
2.SATA总线上的ERROR
3.SATA驱动器(或装置)上的ERROR
4.希望运行内置自检(BIST)
下面是由装置16发送给一个或多个始发设备的通知的一些示例:
1.设置装置位FIS,其中
N=1(N表示通知,并且出现在FIS的字段中)
I=0(I表示中断,并且出现在FIS的字段中)
2.设置装置位FIS,其中
N和I,各为1或0
3.设置装置位FIS,其中
端口Sel位不等于0
4.采用其它预定义位来设置装置位FIS,
通知可包括标识原因代码的原因代码,即,用于标识通知的原因的代码。通知通常采取原语的形式,并且可宣布例如对系统的拓扑结构的变更。按照SATA Rev.2.6标准所定义的设置装置位FIS的格式如图16所示。
在一个备选实施例中,始发设备可在邮箱中存储信息之后,在步骤302和304之间的通知间设置通知标志。又备选地,通知标志可设置有原因代码,该原因代码传达要传递给另一个始发设备的信息。
在本发明的又一个实施例中,采用装置16上的事件对始发设备进行中断驱动,这些事件不需要现有技术系统所需的查询扩展器以查找事件的位置。又备选地,采用装置16上的事件对始发设备进行中断驱动,这些事件不需要丢弃链接到扩展器的链路,因此提高系统性能。
又备选地,当装置16对始发设备生成通知时,始发设备驱动程序可使用通知帧或原语作为对它本身的中断,以便避免轮询状态。在出现或检测到中断时,始发设备转移到处理中断。这样,始发设备不需要轮询状态,这同样提高了系统性能。此外,由于没有丢弃链路,这也提高系统性能。
图8示出在图7的步骤304设置通知标志与图7的步骤310清除通知标志之间的时间装置16所执行的步骤以及通知一个或多个始发设备关于事件的步骤的流程图400。
图8中,在步骤402,始发设备、如I0请求‘开启’STP连接以便与装置16进行通信。随后,在404,由装置16确定是否设置通知标志。如果是,则在406,进行关于通知是否已经发送给始发设备I0的另一个确定。如果在404确定没有设置通知标志,则该过程继续进行到步骤408,其中正常操作继续进行,以及在步骤410,通过流程图400概述的过程结束。在406,如果确定通知已经发送给始发设备I0,则该过程继续进行到步骤414,其中重试STP连接,以及该过程在416结束。在步骤414的重试引起等待始发设备请求另一个STP开启连接,如步骤402。如果在406确定通知尚未发送给始发设备I0,则该过程进入412,其中进行关于装置16是否准备好发送通知的确定,如果是,则在步骤418发送通知,以及该过程继续进行到步骤416。如果在412确定没有发送通知,则该过程继续进行到步骤414。
图9示出如前面所述可由装置16或者由始发设备进行的、在图13的步骤310清除始发设备标志所执行的步骤的流程图420。使用在步骤422处装置16清除通知标志的示例,始发设备从装置16接收在图7的步骤306出现的关于事件的通知,以及始发设备在步骤424根据通知来执行动作。虽然并不局限于此,但是这种动作的一个示例是清除始发设备所发送的与例如差错有关的命令,并且装置16还清除它的与差错有关的命令,以及该过程在426结束。始发设备知道装置16已经清除其差错的方式是,尝试和重试开启与装置16的STP连接,直到成功进行这个操作,因为当没有清除差错时,STP连接不会‘开启’。
图10示出或由始发设备进行的、在图13的步骤310清除始发设备标志所执行的步骤的流程图430。在步骤432,始发设备接收通知,随后在步骤434,始发设备根据所接收的通知来执行动作,例如但不限于清除其命令,随后在步骤436,始发设备通过SMP连接请求清除通知标志。随后在438,确定通知标志的清除是否由装置16接受。如果否,则该过程回到步骤436,否则,则该过程在440结束。438与436之间的过程来回进行,直到在438接受通知标志的清除。延迟(如果有的话)由从事其它任务的装置16引起。
SMP连接响应可包括原因代码和/或读日志数据和/或与一个或多个差错相关的信息。
现在将提供与“读日志数据”有关的论述。“读日志数据”是由SATA驱动器生成的与SATA装置或驱动器中出现的一个或多个差错有关的差错信息。在一个备选实施例中,任何类型的日志信息或数据、即日志数据都可用于代替读日志数据,因此也被考虑。因此,本文关于读日志数据的所有论述和附图同样适用于日志数据。读日志数据有利地避免了现有技术系统中发生的差错信息的丢失。例如,当驱动器遇到差错时,与差错有关的信息在重置驱动器时被清除,因而可能很有用的信息丢失。通过读取读日志数据,避免了这种信息丢失。另外,驱动器重置之后来自多个始发设备的信息的冲突通过读日志数据来避免。通过读日志数据有利地避免的另一个问题出现在重新映射标签中。标签可在读日志数据中重新映射,以便将其动态分配给不同始发设备。标签与始发设备关联,并且由始发设备用于将所接收的信息与命令相关。
可改变读日志数据,以便确保与始发设备的标签的一致性。在本发明的一个实施例中,使用上文所述的标准,读日志数据可以是来自“read log ext”命令的信息或者SATA驱动器上表示差错信息的其它数据。
读日志数据可包括差错信息或者与装置16和/或始发设备相关的其它类型的信息。获取或检索读日志数据的各种方式的示例如下所述:读日志数据的属性为:
1.始发设备可根据所选方法进行获取。
2.发出读日志数据的SMP请求
3.发出清除标志的SMP请求-响应可包括读日志数据
4.装置16可安排这个数据,并且通过STP或SATA将其发送。
差错日志的一个示例是SATA‘read log ext’命令。
在本发明的另一个实施例中,使用保留标签。保留标签是可用于分配但尚未分配给始发设备标签的标签。始发设备标签是与命令关联的标签,并且一般包含在允许始发设备将某些信息与其中包含标签的命令关联的命令中。保留标签可根据传入的始发设备命令从始发设备的标签动态地分配,其中保留标签用于向SATA装置发出命令。传入的(incoming)始发设备命令是由装置16从始发设备所接收的命令。
在由始发设备清除从属关系时,清除分配给正清除从属关系的始发设备的所有标签。在本发明的一个实施例中,向始发设备分配按照依次顺序的保留标签,使得标签和始发设备的关联是基于标签的编号已知的。备选地,所分配的保留标签不是按照依次顺序。装置16清除与始发设备关联的从属关系,以便回收所分配标签。
如前面所述,始发设备可通过SMP连接来设置通知标签。另外,通知可转到所有附属始发设备或者具有挂起装置16的命令的所有附属始发设备。从属关系是根据SAS标准、限制来自始发设备(对装置16)的连接请求的接受的方式。因此,从属关系允许从预定数量的始发设备到装置16的活动。一旦达到预定数量,则没有更多始发设备通过STP与装置16进行通信,直到始发设备清除其从属关系。也就是说,当表150装满时,没有更多从属关系可添加,直到重置表的最后一列中的‘有效’位之一,这时与重置‘有效’位同样多的附加从属关系可添加到表150。
图11示出在由始发设备读取日志数据(读日志数据)时所执行的步骤的流程图450。图11中,为了便于论述,始发设备x、即Ix用作示范始发设备。这是获取读日志数据的许多方式其中之一。
在步骤452,Ix从装置16接收读日志数据可获得的通知。随后在步骤454,始发设备Ix通过SMP连接请求读取日志数据。随后在456,进行关于读日志数据是否准备就绪的确定,以及如果不是,则该过程继续进行到460,其中进行关于是否尚未获取读日志数据的确定,以及如果不是,则在步骤462,返回‘读日志数据不可获得’的响应。如果在456确定读日志数据可获得,则在步骤458,返回读日志数据,以及图11的过程在464结束。如果在460确定尚未获取读日志数据,则执行步骤462,其中返回‘读日志数据不可获得’。应当注意,通知可在获取读日志数据之前或之后发送。
图12示出相对于始发设备I0所执行的示范步骤的流程图480,采用要传送给其它始发设备(本例中为始发设备I2)的信息来设置原因代码。在步骤482,始发设备10采用原因代码来设置通知标志(图7的步骤304)。随后在步骤484,装置16向始发设备I2发送通知。随后在步骤486,始发设备I2根据伴随I0所设置的标志的I0的原因代码来执行动作(在步骤482)。在上述方式中,I2和I0进行通信,并且甚至根据其通信来执行某些动作(基于事件的动作)。
图13示出相对于第二邮箱所执行的、使始发设备I0与始发设备Ixx之间的信息相互可获得的步骤的流程图500。在步骤502,始发设备I0将信息存储在装置16的邮箱130的预定位置中。随后在步骤504,I0在邮箱中采用I0的原因代码来设置标志,使得读取邮箱的任何设备都知道信息由I0存储在邮箱中的原因。随后在步骤506,装置16向始发设备发送通知,提醒它们关于邮箱中存储的信息。随后在508,始发设备Ixx根据I0在步骤504所提供的原因代码来读取邮箱。在上述方式中,I0和Ixx使用装置16的邮箱130相互通信。
图14示出处理事件、例如但不限于BIST所执行的步骤的流程图510。图20中,在步骤512,始发设备通知装置16执行事件。随后在步骤514,装置16设置适当的标志、如事件标志。随后在步骤516,装置16执行由始发设备在步骤512所请求或通知的事件。在一个示例中,事件是BIST,因此装置16执行BIST。随后在步骤518,装置16发送指示已经执行该事件的通知。随后在步骤520,清除事件标志。
图15示出重新发出(重发)命令所执行的步骤的流程图530。命令在例如因SATA驱动器的差错或重置而尚未处理时需要重新发出。在步骤532,设置通知标志。随后执行两个步骤,一个是步骤534,以及另一个是步骤536。在步骤534,向始发设备发送差错的通知,以及在步骤536,重置SATA驱动器。应当注意,在本发明的示范方法中,重置SATA驱动器没有引起向系统的其余部分广播相同的通知(或者这种变化)。实现广播的一种方式是通过广播原语。
在步骤536之后,执行538,其中向SATA驱动器重发非故障命令。在步骤534和538之后,在540进行关于步骤534至538是否完成的确定,以及如果不是,则该过程等待其完成。如果确定产生肯定结果,则该过程继续进行到步骤542,其中清除或重置在步骤532设置的通知标志。上述过程重新发出因某种原因而没有发送给SATA驱动器的命令,由此避免了始发设备重发命令的需要和/或丢失命令,因而提高系统性能、效率和完整性。
虽然根据具体实施例描述了本发明,但是预计本领域的技术人员肯定非常清楚对它的变更和修改。因此,以下权利要求书要被解释为涵盖落入本发明的精神和范围之内的所有这类变更和修改。本领域的技术人员清楚地知道将本发明与现有技术结合以便开发执行包括本发明的教导的多个功能的装置和方法。这类装置和方法落入本发明的范围之内。