智能可缩放存储切换架构转让专利

申请号 : CN200680030571.3

文献号 : CN101356506B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : J·D·诺斯科特J·G·汉科B·K·舒米特

申请人 : 晶像股份有限公司

摘要 :

本发明提供了一种利用商品、用户级别的存储设备来提供高级存储特征的系统和方法。高级存储系统是一种连接在计算机系统与一个或多个物理磁盘驱动器之间的元件。高级存储系统的主机接口将它自身作为虚拟磁盘驱动器呈现给计算机系统,它执行用户级别的存储硬件的命令,该用户级别的存储硬件为计算机系统的主机控制器所熟知。同样地,高级存储系统的存储设备将它自身驱动器作为用户级别的主机控制器呈现给一个或多个磁盘驱动,而不管与它相连的物理存储设备的实际拓扑结构是什么。该系统为用户提供了一种简单的方法来组合低成本、用户级别的硬件,用以向计算机系统添加附加的高级存储特征。

权利要求 :

1.一种将物理驱动器呈现为一个或多个虚拟驱动器的系统,包括:主机接口元件,它被配置成从计算机系统(100)接收虚拟命令;

映射元件,它被配置成将所述虚拟命令映射成一个或多个映射命令;以及设备接口元件,它被配置成向一个或多个存储设备发送所述映射命令,其中所述系统被配置成从所述一个或多个存储设备接收对所述一个或多个映射命令的响应以组合所述响应,并且基于所述响应在对所述虚拟命令的应答中向所述计算机系统发送单个虚拟响应,其中所述设备接口元件被耦合到所述存储设备以及与其他系统相关联的其他主机接口元件,并且其中所述设备接口元件被进一步耦合到所述系统的第二实例中的主机接口元件以便于级联所述存储设备,并且其中所述存储设备使用投机性的确认来减少由命令接收的第一时间与命令完成和确认的第二时间的延迟而导致的等待时间。

2.根据权利要求1所述的系统,其特征在于,所述映射元件在制造所述系统时被配置。

3.根据权利要求1所述的系统,其特征在于,所述映射元件配置可通过修改一组硬件管脚的连接来改变。

4.根据权利要求1所述的系统,其特征在于,所述映射元件配置可通过修改策略表来改变。

5.根据权利要求1所述的系统,其特征在于,所述映射元件配置响应于将新设备驱动器连接到所述设备接口元件而自动改变。

6.根据权利要求1所述的系统,其特征在于,可由主机计算机系统存取的所述级联的存储设备超出了自然由所述主机计算机系统所支持的存储设备的数量。

7.根据权利要求1所述的系统,其特征在于,所述设备接口元件自动选择用以存取级联物理设备的路径。

8.根据权利要求1所述的系统,其特征在于,所述主机接口元件在接收到对映射命令作出的响应之前发送对虚拟命令的响应。

9.根据权利要求1所述的系统,其特征在于,所述主机接口元件以比连接到所述设备接口元件的存储设备所支持速率快的速率进行通信。

10.根据权利要求1所述的系统,还包括用于管理所述系统的配置的配置元件。

11.根据权利要求1所述的系统,其特征在于,所述主机接口元件利用SATA命令与所述计算机系统通信。

12.根据权利要求1所述的系统,其特征在于,所述设备接口元件利用SATA命令与至少一个设备通信。

13.根据权利要求1所述的系统,其特征在于,所述主机接口元件接受SATA端口倍增器命令。

14.根据权利要求1所述的系统,其特征在于,所述主机接口元件接受SATA NCQ命令。

15.根据权利要求1所述的系统,其特征在于,映射命令是物理命令。

16.根据权利要求1所述的系统,其特征在于,映射命令是虚拟命令。

17.根据权利要求1所述的系统,其特征在于,所述一个或多个设备中的至少一个是物理设备。

18.根据权利要求1所述的系统,其特征在于,所述一个或多个设备中的至少一个是虚拟设备。

19.如权利要求1所述的系统,其特征在于,所述系统被配置成在执行所述虚拟命令的所述一个或多个存储设备确认相应操作的成与败之前,投机性地确认所述虚拟命令成功。

20.一种在存储系统内将物理驱动器呈现为一个或多个虚拟驱动器的方法,所述方法包括:从计算机系统(100)接收虚拟命令;

将所述虚拟命令映射成一个或多个映射命令;

向一个或多个存储设备(180)发送所述映射命令;

从所述一个或多个存储设备接收对所述一个或多个映射命令的响应;以及组合所述响应并且基于所述响应在对所述虚拟命令的应答中向所述计算机系统发送单个虚拟响应,以及其中发送所述映射命令包括直接向存储设备和所述系统的第二实例发送所述映射命令以便于级联所述存储设备,并且其中所述存储设备使用投机性的确认来减少由命令接收的第一时间与命令完成和确认的第二时间的延迟而导致的等待时间。

21.根据权利要求20所述的方法,包括接收配置信息,并且其中映射所述虚拟命令包括使用所述接收的配置信息。

22.根据权利要求21所述的方法,其特征在于,所述配置信息在制造所述系统时接收。

23.根据权利要求21所述的方法,其特征在于,所述配置信息响应于将新设备驱动器连接到设备接口元件而自动改变。

24.根据权利要求20所述的方法,其特征在于,可由主机接口存取的级联存储设备超出自然由所述主机计算机系统支持的数量。

25.根据权利要求20所述的方法,其特征在于,在接收到对映射命令作出的响应之前发送所述虚拟响应。

26.根据权利要求20所述的方法,其特征在于,以比向物理设备发送映射命令的速率快的速率接收虚拟命令。

27.根据权利要求20所述的方法,其特征在于,映射命令是物理命令。

28.根据权利要求20所述的方法,其特征在于,映射命令是虚拟命令。

29.根据权利要求20所述的方法,其特征在于,所述一个或多个设备中的至少一个是物理设备。

30.根据权利要求20所述的方法,其特征在于,所述一个或多个设备中的至少一个是虚拟设备。

31.如权利要求20所述的方法,其特征在于,在执行所述虚拟命令的所述一个或多个存储设备确认相应操作的成与败之前,所述存储系统投机性地确认所述虚拟命令成功。

32.一种用于将物理驱动器呈现为一个或多个虚拟驱动器的装备,所述装备包括:用于从计算机系统(100)接收虚拟命令的装置;

用于将所述虚拟命令映射成一个或多个映射命令的装置;

用于向一个或多个存储设备(180)发送所述映射命令的装置;

用于接收对所述一个或多个映射命令的响应的装置;以及

用于组合所述响应并且基于所述响应在对所述虚拟命令的应答中向所述计算机系统发送单个虚拟响应的装置,其中所述发送映射命令的装置包括用于直接向存储设备和所述装备的第二实例发送所述映射命令以便于级联所述存储设备的装置,并且其中所述存储设备使用投机性的确认来减少由命令接收的第一时间与命令完成和确认的第二时间的延迟而导致的等待时间。

33.如权利要求32所述的装备,其特征在于,还包括用于在执行所述虚拟命令的所述一个或多个存储设备确认相应操作的成与败之前投机性地确认所述虚拟命令成功的装置。

说明书 :

智能可缩放存储切换架构

