生成存储系统命令的制作方法

文档序号:6455726阅读:189来源:国知局
专利名称:生成存储系统命令的制作方法
技术领域
本发明的领域涉及生成用于存储设备的命令。
背景技术
虛拟化的存储系统为客户机提供对多个物理存储设备的访问,就像 它们包括单个逻辑巻一样。 一些存储系统以分布的方式运行,其中客户 机直接访问物理存储设备,而不需要专用的管理服务器。Zetera公司的 Z-SANTM技术代表了这样一种允许客户机直接与物理存储设备交互的实 现方式。
虛拟存储系统应当为客户机提供对数据存储的鲁棒访问。当系统动 态改变时,如果多个客户机能够共享对系统的访问,可认为系统是鲁棒 的。另外,系统应当允许客户机相互独立地运行,并且还应当允许物理 存储设备相互独立地运行。当独立的客户机可以适应系统中的改变,而 不需要来自其它客户机的信息时,它们的效率是最高的。例如,在虛拟 存储系统中共享一个逻辑巻的两个客户机可以有该逻辑巻的不同视图。 有时一个客户机可以看到与该逻辑巻相关联的物理存储设备,而另一个
客户机可能看不到相同的物理设备;然而,该逻辑巻仍然可以对两个客 户机都有用。如果逻辑巻在不同的物理设备上包括冗余数据,则两个客 户机仍然都可以对该逻辑巻进行读访问,而写访问可能需要限制以防止 数据变得不同步。
客户机应当具有发现虛拟存储系统的要素的能力,其中要素包括逻 辑设备、物理存储设备、分区、代理、服务,或虛拟存储系统的其它组 件。在2005年8月16日提交的题为"Disaggregated Resources and Access Methods"的共有美国专利申请1 1/205,895号中,描述了虚拟存储系统要素的发现,通过引用将该申请整体地结合于本文中。引用的 申请描述了发现包括虛拟存储系统的逻辑设备的图的方面。这些图也可 随着虚拟存储系统的改变而改变。与发现虛拟存储系统的图一起,虚拟 存储系统还应当提供一种用于在动态环境中,特别是其中客户机或设备 可以不通知地出现或消失的动态环境中,生成存储命令的方法。因为改 变发生在虛拟存储系统的巻级视图之下,与逻辑巻相关联的高级存储命 令可能没有必要随着虛拟存储系统或逻辑巻的改变而改变。然而,以物 理设备为目标的低级存储命令更有可能为了反映系统的更新而改变。在 所考虑的动态环境中需要解决这些和其它问题。
用于生成存储命令的优选的解决方案应当提供以下功能 命令生成应当处理共享的存储区的部分对于一些客户机不可见,而
对于其它客户机可见的情况。
客户机应当能够访问这样的数据集即使存储数据集的逻辑巻的部
分丢失,该数据集还是连贯的;就像丟失的物理设备镜像了一些数据那样。
系统应当扩展到具有更多数量的客户机或存储设备的更大配置,而 没有必要S1入额外的设备来管理存储服务。
应当以支持与包括RAID组的逻辑巻相关联的存储组类型的异构混 合的方式来生产命令。
命令生成系统应当与命令传输无关,并且应当在包括采用标准协议 或专用协议的环境的多种存储环境中工作。
其它人已经提到了虚拟存储的不同方面,包括在动态环境中处理逻 辑巻的改变。例如,题为 "Distributed network system with virtual izat ion"的美国专利第6, 7 32, 171号和同样题为"Distributed network system with virtual izat ion " 的美国专利申"i青第 2005/00144199号通过使用存储在存储服务器和管理服务器上的存储配 置标识符来教导存储虛拟化。这些标识符是时间标记,其在应用客户机 和存储系统之间交换,以便指示存储系统的存储配置或分配中的改变发 生的时间。当标识符改变时,应用客户机可随后更新他们的存储系统的 视图。然而,这些引用文献并不教导存储系统应当如何通过与存储系统 中的存储区域类型相关联的命令处理器(Commander Handler, CH)来 生成命令。除了以上引用文献,下面的引用文献反映了生成用于与不同的存储
介质相关联的虛拟存储系统的图的不同的方法美国未决专利申请 2005/0270856、 2005/0246401 、 2003/01 72157、 2003/002381 1;以及已 授权的美国专利6,775,673 、 6,755,672 、 6,772, 161 、 6,732,230 、 5, 758, 050和5, 129, 088。尽管这些引用文献解决了它们要解决的特定 问题,它们并没有解决利用作为组成逻辑巻的存储组类型的函数而建立 的逻辑巻的图来生成存储命令的问题。在某些情况下,引用文献描述了 命令或命令集,但是还没有教导如何生成命令。
因此,对于能够随着存储环境改变生成存储命令的虚拟存储中的方 法和设备的需求还是很可观的。

发明内容
本发明主题涉及生成用于存储系统的命令的系统和方法。该存储系 统具有一个或多个逻辑巻,其中逻辑巻包括第 一存储设备上的第 一存储 区和第二存储设备上的第二存储区。通常存储区包括分区。该方法包括
根据与第 一或第二存储区的存储区类型相关联的信息来提供逻辑巻的 图。特别优选的实施例包括第 一存储区类型不同于第二存储区类型的那 些实施例。该方法还包括根据存储区类型将命令处理器结合到逻辑巻 的图中。命令处理器将以逻辑巻为目标的存储命令转换为以存储区之一 为目标的存储命令。其它的实施例包括这种能力当接收到逻辑巻已改 变的指示时,通过更新图而对逻辑巻的改变进行响应。当生成命令时, 一些实施例将根据图中的巻地址而引用的数据地址转换为根据存储区 地址而引用的数据地址。 术语说明
以下说明涉及在本文中使用的术语。提供这些术语是为了在讨论本 发明主题的不同方面时确保清楚,而不是意味着进行限制。
术语"存储组"表示一个或多个存储区的组,其提供一种其中存储 区包括相关的分区或分区组的存储功能性。存储功能性包括RAID功能、 跨接、提供奇偶校验,或与访问数据相关的功能性。
术语"存储命令"表示与数据访问相关并以存储区为目标的命令。 存储命令通常包括描述存储命令的若干参数,这些参数包括数据地址、 数据请求大小,或用于存储与命令相关联的数据的緩存。其它可能的参数包括存储区标识符、要执行的命令的指示,或其它在处理存储命令时 有用的信息。在优选实施例中,数据地址是逻辑块地址(LBA)。緩沖 用于在进行写时存储数据,或者用于在进行读时接收数据,并且緩存具 有至少足以存储数据请求大小的空间。通常通过到存储器区的指针来引 用緩存。存储区标识符用于寻址特定的存储区,并且可包括IP地址或
逻辑单元号(LUN)。
存储产品或存储相关技术的开发人员可以方便地使用本文的教示。
品,存储系统的要素可在该虛拟环境中动态改变。
根据本发明的优选实施例的以下详细说明以及相同数字代表相同 组件的附图,本发明的不同目的、特征、方面和优点将更为明显。


