多层级高速缓存中的方法、存储子系统、以及控制装置转让专利

申请号 : CN201280053255.3

文献号 : CN103907097B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 戈库尔·桑德拉拉扬卡拉德哈尔·沃鲁甘地拉克希米·纳拉亚南·巴伊拉瓦孙达拉姆普里亚·塞加尔维普·马图尔

申请人 : NETAPP股份有限公司

摘要 :

将在多层级高速缓存的一个层级处检测到的工作负荷特性的变化传送到多层级高速缓存的另一层级。多个高速缓存元件存在于不同层级处,并且至少一个层级包含可以动态地重新确定大小的高速缓存元件。所传送的工作负荷特性的变化致使接收层级调整多层级高速缓存中的高速缓存性能的至少一个方面。在一个方面中,响应于工作负荷特性的变化重新确定多层级高速缓存中的至少一个可以动态地重新确定大小的元件的大小。

权利要求 :

1.一种在多层级高速缓存中的方法,其包括:

通过用于所述多层级高速缓存的一层级的第一高速缓存装置控制器检测在所述多层级高速缓存的该层级处的工作负荷特性的变化,其中,所述多层级高速缓存的层级中的至少一者包含可动态地重新确定大小的高速缓存元件,并且其中,每一层级通过一高速缓存装置控制器来管理;以及将检测到的所述工作负荷特性的变化从所述第一高速缓存装置控制器传送到所述多层级高速缓存的另一层级的第二高速缓存装置控制器,以致使所述第二高速缓存装置控制器响应于所述工作负荷特性的变化调整高速缓存大小和策略中之一或两者,其中,第一工作负荷和第二工作负荷重叠对高速缓存的数据的至少一部分的存取,其中,所述第一工作负荷通过动态高速缓存虚拟存储器具存取数据,并且所述第二工作负荷不通过所述动态高速缓存虚拟存储器具存取数据,并且其中,所述第二工作负荷的行为的变化致使所述动态高速缓存虚拟存储器具调整用于所述第一工作负荷的高速缓存大小和策略中之一或两者。

2.根据权利要求1所述的方法,其中,检测所述工作负荷特性的变化包括检测高速缓存未中比率、读取与写入输入/输出I/O请求的比率、I/O大小或随机与顺序存取比率的变化中的一者或一者以上。

3.根据权利要求1所述的方法,其中,检测所述工作负荷特性的变化包括通过检测对尚未高速缓存的一组数据的存取来检测工作组的变化。

4.根据权利要求1所述的方法,其中,检测所述工作负荷特性的变化包括:检测最靠近客户端的高速缓存的阶层式最高层级的变化,并且进一步包括向后端存储服务器的高速缓存层级的控制器传送所述工作负荷特性的变化。

5.根据权利要求1所述的方法,其中,调整所述高速缓存大小和策略中之一或两者包括动态地解除所述动态高速缓存虚拟存储器具。

6.根据权利要求1所述的方法,其中,调整所述高速缓存大小和策略中之一或两者包括将动态高速缓存虚拟存储器具动态地实例化为高速缓存层级以便增加所述多层级高速缓存的层级的至少一部分。

7.根据权利要求1所述的方法,其中,调整所述高速缓存大小和策略中之一或两者包括改变指示要执行的提前读取的量的预取策略或改变指示要保持数据多长时间的高速缓存策略。

8.根据权利要求1所述的方法,其中,致使所述不同层级调整高速缓存大小和策略中之一或两者包括只有在所述工作负荷特性的变化超过预先配置的阈值的情况下才响应于所述工作负荷特性的变化调整高速缓存大小和策略中之一或两者。

9.根据权利要求1所述的方法,其中,调整所述高速缓存大小和策略中之一或两者包括调整所述可动态地重新确定大小的高速缓存元件的存储器分配大小。

10.一种存储子系统,其包括:

存储服务器,其具有高速缓存的至少一个层级,所述高速缓存的所述至少一个层级包括所述高速缓存的第一层级;

动态高速缓存虚拟存储器具,其在与所述存储服务器分开的硬件资源上托管的虚拟机中执行,所述动态高速缓存虚拟存储器具提供所述高速缓存的第二层级,所述高速缓存包括多层级高速缓存,每一层级包含用以管理该高速缓存的该层级的控制器;以及通信协议,用于所述存储服务器处的高速缓存的所述第一层级的控制器与所述动态高速缓存虚拟存储器具处的高速缓存的所述第二层级的控制器之间的高速缓存通信,其中,所述存储服务器处的高速缓存的所述第一层级和所述动态高速缓存虚拟存储器具这两者中至少之一可动态地重新确定大小,并且其中,所述高速缓存的所述第一层级的控制器和所述第二层级的控制器经配置以检测工作负荷特性的变化,并且向另一控制器传送所述工作负荷特性的变化,以致使所述另一控制器响应于所述工作负荷特性的变化调整用于该另一控制器的高速缓存层级的高速缓存大小和策略中之一或两者。

11.根据权利要求10所述的存储子系统,其中,至少所述高速缓存的所述第二层级的控制器经配置以检测高速缓存未中比率、读取与写入输入/输出I/O请求的比率、I/O大小或随机与顺序存取比率的变化中的一者或一者以上。

12.根据权利要求10所述的存储子系统,其中,调整所述高速缓存大小和策略中之一或两者包括改变指示要执行的提前读取的量的预取策略或改变指示要保持数据多长时间的高速缓存策略。

13.根据权利要求10所述的存储子系统,其中,所述高速缓存的所述第一层级的控制器和所述第二层级的控制器经配置以只有在所述工作负荷特性的变化大于阈值的情况下才检测所述工作负荷特性的变化。

14.根据权利要求10所述的存储子系统,其中,所述存储服务器经配置以通过如下方式来调整高速缓存大小和策略中之一或两者:解除所述动态高速缓存虚拟存储器具,或将虚拟存储器具动态地实例化为动态高速缓存的层级以便增加所述多层级高速缓存的层级的至少一部分。

15.根据权利要求10所述的存储子系统,其中,所述高速缓存的所述第一层级的控制器和所述第二层级的控制器进一步经配置以从所述多层级高速缓存的另一层级的控制器接收指示所述另一层级的控制器检测到所述另一层级处的工作负荷特性的变化的通信,根据该通信确定响应于所述另一层级处的工作负荷特性的变化而更改所述多层级高速缓存的行为,以及响应于在所述另一层级处的工作负荷特性的变化而调整在所述多层级高速缓存中如何执行高速缓存,包含调整所述可动态地重新确定大小的高速缓存元件的存储器分配大小。

16.根据权利要求10所述的存储子系统,其中,所述高速缓存的所述第一层级的控制器和所述第二层级的控制器经配置以通过调整所述可动态地重新确定大小的高速缓存元件的存储器分配大小来调整所述高速缓存大小和策略中之一或两者。

17.一种多层级高速缓存的控制装置,包括:用于所述多层级高速缓存的一层级的第一高速缓存装置控制器,

其中,所述第一高速缓存装置控制器被配置为检测在所述多层级高速缓存的该层级处的工作负荷特性的变化,其中,所述多层级高速缓存的层级中的至少一者包含可动态地重新确定大小的高速缓存元件,并且其中,每一层级通过一高速缓存装置控制器来管理;

其中,所述第一高速缓存装置控制器还被配置为将检测到的工作负荷特性的变化从所述第一高速缓存装置控制器传送到所述多层级高速缓存的第二层级的第二高速缓存装置控制器,以致使所述第二高速缓存装置控制器响应于所述工作负荷特性的变化调整高速缓存大小和策略中之一或两者,包含调整所述可动态地重新确定大小的高速缓存元件的存储器分配大小;

其中,第一工作负荷和第二工作负荷重叠对高速缓存的数据的至少一部分的存取,其中,所述第一工作负荷通过动态高速缓存虚拟存储器具存取数据,并且所述第二工作负荷不通过所述动态高速缓存虚拟存储器具存取数据,并且其中,所述第二工作负荷的行为的变化致使所述动态高速缓存虚拟存储器具调整用于所述第一工作负荷的高速缓存大小和策略中之一或两者。

18.根据权利要求17所述的多层级高速缓存的控制装置,其中,所述第一高速缓存装置控制器被配置为检测高速缓存未中比率、读取与写入输入/输出I/O请求的比率、I/O大小或随机与顺序存取比率的变化中的一者或一者以上。

19.根据权利要求17所述的多层级高速缓存的控制装置,其中,所述第二高速缓存装置控制器被配置为改变指示要执行的提前读取的量的预取策略或改变指示要保持数据多长时间的高速缓存策略。

20.根据权利要求17所述的多层级高速缓存的控制装置,其中,所述第二高速缓存装置控制器被配置为只有在所述工作负荷特性的变化超过预先配置的阈值的情况下才响应于所述工作负荷特性的变化调整高速缓存大小和策略中之一或两者。

21.根据权利要求17所述的多层级高速缓存的控制装置,其中,所述第二高速缓存装置控制器被配置为通过如下方式调整所述高速缓存大小和策略中之一或两者:解除所述动态高速缓存虚拟存储器具,或将虚拟存储器具动态地实例化为动态高速缓存的层级以便增加所述多层级高速缓存的层级的至少一部分。

22.根据权利要求17所述的多层级高速缓存的控制装置,其中,所述第二高速缓存装置控制器被配置为调整所述可动态地重新确定大小的高速缓存元件的存储器分配大小。

说明书 :

多层级高速缓存中的方法、存储子系统、以及控制装置

技术领域

[0001] 所描述的实施例总地来说涉及管理联网存储,并且所描述的实施例更具体来说涉及管理虚拟化环境中的多层级高速缓存系统。
[0002] 版权通告/许可
[0003] 本专利文献的揭示的一些部分可能包含受到版权保护的素材。版权所有者不反对所述专利文献或专利揭示以其出现在专利及商标局的文件或记录中的形式被任何人复制,但以其它方式保留全部版权,无论什么权利。此版权通告适用于下文所描述的所有数据,并且在这里的附图中,以及如下所述的任何软件:Copyright 2011,NetApp,Inc.,版权所有。

背景技术