[0001] 相关申请的交叉引用
[0002] 本申请要求2005年8月25日提交的、发明名称为“SMART SCALABLESTORAGE SWITCH ARCHITECTURE”、申请号为60/711,863(律师案号59472-8092.US00)的美国临时专利申请的优先权,在此引用其作为参考。
[0003] 背景
[0004] 存储系统经常使用多个磁盘驱动器来提供例如容错、增加的吞吐量、增加的存储量和可扩展性的特征。例如,镜像使用了两个或多个驱动器来存储数据的复制副本,从而在其中一个驱动器出现故障时仍然可以从另一个驱动器中读取数据。条带化允许将数据划分成可同时并行写入(读出)两个或多个驱动器的部分,以提供增加的吞吐量。级联组合了两个或多个驱动器,从而允许比可从单个磁盘驱动器中获得的更高的存储量。虽然这种特征已变为在企业类存储解决方案中是通用的,但是这些特征在用户系统中仍然是罕见的。组装这种系统的成本和复杂性阻止了许多用户利用这些高级存储特征。
[0005] 对商品、用户级别的存储硬件的设计限制还防止用户从这些高级存储特征中获益。例如,许多计算机系统限制了可由单个主机寻址的磁盘驱动器数量。串行高级技术附加装置(SATA)1.0规范(可从www.serialata.org网页中获得)仅支持将单个磁盘驱动器连接到主机。随后添加了附加寻址方案,即SATA II端口乘法规范(可从www.serialata.org网页中获得),它允许主机对15个物理磁盘驱动器进行寻址,但并非所有主机都支持该最新规范,而该主机计算机系统管理多个驱动器涉及对许多用户很困难的附加复杂性和配置。该最终结果就是用户无法获得易于使用、低成本且能够提供对企业类计算机系统有效的高端存储特征的硬件。
[0006] 概述
[0007] 提供了一种利用商品、用户级别的存储设备来提供高级存储特征的系统和方法。高级存储系统是一种连接在计算机系统与一个或多个物理磁盘驱动器之间的元件。高级存储系统的主机接口将它自身作为虚拟磁盘驱动器呈现给计算机系统,它执行用户级别的存储硬件的命令,该用户级别的存储硬件为计算机系统的主机控制器所熟知。同样地,高级存储系统的存储设备将它自身驱动器作为用户级别的主机控制器呈现给一个或多个磁盘驱动,而不管与它相连的物理存储设备的实际拓扑结构是什么。首先,高级存储系统接收从计算机系统到虚拟设备的命令,并将该命令映射成一个或多个物理命令。接下来,将映射的物理命令发送到物理磁盘驱动器来执行命令实体。最后,组合来自于物理磁盘驱动器的应答,并把对虚拟命令的单个应答发送回计算机系统。该系统为用户提供了一种简单的方法来组合低成本、用户级别的硬件,以向计算机系统添加高级存储特征。
[0008] 提供此概述是为了以简化方式介绍将在以下详细说明中进一步描述的的概念的选择。此概述并不旨在标识请求保护的主题的关键特征或基本特征,也不旨在用来限制请求保护的主题的范围。
[0009] 附图概述
[0010] 图1是示出一个实施例中的高级存储系统的元件的框图;
[0011] 图2示出一个实施例中的级联的高级存储系统设备的拓扑结构;
[0012] 图3是示出一个实施例中的对系统元件进行虚拟到物理映射的处理流程图;
[0013] 图4是示出一个实施例中的对元件进行虚拟到物理映射以生成虚拟响应的处理流程图;
[0014] 图5示出一个实施例中的各种存储架构;
[0015] 图6示出一个实施例中的SteelVine结构的各种应用;
[0016] 图7示出一个实施例中的策略与机制的分离;
[0017] 图8示出一个实施例中的虚拟命令向物理命令的转换;
[0018] 图9示出一个实施例中的SteelVine元件的逻辑层;
[0019] 图10示出一个实施例中的物理磁盘区域向虚拟驱动器的转换;
[0020] 图11示出一个实施例中的通过级联物理磁盘区域来创建虚拟驱动器;
[0021] 图12示出一个实施例中的存储子系统软件元件的高级视图。
[0022] 详细说明
[0023] 提供一种利用商品、用户级别的存储设备来提供高级存储特征的方法和系统。例如,高级存储系统允许使用多个现行的硬盘驱动器来提供容错存储系统。该高级存储系统是一种连接在计算机系统与一个或多个物理磁盘驱动器之间的元件。高级存储系统的主机接口将它自身作为虚拟磁盘驱动器呈现给计算机系统,该虚拟磁盘驱动器执行用户级别的存储硬件的命令,该命令为计算机系统的主机控制器所熟知。例如,高级存储系统可作为单个硬盘驱动器向计算机系统显现。同样地,高级存储系统的存储设备接口将它自身驱动器作为用户级别的主机控制器呈现给一个或多个磁盘驱动,而不管所连接的物理存储设备的实际拓扑结构是什么。例如,高级存储系统可以连接到两个物理驱动器,这两个物理驱动器作为单个虚拟磁盘驱动器向计算机系统显现,而且每一个磁盘驱动器会相信其为连接到该系统的唯一驱动器。计算机系统、高级存储系统和磁盘驱动器之间的每一个连接都形成一个数据通道。首先,高级存储系统接收从计算机系统去往虚拟驱动器的命令,并把该命令映射成一个或多个物理命令。例如,该存储系统可接收从虚拟驱动器上的一个位置中读取一兆字节数据的命令,该虚拟驱动器实际上存储在两个不同的物理驱动器。接下来,将映射的物理命令发送到物理磁盘驱动器以执行命令实质。例如,可以将虚拟读取命令分成两个单独的读取命令,这两个单独的读取命令被发送到各个物理磁盘驱动器驱动器以使其读取该数据的不同部分。最后,组合来自该物理磁盘驱动器的应答,并把对该虚拟命令的单个应答发送回计算机系统。例如,可以把从两个单独的磁盘驱动器中读取的数据组合成单个应答,就像是从单个磁盘驱动器中接收了该数据一样。为了降低成本,可以在单个芯片上提供高级存储系统。该系统为用户提供了一种简单的方法来组合低成本、用户级别的硬件以向计算机系统添加高级存储特征。
[0024] 在某些实施例中,在制造过程中高级存储系统被配置成提供特定的特征,以致于无需用户配置。例如,高级存储系统可被配置成级联与之相连的附加磁盘驱动器。用户购买该高级存储系统和几个硬盘驱动器。计算机系统知道随着在高级存储系统上连接每一个新的驱动器,单个虚拟驱动器的容量增加。用户甚至能够在稍后购买附加的驱动器来添加更大的存储容量,而无需重新配置主机系统。还可以将高级存储系统配置成提供镜像以防止丢失数据。当用户连接附加的硬盘驱动器时,每一个硬盘驱动器上的数据被镜像到其他驱动器上,从而在一个驱动器出现故障时,可以在另一个磁盘驱动器上存取(例如,读出、写入等)数据。可以通过一系列的硬件管脚或跳线,或者在制造过程中使特定的固件图像闪存到系统,来配置高级存储系统。例如,系统可使用策略表来以性能指示的方式指定配置信息。当设备内的控制逻辑达到判定点且必须从多种可能性中选择一种做法时,参考该表并执行由该表指定的动作。这允许仅通过修改策略表的内容来使用相同的硬件以暴露不同的特征。还可提供硬件管脚来超驰策略表内特定的策略以允许附加的可配置性,而无需修改该策略表。
[0025] 在某些实施例中,可以级联高级存储系统与其他这种系统来提供附加的存储特征。例如,高级存储系统的一个实例可被连接到主机计算机系统,而高级存储系统的另一个实例可被连接到该第一实例。这样,就可由普通用户轻易地组合复杂的存储拓扑结构。例如,高级存储系统的配置成级联与之相连的设备的实例可被连接到主机控制器,而其他被配置成对相连的驱动器提供镜像的实例可被连接到该第一实例,以便于创建大容量、镜像的虚拟存储设备。主机系统还可以只看到单个大的磁盘驱动器,但可使用标准的磁盘驱动器命令来与相连的存储设备通信。高级存储系统的每一实例都把在主机接口上接收的虚拟命令转换成物理命令,其中该物理命令被发送到存储接口上的各个相连驱动器(级联的高级存储系统实例又可将此物理命令视为虚拟命令)。
[0026] 在某些实施例中,高级存储系统分离主机与高级存储系统之间的确认周期和高级存储系统与相连设备之间的确认周期。例如,高级存储系统可以投机性地确认已经响应在主机接口上接收的虚拟命令而写入了数据,这甚至是在执行该命令的物理驱动器确认该操作的成与败之前。在其中利用了高级存储系统来级联多个物理驱动器的拓扑结构中,投机性的确认通过减少由每一层在命令接收时与命令完成和确认时之间的延迟而导致的等待时间来提高性能。该系统还可以通过对指示成功的请求作出响应来隐藏对失败于主机计算机系统的物理命令的重新尝试,然后重新尝试该物理命令直至它成功。在一些情形中分片段执行整个存储操作,例如分块写入大量数据,从而在高级存储系统投机性地确认一个块的成功写入最终失败时,该系统可以报告整个存储操作失败。这允许系统获得附加的性能,同时保持了主机系统对操作的成功或失败的看法的统一性。
[0027] 在某些实施例中,高级存储系统将几个缓慢的数据通道合并成一个快速的数据通道。例如,如果高级存储系统连接到两个执行SATA I规范的物理磁盘驱动器,其数据传输率为1.5吉比特每秒(Gbps),则高级存储系统可向计算机系统提供SATA II规范的主机接口,其数据传输率为3.0Gbps。高级存储系统对磁盘驱动器进行并行读写,而且计算机系统从两个驱动器合并的吞吐量中受益。
[0028] 在某些实施例中,高级存储系统自动选择用于在多个驱动器和级联的高级存储系统元件当中发送存储命令的路线。高级存储系统可以利用网格拓扑结构来以通过最小化驱动与主机计算机系统之间的跳跃次数减少等待时间的方式对每一个驱动器进行存取驱动器。例如,可以连接多个高级存储系统元件来形成网格。可以在该网格内以多种不同的方式来路由命令。例如,可以通过一连串10个高级存储系统元件来向驱动器发送命令,但这会导致完成该命令要非常高的等待时间。相反,高级存储系统元件将彼此通信以选择去往级联的磁盘驱动器的最快路径。
[0029] 在某些实施例中,高级存储系统在附连了新的驱动器时自动对其进行重新配置。例如,当用户把第四个驱动器附连到系统上时,高级存储系统就会自动级联该驱动器与其他驱动器以增加现有虚拟卷的大小。同样地,高级存储系统会自动使用该新的驱动器作为对其他卷的镜像。该判定可以基于多个因素,例如对高级存储系统的配置、现有的和新的驱动器的大小以及驱动器速度。例如,如果该配置指示应当执行镜像,则高级存储系统就可以使用单个相连的75吉比特(GB)磁盘驱动器来镜像其他三个相连的25GB驱动器。同样地,如果已经连接了两个1.5Gbps驱动器,则该系统就会配置新的3.0Gbps驱动器作为镜像,这是因为它可以同时写入两个原始驱动器的同一时间量内进行写入。因为该系统不需要外部配置,所以它可用在其中不能有其他存储系统的情况下。例如,机顶盒、个人录像机、MP3播放和其他嵌入式设备都可从附加存储和诸如容错那样的高级特征中受益,但是没有配置用户接口、或在一些情形中甚至是其他存储系统会需要的用于显示一配置用户接口的硬件。
[0030] 在某些实施例中,高级存储系统在虚拟到物理转换状态信息中记录所附连的物理驱动器的序列号。对驱动器的标识允许更多响应于外部事件而篡改的策略,例如附连新的或之前见过的驱动器。当插入驱动器时,将其与已知物理驱动器的列表进行比较。如果识别了该新附连的驱动器,而该驱动器附连到不同的物理接口,则自动更新转换信息来说明该再定位。如果没有识别该驱动器,则某些高级存储系统的实施例将更新转换信息来以任何可行的增强存取模式(例如,镜像、条带、级联)添加新的驱动器(或其部分)。在某些高级存储系统的实施例中,不对该转换添加新的物理驱动器,从而防止对其进行存取直至采取另外的用户动作。高级存储系统可提供各种驱动器锁定特征来保护对物理驱动器的存取。现代SATA磁盘驱动器支持来自主机、用以锁定和解锁驱动器并在该驱动器本身内存储口令的命令。在一个实施例中,驱动器存取命令的虚拟到物理转换包括对这种驱动器锁定命令的支持。例如,当接收来自主机的对锁定(或解锁)驱动器的请求时,向适当的一组物理驱动器转发该命令。这种实施例允许主机设备本身绑定虚拟驱动器,从而表现出该虚拟驱动器中的所有物理驱动元件对其他任何主机设备都是不可存取的(无适当的口令)驱动器。在某些实施例中,高级存储系统在内部执行所有驱动器锁定任务。当附连新的物理驱动器时,向该驱动器发送驱动器锁定请求,并在虚拟到物理转换状态信息中存储口令。随后,当在主机接口上接收对虚拟驱动器的存取请求时,将其转换成一组对适当驱动器的存取,每一个存取都优先于使用先前存储口令的驱动器解锁请求。这将物理驱动绑定到特定的高级存储系统实例驱动器,从而表现出它们无法为其他任何主机设备所存取(无适当的口令)。
[0031] 图1是示出一个实施例中的高级存储系统元件的框图。主机计算机系统100被连接到高级存储系统150,而高级存储系统150被连接到一个或多个磁盘驱动器(例如,180和190)。主机计算机100包括与诸如磁盘驱动或高级存储系统150的存储设备通信的主机控制器105驱动器。高级存储系统150包括主机接口元件155、配置元件160、虚拟到物理映射元件165和设备接口元件170。主机接口元件155与主机控制器105通信以执行存储命令。从主机控制器105接收的存储命令被视为对由高级存储系统150呈现给主机计算机系统100的虚拟驱动器的虚拟命令。配置元件160存储关于高级存储系统150的配置信息,例如连接多少个驱动器以及正在使用每一个驱动器来提供哪些存储特征(例如,条带化、镜像或级联)。虚拟到物理映射元件165基于配置元件160存储的配置将从主机接口155接收的虚拟命令映射成向设备接口170发出的物理命令。虚拟到物理映射元件165还将从设备接口元件170接收的物理响应映射成通过主机接口155发送到主机计算机100的虚拟响应。设备接口元件170与一个或多个物理磁盘驱动器(或附加的高级存储系统)通信以执行存储命令。
[0032] 在其上实现该系统的计算设备可包括中央处理单元、存储器、输入设备(例如,键盘和定位设备)、输出设备(例如,显示设备)和存储设备(例如,磁盘驱动器)。存储器和存储设备是计算机可读介质,它可包含实现该系统的指令。另外,可以通过数据传输介质存储或发送数据结构和消息结构,该数据传输介质诸如通信链路上的信号。可以使用各种通信链路,例如因特网、局域网、广域网、点对点拨号连接、手机网等。
[0033] 可以在各种运行环境中实现该系统的实施例,包括个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于多处理器的系统、可编程用户电子设备、数码相机、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等。计算机系统可以是手机、个人数字助理、智能电话、个人计算机、可编程用户电子设备、数码相机等。
[0034] 可在由一个或多个计算机或其他设备来执行的诸如程序块的计算机可执行指令的通用上下文来描述该系统。通常,程序块包括执行特殊任务或实现特定抽象数据类型的例程、程序、对象、元件、数据结构等。通常,可以在各种环境中根据需要组合或分布程序块的功能块。
[0035] 图2示出一个实施例中的级联高级存储系统设备的拓扑结构。主机计算机205连接到高级存储系统元件210。高级存储系统元件210对主机计算机205显现为单个标准的磁盘驱动器270。高级存储系统元件210连接到第一磁盘驱动器215、第二磁盘驱动器220和另一高级存储系统元件225。高级存储系统元件225与相关联的磁盘驱动器230和240可对第一高级存储元件210显现为该实施例中的另一磁盘驱动器250,或者两个元件可以包括专用通信通道(例如独立连接或在数据通道上发送的定制协议),这允许这两个元件相互了解并交换配置信息。第二高级存储系统元件225连接到第一磁盘驱动器230和第二磁盘驱动器240。可以按照多种方式来配置该系统。例如,第一高级存储系统元件210可被配置成提供两个驱动器215与220的级联,并且第二高级存储系统225可被配置成利用另一对磁盘驱动器230和240来提供级联的磁盘驱动器215与220的镜像。
[0036] 图3是示出一个实施例中的对系统虚拟到物理映射元件的处理过程的流程图。当接收来自高级存储系统的主机接口的命令时,调用该元件。在框310,该元件接收导向高级存储系统所提供的虚拟磁盘驱动器的命令。在框320,该元件将虚拟命令映射成一个或多个物理命令。在框330,该元件获得通过映射产生的下一个物理命令。在框340,该元件向适当的物理设备发送该物理命令。在框350,该元件接收来自物理设备的对该命令的应答。在某些实施例中,该元件可以不等待该来自物理设备的应答。例如,该元件可以假设命令将会成功并在接收到所有物理应答之前对该虚拟命令作出响应,或者该元件可以在检查物理响应之前等待直至发送所有物理命令。在判定框360,如果存在多个通过映射产生的物理命令,则该元件返回框330以获得下一个物理命令,否则该元件就继续进行到框370。在框
370,该元件就基于所接收的物理响应(如果有的话)生成虚拟响应。在框380,该元件向计算机系统或设备发送该虚拟响应,其中该元件从该计算机系统或设备中接收虚拟命令。然后该元件结束。
[0037] 图4是示出一个实施例中的处理虚拟到物理映射元件以生成虚拟响应的流程图。在框410,该元件等待对物理命令的物理响应,其中该物理命令向磁盘驱动器或其他设备发出。在判定框420,如果物理命令成功,则该元件继续进行到框430,否则该元件继续进行到框460。在框430,该元件向虚拟响应添加来自于物理响应、应当包含在该虚拟响应中的所有数据(诸如,如果物理命令从磁盘驱动器中读取数据)。判决框440,如果存在更多发出的物理命令,则该元件返回框410以等待下一个物理响应,否则该元件继续进行到框450。
在框450,该元件通过发送成功响应和所有所包含的数据来报告该虚拟命令的成功。在框
460,如果该命令失败,则该元件发送指示该虚拟命令没有成功的失败响应。在成功或失败响应发送之后,该元件结束。
[0038] 其他实施例
[0039] 现在将描述高级存储系统的其他几个实施例。第一个实施例描述了一种称为SteelVine的高级存储系统架构。其他诸如Polaris、Pico和Milkyway那样的实施例描述了该SteelVine架构的硬件实施例,即在芯片解决方案上提供了完整的存储系统,使高级存储特征进入用户市场。
[0040] SteelVine架构建立于最近定义的SATA存储接口标准以创建一种全新的产品类型:即,芯片上存储子系统(SSoC)。基于SteelVine架构的SSoC符合所有的SATA规范,并以全新且新颖的方式来解释和使用它们。该架构利用新的SATA标准来将之前仅在高端、企业级存储子系统中可用的功能带入用量庞大、低成本、基于商品的计算竞技场。
[0041] SteelVine元件将标准的端口倍增器概念扩展为包含高级企业存储性能,诸如灵活地虚拟化一组物理驱动器的能力、对原生命令队列(NCQ)的支持和RAID(-1、0、1和10)性能。为此,我们认为首先是SteelVine产品提供了“增强的”端口倍增器功能。
[0042] 在某些实施例中,这些产品被实现为支持大量硬件、微码密集的芯片上存储子系统(SSoC)。在标准的SATA主机适配器和磁盘驱动器看来,这些产品表现为“SATA电缆内的凸起部分”,即,它们表现为对主机的目标,反之亦然。为了创建其属性不同于可用的物理驱动器的属性的虚拟驱动器的幻像,将主机生成的并导向虚拟驱动器的命令包转换成新的指向所附连的物理驱动器的命令包。由SSoC进行的转换以线速基于包含在该元件内的配置数据进行。该转换还包括响应于单个传入的虚拟命令(例如,在镜像的虚拟驱动器上进行多次写入,进行跨越多个级联驱动器的读取等)而生成多个物理驱动器命令。
[0043] 重要的是要注意,尽管在高级描述中相类似,但SteelVine SSoC还是在架构和功能上与标准的外部RAID控制器有很大的区别。特别是,SteelVine元件并不被实现为通用处理器硬件之上的软件。这意味着SteelVine SSoC可以低得多的成本和复杂性按单个低成本单芯片哑元端口倍增器元件的规模来实现线速性能。通过将单个的强制解决方案应用于许多问题来降低复杂性和消除管理成本。例如,使用单个镜像来提供增强的可靠性。该解决方案相对于传统奇偶RAID解决方案在处理式和存储器资源方面需求更小,并通过使用低(甚至是降低的)成本磁盘驱动器来实现其可靠性。
[0044] 在某些实施例中,SteelVine架构通过应用模型来递送存储。用户不必了解(或甚至知道)任何有关其如何运行的内容,它们仅仅是在它们愿意以对该提供的业务支付的成本获得就它们的理解而言(例如、大的、快速的、可靠的等)、它们需要的功能。该基于应用的解决方案有助于销售用量庞大的产品。不能期望该用量庞大类型的用户知道RAID意味着什么,更不必说了解它如何运行正常足以判断哪些配置方案适合于它们。此外,该应用解决方案最小化存储服务与主机计算机之间的接口。这是对用户的主要优点,因为它意味着可以无需改变或配置主机而获得需要的存储服务。在主机硬件、BIOS、OS和应用看来就像是物理磁盘的存储设备可递送高级功能而无需对主机进行任何修改或添加任何东西。
[0045] 通过策略与机制的仔细分离,SteelVine架构有可能在广泛的不同使用场景内将SSoC应用于高可缩放性、高触摸性的RAID阵列,该广泛的不同使用场景包括从源自工厂设置的固定配置到无需用户设置要求而进行任何动作(例如,看起来像是单个驱动器的多驱动器单元,即,双工驱动器,或在3.5英寸封套内的4个2.5英寸驱动器,该3.5英寸封套包括单个电源接头和主机端口),该RAID阵列允许用户定义策略,且该阵列的每一个动作都受到仔细监控和登记。
[0046] 以下章节定义了系统上下文,其中以SteelVine架构为基础的产品在该系统上下文中运行,描述由该架构提供的关键特征,并提供了对主要实现问题的概述,其中该主要实现问题围绕着使用Polaris和Milkyway硬件的存储子系统。
[0047] SteelVine存储子系统概述
[0048] SATA被设计成主机总线适配器(HBA)与磁盘驱动器之间的点对点连接。由于SATA链路的带宽(即,1.5Gbps、3Gbps或6Gbps)超过当前硬盘驱动器的带宽,所以有可能将多个驱动器连接到单个SATA(主机)端口而不超出即使是最慢的SATA链路的带宽性能。为此,定义了SATA端口倍增器(PM)规范,它允许在单个主机端口上附连多个驱动器。虽然SATA PM规范定义了单个的多工或网络集线器类型设备,但是硅图像扩展了该规范来创建一种新型设备,即增强的端口倍增器(EPM)。EPM是芯片上存储子系统(SSoC),它提供除了PM的基本网络集线器类型功能之外通常与大的、昂贵的、复杂的存储阵列控制器相关联的功能。
[0049] SteelVine元件把物理驱动器的集合转换成某个数量的虚拟驱动器,其中每一个虚拟驱动器的属性都可增强超过物理驱动器的属性(例如,更大、更快或更可靠),其中虚拟驱动器根据物理驱动器的属性而创建。另外,更多的高级SteelVine元件(例如,Milyway)包括添加的网格路由性能,该网格路由性能通过允许在结构内连接元件来提供可缩放性。这允许将潜在的大量物理驱动器映射到一组虚拟驱动器上,这些虚拟驱动器对潜在的大量主机可用。
[0050] SteelVine系列元件的一个设计目的是以对主机完全透明的方式执行所有要求的物理驱动器增强。实际上,SteelVine元件在线路看来就像是“凸起部分”;它在主机看来就像是PM,且在驱动器看来就像是HBA。在主机看来,实际上不可能在SteelVine元件提供的虚拟驱动器与具有相同属性(例如,大小、速度或可靠性)的物理驱动器之间进行区分。这确保了与多种主机系统之间的互用性,而且消除了对开发、安装和支持大套的定制主机侧软件(应用程序、驱动器、BIOS等)的需求。
[0051] 将SteelVine系列中的最初产品(即,独立PM和EPM(Polaris)以及可缩放的EPM(Milkyway))设计成在单个高度集成的芯片上存储子系统(SSoC)内递送完整的存储子系统性能。虽然SteelVine元件(及其相关的芯片上嵌入软件)确实提供了几乎是完整的存储子系统功能,可能需要少量附加的元件(例如,外部EEPROM、LED、LM87环境控制元件等)来创建完整的存储子系统。以下描述为完整的子系统所需的元件以及包括完整的基于Polaris的存储子系统的所有主要实体。
[0052] SteelVine架构的应用
[0053] 以下段落提供这样一种描述,其中:SteelVine架构适应于存储接口体系,该架构如何与当今现有的其他架构相关,且基于该架构的产品会如何显现。
[0054] SteelVine架构是以创建具有在物理驱动器之上增强的属性的虚拟驱动器的概念为基础的,其中物理驱动器根据其属性而组成。在该架构中,提供了这些增强,同时向主机呈现物理驱动器将拥有的相同接口。结果,SteelVine架构可以向所有支持SATA存储的系统提供益处,而无需对现有的主机软件进行添加或修改。这使SteelVine架构独立于BIOS、设备驱动器、文件系统、OS或应用程序,而且能够在无一般的大量兼容测试需求负担的情况下被引入。它还消除了高级存储功能与主机系统之间无法预料和不合乎要求的所有类型的交互作用的机会,这一般与RAID硬件的使用有关联。
[0055] 以低级抽象来引入存储功能增强的能力提供了广泛的益处。SteelVine架构以其中一个最低级存储接口体系为中心:即块存取接口。对给定类型的驱动器而言低于该级别的只有类型物理、链路和传输接口层。在驱动器协议系列内(例如,SCSI)可以存在许多不同的子协议(例如,Ultra 320)以及许多不同类型的物理、链路和传输接口(例如,SAS、光/铜FC等)。虽然在不同类型的磁盘驱动器所提供的本地接口内存在许多差异(而且驱动器的块级别协议规范还可在它们的规范当中存在极大的不同),由现代磁盘驱动器提供的块存取的通用抽象保存了在所有类型的驱动器当中的通用性。
[0056] 在最常见的概念中,如今流行的所有磁盘驱动器提供了一组通用的读/写块语义,它们遵循了以下原则:
[0057] 发起者(例如,主机)向选定的目标设备(例如,物理驱动器)发出命令;
[0058] 该命令包括指示了将执行的命令类型(例如,读、写等)的操作码,还包括启始块地址和对启动后将影响多少块进行的计数;
[0059] 如果该命令是读取命令,则目标设备以要求数量的块作出响应,从开始于所给定的块地址的驱动器中进行读取;
[0060] 如果该命令是写入命令,则由遵循该命令的发起者提供将写入该驱动器(开始于给定的块地址)的指定数量的块。
[0061] 虽然细节和术语改变了,但是块级别接口的通用性质是相同的,不管包含的是何种类型的驱动器。如今最通用的驱动器协议称为SCSI和ATA。这些协议各自具有不同的涉及目标设备(例如,目标端口地址对逻辑单元编号(LUN))和存储位置(例如,逻辑块地址对块编号)的方式。然而,SCSI和ATA根本上主要以相同的方式操作;它们基于设定的开始地址提供对给定数量的固定大小单元(即,块或扇区)进行读和写操作。
[0062] 对比SteelVine与其他存储子系统架构
[0063] 为了帮助理解SteelVine架构,对如今主导的存储架构进行研究。最简单和最通用的存储架构类型称为直接附连存储(DAS)。在DAS中,经由HBA将磁盘驱动器附连到专用主机。虽然存在几种该方案的变形(例如,包括多点总线或网络集线器/多路复用器/交换机),它们允许将多个驱动器连接到单个HBA端口,但通常随时将每一个驱动器连接到单个主机。DAS模型向主机提供了低成本和复杂性的存储,其中成本因变于连接到主机的驱动器、电缆和HBA的数量,而复杂性涉及安装HBA(及其必要的驱动器和支持软件)以及在HBA的存储端口上附连驱动器。在包括一个以上主机的系统中,该方案具有低利用率的缺陷,这是因为存储资源被分割且每一个驱动器被绑定到单个主机。在这种情况下,有可能某些主机具有过多的能力,而其他主机的能力太低。唯一的解决方案是添加附加的驱动器。然而,在DAS架构中添加或移动驱动器会是复杂和昂贵(就时间和精力而言)的实践,这是因为要添加或移除驱动器就必须频繁地切断主机。除此之外,DAS子系统的可靠性和可用性倾向于比需要的略少。这归因于这样一种事实:即,任何主机、驱动器或电缆连接装置的故障都导致在受影响的驱动器上丢失对数据的存取。
[0064] 开发存储区网络(SAN)来解决DAS架构的关于大型企业系统的缺陷。在该架构方案中定义了专业化存储网络(即,光纤通道(FC)),它允许以(不同程度上)灵活的方式将驱动器集合连接到一组主机。在SAN中,有可能细分驱动器并将它们的各个部分分配到指定主机。如果特定主机失效,备选主机还可能接管一组驱动器。该架构的优势在于允许(稍微动态地)灵活地对主机重新分配驱动器(及其部分),从而产生可能相对于DAS架构更大的数据可用性和对驱动器更高的利用率。然而,SAN架构就存储(包括驱动器、电缆和控制器)的价格与对于设置和管理该存储子系统的复杂性而言成本相当高。
[0065] DAS和SAN架构都是运行在块级别上的存储子系统。然而,称为网络附连存储(NAS)的下一级架构运行在文件抽象级别上。NAS架构包括充当文件服务器的主机,它连接到驱动器集合(通常经由DAS架构)并在网络(一般是局域网)上递送对其他主机的文件存取。因为NAS架构运行在不同的抽象级别,所以不可能在其特性(例如,价格、性能、复杂性)与此处所述其他架构的那些特性之间进行直接对比。
[0066] 最后,在图5中示出该SteelVine架构,它与DAS和SAN架构共享特性。在某种意义上,SteelVine架构提供了一种“盒内SAN”,其中由驱动器阵列表示的存储性能可以按照直接且经济合算的方式与一组主机相关联。SteelVine架构在DAS架构的成本级别和简单性上递送SAN架构的灵活性和有效性。另外,SteelVine架构对存储体系的块级别寻址,而且同样地,对NAS架构内文件服务器元件提供益处。
[0067] 在此应当注意的是不对不同的RAID级别寻址。它们并不表现出存储架构,而是一系列存储子系统实现技术,用于提供增强级别的存储功能。在某些SteelVine架构的实施例中,借助于简单强制手段(例如,镜像,相对于奇偶RAID)来创建所需级别的性能和可靠性,用以实现价格/性能目标并满足为最初的SteelVine产品选择的用量庞大、对成本敏感的目标市场的必要条件。本领域的普通技术人员将理解还可以使用其他通用的方法来实现RAID功能(例如,奇偶RAID)。
[0068] SteelVine架构的示例实施例
[0069] 可在多种不同场景中应用SteelVine架构以其不同的(或增强的)特性来创建虚拟驱动器的能力,这些特性超出了创建虚拟驱动器所依据的物理驱动器的那些特征,其中这些不同的场景是从连接到单个主机的少量驱动器到较大的充当大主机集合的驱动器阵列。在该范围的低端,可组合几个(例如,2个至4个)2.5英寸驱动器与单个SteelVine SSoC来创建适合于规范3.5英寸驱动器封装内的块,而且该块包括单个SATA端口和单个电源接头。虽然在物理上表现为单个3.5英寸驱动器,但是这种单元可以提供大量不同的特征,包括高度可靠的(即,透明镜像的)驱动器或多个虚拟驱动器(每一个都包括它们自己的关于大小、性能和可靠性的专门特性)。同样地,可以把多个(例如,2个至4个)3.5英寸驱动器组合到一个构建块(Brick)内,而且它们也具有单个SATA和电源接头。
[0070] 可以将构建块用作构建各种不同类型存储阵列时的基本构件。图6示出了某些可以利用构建块来创建的不同类型的架构。在图6a中,将四个驱动器的构建块用作标准桌面侧PC塔内的单个存储单元。在该应用中,构建块仅占用连接到主板的单个SATA连接,而不管它呈现出的虚拟驱动器的数量。其优点在于SATA端口以有限的数量可用。图6b示出独立的外部配置中的相同基本构建块。在该应用中,构建块具有它自己的封装和电源,并经由外部SATA(eSATA)连接来与主机相连。独立的构建块还可以包括一个附加的接口(例如,RS232、USB、以太网等)以供对该阵列的频带外监控或控制。构建块还可包括存储器-设备端口(例如,紧凑型闪存)来允许向构建块的SteelVine SSoC中加载配置信息或从中存出配置信息。
[0071] 利用SteelVine架构的可缩放特征,可如图6c所示地将几个构建块组合到基于机架的存储阵列中(称为架位(Shelf))。在该示例中,四个构建块共享一对冗余的电源供给,而且每一个构建块都连接到中央控制器,该中央控制器可提供附加的功能(例如,奇偶RAID,转换成诸如FC或SCSI的另一存储接口,等等)。架位的驱动器都可通过SteelVine SSoC相连,而且它们可经由eSATA连接与一个或多个主机或控制器相连。
[0072] 最后,图6d示出这样一个示例,其中多个架位彼此相连以创建存储机架。可以按照多种不同的拓扑结构来配置这种存储机架,这取决于每一个架位内的驱动器如何连接到SteelVine元件以及该架位内的元件如何互连。在一种极端情况下,整个机架可以通过单个SATA连接来与主机相连。
[0073] 存储阵列控制器元件
[0074] 典型的基于Polaris的存储子系统由三个顶层类实体组成,即如图12所示的主机、存储阵列控制器和驱动器。该图还示出从事制造基于SteelVine的存储子系统的顶层硬件和软件元件。如图所示,主机硬件包括某种形式的主机总线适配器(HBA),它连接主机的内部I/O总线与存储互连链路,其中该存储互连链路与存储阵列控制器相连。
[0075] 某些存储阵列控制器支持除了其主要存储互连链路之外的连接。这些链路可以仅旨在供偶尔使用(例如,在工厂中,现场重新配置等),或者它们可以提供“长期的”附连,该“长期的”附连允许对存储阵列控制器进行动态存取(例如监控、代码更新、策略输入等)。我们称这些“频带外的”机制为追加的互连链路。可以利用各种不同的通信技术(例如,以太网、USB、RS232、WiFi等)来实现这些频带外的通信信道,而且这些通信信道可以包括在其上分层放置广泛的不同通信协议(例如,HTTP、TCP/IP、专有协议等)。还可通过“频带内的”通信信道来提供与频带外的信道所提供功能相同的功能,即,通过在主要存储互连链路内创建子信道(例如,SATA)。
[0076] 除了追加的通信链路之外,存储子系统还可提供一组外部可存取的I/O设备,在此称其为“面板”。该面板可将任何来自单个LED和开关I/O的动作提供给非常精心制作的带有音频输出端的彩色触摸屏LCD。就像频带外的信道那样,面板可向用户呈现关于存储子系统的状态信息,而且可采用来自用户的输入用以配置和管理目的。面板还可向用户提供可移动形式的非易失性存储接口(例如,USB、紧凑型闪存等),它可以用来备份和恢复存储阵列控制器的配置和状态信息。
[0077] 为了支持各种各样的频带外的口和广泛的不同类型的面板,可把当前一代的SteelVine SSoC设计成包括对外部微控制器的单个接口。可选择适当的微控制器来处理所需的频带外通信链路以及所需形式的面板。外部微控制器轻易地通过外部控制接口与SSoC接口。正如稍后所述,还可使用这类外部微控制器来实现对于给定的存储子系统的策略。
[0078] 值得注意的是,可通过分离的微处理器来处理后面的这些功能中的每一个功能,或者可将几个(或甚至是全部)这些功能组合到一个公共微处理器内。为简单起见,在该讨论中,我们描述了一种单独的外部微处理器,它处理所有所需功能。该文件中的示例使用了单个SSoC;然而,SteelVine架构允许将多个SSoC组合到单个逻辑实体内,且在具有集合的资源之和的情况下具有与单个SSoC几乎相同的性能和功能。因此,可以把单个SSoC用作对可缩放元件集合的简化表示(例如,Milkyway)。
[0079] 硬件元件
[0080] 存储阵列控制器硬件通常包括对多个驱动器与主机的存储链路之间的互连进行管理的元件,以及其他对分选的动作进行管理的硬件单元,其中这些硬件单元与所组装的驱动器集合的物理封装有关。这些与物理驱动器封装有关的动作通称为机架管理(EM),并且包括如下功能:控制LED和监控电源、风扇、温度等。基于SteelVine的存储阵列控制器硬件主要包括(一个或多个)SteelVineSSoC,而且经常包括附加的微控制器来处理机架管理、主机与存储阵列控制器之间的频带外通信以及用于SteelVine SSoC的外部策略逻辑。
[0081] 在Polaris SSoC内,嵌有硅图像所有权的微控制器(内部称为Pico)执行所有初始化、控制面、虚拟化和外部接口功能。Pico CPU是一种高性能、低成本、内嵌32比特RISC的处理器,它具有Harvard存储架构(即,分离的指令和数据存储器)。指令存储器由64KB的片上SRAM组成,数据存储器由16KB的片上SRAM组成。使用一个分离的控制寄存器地址空间来与Polaris芯片上的各个功能单元通信。
[0082] Milkyway SSoC提供了Polaris特征的超集,它包括添加用于内部互连的一组内部交换链路(ISL)连接、硬件支持路由层、增强的嵌入式处理器(即,PicoII)和交叉开关(相对于总线)。内部交换链路(ISL)端口和路由硬件允许把Milkyway SSoC组合到一种结构内,它允许缩放Polaris的功能以在公共存储子系统内包括大量主机和驱动器端口。在稍后的小节中将提供对ISL链路及其创建可缩放的存储阵列控制器的用途的进一步描述。
[0083] Pico II是为SteelVine系列SSoC设计的第二代嵌入式控制器,并结合在Polaris内发现的优于Pico I芯片的大量改善。包含在Pico II内的优于Pico I的增强为:增加四个地址断点寄存器和单步调试方式(均用于支持基于gdb的调试),放宽分支指令校准限制,以及删除未使用(加载和旋转)的指令。不管它们有何差异,相同的工具链支持Pico I和Pico II。
[0084] 软件元件
[0085] 除了以上定义的硬件元件之外,基于Polaris的存储子系统包括各种不同的软件元件。在顶层上,在这类系统中有几种不同类型的软件,每一个软件根据系统内该软件所存在的层、该软件在其内执行的环境的限制、以及该软件本身的特性(例如,并发程度、实时等)来区分。可以把主机内的软件类型分成以下类型:设备驱动器、系统软件和应用程序软件。
[0086] 设备驱动器是这样一种代码,它借助于HBA硬件来管理存储链接并向主机内更高层的软件提供对存储子系统的特征和性能的存取。虽然该代码应当在很大程度上不知道Polaris与标准PM的任何不同,但是存在大量供应商指定的对PM规范的寄存器集合的扩展,即设备驱动器会了解以便于充分利用Polaris设备。另外,设备驱动器应当支持传送子系统生成事件的基于非轮询方式。这意味着为了允许主机软件逐渐察觉存储子系统内显著的状态变化(例如,驱动器上线/离线、EM事件等),必须支持某种回调或阻止输入输出控制(ioctl)类型的机制。同样地,如果有必要通过频带内的通信(即,利用SATA链路)来与Polaris子系统通信,则设备驱动器应当提供对此的支持(或至少是不阻止其发生)。这(一般)是核心层代码,即高度OS(以及版本)专用的,需要深入地理解内核编程以及大量系统硬件详尽知识(包括主机、HBA、Polaris、EM和驱动器的相关知识)。其效果反应在整体系统层性能中。
[0087] 系统软件包括低层系统代码,该低层系统代码与设备驱动器交互并执行不涉及直接的用户交互的功能。例如,监控存储子系统并报告所有的异常情况(例如,驱动器故障、温度或电压偏移等)的后台程序可在后台运行,注册其对设备驱动器的兴趣,并在其任一监控事件发生时获得通知。同样,后台程序可存在以处理策略事件(例如,驱动器上线/离线转变),并响应于某种预定义策略逻辑的执行而执行对SSoC状态的更新(例如,在添加新的驱动器时,将其级联到给定逻辑驱动器的末端,或者启动关于镜像集的重建操作)。这类代码需要了解系统层(但不必是核心层的)编程,而且适度地深入了解基于SteelVine子系统的特征和功能。这并不倾向于成为高性能或资源约束的代码。
[0088] 应用程序软件作为标准应用程序而运行在OS顶层,而且通常执行涉及直接用户交互的功能,例如提供对存储子系统所提供特征的用户存取的图形用户接口(GUI)或命令行接口(CLI)代码。这类代码要求强调人为因素方面更甚于存储子系统的任一特定技术细节,而且应该集中在如何抽象并向用户提供底层性能。该代码在资源丰富的环境中允许,其中唯一的性能问题倾向于人成为与交互相关联的问题。
[0089] 存储子系统内存在的软件分为两大类:固件和微码。
[0090] 固件是在存储子系统内的支持微控制器上运行的代码。该代码执行诸如EM、外部通信和SteelVine策略功能等的事情,并旨在在与主机软件相比资源限制更多且性能敏感的环境内运行。否则,该代码在本质上类似于上述有关主机的系统软件。该代码可以在标准实时操作系统(RTOS)或定制的运行时操作系统之上运行。在很大程度上,固件将在存储子系统内执行低层的硬件操纵。极端地,该固件可以提供相当高级的功能,例如通过以太网连接提供对子系统的外部(频带外)存取的网络服务器。然而,事实是它必须在低成本/性能的微型控制器上运行,该微型控制器要求写入不同于类似基于主机版本的代码。
[0091] 微码是在SteelVine元件上运行以实现SSoC本身功能的特定类型代码。SteelVine元件包括硅元件(即,Polaris)和微码元件。微码密切参与SSoC的操作,因此微码需要深度了解芯片本身的最详细细节。它在高度资源约束和性能敏感的环境内运行。
它涉及较高的并发程度,并要求遵守特定的编码因素以符合所有约束条件。经常对此代码提供某种形式的定制运行环境,这是因为标准的RTOS通常不能在此使用。
[0092] 内部交换链路(ISL)互连结构
[0093] 不是以树就是以网格拓扑结构的方式连接在一起的(即,级联的)高级存储设备可确定它们与类似的高级存储设备互连。该确定可根据特定端口、开关设备、协议信号等的使用来进行。一旦被确定,该元件就可使用通信方法而非标准的磁盘接口协议(例如,SATA)。这样一种通信方法是内部交换链路(ISL)协议。在ISL的一个实施例中,当发送与接收设备之间存在一个以上的路径时,实现ISL的高级存储设备将利用最有效的路径来通过网格路由消息。ISL协议在任意互连拓扑结构内提供了有效的基于消息的通信。在ISL网络内,每一个高级存储设备被视为是该网络的一个节点,并被赋予唯一的节点ID。ISL把每一个消息分成小单元,称为流控制单元(或微片),它们在节点之间运送信息。每一个微片以一个单元发送,但消息中的后续微片会因为接收节点中的拥塞而被阻塞。每一ISL链路都是全双工的,而且每一个方向被逻辑地划分成两个或多个虚拟信道(VC)。消息的所有微片都将使用任一给定链路的单个VC。虽然由于流控制而阻挡了一个VC上的消息,但是不同的消息可利用另一个VC而在链路上继续前行。在一实施例中,其中一个VC专供短消息之用。在初始时和当为网络添加节点或从网络移除节点时,ISL节点交换“洪水演算”(flood routing)消息。这些消息包含始发节点的ID和该消息跨越的“中转”(或中介)节点的数量。通过存储消息到达的链路和对每个其它节点的最小跳跃计数,节点就可确定用于向网络中每个其它节点发送消息的最佳输出链路。该信息存储在路由表中。丢弃且不转送来自给定节点的后来洪流演算消息,它包括比已知差的跳跃计数。这确保路由处理快速终止。如果到另一个节点的距离(即,跳跃计数)在一个以上的链路上相同,就可在任一这些链路上发送消息。这用来实现链路中的负载共享。每个消息的第一微片包括期望目标节点的节点数量。当消息的第一个微片到达节点时,检验该微片以确定该消息要求的目的地。如果该目的地是接收节点,则该消息(包括第一微片和在同一链路的同一VC上的一个或多个后续微片)被该节点所接受,并被引导到其中指定的虚拟驱动器。否则,查阅路由表以确定用于向目的的节点转发该消息的最佳输出链路。如果一个以上链路可用,就向还未使用的链路提供优于已经使用的链路的优先权,或者向最近较少使用的链路提供优于最近较多使用的链路的优先权。
[0094] 平衡的可缩放元件设计
[0095] 平衡的子系统被定义为按照确保在通常的使用过程中无单独的资源成为“瓶颈”的方式提供。SteelVine架构解决的主要难题在于允许通过使用单个元件并保持平衡来创建广泛范围的子系统尺寸。SteelVine SSoC的笼统抽象模型具有针对不同类型链路(例如,主机SATA、驱动器SATA和ISL)的未定义数量的端口。然而,对特定数量的每一类链路的选择是在SteelVine元件设计中的重要问题。除了选择每一类端口的数量之外,专用于实现SteelVine功能(例如,虚拟化、增强等)的资源的数量是所得SSoC的成本与性能的主要决定因素。SteelVine架构被定义成使扩展主机与驱动器连接的数量能仅利用少量(理想地,一种)元件类型跨宽泛范围地(独立地)缩放。
[0096] 为了支持利用单个、低成本元件的较高的可缩放程度,就必须创建可构建成较大子系统的原子单元。该原子单元充当公共构件以利用广泛范围的不同数量的主机和驱动器端口来创建存储开关。该解决方案优于不是招致有关包括未使用端口的开关的额外费用、就是招致针对每一种不同大小开关实例的分离的 的备选方案。此外,适当定义的构建块单元将包含实现最小子系统的所有基层功能所需的最小资源数量,同时包括足够的资源以确保所得的子系统保持平衡(即,没有因任何给定类的资源类型数量不足而出现瓶颈),这是因为组合了更多的单元来创建不断增大的子系统。
[0097] 通过一种结构来实现可缩放性,并通过组合包括在原子构建块内资源的定义与这些块组合在其中的拓扑结构来实现平衡。超立方体的维度限定了可能的可缩放程度。根据灵活的路由结构,该互连拓扑结构可以是任意的,其中某些将比其他的更好。等待时间和带宽是围绕着开关可缩放性的主要问题。跳跃计数限定了等待时间。维度和拓扑结构限定了带宽。N维超立方体是理想的拓扑结构,这是因为它最小化平均的跳跃长度并提供统一的二等分带宽(即,获得相等的集合带宽,而不管你从哪里对该架构进行二等分)。ISL端口的数量限定了该超立方体的维度。在最糟的情况下,所有主机都试图存取距离主机节点最远的驱动器,从而每一个节点都必须支持通过通信量,以及来自该节点的本地主机的通信量(前往远程节点)和来自本地驱动器的通信量(前往远程节点/主机)。
[0098] 为了实现较高的可缩放程度和优化它们的价格/性能特征,利用大量“平衡的”的主机、驱动器和交换机间链路与相关资源来构造SteelVine元件。在此将平衡的元件设计定义成其中单个芯片具有足够(带宽和计算)资源来支持主机/驱动器交互的元件,而且当添加了附加的芯片时,每一个附加的芯片提供了为确保整个子系统保持平衡所需的资源。
[0099] 策略与机制的分离
[0100] 在这种系统的设计中,经常有较好的设计实践来分离策略(即,应该做什么)与机制(即,如何进行)。已经利用脑海里的这些原则设计了SteelVine SSoC,从而产生了几种不同的设计方案,以下描述主要的类型。
[0101] 在基于SteelVine的产品中,微码的主要功能是实现提供了基本功能SSoC(即,SATA PM功能,添加了虚拟化和RAID特征)的机制,连同一组其他的低层机制(例如,从磁盘到磁盘的复制、外部通信、远程存取等)。该代码执行子系统要求的所有“恒稳态”操作。然而,当某些“异常”事件发生时(例如,驱动器故障、新的驱动器上线、驱动器离线等),就必须对如何响应该事件做出判决。把“策略”元件定义成处理这些事件并确定响应于它们中的每一个而要采取的适当动作。该逻辑以称为策略模块的代码来实现,其中可以在几个不同的位置上执行该代码(如图7所示)。
[0102] 嵌入式策略
[0103] 在第一个示例方案中(即,图7a),把策略模块嵌入SSoC本身内。当策略事件发生时,调用策略模块,而且芯片判定它自己需要做什么而无需参考任何外部实体。该策略判定处理的唯一外部输入来自经由芯片上的通用输入管脚来递送的短接选择。根据这些短接选择管脚的设置,可以从相同的策略块中引出不同的性能,或替换地,可以选择完全不同的嵌入式策略。
[0104] 该策略逻辑与SSoC微码中的机制分离,而且在策略模块与核心机制之间存在明确定义的接口。可以往SSoC内加载任意的策略模块(只要芯片的代码与数据空间允许)。策略模块的执行通常不是时间严格的,所以性能相关因素很小(而且应该在SSoC内适当降低的优先级上执行策略模块)。
[0105] 因为这类嵌入式策略可以仅依赖于相当稳定的信息,基于该信息可将如何对不同事件作出反应作为判定基础,所以可使用这类嵌入式策略来实现相当简单的策略。性能约束条件以及代码和数据大小限制将禁止实现要求过度复杂计算的策略。在SSoC的EEPROM中存储与实行中的策略有关的回归状态信息,其中该SSoC的EEPROM空间非常有限。
[0106] 对于大多数成本敏感的应用程序来说,使用嵌入式策略最好被限制为仅仅是最简单和通用的策略。这是因为即使为了容易地添加和移除而模块化该策略模块,也必须在每次策略模块改变时重新使SSoC完全生效(因为它表示不同的微码)。此外,如果可能的话,很有可能不以嵌入的方式来实现任何将需要参考外部实体或用户的策略。
[0107] 本地外部策略
[0108] 在图7b中例示了第二种用于运行策略模块的方案,其中在SSoC本身的外部(或本地)的微型控制器内实现该策略模块。可利用更加放宽的(尽管仍然不是完全无约束的)资源约束来实现更复杂的策略。由于非常低成本的单芯片微控制器(例如,PIC)的存在,所以该解决方案的附加成本可以非常低。该解决方案允许产生和确认策略自由的(即,纯粹机制的)SSoC,其中可以通过添加一个小元件(等效于基于I2C的EEPROM)来添加定制的策略。替换地,可使用更高功能的微型控制器,该微型控制器还可以提供对存储子系统的外部(频带外的)接口的支持,例如,以太网、USB或RS232链路、紧凑型闪存或PCMCIA卡接口、ISO7816智能卡接口,或者802.*或蓝牙无线链路。
[0109] 可以通过外部接口来选择或配置策略。该解决方案具有附加的益处,它允许在存储子系统之外存储与策略模块相关的状态信息。外部处理器(尤其是具有外部通信链路或固态存储设备接口的处理器)可以提供一种将临界状态备份到“离站/远程”位置的手段。这防止驱动器在策略处理器被替换时而变得无法存取。
[0110] 以这种方式来配置外部策略控制器使得所有可能的事件能在无需用户干预的情况下处理,即,做正确的事情而无需请求用户输入。这意味着对于许多事件而言,可以采取一种简化的、强制或最糟情况类型的动作。例如,必须以简单的响应来回答对新的驱动器出现在系统内时应当做什么的问题,该简单响应总是正确地运行而不管情形如何,例如,总是以确定性的方式把新的驱动器分配给预定义的逻辑驱动器,对“空闲池”分配新的驱动器,并等待用户指引的配置等。
[0111] 基于主机的策略
[0112] 最后,图7c所示的方案表示了在主机上实现策略模块的情况。可以利用该解决方案来实现任意复杂的(且规定的)策略,而且该策略要求人工介入。
[0113] 该方案有可能与以上定义的本地外部策略示例相同,其中主机执行策略模块而非本地微控制器。在该情形中,可把基于主机的策略模块称为“后台”处理,即,应用程序可以运行在主机上而无需任何用户可见的表现形式。在本地外部策略的情况下,主机可代替策略处理器,并运行相同的策略计算作为主机后台程序。后台程序可以设置在主机上并安静地运行,对来自存储子系统的事件作出响应,并向SSoC状态发送更新。有可能包括完全预定义的策略模块,它运行在主机上作为后台程序而无需任何用户输入,或者有可能包括根据用户定义的配置文件、CLI或GUI配置和驱动的策略模块。
[0114] 在为了确定响应来自存储子系统的事件所要采取的适当动作而应当参考用户时,存在许多情况。除上述后台程序解决方案之外(不涉及任何以恒稳态操作与用户的交互),有可能包括在策略判定处理中涉及用户的策略。可以创建基于CLI和GUI的应用程序来运行人在回路中的策略模块。这些应用程序处理来自于存储子系统的事件,产生与用户的交互(例如,通过弹出窗口),并更新存储子系统的状态。
[0115] 可经由频带内(即,利用SATA链路)或频带外(即,利用某种诸如以太网、USB、RS232、WiFi、蓝牙那样的辅助连接)通信链路来执行存储子系统与其基于主机的策略模块之间的互连。在以下章节中将更详细地描述用来与外部策略模块通信的协议和对频带内相对频带外通信链路的使用。
[0116] 策略实现选择
[0117] 无论使用以上哪一种方案来实现策略,SteelVine SSoC机制与其策略模块之间的接口都在逻辑上保持一致。由SSoC机制生成的事件(一般涉及驱动器的加入和离开)去到策略模块。然后,该策略模块运行某个逻辑来判断作为响应应该执行什么动作(一般包括更新SSoC的虚拟表)。利用更新机制将这些动作应用到SteelVine SSoC。
[0118] 还值得注意的是,除了上述三种方案之外,还存在各种混合方案用以实现基于SteelVine的存储系统的策略模块。例如,可以使用不是主机的非本地微控制器。在较大的系统中可以存在多个主机,其中该较大的系统包括SteelVine存储,而且可以假设单个主机执行对于较大系统中每一个SSoC的策略功能。
[0119] 以上定义的每一种方案(以及各种混合选择)都具有不同的益处、成本、性能和限制。第一种方案(嵌入式策略)具有与单芯片解决方案相关的简单性和低成本优势。虽然可能利用该解决方案来实现许多有用的策略,但它是最受限制的方案。第二种方案(本地外部策略)在相当大范围的不同成本上提供广泛的性能,其中该大范围的不同成本是从略高于单芯片解决方案到略低于基于主机的解决方案。事实是可以把外部策略模块“机载”到用于其他功能的微控制器上(例如,机架管理和外部接口处理器),使该解决方案成为合乎需要的方案。虽然可以认为第三种方案是最具成本效率的(利用主机内现有的资源),但是该方案具有显著的缺陷。基于主机的策略解决方案运行计数器来达到创建存储子系统的目的,其表现为使用简单的电子设备,它对任何主机起作用且无需用户干预来执行它们定义的功能。基于主机的解决方案要求在主机上安装软件,其中必须创建该软件并确认供具有许多版本的OS使用。该解决方案还耗费主机资源,倾向于每单元要比较小的嵌入式控制器昂贵得多。此外,如果主机的置换导致了策略/配置信息的损失,就会折衷对数据的存取。
[0120] SteelVine SSOC的特征
[0121] SteelVine架构可以存在许多不同的实现方式,但位于该架构核心的元件都共享一个通用特征集并导致一个通用特性集。在本小节中定义了整个SteelVineSSoC系列的通用特性集,并在以下小节中描述由特定实现来实施的特征子集(基于Polaris和Milkyway硬件)。
[0122] 在主机看来,SteelVine元件表现为标准端口倍增器背后的一个物理驱动器集。这些呈现在主机面前的驱动器不是(必然为)实际的物理驱动器,它们实际上是虚拟驱动器。它们对主机显现为其附加的(有利的)特性(例如,大小、速度和可靠性)不同于物理驱动器的那些特性的驱动器,其中根据物理驱动器的那些特性来创建该虚拟驱动器。SteelVine元件的主要功能是遵循一套明确定义的规则以及某种(固定或动态可变的)配置数据,以该SteelVine元件的有效物理驱动器集为基础创建和保持虚拟驱动器。
[0123] 主机应该无法(在理论上)检测到呈现在它面前的虚拟驱动器不是实际的物理驱动器(利用所定义的附加特性)。可出于各种实际目的将此幻像撇开一边,然而出于所有的意图和目的却难以区分SteelVine SSoC所创建的虚拟驱动器与物理驱动器。同样地,在极度退化的情况下,可以配置SteelVine元件以提供与标准的、哑元的SATA端口倍增器的功能相同的功能。
[0124] 通过对主机生成的SATA命令流执行转换来创建虚拟驱动器的抽象。在很大程度上可以通过简单的表格查询操作来实现这些转换,其中可以快速且轻易地把导向虚拟驱动器的命令(即,虚拟命令)转换成一个或多个物理驱动器上的(可能多个)命令(即,物理命令)。在一些情形中,可以通过替换命令中的值来轻易地进行转换(例如,目标驱动器和起始扇区)。其他情况要求响应于单个虚拟命令而生成多个物理命令,例如,跨越级联的物理驱动器,复制对镜像集的写入等。在前一情况下,可使用简单的表格查询功能来执行从虚拟到物理命令的转换。在后一种情况下,必须存在某种为了执行所需的分岔/联合类型操作和处理各种异常情况(例如,驱动器故障、命令重试等)而执行的附加逻辑。
[0125] 可以利用端口倍增器规范所提供的寻址机制来完成对多个虚拟驱动器的支持。在非常高层的视图看来,由主机发布的SATA命令包括数据包,该数据包定义了将要执行的操作类型,加上执行给定操作所需的自变量。虽然存在许多不同类型的命令,但是关键的感兴趣的那些命令是对一系列磁盘存储块(还称为扇区)执行读取或写入操作的命令。一般的读取操作具有这样的自变量:读取起始块地址(通常称为逻辑块地址(LBA)的48比特值)和要读取的块的编号。主机向驱动器发送该命令(从磁盘中的给定位置),并返回所需数据块。同样地,写入命令具有相同的地址和计数自变量,而且还包括要写入该磁盘(在给定的位置上)的数据块。除此之外,SATA端口倍增器规范允许包含附加的自变量,即从最多达14个不同的物理驱动器中选择哪一个作为给定命令的目标。为了创建虚拟驱动器,SteelVine元件使用目标驱动器编号来选择转换信息,其中该转换信息定义了给定的虚拟驱动器,并以该信息为基础生成一个或多个物理命令,其中这些物理命令包括适当的物理LBA和块编号。该读取/写入数据并不被修改为这些转换中的一部分。在图8中显示了从虚拟到物理的命令转换示例。目标ID选择使用哪一个表格,并且起始LBA和块计数自变量定义将使用哪一个表格条目来虚拟化特定命令。
[0126] 组合SteelVine元件
[0127] SteelVine架构提供了“级联”SteelVine设备以允许从单个主机端口存取大量物理设备的能力。
[0128] SATA II端口倍增器规范提供了4比特的目标寻址,这允许存取最多达15个物理磁盘驱动器。该规范明确规定了不能级联端口倍增器。该约束的基本原理是不存在用于将磁盘寻址延伸至低层处理器的机制。然而,可以利用SteelVine的虚拟化能力来克服该限制。例如,主机不能连接到简单的端口倍增器(根据SATA II规范实现),其中在端口倍增器上的每一个驱动器端口都被连接到实现单个虚拟磁盘的SteelVine设备。在该SteelVine设备以下可以是几个虚拟化后(例如,级联、条带化等)向端口倍增器提供单个虚拟驱动器的物理驱动器。这样,克服了对端口倍增器规范的单层限制。
[0129] 注意,反而是以上示例中处于低层的SteelVine设备可以连接到附加SteelVine设备,该SteelVine设备又虚拟化几个更多的物理驱动器,再次向以上设备呈现单个虚拟驱动器。在某种意义上,上面的SteelVine设备创建了新的虚拟驱动器,它包括其他由低层SteelVine设备提供的虚拟驱动器。很明显实际上对按照该方式来级联的SteelVine设备的层数没有限制。注意,对于无法与简单端口倍增器(即,非可察觉的端口倍增器)通信的主机而言,顶层设备相反可以是向相连主机提供单个虚拟驱动器视图的SteelVine设备,即,可以使用顶层简单端口倍增器,但这在该场景中并不如此要求。
[0130] 由于SteelVine设备的每一层都按指数规律递增可以存取的物理驱动器的数量,因此实际上不可能限制能够与主机相连的物理驱动器的数量。然而,存在对可用的级联深度的实际限制。例如,将预料每一层因附加的等待时间而稍微降低整体性能。
[0131] 当虚拟化一组物理驱动器时,所执行转换的本质是利用发往虚拟驱动器的命令中逻辑块地址(LBA)的一部分来选择数据开始的低层或构成的驱动器(物理驱动器或级联的虚拟驱动器),并用LBA的余下部分来选择元件设备内的地址。也就是说,虚拟化允许部分LBA提供附加的比特用于磁盘寻址。也就是说,级联如何克服SATA II端口倍增器规范内固有的4比特地址限制。
[0132] 功能逻辑层
[0133] SteelVine架构提供除了根据一组物理驱动器创建虚拟驱动器之外相当多的功能。除了基本的SATA端口倍增器类功能和以上定义的简单虚拟化之外,提供了产生增强的虚拟驱动器功能(例如,提高的速度和可靠度)所需的特征以及为了将驱动器和主机的数量缩放成超过单个SSoC所提供的数量所需的那些特征。图9示出规范的SteelVine SSoC,它的外部接口包括某数目的与(一个或多个)主机相连的高速端口、几个驱动器和其他可能的这种SSoC(为了容许缩放到超过单个芯片所支持的主机和驱动器数量)。
[0134] 以下把SteelViine架构中整组特性定义为一组在逻辑上独立的层。图9所示的功能逻辑层出现在提出了功能的用途分级结构和抽象的各功能存在的相关层的组织当中。(这些层未必是必须被实现为独立的功能,此外,并非所有的这些特征都必须出现在特定产品当中)。
[0135] 以下的小节描述了规范SteelVine元件的不同逻辑功能。这些功能包括:支持SATA驱动器所需的机制、允许存取大量远程驱动器的特性(通过由SteelVine元件集合构成的结构)、基本的从虚拟到物理转换的逻辑(即,在物理驱动器的区域之外创建虚拟驱动器)、提供虚拟驱动器特性的附加增强的机制(例如,速度或可靠性)、用于把虚拟驱动器映射到特定目标ID的机制(对于给定主机)以及允许把SATA协议转换成其他(可能是更高层的)协议的特性。
[0136] SATA层
[0137] 在某些实施例中,SteelVine SSoC的主要外部接口连接(即,主机和驱动器端口)全都是SATA接口,为此SteelVine元件架构中的第一逻辑层涉及支持SATA接口。除了由SATA I规范的SATA物理、链路和传输层定义的基本能力之外,该层还提供对在SATA II规范中定义的原生命令队列(NCQ)和在SATA端口倍增器规范中定义的特性的支持。
[0138] 在SteelVine元件上有两种SATA接口,即目标(即,主机)端口和启动器(即,驱动器)端口。如上所述,SteelVine架构力求在对元件内将包含的每一种链路的数量的选择上获得平衡。除此之外,在SteelVine SSoC内的SATA端口之间不存在其它差异,每一种SATA端口将具有相同的功能,而且在特定类型的端口的各个实例之间不应当存在特殊化或差异。特别是,即使SATA端口倍增器规范要求特别处理物理驱动器端口0(为了支持遗留的启动操作),在SteelVine元件上的物理驱动器端口之间也不应该存在差异。这是必要的,因为(以下所述的)虚拟化和映射功能允许使用任何物理驱动器来创建虚拟驱动器0。
[0139] 物理、链路和传输子层
[0140] 针对SteelVine元件而作出的硬件/软件实现折衷受到优良策略/机制分离原则的严重影响。这些方针提出了一种方法,其中由在某类处理器上运行的软件控制数据包,但数据本身通过专门的硬件流动。该方法分离数据面(即,高性能、低层的数据移动机制)与控制面(即,具有更长时间常量的高层、面向控制逻辑,从而性能约束不那么严格)。在此所采用的硬件/软件折衷方法提出应当在此提供硬件机制来实现SATA物理、链路和传输层的所有标准化特性。
[0141] 这意味着硬件机制最大可能地实现在SATA规范中定义的逻辑(即,状态机)以允许主机和驱动器端口以标准方式起作用。然而,应当存在“勾连”(hook)以允许将不同的策略应用到这些机制。各个SATA端口应当有可能自动生成对各种标准SATA事件(例如,初始化、空闲、电源管理、仲裁等)的响应,而同时由微码定义的软件策略逻辑以与给定策略一致的方式检测、响应并生成事件。例如,虽然硬件提供自动检测SATA数据包内CRC差错(即,FIS)的机制是适当的,但是对响应于这一事件应采取什么动作(例如,立即发送差错元,记录该事件并传递FIS等)的判定,应当归该实现的策略部分负责。
[0142] 这不意味着应当在这一低层抽象上设计机制,即,每当事件发生时,它们简单地生成一个信号,并留待软件来处理它。相反,适当的硬件/软件折衷允许该软件为公用策略情况选择某些预定的(标准)性能,并放入对非标准情况的软件定义逻辑,即,何时要实现不符合在SATA规范中定义的性能的策略。良好的机制设计不会把策略选择限制为仅仅是那些已经先验的,而将允许在一组功能构件之外构造广泛的不同性能。这一设计方法的目的是将此定义机制的抽象层提升到最高的可能的层,而无需占用策略判定,即,试图包含硬件内尽可能多的功能特性直至硬件将限制该机制使用范围的点。
[0143] 与这些设计原则相一致地,多路分解在硬件机制中将要处理的传入FIS是完全适当的,例如,分离导向虚拟驱动器的FIS与发送到端口倍增器控制端口或存储机架管理桥的那些FIS。同样地,应在硬件中处理低层链路功能是适当的(例如,自动协商链路速度、空闲生成、链路仲裁、电源管理),而软件具有超驰“标准”性能的能力,例如,允许强制链路速度达到给定速率,而不管自动协商阶段所产生的结果是什么。对硬件机制而言实现影子寄存器并支持驱动器端口的逻辑也是适当的。
[0144] SATA机制允许不同的策略应用于何处的一个示例是如何处理链路层确认。虽然SATA端口倍增器规范声明链路层确认必须由驱动器进行并通过PM透明地传递,但是可以通过主机数据包的投机性确认来实现性能优化(有良好的CRC)。可以在特定情况下应用该优化,而且确定何时适于优化和何时不应进行优化归策略逻辑负责。
[0145] 另一个示例涉及应用到主机与驱动器之间数据包的排队或缓冲的策略。假设主机链路可能能够以高于驱动器可支持的速度运行,则如果在驱动器和主机之间进行直接连接的话,主机链路的利用率就会受到损失。主机链路会以1.5Gbps的有效速率取代它能够进行的3Gbps运行。一种可选的将提高主机链路的利用率的方法(它在基于SteelVine的系统内可能是关键的、性能受到限制的量度)将涉及对来自于驱动器的FIS进行缓冲,并将它们全速发向主机。虽然该技术将在某些情况下(即,当在同一主机链路之上存取一个以上驱动器时)增加主机链路的吞吐量,但这是以增加等待时间为代价来进行的(当存取仅单个的驱动器时导致吞吐量受损)。因此,当(或如果)应进行缓冲时,它变成一种策略判定。底层硬件机制支持由策略模块在给定的时间点进行任何选择。
[0146] 端口倍增器
[0147] SATA II端口倍增器(PM)规范定义了一种简单的寻址方案,它允许把一个以上的目标设备连接到单个启动器的链路。这倾向于使多个驱动器能连接到单个主机端口,而且合理地给出3Gbps的SATA II带宽和当前(卷)驱动器的带宽(它的读取头信道提供了显著小于700Mbps的恒定带宽)。
[0148] PM规范在FIS报头中定义了四个针对地址的保留比特(称为目标ID),其中该保留比特用来按照一类标准的集线器或多路复用器来选择特定驱动器。利用该目标ID字段来从多达16个不同的目标中选择一个目标。把PM定义成包括单个主机端口和多达14个驱动器端口——从0至N-1来对其进行(连续地)编号,其中N是由PM实例提供的端口总数。目标ID 0是特有的,即它用于实现遗留的兼容性。这意味着连接到端口0的驱动器将加快旋转,而且即使在主机控制器不为PM所察觉时(即,不知道FIS报头中的目标ID或无法选择FIS报头中的目标ID)也是可启动的。将目标ID 15定义成用来与PM本身交谈的端口。该端口提供了对一组(规范的和由供应商定义的)可寻址并读取/写入为32比特值的寄存器的存取。
[0149] 可以在一旁再设置一个目标ID以用作存储机架管理桥(SEMB)功能的地址。该地址通常比PM所支持的最大数量物理驱动器的地址大1(即,目标IDN+1)。该功能起桥的作用,从而在主机与连接到该PM的存储机架处理器(SEP)之间透明地转发命令和响应。
[0150] SATA主机控制器要么为PM所察觉(意味着它们可以生成并响应于FIS报头中的非零目标ID字段),要么就不为PM所察觉(意味着它们在FIS目标ID字段内插入零,否则就略去该字段)。SATA主机控制器还可支持基于命令的交换或基于FIS的交换。基于命令的交换涉及每次仅向给定目标设备发出单个命令。只有在命令已经完成之后,主机才可以向另一目标发出新命令。虽然该方法价格比较低廉(因为它更简单而需要更少的资源来实现),但是它限制了可以实现的并发量,因而限制了存储子系统的性能。利用基于FIS的命令,主机可具有多个发向不同目标的未完成命令,并处理这样一个事实,即响应FIS可来自于所有未完成命令包含于其上的目标。这可通过对每一个未完成命令保存分离的上下文并使响应与适当的上下文相关联(通过“标记”机制)来实现。该方法以附加的硬件成本价格和主机控制器内的复杂性来产生更高的系统性能。主机控制器是实现基于命令的交换还是基于FIS的交换对于PM兼容设备是相当透明的。在以下关于NCQ的章节中进一步描述了上下文和标记的概念。
[0151] 应当注意,SteelVine元件使用PM规范的寻址特性来选择虚拟驱动器。SteelVine还可使用(目标ID 15)供应商定义的寄存器和SEMB功能。利用这些PM特性来保持与PM规范的文字相一致(如果不是精神上的),并提供对SteelVine SSoC的独特特性的支持。
[0152] 原生命令队列(NCQ)
[0153] SATA规范的对任一基于SATA的系统的性能具有显著影响的另一特性称为本机命令队列(NCQ)。该特性在其他存储接口(例如,SCSI)中发现,并涉及允许每次在给定驱动器上有多个未完成的命令。这意味着由驱动器进行的命令执行无需严格同步;主机可以在之前发出的命令已经完成之前向驱动器发出附加的命令。NCQ暗示可以按照与在驱动器上接收命令的顺序不同的顺序来执行该命令。NCQ的益处是大量的,而且包括通过使命令发出与命令响应交迭来提高的性能,从而允许隐藏等待时间(结果增加繁忙的存储子系统的整体吞吐量)。另外,关于驱动器如今一次可以存取一个以上命令的事实意味着它们可以以增加的该磁盘中有关所请求寻道操作的当前旋转位置的知识为基础,进行更有效的磁头调度。
[0154] 当请求在该线路的主机和目标终端(以及它们之间的任何东西)上都创建多个“上下文”时支持NCQ是非常资源集中的。每个上下文都保存未完成事务的状态(可包括未完成FIS的副本、DMA状态、差错状态等)。为此,主机控制器和支持SATA NCQ协议的驱动器都不是广泛可用的,而且当NCQ变得可用时,它将会(至少是一开始)是可用的SATA HBA和驱动器的子集内的成本增加的特性。尽管如此,有可能使用该协议来提高基于SteelVine的存储子系统所提供的性能。SteelVine设备允许主机在同一目标设备上具有多个未完成的命令,即使物理驱动器并不提供对NCQ协议的支持。这通过支持流水线操作来提高性能,它允许通过覆盖命令发布和运行来隐藏等待时间。
[0155] NCQ协议允许向每个目标设备发布多达31个未完成的命令。端口倍增器允许每个HBA端口存在多达14个目标。因此,SATA主机控制器有可能在每个主机端口上包括多达(14*31=)434个未完成的任务。这表示每个主机控制器包括(抑制性的)大量上下文。如果SteelVine SSoC要支持该最大数量的未完成命令,它同样必须要支持非常大量的上下文。幸运的是,模拟已经显示响应于在每个目标上支持4个以上的未完成任务存在收益递减,而且NCQ协议允许进程中的未完成命令少于该最大数量的未完成命令。
[0156] SteelVine SSoC可经它们输出的每个虚拟驱动器提供某固定数量的未完成命令,而且该数量可以显著小于该最大指定极限434。实际上,SSoC可经虚拟驱动器支持数量动态可变的多个未完成命令。这可以通过以下操作进行:在每一个排队命令到达SSoC时从公共池中分配上下文,向主机返回带有清空忙碌位(BSY)的FIS直至不存在空闲的上下文。此时,SteelVine元件可以仅仅是等待,直至在为等待中的虚拟驱动器清空BSY比特之前上下文变为空闲的为止。由于独立的ATA寄存器组存在于每一个目标ID(因而,每一个虚拟驱动器)的HBA上,所以该活动具有独立地对每一个虚拟驱动器进行命令发布速率的“流控制”效果。
[0157] 应当注意,NCQ协议独立于对PM的支持(尽管在SteelVine架构中支持所有的特性),而且NCQ可与为PM所察觉或不为PM所察觉的主机控制器一起使用。
[0158] 虚拟化层
[0159] 虚拟化层负责在一个或多个(本地或远程的)物理驱动器之外创建虚拟驱动器。虚拟化可以仅包括把虚拟驱动器定义为物理驱动器上块的(可能是适当的)子集。在此情况下,所需的全部是把LBA从虚拟驱动器的地址空间转换成物理驱动器上的适当地址。虚拟化还允许创建由多个物理驱动器中相邻构件组成的虚拟驱动器。在此情况下,给定的虚拟命令可定义影响多个物理驱动器(即,跨越两个物理驱动器之间边界的读/写操作)的操作,因此,必须生成多个物理命令。该虚拟化层负责把虚拟命令分成特定数量的物理命令(各自包含适当字段值),并将来自这些物理命令的结果组合成组合虚拟响应。
[0160] 在某些实施例中,利用查询表(LUT)与一组状态机的组合来实现虚拟化层。在这一实现过程中,LUT负责把虚拟命令的起始LBA和块计数字段转换成它们的物理值,并有可能生成多个物理命令的字段。状态机负责把多个物理命令分叉/联合成单个虚拟响应,并处理可能从这些操作中产生的所有异常条件。就像多个物理响应被组合成响应于虚拟命令返回到主机的虚拟响应一样,由于发布多个物理命令引起的异常在递送到主机之前被组合成虚拟的异常(而且有可能是受抑制的)。
[0161] 读/写虚拟命令的起始LBA和块计数字段被分解成一个或多个部分,然后被转换以将其映射到给定物理驱动器的适当部分。然而,不管因该虚拟化动作所产生的物理命令的数量有多少,总是保持一不变——即所有物理命令的块计数字段之和等于虚拟命令的块计数字段之和。虚拟化层转换地址,并且有时发布它们作为多个子参考,但精确地产生了与主机请求的读/写数据一样多的读/写数据。
[0162] 虚拟化层所操作的基本单元是连续范围的磁盘块,在此称为区域。可由该层组合一个或多个物理驱动器区域来创建虚拟驱动器。在该文件中,来自多个驱动器的区域的组合称为级联或RAID-1(即,独立/廉价的磁盘阵列的特性,与条带化(RAID 0)相比它甚至更少与冗余相关)。在以下小节中描述了区域的概念和它们在级联中的使用。
[0163] 物理磁盘区域
[0164] 在该文件中,区域被定义成单个物理驱动器中连续范围的块(范围从1到全部)。有可能定义重叠区域,而且可以把单个区域定义成包括整个驱动器,但一个区域无法跨越多个物理驱动器。
[0165] 在图10中,根据由单个物理驱动器的一小部分组成的单个区域来创建虚拟驱动器(Vi)。所示的物理驱动器(Pj)包括块地址空间,其范围从0(该驱动器上的第一个块)到Mj(该驱动器上最后一个块的LBA)。该示例中使用的注释把区域(R0)表示为多元组(Pj,S0,C0),它包括该物理驱动器的标识符,其中在该物理驱动器上定义区域(Pj)和该区域的起始块地址(S0)和块计数(C0)。该给定物理驱动器中定义的区域可向主机呈现为虚拟驱动器Vi。由表示该区域的多元组来定义这一虚拟驱动器,该多元组以(R0)、它的起始LBA(0)和它的最大LBA(Mi,在此情况下等于(C0-1))为基础。
[0166] 在所示的示例中,把在该区域上发布的读/写存取命令表示为另一个三元组,它定义了受到给定虚拟命令影响的区域Ri的子集。该三元组根据其起始LBA(sv)和块计数(cv)来描述虚拟命令。该示例还显示由虚拟化产生的物理命令,它由包括该事务的起始(物理)地址(S0+sv)和块计数(cv)的三元组组成。注意,在此简单的情况下,命令类型保留了相同的内容,而且该块计数字段并未变为虚拟化处理的一部分。
[0167] 这示出了虚拟化层的最基本的目的——即,为了把虚拟驱动器的块地址空间转换到区域的块地址空间之上。由于这两个地址空间之间存在简单的线性关系,因此可轻易地以类LUT实现进行转换,而无需附加的逻辑。该虚拟化层的应用示例包括:在单个较大的物理驱动器之外创建多个较小的虚拟驱动器;在多个较小的物理驱动器之外创建单个较大的虚拟驱动器;以及在多个物理驱动器的快速区域之外创建较大的、比均值更快的虚拟驱动器。
[0168] 级联(RAID-1)
[0169] 虚拟化层的区域抽象的扩展即是主张级联——即,创建由一个以上区域的线性组合构成的虚拟驱动器。该特性可用于在一组两个或更多较小区域(来自于不同或相同的驱动器)之外创建单个较大的虚拟驱动器。该特性最简单的用法是利用该组中全部物理驱动器的组合能力来把多个完整的物理驱动器组合成单个虚拟驱动器。
[0170] 图11提供把两个来自不同物理驱动器的区域级联成单个虚拟驱动器的示例。在该示例中,可由包含区域列表的三元组(Li,0,Mi)来表示虚拟驱动器(Vi),该区域列表包括Vi(按照它们出现在虚拟地址空间中的顺序)、起始块地址(0)和最大有效块地址(Mi,它等于组合区域大小之和减1,即(Ci0+Ci1-1))。
[0171] 不存在对区域选择的限制,这些区域可参与创建级联的虚拟驱动器(除了那些应用到区域本身的,例如,非重叠的连续块组等)。
[0172] 增强层
[0173] 虚拟化层涉及创建仅是在大小上有所不同的虚拟驱动器,否则虚拟驱动器就与物理驱动器共享所有相同的特性,其中根据这些特性构建虚拟驱动器。根据虚拟化层所提供的基本功能构建后,增强层以(有可能是级联的)区域集合开始并对其应用小附加功能集,以便于创建具有优于其组成物理驱动器的增强特性的虚拟驱动器。
[0174] 增强层按照增强底层物理驱动器的性能和可靠性的各种方式来组合多个区域。虽然这些特性在很多方面与系统内发现的提供各种不同RAID功能的特性相似,但是增强层在几个重要方面有所不同。把该层的特性定义成能够轻易且低廉地集成到单个低成本SSoC中,而且仍然能够以“线速”(即,按照与HBA与驱动器之间直接连接的性能级别相等的性能级别)进行操作的功能。这意味着由这部分SteelVine架构提供的机制往往实现起来很容易和廉价,而且使用了简单的强制技术。例如,用简单的镜像(RAID 1)来代替奇偶RAID(例如,RAID 5)以允许简单的低成本实现,而无需相当多数量的处理功率和存储器。
[0175] 增强层的关键技术包括条带化(RAID 0)、镜像(RAID 1)以及它们的组合(例如,RAID 10和RAID 01)。这些特性被加于虚拟化层所定义的那些特性之上,在以下小节中将对其进行更详细的描述。
[0176] 条带化(RAID 0)
[0177] 如果存取模式是随机的(例如,在某种服务器或多用户系统上),则获得多个报头并发移动的益处,条带应当足够大,从而单独的读/写事务并不经常跨越条带边界,而是不会太大以致于无法获得具有并发寻道的统计益处。如果存在任何类型的位置,或存在多个较大的连续读取操作,就不会产生所要求的性能,但是使用对多用户系统上文件系统的特有类随机存取,这变得非常好使。条带化的目的是使报头加倍且更多的吞吐量——粗粒并行性。
[0178] 镜像(RAID 1)
[0179] 该架构允许多个镜像的驱动器,然而Polaris和Milkyway包括两路和四路镜像约束。如果任何物理命令失败(将使驱动器不相容),该架构就复制写入操作并使虚拟命令失败。该架构还处理故障异常,并交替进行读取操作以共享加载/耗损。该架构使用起始LBA(中间字比特)作为选择器,而且在其一开始读取设备时并不切换。该架构还跟踪驱动器序列号以判断是否换出驱动器(其中镜像集将会是不相容的)。
[0180] 在某些实施例中,所有的写入操作都送往该镜像集的所有成员。读取操作来自该集内的仅一个驱动器,但通常从同一驱动器中读取出扇区。该架构利用简单的确定性方案来在该集中选择从哪一个驱动器读出。为了确保优良的连续读取性能(>100MB)而将大块置于较大的边界上,并允许寻道重叠以提高关于随机读取操作的性能。
[0181] 无论何时确定镜像集不相容都必须进行重建操作。在非易失性存储器上标记该重建,从而该架构将继续尝试重建直至镜像都同步为止。当尝试同步磁盘时,该架构跟踪“指针”在哪里,即,该分界线在复制的与未复制的驱动器区域之间的何处。复制对指针后面的块的写入操作(即,写入与其同步的区域内),同时仅对同步的驱动器进行在指针之前的写入操作。
[0182] 在某些实施例中,该架构保持非易失性存储内的指针,从而如果电源断开,就可以在电源恢复时在其断开的位置获得重建。在每次递增指针就对非易失性存储器进行写入操作过于昂贵时(即,写入块),该架构仅在规则的检查点更新非易失性存储器,这减少了在重启时执行的重复工作量。
[0183] SteelVine实现使用公平共享的调度程序来实现重建功能。这允许重建活动消耗除了主机所使用资源之外的全部有效资源,并在主机希望消耗全部资源时,为重建所使用的资源量提供下限。这意味着如果主机不施加负载,则重建活动将获得全部资源,而且该重建将在最短的时间量内完成。如果主机施加百分之一负载,则重建活动将获得受保障的最少量资源(例如,百分之二十),以使该重建将在有限的时间周期内完成。这意味着当主机试图把重建活动压榨至小于最低量时,主机获得截止该点它想要的全部周期,然后将主机固定在该层。
[0184] 映射层
[0185] SteelVine架构中的下一层称为映射层。它在主机FIS内目标ID字段与前面的层定义的虚拟驱动器之间提供了一种简单水平的间接寻址。该映射提供了对基于LUT的实现的操作,其中以传入FIS目标ID字段内的值为基础来执行对映射表内的哪一个“页面”的选择。
[0186] 此功能略微变得更有趣的就是在把物理驱动器“标识映射”到虚拟驱动器时。这意味着虚拟化层把虚拟驱动器定义成由完整的物理驱动器构成的区域,而且对该虚拟驱动器不进行增强。以这种操作模式,SteelVine SSoC动作相当像端口倍增器,且仅仅是把针对给定目标ID(即,虚拟驱动器)的所有命令直接传送到期望的物理驱动器。然而,映射层允许重新映射物理驱动器端口,即,目标ID 0不必映射到物理驱动器端口0,而可以映射到任一个物理驱动器端口。该特性提供了优于简单端口倍增器所提供灵活度的提高的灵活度,而且可用于重新分配物理端口(例如,出于布局或封装便利性的原因)。
[0187] 除此之外,映射层允许创建多个“视图”,即取决于使用哪一个目标ID可按照各种不同的方式来存取给定的物理驱动器。例如,可以级联一个构建块中的四个驱动器,并向主机呈现为虚拟驱动器编号0。同时,SteelVine SSoC可被配置成允许利用从1到4的目标ID编号来对作为单个(标识映射的)驱动器的要存取的驱动器作出相同的许可。这可用来允许对虚拟驱动器中各个组成驱动器的管理性存取,例如,用以支持修复或监视动作。
[0188] 转换层
[0189] 虽然SteelVine架构以SATA存储链路协议为基础,但是存在有大量其他抽象的高层存储协议(例如SCSI、iSCSI、CIFS、NFS等)。SteelVine架构中的顶层称为转换层,而且它是在此可以把主机存取协议从本地SATA协议转换成实质上任何所需主机接口协议的点。此外,这是其中可以把SteelVine架构提供的基本面向块业务转换成文件级别业务的地方。
[0190] 标准的SATA特征
[0191] SteelVine架构SSoC已被定义成顺应各种SATA规范。然而,已经以使用规范特性的方式(同时仍然保留在该规范所设定的边界内)采取重要的特权。例如,ATA规范提供了一种适当灵活的机制来声明和启用由设备提供的功能和特性,而且SteelVine元件采用了该规范的这方面。ATA规范定义了一种数据结构(即,IDENT)和协议(利用标识命令),它们允许设备声明它所支持的(预定义的)特性。此外,SATA允许主机在设备所提供的那些特性(例如,DMA模式、在多块操作中要转换的块的编号等)当中选择(或启用)特定的特性。SteelVine元件为它所提供的每一个虚拟驱动器合成适当的IDENT数据结构,并指示该元件支持的特定特性。
[0192] SATA被定义成与PATA设备撰写的软件(包括设备驱动器、OS和应用程序代码)向后兼容。主机软件与PATA和SATA硬件之间的主要接口是一组称为Taskfile(任务文件)的寄存器。ATA寄存器集(或Taskfile)原先由8个单字节寄存器组成,其定义为:数据、误差/特性、扇区计数、扇区编号、柱面低、柱面高、设备头和状态/命令寄存器。
[0193] 开始时通过设备的物理属性对设备寻址,即,柱面、头和扇区。然而,随着时间的流逝,用一种称为逻辑块地址(LBA)的扩展和简化的线性寻址方式来代替该寻址方式(称为C/H/S)。为了保持向后兼容性,该初始寄存器集定义用于新的寻址方式(即,扇区编号寄存器用于LBA[7:0],柱面低用于LBA[15:8],柱面高用于LBA[23:16]和部分设备头驱动器用于LBA[27:24])。这供28比特块寻址方案使用,它(在使用典型的512字节块大小时)产生128GB的最大可寻址范围——该大小很快被有效的驱动器大小超越。响应于此,ATA标准创建“扩展的寄存器”。可以向每一个LBA和扇区计数寄存器按顺序写入两字节,从而按照与遗留软件向后兼容的方式将它们扩展成16比特值,其中该遗留软件仅处理8比特寄存器。该扩展容许48比特的LBA空间,它产生128PB的最大可寻址驱动器大小——即应该是持续至少几年的大小,禁止在基本存储技术中任何类型的突破。
[0194] HBA与设备之间的ATA事务包括并不涉及数据传输的命令(即,非数据命令)和数据传输命令。对于涉及数据移动的命令而言,该ATA规范定义了多个不同的数据传输模式,每一个都相继地提供更高级的性能。这两种主要的数据传输模式称为编程I/O(PLO)和直接存储器存取(DAM)。ATA寄存器集还包括其中称为控制块的一对寄存器(除了前述统称为命令块的8个寄存器)。该控制块寄存器包括可选的状态/设备控制寄存器和驱动器地址寄存器。
[0195] SATA规范
[0196] SATA I规范定义第一代SATA,它包括1.5Gbps SATA PHY、链路、传输和协议的全部基本特性。SATA II规范提供对SATA I规范的增强,它在该规范的所有层上提供附加的特性和能力。在PHY层,新的规范提供对底板互连和异步信号恢复的准则,以及为定义更高速的链路速度(即,3Gbps)和自动协商过程所必需的信息,该自动协商过程使主机与设备能达到最高通用链路速度设置。
[0197] 在协议层上,为支持新的命令排队特性而对设备命令协议作出改变。原生命令队列(NCQ)是该新协议的名称,它容许在给定设备上发布多个未完成的命令,并允许以不同于发布顺序的顺序来返回这些命令。NCQ支持通过聚集中断而不是对每个命令进行中断来提高系统性能,这在大量命令运行时会变得昂贵。而且,在主机控制器内的多个上下文允许在驱动器需要的任何时候就返回空转状态,这还提高了性能。
[0198] 对SATA II的另一个补充提供称为端口倍增器(PM)能力的特性。该特性允许将单个SATA主机端口连接到多达15个驱动器。该规范允许创建简单的、单层的类似集线器的设备,它以对主机和设备透明的方式将单个主机端口扇出到多个驱动器端口。该规范明确地禁止级联PM设备。
[0199] PM规范利用FIS报头中4个未使用的比特来提供对目标驱动器端口的寻址。这些比特形成称为目标端口字段的字段,其中多路复用设备使用该字段来选择要使用的目的地(驱动器)端口。在正常操作中,HBA对它发送到PM的每一个FIS报头添加一地址。一旦接收来自该主机的FIS,PM设备就检查FIS报头内的地址字段,清空目标端口字段,并向选定的目标端口发送该FIS。同样地,修改来自驱动器端口的FIS以在该FIS的报头中包括它们的传入端口地址,更新该FIS的CRC以反映报头内的变化,并向主机端口转发该FIS。如果传入的FIS的CRC验证失败,PM设备就必须广播劣质的CRC,而且不往该FIS内写入优质的(重新生成的)CRC来对其进行掩码。
[0200] 基于Polaris的存储子系统
[0201] 作为要实现的SteelVine系列SSoC中的第一个,Polaris提供该架构中定义功能的子集。Milkyway是对完整的SteelVine架构的第一次全面实现。Polaris被固定为单个主机、5个驱动器的独立产品,而Milkyway允许用多个主机端口和大量驱动器端口来构建子系统。可以利用基于Polaris的硬件来构建广泛的感兴趣的存储子系统。以下小节研究利用(增强的)Polaris的端口倍增器功能及其相关联微码参与存储阵列控制器的创建的硬件和软件。
[0202] Polaris SSoC的主要外部接口由一个SATA II主机端口和5个SATA II驱动器2
端口组成。另外,Polaris SSoC具有各种辅助I/O接口,包括:LED驱动器、IC总线和几个GPIO线路。这些外部接口必需且足以支持基本的5个驱动器到1个主机的SATA多路复用器功能以及所有对Polaris定义的“增强”功能。
[0203] 在内部,该硬件由嵌入式处理器、数据移动引擎、各个SATA端口的资源(即,PHY、链路和传输逻辑,以及一组充当该链路的FIFO缓冲器的寄存器)和各种支持功能的逻辑。每个端口FIFO中的每一个一端连接到链路,而另一端连接到公共内部总线。该数据移动功能单元可被引导成在所定义的FIFO缓冲器集之间移动数据。它允许进行驱动器到主机和主机到驱动器的传输加上驱动器向驱动器的传输。
[0204] 该嵌入式处理器通过加载和存储来存取该内部资源(例如,每个端口逻辑、FIFO、数据移动器和其他VO接口逻辑),其中通过该嵌入式处理器的特定控制寄存器地址空间(包括在系统控制处理器(SCP)寄存器空间内定义的16个寄存器的16个库)来进行该加载和存储。这些寄存器的一部分(例如,那些控制SATA PHY、EEPROM写入操作、软件复位等的寄存器)被保护以防止意外存取。
[0205] Polaris SSoC利用外部的连接I2C的EEPROM来包含微码、配置状态和策略相关状态。在通电时,微码被自动读入微微(Pico)指令存储内,并利用简单硬件校验和机制来验证。
[0206] 该Polaris硬件包括对微微(Pico)处理器进行重置的软件重置寄存器,但它并不强迫重载微码。当主机端口上出现COM-RESET频带外信号时,生成不可掩码的中断(NMI),它导致硬重置(强迫重载微码)。微码加载和验证被设计成在少于1秒的实际时间内完成。
[0207] 系统控制处理器(SCP)
[0208] 在Polaris的设计中,尝试在硬件中实现该设计的数据面部分,并通过在系统控制处理器(SCP)(称为Pico)上执行微码来仅执行更高级别的控制面功能。对于每一个链2
路而言,在硬件中实现完整的SATA物理、链路和传输层。大多数辅助接口功能(例如,IC、EEPROM和LED)都包括某一程度上的硬件支持,并由专用的硬件功能单元执行大多数成批的数据移动。Pico微码负责实现大多数由SSoC提供的功能,包括:初始化、虚拟化、镜像、条带化、端口之间的FIS移动、对异常情况的处理、机架管理功能等。
[0209] 由于它实现成批的SSoC功能,因此Pico处理器的性能就影响基于Polaris的系统的整体性能。Pico是具有双发布、类似RISC的指令集的简单的、嵌入式的32比特控制处理器,它具有32个寄存器、7级管线和Harvard存储器架构,。Pico I支持计数器-定时器和外部中断,但是并不提供对乘法或除法运算的硬件支持。用于Polaris中的Pico I处理器不支持浮点,无MMU,无高速缓存,而且不进行无次序的运行。它在150MHz上运行,具有针对指令存储的64K SRAM和针对数据存储器的16KB SRAM。
[0210] 除下述硬件资源之外,还存在附加的寄存器库,它提供对SCP的基本支持。这些统称为CPU寄存器,并包括处理器状态(PS)、中断掩码、中断未决、异常程序计数器和计数器/定时器寄存器。
[0211] 已经为Pico开发了一种以Gnu编译器程序组为基础的完整工具链。该Pico工具链包括编译器(gcc)、汇编器(gas)、调试器(gdb)以及Gnu二元实用程序(bintools)。
[0212] 分割-合并引擎(SME)
[0213] 内部的数据移动器功能(称为分割-合并引擎(SME))实质上是一种智能的片上DMA控制器,它在SCP寄存器地址空间内的位置之间(即,在寄存器、FIFO和存储之间)移动双字。SME负责SATA端口之间所有的数据移动活动,而且还能够执行复杂的分散-集中操作以支持驱动器虚拟化功能,包括条带化和镜像。
[0214] SME还支持驱动器到驱动器的复制。这在进行诸如镜像集重建操作、备份等操作时提供系统层性能。该特性不仅减少Polaris主机链路上的负载,还减少这些带宽密集的数据复制操作对主机的影响。这意味着这些复制操作在相当大量的处理周期、存储器和I/O带宽方面并不对主机施加负载,而且不损耗Polaris主机链路。
[0215] 主机SATA端口
[0216] 主机端口在主机与Polaris之间实现SATA连接的目标终端。与主机端口相关联的资源包括为实现SATA协议的PHY、链路和传输层而必需的逻辑、一组用来控制该连接的控制与状态寄存器,以及一组充当传入或输出FIS报头的缓冲器的寄存器。
[0217] 主机端口的逻辑处理所有必要的通电和低层同步动作,以及SATA链路元的链路层握手与交换。自动处理该SATA协议处理的某些方面(例如,生成ALIGN、CONT、SOF/EOF、X-RDY、HOLD、R_IP、WTRM等元)。然而,由该链路上特定元的接收而产生的中断,并生成其他链路元(例如,R_OK、R_ERR、P_SYNC等)归Polaris微码负责。这通过操纵主机端口的控制与状态寄存器来进行。主机端口逻辑校验传入FIS上的CRC,并在控制与状态寄存器中指示校验结果。同样地,该逻辑生成针对传出FIS的CRC。已经作出特定的调整以允许故意在传出FIS上生成劣质的CRC。该部分逻辑通过FIS目标ID字段来对传入FIS进行某种低层多路分解。该端口逻辑标识目的地为地址15的FIS(即,PM 15)以及被寻址到该SEMB逻辑的FIS(即,PM N+1,其中通过设置主机端口控制与状态寄存器中的值来定义N),并对每一种情况生成适当的中断。中断在主机端口上出现其他事件时生成,而且可以通过对适当的端口控制寄存器进行写入来清空所有中断。
[0218] 传入FIS的报头被自动存放在缓冲寄存器内,同时通过SME把FIS的主体(或有效载荷)直接转送至目标设备。向缓冲寄存器内写入传出FIS的报头的动作触发该端口将FIS发送回主机。就像端口的控制与状态寄存器一样,该缓冲寄存器存在于SCP寄存器地址空间内,且被读取写入为双字(即,32比特)值。
[0219] 驱动器SATA端口
[0220] Polaris上的5个驱动器端口充当Polaris与其驱动器之间的SATA连接的启动器端。所有的驱动器端口大多数彼此相同,而且大多数在对主机端口的功能和实现上是相同的。驱动器端口与主机端口的不同之处在于其控制与状态寄存器内包含一些附加字段,例如,启用对端口的旁路和直穿操作的比特,用于操纵端口内SStatus影子寄存器中X比特的比特,以及与连接到每一个驱动器端口的FIOF相关联的字段。
[0221] 除具有主机端口的控制与状态寄存器字段的超集之外,每一个驱动器端口包括对SRAM值得的全FIS(即,8KB),其中该FIS作为FIFO进行管理。利用该SRAM来缓冲移入或移出每一个端口驱动器的FIS。驱动器端口的FIFO可以充当在SME控制下的FIS传送的源或目的地。该设计期待由SME引擎将FIS送入和送出驱动器端口FIFO,但是还允许SCP(在DWORD边界上)直接读写该FIFO。
[0222] 在Polaris内包括特定的硬件特性来支持实现对FIS的“直穿”路由,用以允许在接收到所有字节之前,向FIS的目的地端口传送该FIS。对该特性的支持有助于实现峰性能级别,否则当设备执行“存储和转发”类操作时将会为每一事务添加大量等待时间(引入相当大的等待时间惩罚,但是可以对设备关于吞吐量的性能有可以忽略的影响)。主机和驱动器端口逻辑内的特定特性允许通过操纵相应端口的控制寄存器来激活该特性。
[0223] 而且,在主机和驱动器端口内都存在控制寄存器,该主机和驱动器端口允许对物理层的SATA接口逻辑进行配置。
[0224] 机架管理支持功能
[0225] Polaris SSoC支持标准的SATA机制来与标准规范的存储机架处理器(SEP)通过接口相连。如上所述,SATA存储机架管理桥(SEMB)特性允许Polaris元件通过SAF-TE协议或通过SES协议充当HBA与SEP之间的桥。
[0226] SEP可以跨越大范围的成本、大小和复杂性,但一般来说,SEP倾向于比Polaris元件花费得更多且更大,而且比SteelVine SSoC包括更多的主机软件。为了启用为简单的机架管理业务所必需的基本特性,在成本和复杂性与SteelVine元件中的那些一致的更多的层面上,Polaris可支持使用更简单的低成本环境监控芯片(例如,国家半导体的LM 87)。用微码实现对低成本EM元件的支持,并通过对标准SEMB协议的SIMG专有扩展来提供对低成本EM元件的支持。
[0227] LM 87是一串8比特范围寄存器,可以对它们进行读取/写入以提供状态和设置值。LM 87事务是真正简单的——读取分组(i2c addr、reg addr),根据响应获得数据字节,写入分组(i2c addr、reg addr、数据字节)。
[0228] 虽然可通过简单的I2C总线接口来供应SEMB的基本功能,但是Polaris提供专用硬件以支持这些SEMB功能。除了可主/从的IC总线之外,还存在专用的存储器块(1KB)和像DMA单元那样发挥作用的逻辑,而且该逻辑可用来在EM IC总线上、在SEMB存储器和2 2
设备之间传送数据块。可用两个不同的IC目标地址来对EM IC总线进行编程。
[0229] 因为明确定义且高度样式化SEMB I2C事务,所以Polaris SEMB逻辑提供对这些事务的支持。具体地说,SEMB逻辑自动接收(6个或7个字节的)SEMB分组报头,并生成对Polaris微码的中断,该Polaris微码处理对传入分组的部署。
[0230] 可以将SEMB逻辑设置成自动在每一个分组的末端添加校验和,并生成传入分组的校验和(以由微码根据在每一个分组的末端处接收的值来校验)。
[0231] SEMB逻辑在SEMB存储器与EM I2C总线之间移动数据,而且利用SME在主机与SEMB存储器之间移动数据(以与在FIFO与主机之间移动数据FIS相同的方式)。
[0232] SEMB逻辑可以部分地解析并分解传入SEP分组报头(提取sepStat字段、CRC等),它可包括仅有报头的分组(即,没有数据),或者报头和数据分组。
[0233] 可以将EM I2C上Tx数据率设置成N种选择中的一种。可以通过微码来设置针对2
SEMB逻辑的独立的重置信号。微码在重置时发送探针分组以查看EMIC上是否存在SEMB,并注意此以便在主机请求返回对PM N+1端口的签名时,它可以适当地作出响应。
[0234] 可以在由SCP存取的双字中读/写该SEMB存储器。SEMB逻辑包括允许超时中断的定时器,从而可以检测悬置的EM 12C事务。
[0235] LED控制逻辑
[0236] SteelVine元件的另一个特性是通过LED来判断物理驱动器状态的能力。不同的存储应用程序要求不同类型的外部标记,因此SteelVine元件必须支持不同的LED特性。例如,企业产品要求除那些指示故障的标记之外不提供LED标记,而用户产品要求驱动器动作和电源标记。
[0237] Polaris具有对闪烁的LED标记以及允许自动显示驱动器动作的硬件支持。重要的是提供对这些功能的硬件支持,因为以微码来执行这些功能的开销将会是昂贵的。Polaris在每个驱动器端口上包括两个LED,对主机端口有两个LED和四个系统LED。每个端口的LED对可以八种不同模式中的一种来进行操作,其中这八种不同的操作模式表示根据LED状态的不同情况。可开关每一个LED或使其闪烁。它们取决于是否处于企业模式而不同地动作。可编程每个端口LED对之一以响应于该动作而触发(打开或关闭数十毫秒)。
该自动闪烁促使选定的LED以大约1秒的循环时间触发状态。
[0238] 系统LED可由微码直接控制且无任何硬件支持(除打开或关闭它们之外)。
[0239] 在Polaris中,还提供对外部EEPROM的存取的支持,该外部EEPROM用于存储所有异常微码、虚拟化状态和其他关于该设备的配置信息。
[0240] Polaris软件概述
[0241] 如图12所示,基于Polaris的存储子系统的软件元件由三种不同类型的软件构成。这三个部分存在于三个不同的位置:在SSoC上、在对该SSoC的本地的板上和在主机上。以该Polaris SSoC为基础的不同存储产品仅仅在类型规范和为传递期望功能所需软件的数量上不同。该不同数量的资源可用于略有不同地实现的这些不同类型软件要求中的每一个。要将软件工程内相同的最佳实践应用到对该软件的开发中,而不管讨论中的软件类型为何。
[0242] 在以下小节中(高层次地)描述用于基于Polaris的存储子系统的这三类不同软件的每一种,从主机软件开始,移至本地控制器上的软件,并以专门的Polaris SSoC上的软件结束。除此之外,还描述存储子系统内软件之间的各个关键接口。这包括用于定义和实现策略模块、监控子系统的操作并更新该PolarisSSoC内微码的接口。
[0243] 主机软件
[0244] 运行在主机侧的软件由系统层软件和在标准的、资源丰富的主机环境内运行的应用层软件构成,几乎不具有约束。最小化为给定的基于Polaris的存储产品所需的系统层软件的量是合乎需求的。这是因为与为每一个新的OS和平台版本对驱动器进行连续传入端口和兼容测试有关的高成本。可以以在无人工介入的情况下运行的后台程序的形式递送某种系统软件,诸如将存储子系统的特性映射到现有系统管理控制台中的策略或适配器。
[0245] 设备驱动器
[0246] 在最低层上,存在在设备驱动器内实现的功能。这可包括各种各样的低层特性,例如产生回调(至ioctl)作为进行对来自存储子系统中感兴趣事件的异步通知的结果,并允许(ioctl等)访问Polaris硬件的低层特性。SteelVine架构的目的之一是允许添加对主机透明的功能。这意味着必然有可能用Polaris硬件来构建存储子系统,其中该Polaris硬件适当地用现有(遗留的)设备驱动器来操作。给定子系统的特定特性可仅通过特定设备驱动器访问,但通过标准发行的设备驱动器来推导子系统的大多数值是合乎需求的。
[0247] 应用
[0248] 在顶层是人工交互应用程序,例如与用户交互的CLI和GUI。CLI可以启用脚本或其他管理功能。GUI可以简化通过抽象的操作。
[0249] 外部接口API/库
[0250] 该架构可提供一种外部接口程序库来存取该系统的特性。这样,可以除去如何与子系统通信的细节并对子系统的不同元件独立地作出改变。所有主机SW(除设备驱动器之外)可以使用公共库来确保统一地存取特性并提高便携性。
[0251] 外部控制器固件
[0252] 在基于Polaris的存储子系统中发现几种不同的嵌入式控制器,包括用于机架管理、外部接口处理和实现外部策略的处理器。虽然可通过单独的处理器来处理功能,或者可以将功能一起集聚在公共处理器上,但是在这些处理器上执行的软件类型在本质上是相似的,而且在此称为固件。固件具有与主机软件和微码一样的特性。然而,固件执行环境一般具有相比于一般的主机环境较少的相关资源,但比对Polaris微码可用的资源多不少。运行时环境可以和用于微码或商业RTOS甚至是Unix衍生版(Knoppix、eCos等)的环境相同。接口封装是用来提供期望外部接口(例如,网络服务器、协议、链路接口等)、HTTP、TCP/IP、USB等的固件模块,这取决于要向存储子系统提供哪种外部接口。例如,Polaris可以提供串行或USB端口来运行CLI以进行配置、监控或更新,或者还能够运行网络服务器和连接以太网来允许来自网络浏览器的控制/监控。
[0253] SSoC微码
[0254] 在Polaris SSoC上运行的代码通常称为微码,并由几个关键部分组成,包括公共业务部分、应用程序特有部分和(可任选地)嵌入策略模块。由于对不同的产品定义不同的特性集,因此对微码的改变应该囿于该策略模块。
[0255] 存在广泛范围的不同的使用模型,其范围从非接触装置到高接触管理系统。根据该部件所使用的模式,可要求从无附加软件到庞大数量的软件。
[0256] 结论
[0257] 根据前述内容,可以理解在此为了其例示的目的而描述高级存储系统的特定实施例,但是可在不脱离本发明精神和范围的情况下作出各种修改。例如,尽管存储设备在以上一般指的是磁盘驱动器形式,但是可以使用大量不同的不是以磁盘为基础的存储设备,例如闪存设备、磁带机和其他存储技术。同样地,尽管以SATA接口的形式描述存储接口,但是其他存储接口也可用于高级存储系统,例如并行高级技术附加(PATA)、通用串行总线(USB)、固件和光纤通道。还可以用诸如在定制ASIC上的硬件或软件方式或者通过使用通用计算机系统来实现高级存储系统。因此,除所附权利要求之外,本发明并不受限。