图1示例说明虛拟存储系统的示例性实施例。 图2示例说明包括多个分区的逻辑巻的示例性实施例。 图3示出逻辑巻可如何包括存储组的图例。 图4示出组类型的组织的示例性实施例。 图5示例说明存储组数据结构的示例性实施例。 图6示例说明由链接存储组的命令堆栈代表的逻辑巻图的示例性实 施例。
图7A示出由镜像命令处理器进行的巻级命令的转换的示例性实施例。
图7B示例说明存储命令如何被转换为一个或多个条带级存储命令 的示例性实施例。
图7C示例说明存储命令如何被转换为一个或多个跨接级存储命令 的示例性实施例。
图7D示例说明存储命令如何被转换为一个或多个分区级存储命令 的示例性实施例。
具体实施例方式
以下详细说明描述了本发明主题的多个实例。尽管给出了特定实例 以使题材清楚,这些实例不限制所描述概念的表达。读者应当以他们尽可能广的知识范围来理解这些概念。 虚拟存储系统
图1示例说明虛拟存储系统的示例性实施例。在一些实施例中,虛
拟存储系统120包括一个或多个客户机IOOA到100N,它们通过通信链 接115访问一个或多个存储设备110A到110M。优选的虛拟存储系统120 允许每个客户机100A到100N直接访问与逻辑巻相关联的每个存储设备 11 OA到IIOM。
客户机1 0OA到1 0ON代表访问或使用存储设备11 0A到11謹上的数 据存储的主机。客户机100A可以包括通用计算机系统或专用的计算设 备。通用计算机系统运行到操作系统可能是Windows⑧或Linux,并且优 选地包括文件系统。通用计算机系统能够运行可请求访问存储空间的多 个不同类型的应用程序。专用的计算设备包括嵌入式系统,其包括应用 程序的有限组,例如媒体播放器、媒体录音机、游戏控制台或其它类似 的系统。优选实施例使用具有文件系统的通用计算机系统,该文件系统 能够挂载遍布一个或多个存储设备11 OA到11固的逻辑巻。
存储设备110A、 IIOB到IIOM代表提供对一个或多个存储介质的访 问的物理组件。存储介质可以是磁性或非磁性的。磁性存储的实例包括 磁盘驱动器或磁带,其中非磁性介质的实例包括光学系统、闪存、R認 或其它类型的存储器。不要求存储设备110A到IIOM是存储设备的同类 混合,而是可以包括多个不同类型的存储设备。在优选实施例中,存储 设备110A到ll謹是在磁盘驱动器上提供数据存储的专用存储设备。专 用存储设备包括机架固定系统、桌上型机壳或其它类型的机壳。优选的 机壳提供对多个磁盘驱动器的支持,例如,支持2、 4、 8、 16或更多的 磁盘驱动器。在一些实施例中,存储设备110A代表磁盘驱动器本身, 其中磁盘与客户机100A结合在一起。另外,例如,如果客户机100A向 客户机100N提供对客户机100A的存储介质的访问,客户机100A可表 示存储设备。
通信链接115将客户机10OA到10ON通信地连接到存储设备11 OA 到110M。在优选实施例中,通信链接115使用互联网协议(IP)网络, 其中通过以太网交换数据报。然而,对于通信链接115,可能有其它的 实施例。通信链接115可以是客户机100A中的内部链接,或相对于客 户机100A的外部链接。内部链接代表包括ATA、 SATA、 SAS、 SCSI、 PCI或其它总线的到存储设备的接口。外部链接可包括有线或无线链接。有 线链接的实例包括以太网、USB、光纤通道、火线接口、串行链接,或
其它有线通信系统。无线链接的实例包括蓝牙、无线USB、 802. 11、 IrDA, 或其它非物理链接。
虛拟存储系统120的优选实施例使用Zetera,公司的Z-SANTm技水。 Z-SAN技术提供基于IP的存储区网络(SAN)环境,其中每个客户机100A 到IOON通过基于UDP的存储协议与每个存储设备110A到ll謹通信, 以传输存储命令。Z-SAN技术将IP地址分配给存储设备中的每个分区。 因此,客户机可以与每个分区直接通信,而不需要另外的分区识别信息。 客户机集合关于每个分区的信息,并随后使用这些信息来形成包括这些 分区的逻辑巻的图。尽管优选实施例使用块级存储协议来传输存储命 令,本发明主题独立于传输协议进行操作;因此,使用基于包括iSCSI、 iFCP、 FCIP,或者甚至包括ATA、 SATA、 SAS、 SCSI,或其它存储设备协 议的低级协议或接口的标准的其它存储协议,本发明主题也可以同样良 好地操作。另外,认为所公开的技术还利用包括NFS、 CIFS或其它面向 文件的协议的文件系统级存储协议来进行操作。
在虛拟存储系统120中,客户机IOOA到IOON通常以逻辑巻表现为 本地连接的存储区的方式来挂载逻辑巻。例如,客户机IOOA可支持CIFS 协议,并挂载存储设备110B上的磁盘。逻辑巻代表位于一个或多个存 储设备110A到IIOM上的一个或多个存储区的虛拟表示。在本文的上下 文中,术语"分区,,表示存储设备中的存储区。例如,分区可以是硬盘 驱动器中范围代表硬盘驱动器容量的一部分的单个部分。或者,分区可 代表跨容纳多个磁盘驱动器的机架中的两个或两个以上磁盘的存储区。 还认为分区可代表由代理提供的存储区,其中该存储区包括多个远程分 区。机架或代理将集合存储区表现为单个存储区。
逻辑巻
图2示例说明包括多个分区的逻辑巻的示例性实施例。逻辑巻230 包括分区220A到220M,其中这些分区分布在存储设备210A到210M之 中。优选地,逻辑巻230代表分布在分区220A到22固上的从Q跑到最 大值的LBA的范围。在一些实施例中,用48位值来代表LBA;然而,其 它的LBA大小也是可以考虑的。分区220A示例说明了一个实例,其中 存储设备21 OA有单个存储区参加在逻辑巻230中。分区220B和220C提供一个实例,其示出存储设备210B可如何具有一个以上的属于逻辑 巻230的存储区。另外,分区220M示出存储设备210M的全部都可向逻 辑巻230提供存储区。
尽管所示的逻辑巻230示例说明了在分区"OA到220M上的线性跨 接,可由组成该巻的分区形成其它更复杂的结构。在优选实施例中,逻 辑巻230包括多个不同类型的存储结构,包括提供镜像、条带化 (striping)、跨接(spanning)、奇偶校验,或提供RAID功能性的 存储结构。每种类型的存储结构包括一组分区。因此,可以认为逻辑巻 230是一组存储组,其中以向系统提供一套用于管理逻辑巻230的通用 规则的方式来组织这些存储组。 存储组
图3示出逻辑巻可如何包括存储组的图例。逻辑巻300包括一个或 多个存储组,其中存储组最终包括一个或多个分区。在优选实施例中, 存储组包括一个或多个成员,其中每个成员也是一个存储组。例如,组 310A包括两个成员。组310A的第一成员是组310C,而组310A的第二 成员是分区320。分区320代表具有单个成员的存储组,其基本上包含 了存储设备上的分区的特征。如所示,逻辑巻组300有三个成员,包括 组310A、 310B和分区320。组31 OB包括组31 OD和分区320。
优选地,在分区是存储组的最小表示的意义上,分区320代表基本 组。全部存储组必须最终具有至少一个分区,以便向客户机提供对设置 在存储设备上的存储介质的访问。在一个实施例中,可以用存储在客户 机存储器中的数据结构来表示分区320,其中该数据结构包括与存储设 备上的该分区相关的信息。例如,数据结构优选地包括用于寻址分区 的分区标识符、分区预期的数据传输大小、与分区相关的属性,或其它 在访问分区时有用的信息。在优选实施例中,分区标识符包括相对于客 户机的外部地址,其包括IP地址(IPv4或IPv6)或LUN;然而,还认 为分区标识符包括在客户机中访问分区的内部地址。SCSI ID可代表内 部地址。
存储组组类型
优选地,根据存储组在逻辑巻中提供的存储功能性对它们进行分 类。通过按类型来组织存储组有助于建立为虚拟存储系统的要素所理解 的通用规则系统,使得全部客户机能够连贯地访问数据。由于每个组类型可独立于另一组类型处理存储命令,这些规则在产生用于逻辑巻的存
储命令时帮助客户机。优选的存储组类型包括RAID组类型或非RAID组 类型。RAID组类型包括的存储组中使用某种形式的冗余以保护存储在与 存储组相关联的存储设备上的数据。示例性RAID组类型包括镜像组、 奇偶校验组、Z-RAID组,或其它冗余配置。示例性非RAID组类型包括 跨接组、条带组或分区组。
存储设备领域的技术人员将认可术语RAID的使用,该术语RAID表 示独立磁盘的冗余阵列。尽管条带化常被归类为RAID级0,它不携带冗 余信息,并且因此在本文中被归类为非RAID类型。还应当注意,RAID 常与磁盘级的存储结构相关。为了本文的说明,在分区级应用RAID功 能性。镜像组代表一种包括多个成员的存储组,其中镜像组的每个成员 具有在其它组成员上的数据的副本。换句话说,每个镜像组成员具有逻 辑巻的LBA的范围的副本。条带组代表一种包括多个成员的存储组,这 些成员是单独的条带化的基本单元。奇偶校验组代表包括具有奇偶校验 信息的多个成员的存储组。奇偶校验组可被实现为条带组的变形。 Z-RAID组代表一种包括多个成员的存储组,这些成员形成交错镜像的基 本单元,如题为 "Topology Independent Storage Arrays and Methods" 的共有美国专利申请1 1 /1 7 3,765号中所述,通过引用将该申请整体地 结合在本文中。如前所述,分区组就是其中组包括关于分区的信息的基 本组。预期所有的存储组类型,包括存档组、备份组、延迟镜像组、QoS 组,或者可以提供附加的存储功能性的其它存储组类型。
存储组组类型组织
图4示出组类型的组织的示例性实施例。尽管可作为这些组所提供 的功能性的函数将它们分为不同的类型,还优选的情况是通过建立 一套 通用规则而以方便生成存储命令的方式来组织存储组类型,所有的客户 机都在该套通用规则下操作,并且在该套通用规则下在存储设备上实例 化所有的分区。特别优选的组织包括存储组类型的分级结构。为了清楚 起见,提供图4所示的实例,并且该实例集中在镜像、条带、跨接和分 区上;然而,这些概念可被延伸来处理附加的存储组类型。在该实例中, 镜像组400在逻辑上被放在分级结构的最高级。存储系统中的每个逻辑 巻可包括具有一个或多个成员的镜像组。镜像组400的每个成员可以是 镜像类型以外的另一其它的较低类型的组。另外,镜像组400的每个成员可代表逻辑巻的一个实例,从这个意义上来说,镜像组400的每个成 员代表逻辑巻的一个副本。条带组410对跨接组420B上的数据进行镜 像,跨接组420B也对分区组430F上的数据进行镜像。这示例说明了 , 对于组组织的该特定实施例来说,例如镜像组400的镜像组可包括其它 的较低类型的组,不论它们是条带组类型、跨接组类型或分区组类型。
当存储命令被发送给包括镜像组的逻辑巻时,为镜像组的每个成员 复制该存储命令。例如,当巻级存储命令被发送给镜像组400所代表的 逻辑巻时,为该组的每个成员复制巻级存储命令为条带组410复制一 次,为跨接組420B复制份一次,并且为分区430F复制一次。从这个意 义上来说,镜像组将单个存储命令转换为多个副本存储命令。
示例性存储组类型分级结构中的第二高级是条带类型,如条带组 410所示。条带组包括两个或两个以上成员,如跨接组420A和分区430C 所指示的,它们或是跨接组,或是分区。条带组410的每个成员表示完 整条带的条带化的基本单元。因此,当数据存储在与条带组410相关联 的分区上时,数据被条带化在代表条带基本单元Q的跨接组420A上, 然后到作为条带单元1的分区430C。
条带组包括一组描述条带组特征的参数。这些参数包括条带块大 小,其代表在进行到下一个成员之前向每个成员写入的数据块的数量。 当存储命令被发送给条带组时,该命令被转换为 一个或多个以该组的每 个成员为目标的条带级命令。像在传统条带化的RAID系统中所做的那 样,通过利用关于条带块大小的模运算来计算数据访问大小,条带命令 确保数据访问与该组的条带结构一致;然而,在组或分区级执行数据访 问,而不是在磁盘级。条带化的组的每个成员提供相同的容量以确保均 匀的条带化。
该示例性分级结构中的第三级是跨接类型,如跨接组420A和402B 所示。跨接组将两个或两个以上成员组合在一起,成为0到该3争接组的 最大值的LBA的范围所代表的单个线性逻辑存储区。例如,跨接组420A 包括分区430A所指示的第一部分和分区430B所指示的第二部分,各自 分别表示跨接组420A的跨接基本单元G和跨接基本单元1。类似地,跨 ^接组420B包括形成单个逻辑存^f诸区的分区430D和分区430E。
接的信息。当跨接组接收存储命令时,检查存储命令数据和数据大小,以了解是否数据访问需要将该命令发送给跨接组的一个以上的成员。如 果是这样,以确保数据访问与成员边界一致的方式将该命令转换为 一个 或多个跨接命令。
分区组类型在示例性分级结构的最低级。分区430A到430F各自是 具有一个成员的组,其中该一个成员基本单元代表存储设备上的单独分 区。应当注意到,不要求每个分区是统一的大小,而可以是相对于彼此 的任何大小。
尽管该优选实施例建立了具有镜像、条带、跨接和分区的分级结构; 应当注意到,其它的分级结构也是可能的。例如,可以以每个分区被单 独镜像而不是在巻级镜像的方式,将镜像类型放在分区之下。或者,条 带和跨接可以交换在分级结构中的级别。
存储组通用规则
形成用于逻辑巻中的存储组的组织结构为用于处理存储命令的一 套规则提供了基础。再次参照图4中的示例性分级结构,如果在镜像级 有任何存储组,则初始地在镜像级处理巻级命令。镜像级处理包括生成 存储命令和将存储命令传递给较低级。如果有条带组的成员,则在条带
级处理存储命令,以确保根据与条带组相关联的条带化规则来访问数 据。例如,利用基于条带块大小和条带组成员数量的模运算来访问数据。 条带级处理还包括生成存储命令和将存储命令传递给较低级。如果有跨 接组,在跨接级处理存储命令,其中将数据访问对齐到跨接成员边界。 最后,在分区级处理命令,以确保数据访问与分区特征一致。例如,形 成具有用于分区的适当的传输大小的命令。本文将在后面更全面地描述 存储命令处理。
存储组组数据结构
在一些实施例中,用提供组之间的链接的组数据结构来代表存储 组。优选地,存储组被链接在一起以形成父子关系或等同关系。父组代 表具有一个或多个成员的组,其中认为每个成员是父组的子组。相同父 组的每个子组是其它子组的对等组。在优选实施例中,父组在组分级结 构中的级别高于子组;然而,对等组可以在相对于彼此相同或更低的级。 例如,镜像组可包括三个子组。每个子组是逻辑巻的实例。子组可包括 条带化的组、跨接组或分区组的任意组合,而每个子组被认为是镜像组 中的对等组。在优选实施例中,组数据结构包括代表到其它组的链接和函数指针 的一般数据结构。然后, 一般结构被结合到附加数据结构中,该附加数 据结构包括用于特定组类型的信息镜像、条带、跨接,或其它存储组
类型。该方法对于嵌入式系统有助于以C实现;然而,计算机编程领域 的技术人员将认识到,有大量的备选方案用于形成组数据结构,预期所 有的这些方案,包括面向对象的方案。
图5示例说明存储组数据结构的示例性实施例。可用包括组参数 510的组数据结构500来代表存储组,组参数510描述了与存储组相关 联的存储组类型的特征。组参数510随着组类型或数据结构所代表的特 定组的特征而不同。另外,数据结构500还包括若千指针。组指针形成 组的链接列表,以便于处理存储命令。优选的组指针包括可选的父组指 针520或可选的上一对等组指针530。父组指针520链接当前组与父组, 存储组是该父组的成员。如果存储组是逻辑巻中的最高级组,则父组指 针520有空值。在优选实施例中,父组代表组分级结构中级别较高的存 储组。例如,如果存储组是分区,并且是条带组的成员,则父组指针520 将链接回到条带组。上一对等组指针530链接回到与该存储组对等的组。 例如,如果当前组是分区,并且是条带组的第三成员,则上一对等组指 针5 30将链接回到条带组的第二成员。父组指针520和上一对等组指针 530在优选实施例中是可选的。
特别优选的指针包括对等组指针540,子组指针550或函数指针 560。对等组指针540链接存储组与同一父组中的下一成员。子组指针 550指向存储组的第一成员。通过提供对等组指针540和子组指针55 0, 在处理命令时可遍历组的链接的列表。
数据结构5 00中的每个组指针还可有空值,而不是指向另一组。空 值指示已到达链接链的末端。例如,当处理与存储组相关联的存储命令 时,将通过遍历对等组指针540链接来检查存储组的每个子组,直到到 达空为止。空指示存储组的全部子组已被处理。
计算机编程领域的技术人员将认识到,在存储组之间建立关系的大 量的实施例存在。例如,对等级别存储组的阵列可代替对等链接列表。 考虑形成存储组关系的全部实施例。
函数指针560代表到特定于存储组类型的命令处理器的指针,该特 定命令处理器处理用于该存储组类型的存储命令。在优选实施例中,存储组的每个类型有至少一个相关联的命令处理器。优选地,命令处理器 使用组参数510来处理存储命令,并从而生成用于该组的存储命令。另 外,当命令处理器执行时,其根据用于特定存储组类型的规则来转换存
i多个存储命令。 t I 、 — " 、、 ° 、
每个组代表一个逻辑存储区,从分区一直到形成单个逻辑巻的多个 镜像。优选实施例通过与存储区相关联的数据寻址方案来访问每个逻辑 存储区中的数据。优选的方案是使用块级寻址,其中在存储区中唯一地
对每个数据块进行寻址。优选实施例使用LBA来寻址每个具有5U字节 大小的数据块。可认为存储组类型命令处理器是对命令的数据和与命令 的数据相关联的LBA的转换。并且,在优选实施例中,存储组所代表的 每个存储区具有范围从0到最大值的LBA范围。每个存储组的各LBA的 范围也存储在参数510中。通过将每个存储组定义为单独的各LBA的范 围,每个命令处理器可以以独立于它们的父组的方式来处理存储命令。 该独立的程度支持将存储组或命令处理器按需要链接在一起以形成逻 辑巻的能力。
命令处理器所提供的功能性反映了相关联的存储组类型的功能性;
令处理器可执行附加的指令以辅助处理存储命令或提供其它功能性。例 如,用于RAID-5系统的奇偶校验组命令处理器将包括对其组成员执行
"读-修改-写"操作的指令,并且类似于条带组命令处理器地起作用。 这样的指令包括计算用于奇偶校验组成员的XOR奇偶校验。另外,附加 的指令可包括带外管理、监控虛拟存储系统、错误检查、调用或执行远 程函数,或任何其它功能。 存储组命令堆栈
使链接的存储组与同存储组类型相关联的命令处理器结合支持建 立用于生成存储命令的命令堆栈。命令堆栈代表一种数据结构构造,其 中数据结构包括到函数的指针。通过函数指针调用函数允许在运行期间 通过改变指针来再分配函数,这支持可在运行中构造的动态调用链。使 用命令处理器方案为主机提供了建立对于逻辑巻是特定的命令堆栈的 能力,而不会导致用于处理其它逻辑巻的附加开销。换句话说,系统中 的每个逻辑巻具有反映该巻拓朴的命令堆栈;然而,不论拓朴如何,每个命令堆栈访问同一组命令处理器。例如,如果有四个用于存储组的每 个类型(镜像、条带、跨接或分区)的命令处理器,则系统只需要这四 个命令处理器,因为存储组在它们的数据结构参数中携带它们的组的上 下文。在优选实施例中,当客户机发现逻辑巻时,客户机遵循该分级结 构的规则将存储组的链接的列表接合在 一起。 一旦存储组被链接在一 起,具有用于每个存储组的参数和命令处理器的链接结构代表该逻辑巻 的图。另外,链接结构代表用于逻辑巻的命令堆栈。那么,客户机在再 次使用相同的命令处理器时可发现附加的逻辑巻,因为附加的逻辑巻通 过它们自身的存储组链接结构携带了它们的图信息。
还应当注意到,当发现逻辑巻中的改变时,链接结构可以被快速更 新。例如,如果加入了附加跨接,则在适当的点将附加存储组链接到该
备选的链在存储组结构中还考虑了其它的链接。在一个实施例中,特别是在 镜像组成员包括条带组时,提供备选的链接以交叉链接镜像组成员。这
样的备选的链接允许建立类似于RAID 10的存储结构。在一些实施例中, 还提供RAID IO命令处理器,以当条带组成员不一定可访问时,遍历备 选的链接,来找到能够提供对所请求的数据的访问的备选的存储组。备 选的链接还可以在分区级操作,以提供分区级镜像。 逻辑巻图命令堆栈
在优选实施例中,逻辑巻命令堆栈将高级存储命令作为输入来接 受。命令堆栈处理存储命令,将存储命令传递给最高级命令处理器。每
多个存储命:。'然后,这些存储命令的每一个被传递给;一级的命令it
理器,直到在分区级到达最低级为止。分区级命令处理器生成分区级存 储命令,并将它们放进队列中以用于后面的打包或向分区的传输。
图6示例说明由链接的存储组的命令堆栈表示的逻辑巻图的示例性 实施例。为了清楚起见,该特定实例被构造为示出链接的存储组和命令 处理器的概念如何结合在一起以形成命令堆栈所代表的逻辑巻的图。该 实例并不复杂;然而,这些概念可以被推广到更大、复杂、异构的逻辑 巻。逻辑巻映射到存储组,其中存储组映射到分区。在存储命令生成处 理的每一步,可认为通过在把数据分成字节片时将高级数据地址转换到
17低级数据地址来转换存储命令。例如,逻辑巻LBA被转换为存储组LBA, 存储组LBA随后被最终转换为分区LBA。在优选实施例中,存储设备随 后将分区LBA转换为该存储设备的存储介质中的数据地址。 逻辑巻图镜像级
在该实例中,用镜像组600来代表逻辑巻。在该实例中,有两个与 逻辑巻相关联的镜像。用条带组620来代表第一镜像,而用分区组680 来代表第二镜像。组数据结构被用于存储不同的存储组参数、它们的组 链接以及它们的命令处理器指针。镜像组600包括指向镜像命令处理器 的函数指针603、对等组指针605以及子组指针607。对等组指针605 具有空值,该空值表示没有与该镜像组相关联的对等组。子组指针607 指向条带组620,该条带组620开始代表镜像组600的成员的链接链。
当系统访问来自逻辑巻的数据时,系统发送巻级命令并通过函数指 针603调用镜像命令处理器。如果命令是读命令,则巻命令可具有指向 接收緩存而不是装满数据的緩存的指针。在优选实施例中,镜像命令处 理器使用镜像组600的参数以处理命令。镜像命令处理器通过将到巻命 令的指针传递给用于镜像组的每个子组的命令处理器来复制巻级命令。 例如,它首先通过条带组620的函数指针623来调用条带命令处理器, 将巻级命令传递给条带命令处理器。 一旦条带命令处理器返回,镜像命 令处理器接着通过分区组680的函数指针683来调用分区命令处理器, 又将巻级命令传递给分区命令处理器。分区处理器处理巻级命令,并将 其转换为一个或多个分区级命令,其中每个分区级命令符合用于与分区 D通信的正确形式。如具有空值的对等组指针685所指示的,分区组680 是对等链中的最后一个,并且没有子组,如子组指针687的空值所指示。 分区命令处理器将巻级命令转换为分区级命令的链接列表,该链接列表 可被打包或发送给目标分区。
优选的巻级命令是从文件系统发送的。预期文件系统包括多重存取 启动(multi-initiator )文件系统或非多重存取启动文件系统。多重 存取启动文件系统提供多个客户机共享的对存储设备上同 一数据的访 问,而不会损坏该数据。优选的多重存取启动文件系统的实例包括 DataPlow San文件系统(SFS )。非多重存取启动文件系统为单个客户 才几提供访问,例如NTFS。
逻辑巻图条带级在该实例中,条带组620是镜像组600的子组,并从而是逻辑巻的 一个实例。对等组指针625指向下一镜像,该镜像在该实例中是分区组 680。在该实施例中,条带组620包括两个条带化的单元跨接组640 和分区组670。也通过组数据结构将条带组620存储在存储器中。
当通过函数指针623调用条带命令处理器时,条带命令处理器接收 巻级命令。通过利用条带的条带块大小将巻级命令的LBA映射到子组的 LBA范围,条带命令处理器将巻级命令转换为一个或多个用于其每个子 组的命令。在该实例中,条带命令处理器使用条带组的参数信息来将巻 级命令的LBA转换为进入每个其子组的偏移量。回想起在优选实施例中, 每个组具有从0跑到最大值的LBA范围,以保持每个组独立于其父组。 对于条带组,条带命令处理器通过使用基于条带组块大小和条带组中成 员数量的模运算来计算进入每个子组的偏移量。 一旦为每个子组计算了 偏移量并且必要时将数据分成字节片,条带命令处理器开始遍历用于其 每个子组的命令处理器。条带命令处理器将向第一子组传递第一条带级 存储命令,然后向第二子组传递第二条带级存储命令,等等。另外,条 带命令处理器将在必要时环回第一子组。对于该实例,条带命令处理器 通过函数指针643调用跨接命令处理器,随后通过与组670相关联的函 数指针673来调用分区命令处理器,在必要时可能回到组640。函数指 针673指向和函数指针683 —样的分区命令处理器。该分区命令处理器 使用包括分区的优选数据传输大小的分区组67 0参数信息,以将条带级 命令转换为一个或多个具有适当的用于目标分区的传输大小的分区级 命令。分区级命令被链接到准备好用于传输的分区级命令的队列。分区
发送的分组或数据报可需要其它可能用于避免拥塞的处理。
注意分区组670是跨接组64G的最后一个成员。对等组指针675具 有空值,其向条带命令处理器指示已没有用于处理的子组。另外,因为 分区组670代表分区C, 一基本成员,分区组670不具有任何子组;因 此,子组指针677具有空值。因此,分区命令处理器不进行任何其它命 令处理器调用,并且在条带命令处理器的每次调用之后返回到条带命令 处理器。
逻辑巻图跨接级
跨接组640是条带组620的子组,并且是条带组的单个条带化的单元。跨接组640包^舌分区组650和分区组660所4戈表的两个分区。正如 镜像组600和条带组620那样,将跨接组640存储在存储器中为具有用 于跨接组的参数的组数据结构。在该实例中,参数包括每个分区组的范 围,以及数据访问应当在哪里在分区之间桥接。
在该实例中,当从条带命令处理器调用跨接命令处理器时,跨接命 令处理器接收条带级命令。跨接命令处理器将条带级命令转换为以跨接 组640的每个子组为目标的一个或多个跨接级命令。通过高级LBA到子 组的LBA范围的映射来执行该转换。分区组650是第一子组,并且通过 对等组指针655链接到分区组660。如对等组指针655的空值所指示的, 分区组660是最后一个跨接组成员。跨接命令处理器比较高级命令的 LBA加上数据请求的大小与子组的LBA范围,以确定必要时应当在哪里 分开数据。然后,跨接命令处理器开始通过函数指针653和663调用子 组的分区处理器,函数指针653和663也指向与函数指针673和683 — 样的分区命令处理器。如上所述,分区命令处理器将跨接级命令转换为 用于分区A和B的分区级命令。分区组650和66G在命令堆栈中的最后, 因为它们的子组指针657和667分别有空值。分区处理器将分区级命令 链接到分区级命令的队列,以便被发送给存储设备,并且一旦它们完成 处理,将返回到跨接处理器。
图6所示的实例示例说明了命令堆栈通过首先下降到分区级来处理 存储命令的实施例。该下降方案支持形成分区级命令的队列,并且支持 最小的处理开销。
对于图6所示的实例,不要求分区A、 B、 C和D具有相同的结构, 因为它们在逻辑巻中起到不同的功能存储作用。然而,对于该特定实例, 它们应当具有彼此相关的容量。例如,分区D应当具有与分区A、 B和C 的组合容量相同的存储容量,因为分区D是逻辑巻的一个完整实例,而 A、 B和C形成逻辑巻的另一个完整实例。另外,分区C应当具有与分区 A和B的组合容量相同的容量,因为分区C代表一个条带化的单元,而 组合的分区A和B代表条带化的组的另一个条带化的单元。只要分区A 和B的组合容量等于分区C,它们可以有不同的容量。该实例示例说明 了逻辑巻可如何包括分区或存储组类型的异构混合。
尽管优选实施例使用链接列表来形成存储组之间的关系,计算机编 程领域的技术人员将认识到,可能有其它的实施例。例如,可通过将分级结构中的相同级处的成员放在阵列内来代替成员之间的对等关系。因 此,命令处理器可迭代通过阵列的索引,而不是遍历对等组链接链。预 期命令堆栈的所有实施例。
命令处理器
命令处理器通过形成存储命令并向较低级的命令处理器传递这些 存储命令来操作存储命令。存储命令被优选地存储在具有若干成员的数
据结构中,这些成员包括巻级LBA、代表进入存储组的偏移量的组LBA、 数据请求大小或到用于在存储器中存储数据的緩存的指针。在优选实施 例中,通过条带或跨接命令处理器将巻级LBA用于正确地计算如何操作 存储命令,以生成以条带或跨接组子组为目标的存储命令。组LBA是代 表从O进入组的偏移量的值。另外,存储组可包括到与存储命令相关联 的分区级命令队列的链接。
与存储组类型相关联的命令处理器根据代表存储组的功能性的规 则对存储命令进行转换。优选的命令处理器不携带它们所操作的命令的 上下文,而是从存储组和传递给它们的命令获得上下文信息,从这个意 义上来说,优选的命令处理器是通用的。下面的说明提供了关于优选的 命令处理器如何操作存储命令的其它细节。命令处理器通过对与存储命 令相关联的数据緩存进行分区来处理不同类型的存储命令,包括读或 写。在优选实施例中,命令处理器负责将数据访问从高级分解成低级, 使得低级存储命令可以被发送给存储组,或最终发送给分区。
命令处理器镜像命令处理器
图7A示出由镜像命令处理器进行的巻级命令的转换的示例性实施 例。镜像命令处理器725操作存储命令700。在优选实施例中,由于在 逻辑上将镜像放在存储组类型分级结构的最高级,存储命令700代表用 于镜像处理器725的巻级存储命令。换句话说,在优选实施例中,镜像 处理器725将只接收巻级存储命令。每个命令处理器能够处理存储命令 700所代表的存储命令;然而,该命令结构中的要素的值可以是不同的, 如果有上一命令处理器,这取决于上一命令处理器如何操作存储命令。
存储命令7QQ包括緩存指针703、巻LBA7G5、组LBA7Q7、请求数 据大小709、组指针711以及命令指针713。緩存指针703指向用于存 储与存储命令700相关联的数据的緩存720的头。如果存储命令700代 表数据写,则緩存720存储要写入的数据;然而,如果存储命令700代表数据读,则緩存720是用于存储从存储设备读取的数据的存储区。优
选地,以数据块的形式组织緩存720。巻LBA 705代表与存储命令700 相关联的巻级数据地址,并且为某些命令处理器所使用,例如条带和跨 接命令处理器。组LBA 707代表进入当前存储组的偏移量,回想起每个 存储组具有其自身的LBA范围,该范围从O到最大值。数据大小709代 表緩存720中的块数。组指针711只是引用哪个组是正在通过其处理存 储命令的当前存储组。命令指针713代表分区级命令队列的锚点,使得 一旦命令堆栈完成处理一存储命令;系统可以开始传输分区级命令。
存储命令700代表以存储区为目标的任何类型的命令。命令700可 以是读命令、写命令、检查状态命令,或其它可以以逻辑巻或逻辑巻的 一部分为目标的命令。在优选实施例中,巻级存储命令源于文件系统, 特别是多重存取启动文件系统。
镜像命令处理器725负责将巻级存储命令传递给与镜像组的每个子 组相关联的命令处理器。因此,镜像命令处理器形成一个或多个存储命 令700A到700N所表示的存储命令,这些存储命令基本上是存储命令700 的副本。存储命令700A被形成并传递给第一镜像成员的命令处理器; 并在随后当返回时,下一存储命令被形成并传递给下一镜像成员的命令 处理器,等等,直到存储命令700N被处理为止。注意存储命令700A到 700N基本相同,因为每个存储命令以逻辑巻的一个实例为目标,这是镜 像巻的特性。例如,緩存指针703A到703N指向数据緩存720的第一块。 并且,巻LBA 705A到705N具有和巻LBA 705相同的值,在该实例中为 VLBA的值。另外,组LBA 707A到7 07N还具有和巻LBA 705相同的值, 在该实例中为VLBA的值,因为镜像组的每个成员具有的组LBA范围和 巻级LBA范围相同大小或范围。另外,数据大小709A到709N具有和存 储命令700的数据大小709相同的值。组指针711A指向与第一成员相 关联的组,而组指针711N指向与第N成员相关联的组。并且,注意命 令指针713也和存储命令一起传输,使得当到达分区级时,分区命令处 理器通过在分区级命令中链接到命令指针713来形成分区级命令队列。
镜像命令处理器725生成巻级存储命令,并为其每个子组调用命令 处理器。当子组的命令处理器被调用时,镜像命令处理器725将新生成 的存储命令传递给用于该子组的命令处理器。 一旦子组命令处理器返 回,不再需要发送给子组的存储命令;随后可形成和处理下一存储命令。不再需要存储命令,因为分区命令处理器生成了存储命令堆栈处理结果 的分区命令队列。
命令处理器条带命令处理器
图7B示例说明存储命令如何被转换为一个或多个条带级存储命令 的示例性实施例。条带命令处理器745通过生成如存储命令730A到730N 所指示的一个或多个条带级存储命令来操作存储命令700。在优选实施 例中,存储命令700可源于镜像命令处理器,或者对于没有镜像的情况 可直接来自文件系统。
存储命令处理器745使用包括条带块大小和条带成员数量的条带组 特定信息,以形成要被条带组成员的命令处理器处理的存储命令730A、 730B到730N。由于条带的布置,每个条带级命令730A、 730B到730N 代表以逻辑巻中不同的存储区部分为目标的不同的存储命令。因此,假 设数据大小709指示有足够的数据,存储命令730A到7 30N代表跨条带 组成员的数据访问。RAID系统,特别是条带化领域的技术人员将认识到, 除了文中提出的简单实例,还有其它可能的数据访问布置;预期所有的 这些布置。
存储命令730A代表与组指针741A所定位的条带组成员相关联的第 一条带级存储命令。由于条带命令730A是要处理的第一条带级命令, 緩存指针7 33A指向緩存720的开端。另外,由于条带存储命令730A是 数据访问的第一部分,巻LBA 7 35A再次具有和巻LBA 705 —样的值。 组LBA 7 37A具有作为巻LBA 7 35A、条带成员数量和条带块大小的函数 来计算的值,这和用传统条带化所做的一样,除了在存储组而不是在磁 盘上对数据进行条带化。结果值代表进入条带组成员的LBA范围的偏移 量。假设数据大小709大于或等于条带块大小,数据大小739A的范围 将从O到条带块大小。命令指针713再次向下传递通过命令堆栈,以被 分区级命令处理器所使用。
在存储命令730A被处理并且其命令处理器返回之后,条带命令处 理器745形成存储命令730B,并调用下一条带组成员的命令处理器。緩 存指针733B指向緩存720中的下一条带块大小的字节片。巻LBA 735B 引用与下一数据条带块相关联的巻级LBA,并具有巻LBA 705加上块大 小的值。还计算组LBA 737B,正如计算组LBA 737A那样。在该实例中, 假设两个命令都访问在条带中的相同深度的数据,组737B具有和组7 37A相同的值。在该实例中,数据大小739B也具有条带块大小的大小。 组指针741B指向与条带组成员相关联的目标组,并且最后存储命令 730B携带命令指针713。
条带命令处理器745继续以该方式形成下一条带级命令并调用下一 成员的命令处理器,直到到达最后的条带级存储命令730N。緩存指针 7 33N指向緩存720的最后部分,其具有等于或小于如数据大小739N所 指示的条带块大小的大小,该数据大小739N具有代表最后的字节片大 小的值。并且,条带命令处理器745将巻LBA 735A作为在条带成员上 写入多少块的函数来计算。组LBA 737N可包括不同值组LBA 7 37A,因 为条带命令处理器745有可能可以完成命令的一完整条带并启动另一轮 次,导致访问在条带组成员的LBA范围中更深的数据。类似地,组指针 741N还可指向上次用过的组。对于熟悉多个存储设备上的数据条带化的 人可以理解在该简单实例所描述的计算和方案之外的适当数据条带化 所需要的不同的计算和不同的方案,所有的这些计算和方案都适用于本 发明主题。
预期条带命令处理器745可被修改为执行奇偶校验计算,以提供用 于支持RAID 4、 RAID 5、 RAID 6或其它奇偶校验配置的奇偶校验RAID 处理器。优选地,奇偶校验命令处理器发送用于奇偶校验信息的读请求, 然后基于任何写请求来修改奇偶校验值;并且随后向奇偶校验组的成员 发送写命令。在一些实施例中,可通过设置在另一设备上的代理来处理 用于奇偶校验的附加处理。
命令处理器跨接命令处理器
图7C示例说明存储命令如何被转换为一个或多个跨接级存储命令 的示例性实施例。跨接命令处理器765通过将存储命令700转换为一个 或多个如存储命令75 0A和75 0B所指示的跨接级存储命令来操作存储命 令700。在优选实施例中,跨接命令处理器765可直接从文件系统、从 镜像命令处理器或从条带命令处理器接收存储命令700,因为在存储组 类型组织中跨接命令处理器765在它们之下。
跨接命令处理器765使用关于其每个子组LBA范围的信息来计算跨 接边界处于跨接组的LBA范围内的哪里。该信息随后被用于当存储命令 700桥接分区时,形成存储命令750A和750B。存储命令750A代表访问 来自第一分区的数据的第一跨接级存储命令,而存储命令750B代表访问来自接在第 一分区之后的第二分区的数据的第二跨接级存储命令。
存储命令750A包括关于第一分区访问的信息。緩存指针75 3A指向 緩存720的开端。由于巻LBA 755A表示数据访问的第一部分,它是和 巻LBA 705相同的。组LBA 757A具有跨接处理器765所计算的值,并 且代表进入跨接成员的组的偏移量。根据巻LBA 705和跨接组成员的LBA 范围的每一个的范围来计算该值。类似地,也是根据相同的信息,特别 是跨接边界相对于巻LBA 755A在哪里,计算数据大小759A。当然,该 实例假设跨接边界的值在和巻级LBA范围相同的图空间内。组指针761A 指向存储命令750A以其为目标的分区组,并且命令指针713被再次传 递给分区级命令处理器。
一旦处理了存储命令750A,分区命令处理器返回;随后跨接命令处 理器765处理存储命令750B。存储命令750B代表以下一分区为目标的 存储命令700的第二部分。緩存指针753B指向緩存720中数据将在分 区之间桥接的位置,如分区边界755所指示。巻LBA 755B具有前一分 区的跨接边界加1的位置的值。另外,组LBA 757B将具有G值,指示 将在分区的开端进行访问。还根据包括使用跨接边界的分区范围信息来 计算数据大小759B。组指针761B指向存储命令750B针对的分区。
和在上一优选的命令处理器中一样,跨接命令处理器765生成存储 命令750A,然后调用与组指针761A相关联的命令处理器。存储命令75 0A 一旦被处理,将不再被需要。跨接命令处理器765随后前进以生成存储 命令75GB,并随后接着处理该存储命令75GB.
命令处理器分区命令处理器
图7D示例说明存储命令如何被转换为一个或多个分区级存储命令 的示例性实施例。在优选实施例中,生成分区级命令代表存储组分级结 构的底部,并提供用于生成分区级命令的实际结构,以访问以存储设备 为目标的数据。分区命令处理器785将存储命令700转换为分区级存储 命令770A、 770B到770N所代表的一个或多个分区级命令。在优选实施 例中,分区命令处理器785通过将分区命令770A到770N加到由命令指 针713引用的命令列表来形成分区命令队列790。随着巻级存储命令被 完全地处理通过逻辑巻的命令堆栈,该列表继续生长。优选地,在给定 存储组的优选规定的分级结构的情况下,存储命令700代表巻级存储命 令、条带级存储命令或跨接级存储命令。分区命令处理器785使用与分区特征相关的信息,以确定如何生成 存储命令770A到770N。在优选实施例中,分区命令略微不同于通用存 储命令,因为它们特别以存储区为目标,并被打包或发送给存储设备。
与分区相关联的参数包括数据传输大小、块形式的分区大小或分区 标识符。优选的传输大小以512字节块为单位,以符合通用存储设备上 的块大小。特别优选的传输大小包括1、 2、 4、 8、 16、 32或64数据块, 以适应于单个数据报中的传输;然而,也考虑其它的块大小。命令处理 器使用分区大小信息以将高级存储命令数据访问正确地映射到分区。如 上所述,分区标识符被用于寻址特定分区。优选地,分区标识符是IP 地址;然而,也可使用LUN或其它地址而不失去适用性。在一个使用 iSCSI的实施例中,IP地址可被用于将存储命令定位到存储设备上,而 LUN则被接着用于寻址在存储设备上的特定存储区。
分区命令处理器785使用传输大小信息来形成分区命令770A到 770N中的每一个,这表示单个访问最多请求一个数据传输大小。分区命 令77 0A代表第一分区命令。緩存指针773A指向緩存720的第一部分。 由于先前的层已完成了全部巻级处理,分区命令770A在其请求中不需 要巻LBA 707信息。组LBA 777A引用目标分区中的偏移量,并且数据 大小779A指示所请求的数据访问是至少预期的分区传输大小。命令链 接78 3A通过像命令链接78 3B那样链接到下一分区级命令来继续形成分 区命令队列790。 一旦分区命令处理器785完成分区命令770A的生成, 分区命令处理器785生成分区命令770B。
以类似于生成分区命令770A的方式生成分区命令770B。緩存指针 773B在位于下一数据字节片开端的深度为一个传输大小的位置指向緩 存720。组LBA 777B具有比上一分区命令大一个传输大小的值,并且数 据大小779B又是传输大小。分区命令处理器785继续生成分区命令, 直到緩存的全部数据被处理为止。分区命令770N所代表的最后一 个分区命令通过使緩存指针773N指向緩存720的最后一部分来处理緩 存720的结尾部分。组LBA 777N具有被计算为需要用来处理存储命令 700的字节片数量的函数的值。数据大小779N具有小于或等于分区传输 大小的值。最后,命令链接78 3N在必要时是以空结束的,这代表命令 队列790的末端。
一旦存储设备接收到分区级命令,存储设备将分区级LBA转换成与物理存储设备相关联的设备级LBA。例如,存储命令770A具有相关联的 组LBA 777A,该组LBA 777A具有范围从0到该目标分区的最大值的值。 然而,当存储设备接收存储命令770A时,其有可能将组LBA 777A映射 到实际硬盘驱动器中的绝对LBA索引。 命令处理器命令堆栈处理
由链接存储組和命令处理器形成的命令堆栈将高级存储命令转换 为低级存储命令,可由负责分区的存储设备来处理该低级存储命令。命 令堆栈通过将高级命令映射到由不同的分区存储組提供的功能性来生 成命令。计算机编程领域的技术人员将认识到,有很多种用于处理存储
命令的可能的实施例。
在优选实施例中,通过命令数据结构的指针将存储命令传递给命令 堆栈或组命令处理器。命令数据结构包括与命令属性相关的信息,命令 属性包括请求的类型(读、写、状态、等)、数据请求的大小(如果有) 或用于保持任何数据的緩存的指针。利用数据緩存的指针允许命令处理 器基本以相同的方式处理写请求和读请求。当命令处理器将高级存储命
令转换为低级存储命令时,命令处理器将低级存储命令放入存储命令的 链接列表中,优选地在分区级。存储命令表最终导致只有一个分区级存 储命令表可被打包并发送给存储设备。该表中的每一个分区级存储命令 包括进入緩存的偏移量、请求大小、分区LBA、分区标识符,或者当对 分区级存储命令进行打包时有用的其它信息。
尽管命令堆栈本身可以是复杂的结构,该结构只调用几个函数;存 储组的每个类型用一个函数。这意味着如果逻辑巻支持四个存储组类 型镜像、条带、跨接或分区;命令堆栈将只调用四个函数镜像命令 处理器、条带命令处理器、跨接命令处理器或分区命令处理器。每个组 在它们的供命令处理器使用的组数据结构中携带其进行定义的上下文 信息。开发以该方式操作的命令堆栈减少使用递归的需求,这可有利于 有内存限制的嵌入式系统。
打包存储命令
最后,低级存储命令被打包以传输到存储设备。在优选实施例中, 根据为存储设备所理解的存储协议来打包分区级命令;然而,也有可能 打包较高级的存储命令,并将它们发送给包括代理的其它设备,用于进 一步的命令堆栈处理。例如,在Zetera的Z-SAN协议中,每个分区级、适当的传输大小的数据有效载荷以及分 区的IP地址的UDP数据报中。启用Z-SAN的设备可具有多个IP地址, 每个分区用对其负责的一个IP地址。利用Z-SAN数据报的IP地址在IP 层对分区进行区分。或者,可使用iSCSI协议来打包分区级命令。iSCSI 使用IP地址来定位存储设备,而不是使用IP地址来识别分区,并随后 使用LUN来寻址分区。iSCSI还通过iSCSI会话中的TCP/IP连接来传输 分区级命令,该连接还可被用于传输较高级的存储命令。应当注意,分
使用任何协议,包括FCIP、 iFCP、 SATA、 ATA、 SAS、 SCSI、 USB、无线 USB、 IEEE 1 394、 802.1 1,或其它可携带存储命令的协议。
一个实施例支持分区处理器打包生成的存储命令,而不是将分区级 存储命令链接到代表命令队列的链接列表中。 一旦生成分区级存储命 令,它们可被打包到数据包中并发送给分区。这是有利的,因为它提供 了存储系统中的最快速响应;然而,对于预期对每个发送命令响应的执 行协议,当没有提供回答时,系统将在等待响应时中断存储命令处理。
在分区处理器通过分区级存储命令的链接列表将命令排成队列以 用于以后的传输的优选实施例中,打包和发送分区级存储命令。该方案 的优点是命令处理与任何存储协议处理无关,因此命令生成不被处理存 储协议中断。例如,如果每个打包在iSCSI协议中的分区级命令需要来 自分区或存储设备的响应,则分区命令处理器没有必要在发送下一分区 级存储命令之前等待响应。
构造逻辑巻图
链接存储组和命令处理器所代表的命令堆栈代表逻辑巻的图。在所 考虑的预期客户机和存储设备不预先通知地出现和消失的分布式虚拟 环境中,客户机不需要系统的先验知识。优选地,客户机通过发现一个 或多个分区来访问存储系统。进入系统的客户机可能利用UDP广播向用 分区信息响应的存储设备发送发现报文。分区信息包括代表客户机所使 用的逻辑巻图信息的属性。然后,客户机能够将逻辑巻的图构造为发现 的图数据的函数。例如,分区可以用描述其在存储组类型的分级结构中 的组从属关系的属性来响应。包括例如名称的属性可包括关于分区所属 组的分级结构信息。客户机分析来自分区的属性信息以获得对分区如何 相互配合以形成逻辑巻的理解。该属性以客户机可以理解的方式对关于存储组组织的普通规则信息进行编码,因此客户机可以构造逻辑巻。然 后,客户机根据组织规则和属性信息建立代表逻辑巻的图的命令堆栈。 在某种意义上,可认为这些属性是发送给客户机的关于如何构造用于逻
辑巻的命令堆冲戋的指令。题为 "Di saggreted Resources and Access Methods"的共有美国专利申请1 1/205, 895号提供了关于客户机发现分 区信息、分级结构名称或对存储组组织进行编码的属性的使用的细节。
当客户机在建立逻辑巻命令堆栈时理解属性信息时,使用可选的父 组指针或可选的前一对等组指针是有利的。使用这些指针是为了遍历组 结构,以确保没有漏洞或错误。
认为虛拟存储系统中的存储区单独地或集体地对发现请求响应。单 独响应代表来自每个分区的单个响应,其中该响应包括分区信息。集体 响应表示来自系统中的单元的响应,其包括与多个分区相关的信息。在 一些实施例中,代理将集合来自很多分区的单独响应,并随后像单个存 储区那样用单独响应对客户机发现进行响应。例如,如果代理集合条带 存储组,代理可以将该条带存储组当作单个分区来处理,并且像单独分 区的组那样向客户机提供发现响应。在其它实施例中,存储设备或其它 设备收集关于分区的信息,并随后形成包括用于多个分区的信息的报 文。例如,单个存储设备可用包括每个单独分区的名称或属性的报文来 响应发现请求。
结果命令堆栈可以是简单或者复杂的。简单的命令堆栈代表使用用
射到:l的逻辑巻只请求一个分区命令处[器。复杂的命令堆栈包括用 于不同类型的存储组,包括镜像、条带、跨接、分区、奇偶校验,的多 个命令处理器,或命令处理器的其它混合。 更新逻辑巻图
逻辑巻图包括存储组的链接结构。和在任何链接列表中一样,可通 过调节列表中的指针来更新成员。通过在附加存储组中链接可将一些存 储组加到逻辑巻上,或者通过解除存储组的链接可从逻辑巻移除一些存储组。
加上存储组的实例包括通过将附加分区加到逻辑巻上来增加逻辑 巻的容量。例如,如果逻辑巻只包括具有三个成员的跨接组,逻辑巻可 通过在第四成员中链接到跨接组的对等链接来增加其容量。客户机现在将察觉逻辑巻具有增加的容量而不必卸下逻辑巻。
移除存储组的实例包括处理丢失分区。如果巻包括具有一个以上成 员的镜像组,则每个成员代表逻辑巻的一个实例。当客户机不再能访问 与 一 个成员相关联的分区时,该客户机还能访问来自其它镜像组成员的 一个或多个分区的数据。客户机可以通过移除对丢失分区的链接来更新 逻辑巻图,或者通过以空结束对等链接或子组链接来更新与其相关联的
任何组。命令堆栈还是有效的,并且正常地处理存储命令;然而,命令
组只是不能进入被移除的存储组。认为客户机包括确定客户机是否应当 继续向损坏的镜像巻写入的指令。
在优选实施例中,客户机获得与对于数据的逻辑巻的连贯性相关的 分区信息。连贯性指的是,即使逻辑巻的部分不可以被访问,客户机也
能够访问逻辑巻的LBA范围所代表的逻辑巻的完整实例。在一个实施例 中,客户机周期性地向系统探查分区的属性,以确保与逻辑巻相关联的 分区是可用的。当客户机通过分析属性信息而检测到逻辑巻结构中的改 变时,它可以通过加上或移除适当的存储组来更新逻辑巻的图。
一旦客户机已形成对于LBA范围的连贯的逻辑巻图,它可以将逻辑 巻挂载为本地连接的存储设备。在优选实施例中,当客户机检测到逻辑 巻中的改变时,它更新逻辑巻图而不用卸下逻辑巻。不要求客户机卸下 逻辑巻,因为存储组可被链接或被解除链接,而不影响操作系统或文件 系统。
其它的考虑
尽管优选实施例对向存储设备传输的分区级存储命令进行打包,聪 明的读者将认识到,对于打包来说,分区级存储命令和较高级的存储命 令之间几乎没有差别。因此,本发明主题还包括对向存储设备或向存储
案支持建立分布式命令堆栈,其中命令处理器可跨对客户机、代理、存
链接操:乍。、代理代表、一种设:备,其对于另一的;l备表现为二个或多个单 独的存储区,同时集合来自其它存储设备的一个或多个存储区。对于存
储设备来说,代理起到客户机的作用;然而,对于客户机来说,代理也 起到存储设备的作用。
毫无疑问,与操作与 一种类型存储组相关联的存储命令的命令处理器结合的存储组组织可被认为是描述LBA转换的"数学"。命令处理器
代表将LBA和数据请求大小作为输入来接受的不同的运算符。然后,命 令处理器输出一个或多个转换的LBA和数据请求大小。因此,预期对数 据地址和请求大小进行转换的全部命令处理器。例如,本发明主题支持 在命令处理器中增加功能,以反映用于一种类型的存储组的附加功能 性。命令处理器充分地脱离逻辑巻的结构,对命令处理器功能性的修改 不改变逻辑巻的拓朴。修改条带命令处理器以处理奇偶校验代表一个实 例。
另 一 实例包括修改镜像命令处理器以改善逻辑巻的性能。具有包括 两个或两个以上成员的镜像组的逻辑巻包括一组以上的逻辑巻数据,通 过一组以上的LBA对它们进行访问。因此,镜像命令处理器可#皮+务改为 将读存储命令跨镜像组成员展开。当镜像命令处理器处理巻级读命令
配给多;存储设备。:与镜像成员相关联的:区被设置在不同的存储设
备上时,读性能将好于从设置在统一存储设备上的镜像成员读数据。在 一个实施例中,修改的镜像命令处理器就像镜像组成员属于条带组来处 理镜像组成员上的数据。可以在具有内部存储设备的客户机中有利地配 置这样的方案,包括有两个硬盘,其中一个硬盘对另一个硬盘进行镜像 的计算机。另外,命令处理器可以区分请求类型。例如,命令处理器可 以有差另'j地处理写或读请求,以获得附加的功能性。
本文所公开的结构可被用于存储以外的其它技术。可推广这些概念 以提供用于分布式或集合式设备的命令处理。客户机可以发现集合式设 备的结构,并随后基于发现信息形成命令堆栈。在其它的实施例中,客 户机可以使用来自服务器的信息来构造通信堆栈,以确保只使用必要的 通信基础设施。例如,如果客户机和服务器被链接在相同的以太网LAN 上,可以想象的是,客户机可以根据服务器指令生成只使用以太网的通 信堆栈,而不使用完整TCP/IP堆栈用于通信,以获得更有效的通信。 这样的命令堆栈相当适用于原子的命令响应应用协议。
还考虑将命令堆栈链接在一起。如上所述,可在客户机、代理、存 储设备,或存储系统中的其它单元之间散布命令堆栈。这包括了这样的 概念客户机与存储设备交互,该存储设备自身采用命令堆栈以访问其 它的存储功能性。例如,客户机可以感知包括分区的跨接组的逻辑巻。然而,每个分区实际上是存储设备中的RAID-5条带组。存储设备使用RAID-5命令处理器以与本地分区交互,而客户机使用跨接命令处理器以 与存储设备上的分区交互。基本上,跨接级命令被发送给把它们当作高 级命令并且通过RAID-5命令处理器进一步处理它们的存储设备。由于分区的LBA范围与存储组的范围无关,每个存储设备可以把每 个分区当作具有LBA范围从Q到存储区的最大LBA的存储区。这提供了 存储设备上的快速处理,而不需要存储设备执行额外的计算。另外,这 意味着存储设备不需要理解如何根据存储组组织的规则来操作的能力。 当分区被实例化时,更新它们的名称或属性以携带客户机所使用的规则 信息,以便构造逻辑巻图。分区只是以LBA的线性范围存储数据。优点通过根据包括命令处理器的逻辑巻图生成存储命令的使用,实现了 很多优点。在每个客户机相互无关地运行的系统中,由于全部客户机采 用相同的用于构造逻辑巻的通用规则,每个客户机具有基本相同的图, 尽管如此,每个客户机建立其自身的逻辑巻视图。当一客户机看不到逻 辑巻的一部分而引起更新其图时,不影响其它客户机。另外,在逻辑巻 包括具有两个或两个以上成员的镜像组的情况下,即使当镜像成员的一 部分不再可访问时,客户机也可以保持逻辑巻上数据的连贯视图。只要 完整的数据组或LBA的巻级范围是可用的,即使通过是不同的镜像组成 员可用,客户机保持访问数据的能力。通过解除不再可访问的组或分区 与逻辑巻的链接,只从图移除不再可访问的组或分区,而不需要卸载逻 辑巻。使用本公开技术的存储系统可扩展为具有很多存储设备或很多客 户机的更大的配置。如上所述,每个客户机独立地运行,并且能够共享 存储设备而不加重其负担。系统可扩展到客户机和存储设备之间的通信 链接带宽的极限。另外,可将逻辑巻命令堆栈从单个主机扩展到其它设 备。例如,客户机可具有命令堆栈的一部分,该部分随后调用设置在继 续生成存储命令的代理设备上的命令堆栈,有可能利用网络服务来执行 远程功能。所公开的方法与用于传输存储命令的协议无关,这支持被专 用的存储工具以及基于标准的包括iSCSI的工具所采用。与存储组类型相关的命令处理器的使用支持存储组类型的同构混 合。如上所述,镜像、条带、跨接或分区可以以不同的方式组合以建立单个逻辑巻。将存储组的同构混合与命令处理器的能力结合以有差别地 处理多种请求,这支持建立具有特定特征的逻辑巻。例如,包括条带组 和跨接组的逻辑巻可优先地从条带组读取,而同时向两个组写入,其中 跨接组可被用于归档。有可能支持传输协:^同构混合,其;每个协议以不同类型的存储设备 为目标。在一个实施例中,例如,单个逻辑巻可包括设置在通过内部控 制器访问的直接链接的设备上的分区,或者设置在通过网络存储协议访 问的远程设备上的分区。分区命令处理器可适用于处理每种类型的协议 的特定细节。特定的示例性实施例可包括一种逻辑巻,该逻辑巻包括直接链接的SATA磁盘驱动器上的分区、通过iSCSI访问的分区,以及通 过Zetra的Z-SAN协议访问的分区。由于根据与存储组类型的纽织相关的规则来构造逻辑巻图,客户机可快速地生成存储命令。在优选实施例中,在最多四个级别的命令处理 器中,高级巻命令在不使用递归的情况下被转换为 一个或多个分区级命 令。这支持存储命令的快速处理。 硬件其它方面涉及与本发明主题相关的硬件。认为可以开发硬件用于存 储、样机研究、制造、操纵、管理、封装、测试、物理控制或支持,或 用于与本发明主题的物理方面相关的其它行为。因此,本发明主题包括 用于开发、生产、制造或运行硬件的系统、方法或设备。从这个意义上 来说,硬件属于本发明主题范围。软件在另一方面,认为可以编写这样的软件配置、仿真或管理本发明 主题的不同方面以及它们的相关基础构架。从这个角度来说,本发明主 题包括以下方法编写该软件,以机器可读的形式记录软件,授权、销 售、分配、安装或在适当的硬件上操作该软件。另外,该软件本质上被 认为属于本发明主题的范围。因此,已公开了生成存储命令的特定构成和方法。然而,对于本领 域的技术人员来说很明显的是,在不背离文中的本发明的概念的前提 下,可能有除已描述的修改之外的很多其它修改。因此,除了将本发明 主题限制于本公开的精神以外,不作其它的限制。另外,在理解本公开时,应当以与上下文一致的最大可能方式来理解所有术语。尤其是术语 "包括"和"包含",它们应当被理解为以非排除的方式涉及要素、组 件或步骤,指示所引用的要素、组件或步骤可存在,或者被使用,或者 与没有被明确引用的其它要素、组件或步骤组合。
权利要求
1. 一种生成用于存储系统的存储命令的方法,所述存储系统具有包括位于第一存储设备上的第一分区和位于第二存储设备上的第二分区的逻辑卷,所述方法包括(a)提供所述逻辑卷的图,其中所述图构造为(i)与第一存储组相关联的第一存储组类型,所述第一分区是所述第一存储组的成员;以及(ii)与第二存储组相关联的第二存储组类型,所述第二分区是所述第二存储组的成员;的函数,以及(b)将分别用于所述第一和第二存储组类型的第一和第二命令处理器结合到所述图中;并且其中所述第一命令处理器将与所述第一存储组相关联的第一存储命令转换为与所述第二组相关联的第二存储命令。
2. 如权利要求l所述的方法,进一步包括当检测到所述逻辑巻结 构中的改变时更新所述图的至少 一 部分。
3. 如权利要求2所述的方法,进一步包括在保持所述逻辑巻挂载 的同时执行所述逻辑图的所述更新。
4. 如权利要求l所述的方法,进一步包括发现所述第一存储组类型。
5. 如权利要求4所述的方法,其中所述第一存储组类型被包括在 第 一存储设备所生成的发现响应中。
6. 如权利要求l所述的方法,进一步包括通过利用第一命令处 理器,将与所述第 一存储命令相关联的巻级数据地址转换为与所述第一 分区相关联的分区数据地址。
7. 如权利要求7所述的方法,其中所述分区地址包括LBA。
8. 如权利要求l所述的方法,其中所述第二存储命令包括分区标 识符。
9. 如权利要求9所述的方法,其中所述分区标识符包括IP地址 和LUN中的至少一个。
10. 如权利要求l所述的方法,其中所述巻级命令源于文件系统。
11. 如权利要求11所述的方法,进一步包括利用存储协议将所述
12. 如权利要求11所述的方法,进一步包括利用存储协议将所述第二存储命令发送给所述第二存储设备。
13. 如权利要求12所述的方法,其中所述存储协议使用以下协议至少之一ATA、 SATA、 SAS、 SCSI、 USB、火线接口、光纤通道、iSCSI、 FCIP、 iFCP、 NFS以及CIFS。
14. 如权利要求l所述的方法,其中所述图包括存储在存储器中的 数据结构,并且其中所述第一命令处理器或所述第二命令处理器是所述 数据结构的成员。
15. 如权利要求14所述的方法,其中所述第一命令处理器和所述 的第二命令处理器在所述数据结构中形成命令堆栈。
16. 如权利要求14所述的方法,其中分级地组织所述数据结构, 其中所述第 一存储组类型在逻辑上级别高于所述第二存储组类型。
17. 如权利要求16所述的方法,其中与所述逻辑巻相关联的所述 命令堆栈不同于与第二逻辑巻相关联的第二命令堆栈,所述第二逻辑巻 与所述逻辑巻共享所述第一存储设备。
18. 如权利要求l所述的方法,其中所述第一存储组类型是非RAID 组类型。
19. 如权利要求18所述的方法,其中所述非RAID组类型是以下存 储组类型中的至少一个跨接组、条带组和分区组。
20. 如权利要求l所述的方法,其中所述第一存储组类型是RAID组类型。
21. 如权利要求20所述的方法,其中所述RAID组类型包括以下存 储组类型中的至少一个镜像组、Z-RAID组和奇偶校验组。
22. 如权利要求l所述的方法,进一步包括通过通信链接将所述第 二存储组命令发送给所述第二命令处理器。
23.—种存储系统,包括(a) 客户机,其适用于访问所述存储系统中的逻辑巻;(b) 存储设备,其适用于向所述客户机提供对所述存储设备中的 存储区的访问,其中所述存储区代表所述逻辑巻的至少一部分;以及(c) 存储器,其存储与命令堆栈相关联的指令,其中所述命令堆所述存储区的存储命令。
24.如权利要求23所述的系统,其中所述客户机包括所述存储器。
25. 如权利要求23所述的系统,进一步包括包含所述存储器的代理。
26. 如权利要求23所述的系统,进一步包括将所述客户机通信地 连接到所述存储设备的通信链接。
27. 如权利要求26所述的系统,其中所述通信链接在所述客户机的内部。
28. 如权利要求26所述的系统,其中利用存储协议通过所述通信 链接传输所述存储命令。
29. 如权利要求23所述的系统,其中所述存储区与一种存储组类 型相关联。
30. 如权利要求28所述的系统,其中所述存储组类型是RAID组类型。
全文摘要
提出了用于生成存储系统命令的系统和方法。逻辑卷包括一个或多个存储区。该方法包括根据与组成该卷的存储区的类型相关的信息来提供逻辑卷的图。通过与逻辑卷中的存储区的类型相关联的命令处理器,将引用逻辑卷图的存储命令转换为存储区命令。存储系统包括通过利用与逻辑卷相关联的命令堆栈来访问存储区的客户机。
文档编号G06F13/00GK101506779SQ200780031115
公开日2009年8月12日 申请日期2007年6月20日 优先权日2006年6月20日
发明者M·亚当斯, N·维基, N·萨里, S·K·鲍夫曼, T·E·路德维希 申请人:雷特泽遥距管理有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1