[0004] 公司或其它组织的数据通常存储在联网存储装置中。联网存储中心可以称为数据中心。数据中心的资源(例如存储和存取带宽)是有限的。因而,数据中心的一个共同目标是改善存储中心的资源的利用率,并且改善存储装置利用率和存取处理量。公司或组织内部可能有一些产生大量工作负荷的应用程序,从而对数据中心进行许多存取请求。对存储装置的数据存取相对于计算机处理速度来说通常较为缓慢。改善数据中心中的资源使用的一种方式是提供高速缓存,认识到在工作负荷中存取的数据相对于数据中心中所存储的其它数据有更大可能被再次存取。
[0005] 高速缓存系统可以是多层级的,其中存在多个高速缓存层,这些层经过协调。传统上,下部高速缓存层或更接近处理资源的层相对于较高高速缓存层具有较小大小但速度更快。因而,高速缓存等级离处理资源越近,传统的高速缓存等级的大小就会减小并且速度就会增加。从其它角度来看,高速缓存等级离进行存取请求的客户端越近,其传统上就会越大并且越慢。
[0006] 高速缓存相干性协议或高速缓存等级当中的协调通信具有基于高速缓存等级的速度和大小的基础假设。传统的多层级高速缓存协议或高速缓存相干性的传统的包含、去除方法具有关于高速缓存大小和速度的基础假设。高速缓存结构的偏差将使得此类传统协议不适合用于不同高速缓存结构。
[0007] 返回到数据中心资源利用率的概念,高速缓存系统的构造化确定系统中的资源使用。在数据中心的数据存取是高度动态的程度上,高速缓存的传统固定式结构妨碍性能的频率与其改善性能的频率相同。传统的固定式结构会导致数据冗余以及高速缓存层当中的高速缓存能力的冗余。数据冗余会消耗原本可能被保留以供其它用途的资源。
[0008] 在传统的高速缓存中,高速缓存的不同高速缓存等级或层级不会注意高速缓存决策和在这些不同层级中的每一者处经历的工作负荷变化。高速缓存的不同层级传统上不能够获得关于在其它层级处的变化的第一手信息。缺乏第一手信息会在高速缓存等级当中产生通信差距。通信差距又使得每一高速缓存层级花费额外的努力来推测工作负荷变化并且后来根据工作负荷变化进行调适。此重复的努力会增加整个系统的调适时间,这会减小或者废弃高速缓存的努力。

发明内容

[0009] 将在多层级高速缓存的一个层级处检测到的工作负荷特性的变化传送到多层级高速缓存的另一层级。不同层级处存在多个高速缓存元件,并且至少一个层级包含可以动态地重新确定大小并且可以动态地被实例化或破坏的高速缓存元件。所传送的工作负荷特性的变化使得接收层级调整多层级高速缓存中的高速缓存性能的至少一个方面。可以响应于工作负荷特性的变化重新确定多层级高速缓存中的至少一个可以动态地重新确定大小的元件的大小。

附图说明

[0010] 以下描述包含对于图的论述,所述图具有借助于实例提供的对所描述的实施例的实施方案的图解说明。图式应作为实例而不是作为限制来理解。如本文所使用,提到一个或一个以上“实施例”应理解为描述至少一个实施方案中包含的特定特征、结构或特性。因而,本文中出现的例如“在一个实施例中”或“在替代实施例中”等短语描述各种实施例和实施方案,并且未必全部指的是相同实施例。但是,其也未必相互排斥。
[0011] 图1是具有作为可以动态地重新确定大小的高速缓存层级的虚拟存储器具的存储服务器系统的实施例的框图。
[0012] 图2是具有虚拟存储器具的多层级高速缓存的实施例的框图。
[0013] 图3是具有作为高速缓存层级的多个虚拟例子的虚拟存储服务器的实施例的框图。
[0014] 图4是用于传送多层级高速缓存的层级当中的工作负荷特性变化的过程的实施例的流程图。
[0015] 图5是虚拟存储服务器的实施例的框图。
[0016] 图6A图解说明其中可以实施具有虚拟存储器具的多层级高速缓存的网络存储系统。
[0017] 图6B图解说明在替代实施例中其中可以实施具有虚拟存储器具的多层级高速缓存的网络存储系统的分布式或群集式架构。
[0018] 图7是包含图6A和6B的保护管理器的环境的说明性实施例的框图,在这个环境中可以实施具有虚拟存储器具的多层级高速缓存。
[0019] 图8图解说明图7的存储装置操作系统的实施例,在所述存储装置操作系统中可以实施具有虚拟存储器具的多层级高速缓存。
[0020] 下文描述某些细节和实施例,包含描述图式(其可描绘下文描述的某些或所有实施例),并且论述本文中呈现的发明性概念的其它可能的实施例或实施方案。

具体实施方式

[0021] 如本文所描述,多层级高速缓存系统检测高速缓存的每一层级处的工作负荷的变化,并且每一层级自动用高速缓存行为的动态变化对工作负荷变化作出响应。当多层级高速缓存系统的一个层级检测到工作负荷特性的变化时,其将所述变化传送到多层级高速缓存系统的另一层级。工作负荷特性的所传送的变化使得接收到所述传送的高速缓存层级调整多层级高速缓存中的高速缓存性能或行为的至少一个方面。在一个方面中,接收层级响应于工作负荷特性的变化而重新确定至少一个可以动态地重新确定大小的元件的大小。在某些实施例中,多层级高速缓存系统响应于工作负荷特性的变化而改变提前读取行为或者绕过高速缓存。在其它实施例中,多层级高速缓存系统可以靠近客户端将高速缓存(例如虚拟存储器具或VSA)动态地实例化,其中VSA可以吸收客户端的大多数读取业务量。如果工作负荷的特性不再对VSA高速缓存友好,那么高速缓存系统也可以解除对VSA的委托。
[0022] 图1是具有作为高速缓存层级的虚拟存储器具的存储服务器系统的实施例的框图。系统100是提供从附接(未图示)到存储服务器110的存储装置到经由主机140连接的客户端108的数据存取的存储服务器系统。客户端经由在主机140上执行的应用程序进行数据存取请求。数据存取请求也可以被称作I/O(输入/输出)请求,并且可以是向存储服务器110管理和服务的存储装置读取和/或写入数据。
[0023] 系统100图解说明具有动态高速缓存VSA的多层级高速缓存配置。即,存储服务器110包含高速缓存115,高速缓存115是高速缓存阶层中的最低层级或等级的高速缓存。如本文所使用,“层级”是指多层级高速缓存系统内的控制逻辑的分离。每一层级包含一个高速缓存装置,所述高速缓存装置包含存储装置或存储器和反馈/确定大小控制器或逻辑116,用于确定要如何在特定的层级处执行高速缓存。控制器确定要在高速缓存中存储什么数据。将理解,还可以使用例如“等级”或“层”等替代术语来指代分开的层级。
[0024] 存储服务器经由网络120连接到动态高速缓存VSA 132。网络120可以是任何类型或组合的广域网。动态高速缓存VSA 132在物理上接近主机140或在主机140上的超管理器130上实例化。主机140托管超管理器130。物理上接近总地来说是指这样一个概念:使用局域网或本地连接来连接装置,而非经由广域网连接。如本文所使用,实例化是指产生源对象或源代码的实例或拷贝。源代码可以是类、模型或模板,并且实例是包含一组属性的至少一些重叠的拷贝,其可以具有与源不同的配置或设置。另外,对实例的修改可以独立于对源的修改而发生。
[0025] 当主机140从源存储服务器110读取数据时,动态高速缓存VSA 132通常被填满。在第一次读取任何数据时,高速缓存从存储服务器110取出数据,将其存储在动态高速缓存VSA 132中,并且将其转发到主机140。当读取穿过动态高速缓存VSA 132时,高速缓存装满。可以立即从动态高速缓存服务对存储在动态高速缓存VSA 132中的数据的任何随后存取,这会减少往返时间或等待时间。在一个实施例中,动态高速缓存VSA 132起作用的方式类似于直写高速缓存,其中从主机140的所有写入都被直接传递到存储服务器110。只有当存储服务器110对写入请求作出响应时,动态高速缓存VSA 132才向主机140或其它高速缓存层级(例如,RAM(缓冲器高速缓存)和SSD或闪存)确认结果。
[0026] 类似于动态高速缓存VSA 132,存储服务器110内的高速缓存装置115高速缓存数据以向动态高速缓存VSA 132服务,从而避免存取存储资源以获得在存储服务器110内高速缓存的数据。在一个实施例中,高速缓存装置115实际上分成两个分开的高速缓存装置。
[0027] 存储服务器110进一步包括控制器116,控制器116表示存储服务器110的与确定工作负荷特性变化何时发生或(当工作组大小已经改变时)两个工作负荷的工作组之间是否存在重叠以及何时将这些变化传播到动态高速缓存VSA 132的确定大小控制器134有关的控制逻辑。工作组是指由于应用程序存取数据而被高速缓存的一组数据。控制器116可以被视为多层级高速缓存中的一个层级处的高速缓存装置。另外,控制器116可以确定响应于来自动态高速缓存VSA 132的指示要执行什么操作。控制器116可以实施为存储服务器的其它控制逻辑的一部分,或者其可以实施为分开的控制逻辑(不论是虚拟地分开(例如,代码)还是物理上(例如,硬件)分开)。
[0028] 通信可以被认为是在存储服务器110与动态高速缓存VSA 132之间发生,或者其可以被认为是在存储服务器110的控制器116与动态高速缓存VSA 132的控制器134之间发生。控制器134类似于控制器116,因为其在动态高速缓存VSA 132处执行的功能与控制器116在存储服务器110处执行的功能相同。因而,类似地,控制器134可以被视为多层级高速缓存系统的装置。在一个实施例中,控制器134实施在含有动态高速缓存VSA 132的虚拟机(VM)外部。举例来说,控制器134可以是超管理器130的分开的虚拟实体。控制器提供何时向其它高速缓存层级进行传送、传送什么内容的导引信息,并且控制接收层级在确定其自身在层级中的高速缓存的大小方面如何对来自另一层级的指示作出响应。将理解,虚拟机是指在与其它虚拟环境共享的硬件资源上执行的软件环境实例(或虚拟环境)。硬件资源向虚拟环境的分配通常是通过虚拟机管理器或超管理器执行,虚拟机管理器或超管理器从虚拟环境向物理硬件资源映射资源请求。
[0029] 在一个实施例中,每一高速缓存层级包含(例如在其控制器中)一个监视基础设施,其在高速缓存层级处收集统计数据。举例来说,监视程序(例如监视后台程序)可以收集与工作负荷特性(例如,读取-写入比率、随机-顺序比率、I/O大小)、高速缓存统计数据(例如,命中比率、利用率)和/或性能或SLO(服务级别目标)统计数据(例如,等待时间、处理量)有关的统计数据。将监视到的统计数据馈送到控制器(即,116或134)中,以允许控制器确定工作负荷或工作组是否正在改变。在一个实施例中,控制器可以被视为包含处理资源,层级间通信资源和监视资源,通过这些资源进行确定并且在高速缓存层级之间传递通信。
[0030] 每一控制器(例如,116或134)从其它高速缓存层级接收统计数据和通信,确定其层级或等级处的高速缓存的大小以及其高速缓存对于其它高速缓存层级的影响。在一个实施例中,对于影响的所有确定都是在工作负荷粒度下执行的。因而,控制器可以使用工作负荷统计数据来确定其高速缓存层级所经历的变化。控制器可以根据检测到的变化来确定应当通知另一高速缓存层级。
[0031] 在一个实施例中,控制器试图确定以下中的一者或多者。控制器可以确定特定工作负荷是否已经改变,例如读取-写入比率是否已经增加。如果控制器检测到工作负荷变化,那么其将针对相同工作负荷试图增加局部层级处的高速缓存的大小,并且减小其它高速缓存层级上的分区大小。控制器可以确定是否工作组大小已经改变或者工作组已经改变。控制器可以确定是否存在足够的空闲高速缓存空间可供使用或者确定其它资源的可用性。控制器可以确定两个工作负荷的工作组之间的重叠是否已经增加或减少。控制器可以确定工作负荷是否已经添加或去除。
[0032] 系统100还图解说明存储服务器110可能经历多个工作负荷的不同方式。工作负荷112和工作负荷114通过动态高速缓存VSA 132之外的信道来到存储服务器110。更具体来说,客户端102和104经由与网络120不同的网络或经由与主机140不同的主机存取存储服务器110。客户端102和104可以被视为直接存取存储服务器110而不是经由动态高速缓存VSA存取,而客户端108的存取是通过动态高速缓存VSA 132进行的。工作负荷118从客户端108经由动态高速缓存VSA 132来到存储服务器110。
[0033] 工作负荷是彼此分开或相异的,因为其具有不同源,或者其源于不同应用程序或不同客户端。因而,与来自不同应用程序的请求相关联的每一工作负荷可以被称作相异的工作负荷。不同工作负荷112、114和118可以存取相同或不同的存储对象,例如存储服务器上的一个卷。根据不同工作负荷是在存取相同卷还是不同卷,存储服务器会在其末端经历某一所得工作负荷特性,存储服务器使用这个所得工作负荷特性如下所述进行某些高速缓存决策。
[0034] 存在系统100的装置可能用来通信的许多不同的可能协议。在一个实施例中,当存取文件和目录形式的信息时,客户端可以经由传输控制协议/因特网协议(TCP/IP)发出包,其包含基于文件的存取协议,例如通用因特网文件系统(CIFS)协议或网络文件系统(NFS)协议。或者,当存取块的形式的信息时,客户端可以发出包含基于块的存取协议的包,例如经由TCP包封的小型计算机系统接口(SCSI)协议(iSCSI)和经由光纤信道包封的SCSI(FCP)。协议142表示客户端用来进行例如NFS/CIFS或其它数据存取请求的协议。动态高速缓存VSA 132经由协议142向主机140的客户端(例如客户端108)进行通信。
[0035] 在一个实施例中,动态高速缓存VSA 132使用与协议142不同的协议与始发点存储服务器110通信。用于与存储服务器110通信的协议被展示为协议122。可能存在其中协议122与协议142相同的实施例。但是,这两个协议可以是不同的。在一个实施例中,协议122是NRV(NetApp远程卷)协议。协议122可以经过增强,从而包含高速缓存-通信请求(举例来说,可以使用类似于本文所述的增强的NFS或CIFS)。下文更详细地描述对于协议的增强的实例。
[0036] 在一个实施例中,工作负荷112和114连同工作负荷118共享存储服务器110上的高速缓存115(例如,缓冲器高速缓存),工作负荷118纯粹是动态高速缓存工作负荷。此共享使得必须使用存储服务器110内的分区的高速缓存,在这种情况下,与不使用任何VSA存取数据的其它工作负荷相比,被卸载到VSA的工作负荷具有缓冲器高速缓存的较小分区空间。在一个实施例中,工作负荷118使用存储服务器110的高速缓存115来高速缓存数据,直到向N刀片的传送(如图6B中所描述)完成为止,或者基于存储服务器110处实施的提前读取策略来高速缓存预取的数据。
[0037] 图2图解说明图1的系统100的阶层式高速缓存视图。处理环境200包含多个等级的处理,展示为不同层级。所使用的层级可能比这里图解说明的更多。处理环境200是多层级高速缓存系统。环境200的多层级高速缓存结构不同于传统的多层级高速缓存系统。具有动态VSA的多层级高速缓存具有随着高速缓存的层级向上穿越(而非向下)而增加的速度,而不是传统的多层级高速缓存情形,其中沿阶层的等级向下穿越,高速缓存的大小增加并且速度减小。
[0038] 因而,环境200相对于传统的多层级高速缓存系统大小和速度惯例偏离。在一个实施例中,高速缓存系统的最低层级是存储服务器SSD(固态驱动器)高速缓存层级240(SSD层级240),这是指存储服务器110上的SSD或闪存装置。下一个层级是存储服务器缓冲器高速缓存层级230(缓冲器高速缓存230),接着是动态高速缓存VSA 220。在一个实施例中,高速缓存层级240和高速缓存层级230两者都包含在系统100的高速缓存115中(分别作为L3和L2,其中层级220是L1)。虽然通常跨越客户端和工作负荷共享高速缓存层级240和高速缓存层级230两者,但是在一个实施例中,每一动态高速缓存VSA 220的实例专用于一个特定的客户端。最靠近客户端210的动态高速缓存VSA220的大小比缓冲器高速缓存230大许多,而SSD高速缓存220也大于缓冲器高速缓存230。
[0039] 就速度而言,动态高速缓存VSA 220比缓冲器高速缓存230快,因为存储服务器的位置跨越WAN,并且缓冲器高速缓存230比SSD高速缓存240快。动态高速缓存VSA220更靠近客户端210得多。
[0040] 图3是作为高速缓存等级的具有多个虚拟实例的虚拟化存储服务器或虚拟存储器具的实施例的框图。系统300包含动态高速缓存始发点310,其表示一个机箱或后端系统,动态高速缓存VSA为其充当高速缓存。产生动态高速缓存VSA可以被视为“给始发点卸载”,因为其它硬件上的高速缓存实例的虚拟存储服务器能力可以减少后端存储服务器上的负担。
[0041] 始发点310包含存储硬件,包含存储卷314,其可以是数据存储资源的一个或多个逻辑分组。在一个实施例中,始发点310是具有存储资源以及存储服务器(控制器)资源的刀片机箱。存储服务器312管理始发点310的存储资源。通过存储服务器312处理与存储在始发点310处的数据有关的请求。
[0042] 交换机320表示用以允许对存储服务器312的远程存取的一个或多个网络资源。如图解说明的,交换机320连接到虚拟环境330、350和360,这些虚拟环境是在硬件322上执行的虚拟化环境。
[0043] 虚拟环境330包含在超管理器332上执行的动态高速缓存VSA 334,其充当用于存储服务器312的高速缓存层级。超管理器332以及虚拟环境350和360的超管理器352和362分别包含虚拟交换机(Vswitch)和虚拟环境文件系统(VFS)。其它虚拟和/或实际环境也可以在硬件322上执行。虚拟交换机经由超管理器提供对用于连接到始发点310的物理资源的硬件交换资源和连接到动态高速缓存VSA 334的其它虚拟环境的存取。在一个实施例中,超管理器332、352和362全部都是相同超管理器,其中动态高速缓存VSA334和虚拟环境350和360是在其上执行的不同VM。所属领域的技术人员应理解,每一虚拟环境的应用程序和操作系统存取相应虚拟环境的虚拟交换机,就仿佛所述交换机是实际硬件一样。虚拟化控制器(超管理器)为虚拟交换机以及其它虚拟化物理资源管理虚拟资源向硬件资源的映射。
[0044] 在一个实施例中,虚拟环境330托管动态高速缓存VSA,并且虚拟环境350和360托管对客户端的存取。如图解说明的,环境350和360的配置方式是相同的,其中多个操作系统(OS)实例和应用程序实例连接到对应的超管理器(352和362)。配置不一定必须是相同的。在一个实施例中,虚拟环境350和360的每一操作系统表示一个单独的虚拟机(VM),并且可以存在在每一操作系统上执行的一个或多个应用程序。所述应用程序可以各自表示一个或多个客户端。每一虚拟环境350和360的虚拟交换机呈现始发点310的存储卷314的一个实例表示(分别是354和364)。
[0045] 在一个实施例中,应用程序是多个单独的线程。在一个实施例中,每一线程被视为一个工作负荷,或者一个线程被视为一个应用程序。应用程序是动态的,并且可以动态地打开和关闭,而且动态地改变其存取什么数据和存取多少数据。
[0046] 在一个实施例中,动态高速缓存VSA 334被实施为与在存储服务器312上执行的操作系统相同或类似的操作系统的实例。因而,存储服务器312原生地执行存储服务器OS,而存储服务器OS在超管理器332上虚拟地执行,超管理器332是从始发点310远程托管的。存储服务器312在存储卷314本地,而动态高速缓存VSA经由交换机320远程地存取存储卷314。存储资源340表示用于虚拟环境330、350和360的物理存储资源。在一个实施例中,存储资源340可以被视为硬件322的一部分。
[0047] 动态高速缓存VSA 334包含协议和相关联的驱动器和网络堆栈,以经由超管理器332的虚拟交换机进行通信。在一个实施例中,动态高速缓存VSA 334包含至少NRV和NFS作为所支持的协议。在一个实施例中,始发点310可以是交换结构附接式存储装置(FAS),并且经由NRV协议向动态高速缓存VSA 334导出存储卷。动态高速缓存VSA334可以接着经由NFS协议向虚拟环境350和360的客户端提供高速缓存的卷。
[0048] 动态高速缓存VSA 334还包含存储装置340的文件系统以及驱动器和管理资源。存储装置340和超管理器/主机(硬件322的一部分)的RAM 370的组合充当动态高速缓存VSA 334的高速缓存装置。因为VSA高速缓存层级是动态的,所以可以切掉来自超管理器的DAS 
340和RAM 370两者的空间,以便将VSA层级实施为动态资源。在一个实施例中,动态高速缓存VSA 334控制对于虚拟环境350和360的所有VM的所有存储装置存取。从存储卷314存取的数据被高速缓存在存储资源340中,并且分别通过虚拟环境350和360的虚拟交换机而向相应环境呈现为实例354和364。除了存储卷314的数据之外,每一VM还可以存储本地数据。
[0049] 如上文所提及,动态高速缓存VSA 334可以对不同工作负荷的动态行为作出响应,这些工作负荷是通过虚拟环境350和360的VM的应用程序直接或间接地表示。动态高速缓存VSA相对于多种工作负荷的动态行为可包含根据以下实例的操作。
[0050] 考虑其中动态高速缓存VSA 334的读取/写入比率较高的情形。当读取/写入比率较高时,动态高速缓存VSA的效用最高。许多读取总地来说意味着将使用高速缓存的数据,并且改善总数据存取处理量。随着读取对写入的比率的减小,动态高速缓存VSA的有效性也减小。
[0051] 如本文所描述,动态高速缓存VSA 334可以检测读取/写入比率,并且指示到始发点310的读取/写入比率的变化。因而,动态高速缓存VSA 334可以向源指示一个或多个特性。除了读取/写入比率之外,还可以监视并且向源指示例如工作负荷参数等特性。
[0052] 另外,如果高速缓存系统的下部层级(例如,存储服务器312上的缓冲器高速缓存或SSD)基于高速缓存策略(由每一高速缓存控制器存储在本地)检测到工作组的变化,那么其可以将检测到的变化传送到高速缓存的上部等级或层级(例如,传送到动态高速缓存VSA 334)。举例来说,缓冲器高速缓存可以指示动态高速缓存不应高速缓存那么多。
[0053] 假设对于另一实例,存储服务器312提供共享一个数据组的两个不同工作负荷,其中工作负荷1穿过动态高速缓存VSA 334,并且工作负荷2直接去往存储服务器312的缓冲器高速缓存(未图示)。在此情形中,动态高速缓存VSA 334在读取和读取情形中是有效的,其中通过读取存取控制这两个工作负荷。但是,在读取和写入情形中,即使工作负荷1具有高读取/写入比率,动态高速缓存VSA 334的有效性也可能降低。请注意,如果工作负荷1和工作负荷2共享相同数据组,并且工作负荷1具有高读取/写入比率而工作负荷2具有低很多的读取/写入比率,那么其将改变工作负荷1所存取的数据。因此,通过工作负荷1高速缓存并且通过工作负荷2改变的所有数据块都将在高速缓存中变得无效。
[0054] 因而,动态高速缓存VSA 334甚至不知道的工作负荷上的低读取/写入比率可能会对动态高速缓存的有效性造成负面影响。但是,存储服务器312的缓冲器高速缓存将知晓工作负荷2和其存取特性。因而,在一个实施例中,下部高速缓存层级(即,缓冲器高速缓存)指示较高高速缓存层级(VSA)减小其高速缓存的大小。因而,在一个实施例中,鉴于动态高速缓存VSA 334由于其它工作负荷的活动而间接地用处较小,缓冲器高速缓存可以指导所述动态高速缓存VSA较少进行高速缓存。
[0055] 另外,在一个实施例中,动态高速缓存可以检测应用程序的工作组的变化。如果动态高速缓存确定工作组中正发生变化,那么其可以指示从缓冲器高速缓存或其它下部高速缓存层级进行更多的提前读取。在一个实施例中,动态高速缓存VSA 334的高速缓存未中的预定速率可以指示工作组变化。
[0056] 图4是用于传送多层级高速缓存的层级当中的工作负荷特性变化的过程400的实施例的流程图。在一个实施例中,一系统(例如,系统100或系统300)将虚拟存储器具实例化为层级或高速缓存的层级,过程框402。所述实例化可以与系统管理员无关,例如所述系统按照需要将虚拟存储器具实例化。在一个实施例中,所述系统在没有来自系统管理员的输入的情况下基于检测到的业务负荷将VSA实例化。所述系统可以将VSA实例化以减少后端存储服务器上的负担。系统视需要委托VSA和解除对VSA的委托以便减少存储服务器上的负荷。
[0057] 在一个实施例中,所述系统存储高速缓存性能的一个或多个预先配置的阈值,其在实体化的VSA中加载和设置这些阈值,过程框404。在替代实施例中,系统基于VSA的性能配置阈值。在一个实施例中,VSA可以记录和监视性能以确定发生行为间断或变化的情况。VSA可以执行一个或多个算法以执行计算来确定阈值应在哪里。VSA可以接着设置阈值使其与系统的期待的或观察到的行为匹配。
[0058] VSA监视其性能的性能特性。高速缓存系统的其它层级同样监视其性能特性。在一个实施例中,高速缓存的不同层级监视不同参数,而在替代实施例中,所有高速缓存层级监视相同参数。作为整体,高速缓存在每一层级处监视性能特性,过程框406。通过监视,高速缓存在每一层级处确定性能特性是否指示应被传送到另一高速缓存层级的系统行为的变化,过程框408。
[0059] 如果层级确定不应传送变化,决策框410,那么每一层级继续监视性能,过程框406,并且确定是否有任何内容要向另一层级指示,过程框408。如果高速缓存的层级确定应传送变化,决策框410,那么所述层级根据用于向另一层级进行通信的通信协议向高速缓存的另一或不同层级指示所述变化,过程框412。接收层级响应于其它层级指示的变化来改变或更改其性能,过程框414。
[0060] 在一个实施例中,如本文所描述,多层级高速缓存系统的结构是动态的,其在动态高速缓存VSA中实施高速缓存系统的至少一个层级。多层级高速缓存系统使得高速缓存系统的等级或层级之间能够通信,这会减小高速缓存系统的层级当中的努力发生冗余的可能性。所述系统按照需要分配资源进行高速缓存。当高速缓存将使得性能改进时,高速缓存系统分配资源进行高速缓存。当高速缓存有效性降低时,系统可以解除对资源的拨备。因而,多层级高速缓存系统的下部层级和较高层级彼此通信以指示进行哪些模式和高速缓存决策,而不是使得每一高速缓存系统层级基于其本地情况关于如何执行高速缓存自己进行独立确定。
[0061] 虚拟化动态高速缓存的改善的通信和控制可以减少努力的冗余。层级当中关于工作负荷变化的通信可以在资源可用性与工作负荷需要之间取得平衡。在一个实施例中,动态高速缓存VSA的控制器或控制逻辑与存储服务器上的缓冲器高速缓存之间发生通信。
[0062] 本文所述的高速缓存结构包含高速缓存的至少一个层级,其中用于层级的控制被实施为虚拟实例。存储服务器功能性经由柔性高速缓存VSA或动态高速缓存VSA的虚拟化可以改善高速缓存系统中的资源利用率。高速缓存系统不仅可以按照需要动态地形成(实例化)或破坏具有存储服务器功能性的柔性高速缓存VSA实例,而且高速缓存系统在需要时可以动态地修改或改变实例。因而,本文所述的多层级高速缓存的高速缓存系统根据可用性和需要而动态地获得和释放资源。
[0063] 在一个实施例中,存储服务器包含多个高速缓存层级,举例来说,闪存或SSD层级,以及一个缓冲器高速缓存层级。动态高速缓存VSA提供位于存储服务器外部并且逻辑上在缓冲器高速缓存层级上方的另一高速缓存层级。本文所述的多层级高速缓存通信可以被称作多层级高速缓存通信协议。在一个实施例中,所述协议是从动态高速缓存VSA到存储服务器的缓冲器高速缓存和闪存或SSD高速缓存的端对端协议。
[0064] 经由协议的通信使得动态高速缓存VSA能够向存储服务器高速缓存层级传送工作负荷特性的变化。在一个实施例中,向存储服务器指示变化会触发存储服务器(举例来说)更改提前读取策略和/或更改存储服务器上的缓冲器高速缓存的大小。因而,如果数据存取请求的顺序-随机比率增加,那么缓冲器高速缓存层级可以计算提前读取大小的成比例增加并且发出I/O。如果缓冲器高速缓存层级遭受资源冲突,那么可以在闪存/SSD层级中高速缓存提前读取块。当工作负荷的数据存取到达速率增加时,缓冲器高速缓存层级可以进行类似决策。
[0065] 在一个实施例中,动态高速缓存VSA向存储服务器传送动态高速缓存VSA的大小变化以便影响闪存/SSD层级的高速缓存策略。举例来说,如果动态高速缓存VSA被完全破坏(解除拨备或解除委托),那么应当准备存储服务器的各个高速缓存层级(例如缓冲器高速缓存层级和闪存/SSD层级),以便承担备解除委托的动态高速缓存VSA的增加的负荷。在解除对动态高速缓存VSA的委托之前,动态高速缓存VSA应向存储服务器传播所有工作负荷特性。工作负荷特性信息可以辅助存储服务器上的反馈控制器估计高速缓存层级中的每一者的大小。
[0066] 在一个实施例中,此反馈控制器被配置成考虑到共享相同组的高速缓存(缓冲器高速缓存,SSD)的多个工作负荷。当多个工作负荷共享相同组的高速缓存时,一个工作负荷的操作可能会影响关于其它工作负荷的高速缓存性能。举例来说,如果一个工作负荷的写入繁多,而另一个工作负荷的读取繁多,那么在一个层级处具有大型高速缓存可能没有意义,鉴于高速缓存中存储的数据很有可能会变得无效。因而,即使读取繁多的工作负荷可能一般是一个层级处的大量高速缓存的良好候选,但是在不同工作负荷共享高速缓存资源的情况下,可能更有意义的做法是在某些情况下减小至少一个层级中的高速缓存大小。
[0067] 在一个实施例中,每当动态高速缓存VSA检测到工作组的变化时,其便向存储服务器传送所述变化。在一个实施例中,只是在变化高于阈值时才在传送所述变化的意义上“检测到”变化。在一个实施例中,阈值是基于一段时间内的高速缓存未中的数目。在一个实施例中,系统管理员用预先配置的阈值来设置高速缓存系统。或者,在一个实施例中,高速缓存系统通过高速缓存系统中的控制逻辑基于历史监视来动态地确定阈值。向存储服务器传送工作组的变化,使得缓冲器高速缓存层级能够恰当地调整数据块的提前读取。举例来说,即使顺序-随机比率与之前相同,也可以基于工作组变化的指示更积极地应用提前读取。
[0068] 在一个实施例中,仅在存储服务器内发生通信,并且不从动态高速缓存VSA向存储服务器发生通信。仅在存储服务器内发生通信的一个情形如下。如果对于存储服务器的读取请求是因为动态高速缓存VSA中的高速缓存未中而到来的,那么存储服务器的缓冲器高速缓存在向动态高速缓存VSA传送数据之后保留缓冲器就没有什么意义。这是因为,动态高速缓存VSA将满足对于所述数据块的所有将来读取存取,并且缓冲器高速缓存的拷贝将是冗余的。
[0069] 在一个实施例中,标记功能与跨越存储服务器内的高速缓存层级的通信一起使用。在此实施例中,动态高速缓存VSA具有动态高速缓存ID。使用标记功能性,可以给代表来自动态高速缓存VSA的协议请求对存储服务器(例如,D刀片)进行的所有数据存取请求标记上动态高速缓存ID。举例来说,如果动态高速缓存VSA给读取请求标记上动态高速缓存ID,那么一旦读取请求得到传送,缓冲器高速缓存层级就可以收回缓冲器。从缓冲器高速缓存层级收回可以包含将其完全收回或者请求SSD层级节省对其的使用。类似地,对于写入请求,在写入请求被写入到非易失性RAM(随机存取存储器)之后不久,缓冲器高速缓存层级可以收回缓冲器。此技术可以被称作自收回。
[0070] 将理解,不是所有存取特定存储装置的工作负荷都是通过动态高速缓存VSA存取,并且存储服务器可以支持许多动态高速缓存VSA。不在缓冲器高速缓存层级上存储冗余数据的一个益处是,高速缓存系统可以向直接来到存储服务器或通过其它动态高速缓存VSA间接来到存储服务器的其它工作负荷分配更多空间。因而,改善了存储器资源利用率。
[0071] 将理解,如本文所描述的动态高速缓存VSA不是存储服务器的缓冲器高速缓存的被压制高速缓存。因而,如上文所提及的自收回不同于传统的多层级协议。使用如上所述的自收回,当数据是冗余的时,缓冲器高速缓存层级根据自己的意愿收回数据。
[0072] 在一个实施例中,存储服务器经由WAN实施NAS(网络附接存储)。可以在SAN(存储装置区域网)情形中起作用的传统高速缓存协议不一定会跟NAS一起起作用,因为SAN与NAS之间有数据存取有差异。本文所述的增强的高速缓存协议允许动态高速缓存VSA与存储服务器之间的高速缓存通信,并且可以用于增强NAS或SAN实施方案。本文所述的通信也与跨越多个高速缓存层级的动态分区不同,这至少是因为在不同高速缓存层级处不需要任何明确分区。动态分区明确地分区并且接着使用统计回归来评估其影响。如本文所描述,每一层级可以简单地确定在层级处观察到哪些工作负荷特性,并且接着向其它层级传送那些观察结果。
[0073] 如上所述,控制器监视高速缓存环境中的变化,并且响应于变化,触发各个高速缓存层级处的高速缓存重新确定大小或重新分区。以下情形图解说明其中控制器将触发跨越高速缓存系统的多个层级的通信并且触发控制器的层级处的变化的情形的实施例。将理解,不是所有情形都同样适用于每一高速缓存层级,或者不同情形对于不同层级可能有一些不同。
[0074] 假设具有三个高速缓存层级L1-L3的配置,其中L1被实施为动态高速缓存VSA,并且L2和L3驻留在存储服务器上,其中L2是作为缓冲器高速缓存,并且L3是作为存储服务器上的SSD或闪存。以下情况展示了多层级高速缓存的层级之间的通信的实例。每一层级控制器包含一个本地高速缓存策略,指示其如何执行高速缓存,例如要对多少数据进行高速缓存,以及对哪些对象进行高速缓存。每一层级控制器还遵循关于要发送哪些信息、何时以及向哪些其它层级(或其它层级的控制器)发送的协议规则。因而,以下情况提供多层级高速缓存通信协议的实施方案的实例。
[0075] 在一个实施例中,对于情况1-4,L1将触发向L2(例如,存储服务器上的缓冲器高速缓存)的通信。在一个实施例中,对于情况5-7,L2将与L3(例如,存储服务器上的SSD)通信。在一个实施例中,对于情况8-10,L2将向L1通信或者L3将与L2通信。
[0076] 当工作负荷特性改变时,发生情况1。如果来自客户端的工作负荷的读取-写入比率降低到阈值以下,那么,鉴于工作负荷的写入变得密集,动态高速缓存VSA将不再可以使用。类似地,如果I/O到达速率降低,那么可能不需要动态高速缓存VSA。在这些工作负荷特性变化中的任一者的情况下,高速缓存系统可以确定解除对动态高速缓存VSA的委托。因而,L1控制器向L2通信以指示所述变化。一旦L2和/或L3控制器改变其高速缓存策略以吸收工作负荷变化,L2就可以告知L1所述变化,并且解除对L1高速缓存的委托。如果到达速率已经下降,那么L1的控制器应告知L2:在L1被解除委托时,L2不需要增加其自身的高速缓存大小。
[0077] 情况1的另一实例是如果顺序-随机比率已经增加,并且在L1中不能容纳属于顺序存取的整个数据集。在此情况下,L1可以告知L2增加其分区大小以便从主存储装置预取和存储块。如果L2不能容纳整个数据集,那么其可以类似地发送通信,请求L3增加其用于工作负荷的分区大小,以便使得L3预取数据。
[0078] 当工作组大小增加或减小时,发生情况2。如果L1处的控制器确定工作组大小已经增加,那么其可以增加其等级处的高速缓存大小,假设可以在超管理器处获得此类资源。如果在L1处不能获得所述资源,那么情况4如下文所描述适用。控制器可以确定工作组大小已经改变,方法是通过观察随着高速缓存大小和工作负荷特性的增加对高速缓存命中率的改善。
[0079] 当工作组已经改变时发生情况3。如果L1处的未中率开始增加和/或工作负荷特性已经改变,那么L1的控制器可以确定工作组已经改变。在此情形中,L1控制器检索工作组大小和工作负荷特性并且向L2传送所述信息。向L2的通信提示L2控制器执行提前读取,并且估计其自身的等级处的特定工作负荷的最优分区大小。依据L2处的资源可用性,控制器将告知L3其是否需要自身重新分区。
[0080] 当资源可用性不支持L1处的高速缓存大小的增加时,发生情况4。如果由于超管理器上的HDD或SSD空间不足所以L1的控制器无法再增加L1高速缓存大小,那么控制器向L2传送此信息。L1控制器可以通过查看估计的工作组大小来确定其层级处的资源短缺。如果所述估计大于可用L1高速缓存大小,那么存在资源短缺,并且L1不能完全吸收所述工作负荷的工作组。在这种情况下,L1的控制器告知L2和/或L3(或L2可以接着告知L3)工作负荷特性,以及还需要多少高速缓存大小。基于这个信息,其它层级中的一者的控制器可以决定重新分区并且将其相应高速缓存预热。
[0081] 当L1层级进行确定大小请求时,发生情况5。如果L1的控制器向L2的控制器通信,并且不能容纳工作负荷的数据集,那么L2的控制器可以接着向L3传送工作负荷信息和高速缓存大小请求。因而,一个高速缓存层级的控制器可以代表其上方的层级向其下方的层级通信。举例来说,在情况1和3中,如果预期大负荷的请求来到存储服务器,并且所述负荷不能完全存储在存储服务器处的缓冲器高速缓存中,那么L3的控制器基于L1传送的工作负荷模式确定L3的大小以便预取数据来帮助改善性能。
[0082] 当任何以上情况产生直接在L2上运行的工作负荷而不需要L1高速缓存层级时,发生情况6。L2控制器以与如上所述的L1控制器类似的方式表现,区别在于其不能被解除委托。另外,在一个实施例中,可以跨越多个工作负荷共享L2,并且不像L1高速缓存层级那样可以由一个工作负荷独占L2。因而,根据RAM的可用性和来自其它工作负荷的要求,L2的控制器可以请求L3增加其用于一个工作负荷的分区大小。在一个实施例中,对于写入繁多的负荷来说,L2的表现比L1更好。因而,虽然L1的控制器可以对于读取密集的负荷仅仅请求L2中的分区大小增加,但是L2的控制器可以对于读取或写入高速缓存请求来自L3的分区大小的增加。
[0083] 当控制器检测到工作负荷的添加或删除时,发生情况7。如果在存储服务器上直接供应新工作负荷,那么L2层级的控制器将必须重新确定在L2上共享的不同工作负荷的大小或者减小其缓冲器高速缓存,以便符合新工作负荷的要求。在此情况下,L2的控制器可以向L3指示变化,这可以提示L3的控制器增加用于一个或多个工作负荷(包含新添加的一个)的高速缓存。类似地,如果工作负荷被删除或者不再在L2上直接运行,那么其它工作负荷可以获得较大份额的L2。L2的控制器可以指示向L3删除工作负荷,这可以触发L3的控制器减小用于获得更大份额的L2高速缓存的工作负荷的L3分区大小。
[0084] 在工作负荷特性和资源可用性致使L2上的工作负荷当中发生竞争时,出现情况8。如果L2具有例如在其上直接运行的10个工作负荷-全部共享L2高速缓存,那么工作负荷将明显地竞争获得L2的资源。如果一个或多个工作负荷展现出高读取-写入比率(并且因而将受益于专用L2高速缓存),那么L2控制器可以请求接近用于所述一个或多个工作负荷的客户端的L1高速缓存的动态实例化。在一个实施例中,L2控制器将需要与超管理器通信以便将L1高速缓存实例化。只有在超管理器处有足够资源可用于形成L1层级时,L2控制器才可以成功地请求L1高速缓存。如果形成L1层级,那么L2处的工作负荷的负荷减小,并且L2的控制器将向其它竞争性工作负荷分配资源。在一个实施例中,如果L2和L3层级具有充足资源(通过其控制器确定)从L1上的工作负荷吸收I/O,那么L2控制器可以为所述工作负荷解除对L1层级的委托。
[0085] 在数据集之间的重叠增加的情况下,发生情况9。考虑工作负荷1和工作负荷2共享存储服务器上的相同数据集。假设工作负荷1是读取密集的工作负荷,并且因此通过L1层级存取数据,但是工作负荷2是写入密集的工作负荷并且直接向L2层级写入数据。在这种情况下,工作负荷1的L1高速缓存非常频繁地变得无效,并且因此在高速缓存系统中来自L1的益处很少或没有。因而,L2控制器将能够确定L1层级提供极少或没有益处,并且可以减小用于工作负荷1的L1高速缓存的大小或者完全解除对其的委托。
[0086] 在数据集之间的重叠减少的情况下发生情况10。情况10与情况9相反。在这种情况下,如果L2处的资源可用性较低,那么形成新L1层级或者增加现存的L1层级的大小以便降低L2处的争用是有意义的。
[0087] 在一个实施例中,多层级高速缓存通信协议包含多种API(应用程序编程接口)。本文中的描述可以适用于原生被配置成具有API或其等效功能性的协议,或者适用于经过修改而具有API或其等效功能性的协议。任何高速缓存层级都可以使用API。在其它可能存在的API当中,在一个实施例中包含以下各项。
[0088] 用以通知动态高速缓存VSA的大小的变化的API调用可以具有SIZE_CHANGE_NOTIFY形式(IN long current_cache_sz,IN prev_cache_sz,IN long wss)。
[0089] 每当特定高速缓存层级处的控制器重新确定其自身的高速缓存大小时,并且如果重新确定大小的量高于阈值(静态或动态),那么控制器就可以向不同高速缓存层级指示所述信息。这里,current_cache_sz和prev_cache_sz是正在调用API的本高速缓存层级的当前和先前高速缓存大小。先前高速缓存大小是最后传送的一个大小。API还传送本高速缓存层级估计的wss。这个API可以用于情况2、4、5和7,这些是指上述情况。
[0090] 用以通知工作负荷的变化的API调用可以采用WORKLOAD_CHANGE_NOTIFY的形式(IN struct workload_characteristic*,IN long wss)。每当控制器检测到工作负荷特性或工作组大小(wss)的变化时,其便调用这个API向另一高速缓存层级传送所述信息。这个API可以用于情况1、2、5、6和8。
[0091] 用以通知工作组的变化的API调用可以采用WORKINGSET_CHANGE_NOTIFY的形式(IN struct workload_characteristic*,IN long wss)。每当控制器感测到工作组已经改变时,就使用这个API。其用于情况3,并且可以用于情况6。
[0092] 用以设置高速缓存大小的API调用可以采用SET_CACHE_SIZE的形式(IN cache_size,IN struct workload_characteristic*,IN long wss)。控制器使用这个API来直接设置较高或较低高速缓存层级的大小。举例来说,L2可以使用这个API来使L1层级实例化或解除委托,如在情况7、8、9和10中。
[0093] 将理解,上述事件的任何组合可以同时发生。在此情况下,不同事件可以独立传送或被分批到一个通知中。
[0094] 上述API是示范性的,并且在系统中可以使用类似和/或额外的API。所描述的API形成系统中的通信的一个部分-动态高速缓存VSA与存储服务器之间的通信。多层级高速缓存通信的另一部分需要来自存储服务器的支持以便向缓冲器高速缓存层级和闪存/SSD层级传送动态高速缓存VSA信息。在一个实施例中,存储服务器包含用于网络通信的N刀片和用于数据存取的D刀片。在一个实施例中,在存储服务器处,N刀片维持动态高速缓存VSA的映射(例如因特网协议映射)、动态高速缓存ID和动态高速缓存属性。
[0095] 在一个实施例中,每一动态高速缓存VSA与唯一ID-动态高速缓存ID相关联,所述ID是配合动态高速缓存VSA的实体化而产生的。因而,ID是作为产生动态高速缓存VSA实例的一部分产生的,或者是在创建了实例之后创建的。映射可包含动态高速缓存VSA属性,例如工作负荷特性、动态高速缓存大小和工作组变化,如通过上述控制调用所指示。在一个实施例中,每当代表从动态高速缓存VSA到达的请求向存储服务器(例如,D刀片)进行任何I/O(数据存取)请求时,其包含具有对应动态高速缓存ID的标记。缓冲器高速缓存层级查看对应于动态高速缓存ID的属性以便进行适当的高速缓存和提前读取决策。
[0096] 如本文所描述,高速缓存系统的层级之间的通信可以改善其中托管动态高速缓存VSA的系统的利用率。另外,系统根据通过动态高速缓存VSA和存储服务器存取数据的应用程序的动态特性进行动态地调适,这又改善了应用程序的总性能。多层级协议加快后端存储服务器对外部高速缓存层级上的变化的响应时间。因而,所述系统根据应用程序的行为的变化更快速许多地进行调适。
[0097] 数据中心中的数据存取通常是高度动态的。如上所述,多层级高速缓存系统可以通过迅速改变高速缓存的行为对高度动态的环境中的变化作出响应。因而,实现更好的资源利用率。除了具有动态高速缓存变化之外,在VM中形成动态高速缓存的能力还允许另一层的可调适性,这是因为虚拟高速缓存元件(VSA)可以被动态地分配和解除分配,这样比具有用于执行高速缓存的专用硬件资源更好地利用硬件资源。
[0098] 图5是在具有虚拟存储器具的多层级高速缓存中可以使用的虚拟存储服务器的实施例的框图。系统500是虚拟环境(例如,图3的环境330、350、360)的表示。物理层550包含经由超管理器540执行虚拟机510的硬件资源。超管理器540可以实施为任何虚拟化引擎,并且包含虚拟交换机542和虚拟文件系统544。虚拟交换机542从虚拟装置层530向物理层550的硬件资源映射网络和通信资源。类似地,虚拟文件系统544表示映射物理层550的联网(共享)存储资源和本地(非共享)存储资源的一个或多个文件系统资源。
[0099] 物理层550描绘为具有可以整个或部分存在的多个组件,以及也可以存在的额外组件或子组件。物理层550包含一个或多个处理器或处理资源572,其执行指令并且可以执行如本文所描述的多种操作。处理器572可包含任何类型的微处理器、中央处理单元(CPU)、处理核心(包含多核心装置)或其它处理装置。
[0100] 存储器574表示用于系统500的主存储器,并且提供用于有待通过处理器572执行的代码(例如,软件例程或指令系列、命令、操作、程序、数据)的临时存储。存储器574可包含只读存储器(ROM)、快闪存储器、一个或多个种类的随机存取存储器(RAM)或类似装置,或者此类装置的组合。
[0101] 物理层550的各个组件可以通过一个或多个总线576耦合。总线576是表示任何一个或多个分开的物理总线、通信管线和/或点到点连接的抽象概念,其是通过适当的桥接器、适配器和/或控制器连接的。因此,总线576(举例来说)可包含系统总线、外围组件互连(PCI)总线、超级传输或工业标准结构(ISA)总线、小型计算机系统接口(SCSI)总线、通用串行总线(USB)或电气电子工程师学会(IEEE)标准1394总线(通常被称作“火线”)中的一者或一者以上。
[0102] 物理层550包含一个或多个网络接口(NIC)552,其表示使得物理层550能够经由一个或多个网络与远程装置连接和通信的硬件和软件(例如,驱动器)。在一个实施例中,物理层550包含分离为特定虚拟环境本地的存储资源,以及其它共享数据(例如,用于动态高速缓存VSA的共享或高速缓存的数据)。举例来说,存储资源560表示在多个虚拟环境当中共享的高速缓存的数据,而存储装置556表示本地存储装置。
[0103] 存储装置556包含用于实施写入高速缓存554的资源,所述写入高速缓存通过虚拟文件系统544映射到虚拟机510以便存储针对各个客户端写入的数据。存储装置556可以分离成多个虚拟磁盘(VD)556-1到556-M。磁盘的虚拟化只是为了存储装置的管理和组织,并且可以用此项技术中已知的任何方式执行。
[0104] 存储装置560包含用于实施虚拟高速缓存层的存储资源,其中资源分离为虚拟磁盘560-1到560-N。通常N将是比M大很多的整数。控制器562提供对存储装置的物理层级管理。根据期望的实施方案,对于存储装置560的控制或管理的选项大幅变化。举例来说,控制器562可以实施为JBOD(磁盘簇)控制器、RAID(独立/廉价磁盘/驱动器冗余阵列)控制器或其它控制器。
[0105] 因而,将理解存储装置560除了是虚拟资源之外,还可以用抽象层来管理以便允许逻辑磁盘组织。在一个实施例中,在系统500中实施的抽象定则与数据始发点处的后端存储服务器(例如,图3中的源310的存储服务器312)使用的抽象相同。但是,系统500处的抽象定则可以不同于作为高速缓存的数据的源的后端存储服务器。
[0106] 虚拟装置层530表示超管理器540映射的虚拟装置。在一个实施例中,虚拟装置530包含网络接口531、CPU 532、RAM 533、BIOS(基本输入/输出系统)534、UART(通用异步接收器-发射器)535、网络存储装置536和本地存储装置537。网络接口531使得虚拟装置510能够经由网络接口552跨越网络存取其它装置。CPU 532表示虚拟机510可获得的处理资源,其由专用和/或共享处理资源572构成。
[0107] RAM 533表示向虚拟机510分配的存储器资源,并且包含存储器574的共享和/或专用资源。BIOS 534提供资源以便使所分配的硬件资源上的软件和虚拟系统初始化。UART 535表示直接连接资源,而非点到点或网络连接资源。网络存储装置536使得虚拟机510能够经由虚拟文件系统544和控制器562存取存储装置560。举例来说,本地存储装置537可以提供持久写入高速缓存554用于在系统500处存储数据。
[0108] 在虚拟装置层530处描述的组件中的每一者在物理硬件层550处具有物理补体。超管理器540将虚拟装置层530的资源映射到其在物理硬件层550中的补体。虚拟装置层530被图解说明为包含在虚拟机510中,但将理解所述资源实际上被包含。虚拟机510包含虚拟存储器具(VSA)520(其也可以被称作虚拟存储适配器),其可以存取作为可用计算资源的虚拟装置层530的资源。
[0109] VSA 520包含管理和控制虚拟资源的软件和驱动器。VSA 520向在虚拟机510上执行的应用程序或工作负荷呈现虚拟资源。在一个实施例中,VSA 520包含驱动器521、网络堆栈522、协议523、OS 524、RAID 525、存储装置控制器526、网络存储装置驱动器527和虚拟非易失性RAM(V-NVRAM)528。
[0110] 驱动器521提供驱动器资源以经由网络接口驱动通信。网络堆栈522实施用于协议523的一个或多个通信堆栈。协议523包含虚拟机510用来与联网装置通信的一个或多个协议。操作系统524控制虚拟机510中的操作流。RAID 525表示用于管理存储装置的任何类型的存储抽象,其中各个RAID版本中的一者是常见类型。许多抽象类型是可能的。举例来说,存储装置控制器526可包含用于存取存储资源的存储装置堆栈和存储装置驱动器。网络存储装置驱动器527提供用于存取存储装置区域网(SAN)、网络区域存储装置(NAS)或其它联网存储装置的一种类型的驱动器。虚拟非易失性RAM 528表示用于虚拟机510的本地存储装置的驱动器。
[0111] 图6A展示其中可以实施具有虚拟存储器具的多层级高速缓存的网络存储系统600。存储服务器610(存储服务器610A、610B)各自管理多个存储单元650(存储装置650A、
650B),其包含大容量存储装置。这些存储服务器通过网络630向一个或多个客户端602提供数据存储服务。举例来说,网络630可以是局域网(LAN)、广域网(WAN)、城域网(MAN)、例如因特网等全局网、光纤信道交换结构或此类互连件的任何组合。举例来说,客户端602中的每一者可以是常规个人计算机(PC)、服务器类计算机、工作站、手持式计算或通信装置或其它专用或通用计算机。
[0112] 数据在存储单元650中的存储是通过存储服务器610管理的,所述存储服务器从客户端602接收各个读取和写入请求并且对其作出响应,这些请求是针对存储在存储单元650中或有待存储在其中的数据。存储单元650构成大容量存储装置,其举例来说可包含快闪存储器、磁盘或光盘或磁带驱动器,图解说明为磁盘652(652A,652B)。存储装置652可以进一步组织成实施廉价磁盘/装置冗余阵列(RAID)方案的阵列(未图解说明),借此存储服务器610使用此项技术中已知的一个或多个RAID协议来存取存储单元650。
[0113] 存储服务器610可以提供例如用于网络附接存储(NAS)环境的文件级服务、例如用于存储区域网(SAN)环境的块级服务、能够提供文件级服务和块级服务两者的服务或能够提供其它数据存取服务的任何其它服务。虽然存储服务器610每一者在图6A中均被图解说明为单个单元,但是在其它实施例中,存储服务器可以构成单独的网络元件或模块(“N模块”)和磁盘元件或模块(“D模块”)。在一个实施例中,D模块包含用于服务于客户端请求的存储装置存取组件。相比之下,N模块包含使得客户端能够存取存储装置存取组件(例如D模块)的功能性,并且N模块可包含协议组件,例如通用因特网文件系统(CIFS)、网络文件系统(NFS)或因特网协议(IP)模块,用于促进此连接性。下文相对于图6B进一步描述包括D模块和N模块的分布式架构环境的细节,并且下文相对于图8进一步描述D模块和N模块的实施例。
[0114] 在一个实施例中,存储服务器610被称作网络存储子系统。网络存储子系统提供用于特定应用或用途的联网存储服务,并且可以用跨越多个存储服务器和/或存储单元而提供的联网资源集合来实施。
[0115] 在图6A的实施例中,存储服务器(例如,存储服务器610A)中的一者充当对客户端602的初级数据存储服务提供者。使用组织成一个或多个存储对象的磁盘652A服务于来自客户端602的数据存储请求。二级存储服务器(例如,存储服务器610B)以与初级存储服务器的镜射关系发挥备用作用,从初级存储服务器复制存储对象到二级存储服务器的磁盘(例如,磁盘650B)上组织的存储对象。在操作中,直到初级存储对象中的数据变得不可存取(例如在初级存储服务器发生事故的情况下,此事件被视为初级存储服务器处的故障)时二级存储服务器才服务于来自客户端602的请求。在初级存储服务器处发生故障后,使用在二级存储服务器处复制的数据(即,二级存储对象)服务于来自客户端602的既定对于初级存储对象的请求。
[0116] 应了解,在其它实施例中,网络存储系统600可包含两个以上存储服务器。在这些情况下,保护关系可以在系统600中的各个存储服务器之间发挥作用,以使得来自存储服务器610A的一个或多个初级存储对象可以被复制到除存储服务器610B外的存储服务器(这个图中未图示)。二级存储对象可以进一步实施与其它存储对象的保护关系,以使得二级存储对象被复制(例如,复制到三级存储对象)以便针对二级存储对象的故障提供保护。因此,对存储服务器610和初级存储对象与二级存储对象之间的单层级保护关系的描述应被理解为只是说明性的。
[0117] 在一个实施例中,网络存储系统600包含多层级高速缓存(MTC)692(692A,692B)。多层级高速缓存被实施成具有在存储服务器处的一个或多个高速缓存元件,和在客户端侧处的跨越网络的一个或多个元件。因而,MTC 692A和MTC 692B分别被图解说明为在存储服务器610A与客户端602之间和在存储服务器610B与客户端602之间。
[0118] 图6B图解说明在替代实施例中其中可以实施具有虚拟存储器具的多层级高速缓存的网络存储系统的分布式或群集架构。系统620可包含实施为节点610(节点610A,610B)的存储服务器,所述节点各自被配置成提供对存储装置652的存取。在图6B中,节点610通过群集交换结构640互连,所述群集交换结构可以体现为以太网交换机。
[0119] 节点610可以作为多个功能组件操作,所述多个功能组件协作以提供系统620的分布式架构。为此,每一节点610可以被组织为网络元件或模块(N模块622A,622B)、磁盘元件或模块(D模块626A,626B),以及管理元件或模块(M主机624A,624B)。在一个实施例中,每一模块包含用于执行相应模块操作的处理器和存储器。举例来说,N模块622可包含使得节点610能够经由网络630连接到客户端602的功能性,并且可包含协议组件,例如媒体存取层、因特网协议(IP)层、传输控制协议(TCP)层、用户数据报协议(UDP)层和此项技术中已知的其它协议。
[0120] 相比之下,D模块626可以经由群集交换结构640连接到一个或多个存储装置652,并且可以操作以便服务于装置650上的存取请求。在一个实施例中,D模块626包含存储装置存取组件,例如支持多协议数据存取(例如,通用因特网文件系统协议、网络文件系统协议和超文本传送协议)的存储抽象层、实施存储协议(例如,RAID协议)的存储层和实施实施用于支持存储装置存取操作而执行操作的存储装置协议(例如,小型计算机系统接口协议)的驱动器层。在图6B中展示的实施例中,D模块的存储抽象层(例如,文件系统)将装置650的物理存储装置划分成存储对象。节点610(例如,经由N模块622)接收到的请求因而可以包含存储对象识别符,用来指示在其上执行请求的存储对象。
[0121] M主机624也在节点610中操作,其通过支持(举例来说)跨越系统620的分布式存储系统映像执行操作而提供用于节点610的群集服务。M主机624提供群集服务是通过管理例如RDB 628(RDB 628A,RDB 628B)等数据结构,所述数据结构含有N模块622用来确定哪个D模块626“拥有”(服务于)每一存储对象的信息。M主机624可以使用常规协议有规律地更新跨越相应节点610的RDB 628的各个实例,所述常规协议在M主机中的每一者之间操作(例如,跨越网络630)以便使其彼此同步。可以接着将N模块622接收到的客户端请求路由到适当的D模块626,用于服务于提供分布式存储系统映像。
[0122] 在一个实施例中,节点610A包含MTC 692A-1,并且节点610B包含MTC 692B-1。MTC 692A-1和MTC 692B-1图解说明多层级高速缓存的元件,这些元件包含在节点610A和610B处。所述元件是多层级高速缓存的一个或多个层级。通过对应或相关联的控制器来管理每一高速缓存层级。MTC 692A-2展示在客户端侧处,并且是多层级高速缓存的包含MTC 692A-
1的另一层级。客户端602处可以存在一个或多个高速缓存层级,所述高速缓存层级与节点处的层级通信以便指示工作负荷的变化,工作负荷的变化又会改变高速缓存的操作。客户端602处的MTC 692B-2用虚线图解说明,以表示层级可以动态地实体化或分配并且动态地解除分配这个事实。
[0123] 应指出的是,虽然图6B展示相等数目的N和D模块构成说明性系统中的节点,但是根据各种实施例可以有不同数目的N和D模块构成节点。举例来说,可能有节点610A的不反映节点610B的N模块与D模块之间的一一对应的数目个N模块和D模块。因此,对包括每一节点的一个N模块和一个D模块的节点的描述应只被理解为说明性的。
[0124] 图7是存储服务器(例如图6A的存储服务器610A和610B)的一个实施例的框图,其体现为通用或专用计算机700,包含处理器702、存储器710、网络适配器720、用户控制台712和存储装置适配器740,这些元件通过系统总线750(例如常规外围组件互连(PCI)总线)互连。
[0125] 存储器710包含可以通过处理器702、网络适配器720和存储装置适配器740寻址以用于存储与具有虚拟存储器具的多层级高速缓存相关联的处理器可执行指令和数据结构的存储位置。存储装置操作系统714(其一些部分通常驻留在存储器710中并且通过处理器702执行)在功能上组织存储服务器,方法是通过调用支持存储服务器提供的存储服务的操作。所属领域的技术人员将容易理解,其它处理装置可以用于执行指令,并且其它存储器装置(包含各个计算机可读媒体)可以用于存储关于本文所述的发明性技术的程序指令。还将容易理解,处理器702的功能性和可执行软件中的一些或所有可以通过硬件实施,例如配置为可编程逻辑阵列、ASIC等等的集成电流。
[0126] 网络适配器720包括一个或多个端口,用于经由点到点链路或网络将存储服务器耦合到一个或多个客户端。因而,网络适配器720包含经由网络将存储服务器耦合到一个或多个客户端所需要的机械、电和信令电路。每一客户端可以经由网络与存储服务器通信,方法是通过根据预定义的协议(例如TCP/IP)交换离散数据帧或包。
[0127] 存储装置适配器740包含具有输入/输出(I/O)接口电路的多个端口,用于经由I/O互连布置(例如常规高性能FC或SAS链接拓扑)将存储装置(例如,磁盘)耦合到总线750。存储装置适配器740通常包含装置控制器(未图解说明),其包括用于根据从存储装置操作系统714接收到的读取和写入命令控制存储单元的总操作的处理器和存储器。如本文所使用,装置控制器响应于写入命令写入的数据被称作“写入数据”,而装置控制器响应于读取命令读取的数据被称作“读取数据”。
[0128] 用户控制台712使得管理员能够与存储服务器介接,以便使用命令行接口(CLI)或图形用户接口(GUI)调用操作和向存储服务器提供输入。在一个实施例中,用户控制台712是使用监视器和键盘实施的。
[0129] 在一个实施例中,计算装置700包含高速缓存层级760。高速缓存层级760包含高速缓存元件和用于管理高速缓存层级的相关联的控制器。计算装置700中可以包含多个高速缓存层级,所述计算装置在存储器710或计算装置700上的专用存储元件中实施。如上所述,高速缓存层级760的控制器与客户端装置处的高速缓存层级上的控制器通信。
[0130] 当实施为群集(例如图6B的群集620)的节点时,存储服务器进一步包含群集存取适配器730(用幻线展示),其具有一个或多个端口用于将所述节点耦合到群集中的其它节点。在一个实施例中,以太网用作群集协议和互连媒体,但所属领域的技术人员将明白,在群集架构内可以利用其它类型的协议和互连件。
[0131] 图8是存储装置操作系统(例如图7的存储装置操作系统714)的框图,其实施具有虚拟存储器具的多层级高速缓存的实施例。存储装置操作系统包括一系列软件层,所述软件层通过处理器(例如图7的处理器702)执行,并且被组织以形成集成式网络协议堆栈或更一般化地形成多协议引擎825,其提供数据路径供客户端使用块和文件存取协议存取在存储服务器上存储的信息。
[0132] 多协议引擎825包含网络驱动器(例如,千兆以太网驱动器)的媒体存取层812,其与网络协议层(例如IP层814和其支持传输机构、TCP层816和用户数据报协议(UDP)层815)介接。文件系统协议层提供多协议文件存取,并且为此包含对于直接存取文件系统(DAFS)协议818、NFS协议820、CIFS协议822和超文本传送协议(HTTP)协议824的支持。VI层826实施VI架构以便提供直接DAFS协议818所以必需的存取传输(DAT)能力,例如RDMA。iSCSI驱动器层828提供经由TCP/IP网络协议层的块协议存取,而FC驱动器层830从存储服务器接收块存取请求和响应并且向存储服务器发射块存取请求和响应。在某些情况下,以太网光纤信道(FCoE)层(未图示)也可以在多协议引擎825中操作,以便从存储服务器接收请求和响应以及向存储服务器发射请求和响应。FC和iSCSI驱动器向所述块提供相应的FC和iSCSI特定的存取控制,并且,在存取存储服务器上的块时管理向iSCSI或FCP或者向iSCSI和FCP两者的lun的导出。
[0133] 在一个实施例中,多协议引擎825包含多层级高速缓存(MTC)协议823,多层级高速缓存的层级使用所述协议彼此通信(经由其相应控制器)。MTC协议823可以暴露为可以与多种协议中的任一种一起使用的一组API,并且因而展示为覆盖各个协议。MTC协议823包含管理何时高速缓存层级控制器将向另一高速缓存层级控制器传送以及高速缓存层级控制器将向另一高速缓存层级控制器传送什么内容的规则或标准。如上所述,层级之间的通信影响多层级高速缓存的操作。
[0134] 存储装置操作系统还包含一系列软件层,其组织以形成存储服务器865,所述存储服务器提供数据路径供存取在存储装置上存储的信息。除了存储装置操作系统存取的支持存储服务器操作的例如程序应用数据或其它系统数据的数据之外,信息还可包含从客户端接收到的数据。优选地,客户端数据可以组织成一个或多个逻辑存储对象(例如,卷),其包括协作以限定总逻辑布置的存储装置的集合。在一个实施例中,逻辑布置可以涉及逻辑卷块编号(vbn)空间,其中每一卷与唯一vbn相关联。
[0135] 文件系统860通过与一个或多个可视化模块(被图解说明为SCSI目标模块835)的交互来实施存储装置操作系统的可视化系统。SCSI目标模块835总地来说安置在驱动器828、830与文件系统860之间,以便提供块(lun)空间与文件系统空间之间的翻译层,其中lun被表示为块。在一个实施例中,文件系统860实施WAFL(写入任何位置文件配置)文件系统,其具有基于块的磁盘上格式格式表示,所述WAFL文件系统使用例如4千字节(KB)块并且使用例如索引节点(“inode”)等数据结构来识别文件和文件属性(例如创建时间、存取准许、大小和块位置)。文件系统860使用文件来存储描述其文件系统的布局的元数据(包含inode文件),其直接或间接地参考(指向)文件的基础数据块。
[0136] 操作上,来自客户端的请求被作为包经由网络转发,并且被转发到存储服务器上,在存储服务器上,所述请求在网络适配器处被接收。例如层812或层830等网络驱动器处理所述包,并且(如果适当)将所述包传递到网络协议和文件存取层以便进行额外处理,然后转发到文件系统860。此处,如果所请求的数据不驻留“在核心中”(即,在存储器710中),那么文件系统860产生操作以从磁盘加载(检索)所请求的数据。如果所述信息不在存储器中,那么文件系统860存取inode文件以便检索逻辑vbn,并且将包含逻辑vbn的消息结构传递到RAID系统880。此处,逻辑vbn被映射到磁盘识别符和装置块编号(磁盘,dbn),并且被发送到磁盘驱动器系统890的适当驱动器。磁盘驱动器从指定磁盘存取dbn,并且将所请求的数据块加载在存储器中以供存储服务器处理。在完成请求后,节点(和操作系统800)经由网络向客户端传回答复。
[0137] 应注意,可以替代地在硬件中实施通过上述存储装置操作系统层的软件“路径”,所述路径是执行对于在适于本发明的传授内容的存储服务器处接收到的客户端请求的数据存储存取所需的。也就是说,在本发明的替代实施例中,存储装置存取请求数据路径可以实施为在现场可编程门阵列(FPGA)或专用集成电路(ASIC)内体现的逻辑电路。这种类型的硬件实施例增加了存储服务器响应于客户端发布的请求而提供的存储服务的性能。此外,在本发明的另一替代实施例中,适配器720、740的处理元件可经配置以分别从处理器702卸载一些或所有包处理和存储装置存取操作,由此提高存储服务器提供的存储服务的性能。明确地预期本文所述的各个过程、架构和程序可以在硬件、固件或软件中实施。
[0138] 当在群集中实施时,存储装置操作系统的数据存取组件可以体现为用于存取在磁盘上存储的数据的D模块850。相比之下,多协议引擎825可以体现为N模块810,以便相对于经由网络发布传入存取的客户端执行协议端接,并且将存取请求重定向到群集中的任何其它N模块。群集服务系统836可以进一步实施M主机(例如,M主机801)以便提供群集服务,用于产生信息共享操作以便为所述群集呈现分布式文件系统映像。举例来说,媒体存取层812可以在节点的各个群集服务系统之间发送和接收信息包,以便使所述节点中的每一者中的复制的数据库同步。
[0139] 此外,群集交换结构(CF)接口模块840(CF接口模块840A,840B)可以便于使用CF协议870在N模块810与D模块850之间进行群集内通信。举例来说,D模块850可以暴露N模块810(或未图示的另一D模块)向其发布调用的CF应用程序编程接口(API)。为此,CF接口模块840可以组织为CF编码器/解码器,其使用本地程序调用(LPC)和远程程序调用(RPC)分别在驻留在相同节点和远端节点上的D模块之间传送文件系统命令。
[0140] 如本文所使用,术语“存储装置操作系统”总地来说是指在计算机上可操作以执行管理数据存取的存储功能并且可以实施通用操作系统的数据存取语义的计算机可执行码。存储装置操作系统也可以实施为微核(这是经由通用操作系统操作的应用程序)或实施为具有可配置功能性的通用操作系统(其经配置以用于如本文所描述的存储应用程序)。
[0141] 如本文中所图解说明的流程图提供各种过程动作的序列的实例。尽管是用特定顺序或次序来展示,但是除非另有指定,否则所述动作的次序可修改。因而,所图解说明的实施例应仅被理解为实例,并且所述过程可用不同次序执行,并且某些动作可并行执行。另外,在各种实施例中,一个或多个动作可被省略;因而,并非每个实施例中都需要所有动作。其它过程流程也是可能的。
[0142] 本文中描述各个操作或功能,其可以被描述或被定义为软件代码、指令、配置和/或数据。所述内容可以直接可执行(“对象”或“可执行码”形式)、源代码或差值代码(“Δ”或“补码”代码)。本文所述的实施例的软件内容可以经由上面存储有内容的制品提供,或者经由操作通信接口以经由通信接口发送数据的方法提供。机器可读媒体或计算机可读媒体可以致使机器执行所描述的功能或操作,并且包含提供(即,存储和/或发射)可由机器(例如,计算装置、电子系统或其它装置)存取的形式的信息的任何机构,例如经由可记录/不可记录存储媒体(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储媒体、光学存储媒体、快闪存储器装置或其它存储媒体)或经由发射媒体(例如,光学、数字、电、声学信号或其它传播信号)。通信接口包含与硬连线、无线、光学或其它媒体中的任一者介接以向另一装置(例如,存储器总线接口、处理器总线接口、因特网连接、磁盘控制器)通信的任何机构。可以通过提供配置参数和/或发送信号以使通信接口准备好提供描述软件内容的数据信号来配置所述通信接口。
[0143] 本文所述的各个组件可以是用于执行所描述的操作或功能的装置。本文所述的每一组件包含软件、硬件或这些的组合。所述组件可以实施为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入控制器、硬连线电路等。
[0144] 除了本文所述的内容之外,还可以在不脱离所揭示的实施例和实施方案的范围的情况下对其进行各种修改。因此,本文中的说明和实例应当用说明性而不是限制性意义来解释。