具有多个存储系统模块的存储系统的制作方法

文档序号:6480432阅读:228来源:国知局
专利名称:具有多个存储系统模块的存储系统的制作方法
技术领域
本发明涉及具有多个物理存储装置的存储系统。
技术背景作为具有多个物理存储装置的存储系统之一,已知具有动态容量分配功能的存储系统(例如参照专利文献1以及专利文献2)。在该存储系统中具备虚拟逻辑巻(以下称为"虚拟巻,,)和存储区域池(以下称为"池")。虚拟巻由 多个虛拟存储区域(以下称为"虚拟区域")构成。池由多个实体的存储区域 (以下称为"实际区域")构成。实际区域是以多个物理存储装置为基础的存 储区域。通过动态容量分配功能,以发生针对虚拟巻内的虚拟区域的数据写入为契 机,对该虚拟区域分配池内的实际区域,将数据写入该分配的实际区域中。专利文献1特开2005-011316号公报专利文献2特开2006-302258号公报另外,考虑通过多个存储系统模块(以下简称为"模块")构成存储系统。 以下,将通过多个模块构成的存储系统称为"模块结构的存储系统"。各个模 块具备多个物理存储装置和控制针对多个物理存储装置的访问的控制器。可以像一台存储系统那样运用或者管理多个模块。另外,通过根据需要来增减模块, 可以变更存储系统的存储容量和处理能力。在使模块结构的存储系统应用上述动态容量分配功能时,考虑例如图30 所示的结构。即,模块结构的存储系统由具有端口 (A)以及池(A)的模块(A)、 和具有端口 (B)以及池(B)的模块(B)构成。模块(A)以及(B)像一 个存储系统那样被管理。因此,主机(H)识别为端口 (A)以及(B)好像 存在于一个存储系统中。仅在模块(A)中具备虚拟巻(VVOL)。为了使主机(H)经由端口 (A)和端口 (B)的任何一个都能够访问虚拟巻(VVOL),除了将端口 (A)和虚 拟巻(VVOL)相连的第一路径(Pl)以外,还设置了将端口 (B)和虚拟巻 (VVOL )相连的第二路径(P2 )。
当考察从主机(H)发送针对虛拟巻(VVOL)内的虚拟区域(V)的数 据的写请求(w)的情况时,考虑下述4种情况。
情况W1:模块(A)经由第一路径(PI)接收写请求(W),并对虚拟区 域(V)分配池(A)内的实际区域。
情况W2:模块(A)经由第一路径(PI)接收写请求(W),并对虛拟区 域(V)分配池(B)内的实际区域。
情况W3:模块(A)经由第二路径(P2)接收写请求(W),并对虚拟区 域(V)分配池(A)内的实际区域。
情况W4:模块(A)经由第二路径(P2)接收写请求(W),并对虛拟区 域(V)分配池(B )内的实际区域。
在图30中未表示以上情况,但即使考察从主机(H)发送来自虛拟区域 (V)的数据的读请求(R)的情况时,也考虑下述4种情况、即与上述同种 的情况。
情况R1:模块(A)经由第一路径(PI)接收读请求(R),从池(A)内 的实际区域读出数据,并发送至主机(H)。
情况R2:模块(A)经由第一路径(PI)接收读请求(R),从池(B)内 的实际区域读出数据,并发送至主机(H)。
情况R3:模块(A)经由第二路径(P2)接收读请求(R),从池(A)内 的实际区域读出数据,并发送至主机(H )。
情况R4:模块(A)经由第二路径(P2)接收读请求(R),从池(B)内 的实际区域读出数据,并发送至主机(H)。
在上述情况Wl ~ W4或R2 ~ R4中,在模块(A)和模块(B )之间发生 通信(以下称为"模块间通信")。例如,在情况W2中,发生用于对虛拟区域 (V)分配池(B)内的实际区域的模块间通信。在情况W3中,发生用于将 经过了端口 (B)的写请求(W)转发至模块(A)的才莫块间通信。在情况W4 中,发生用于将经过了端口 (B)的写请求(W)转发至模块(A)的模块间通信、和用于对虚拟区域(V)分配池(B)内的实际区域的模块间通信。
通过上述考察,即使写请求/读请求(I/O请求)经过同 一端口 ( A)或(B ), 由于模块间通信的发生,有时I/0性能会下降(具体而言,模块结构的存储系 统从主机(H)接收I/O请求开始直到向主机(H)返回响应为止的时间长度 增长)。另外,当1/0请求(写请求/读请求)经过的端口不同时,有时模块间 通信的发生次数不同,因此有时I/0性能不同。

发明内容
因此,本发明的目的在于,使得在模块结构的存储系统中尽量不发生模块 间通信。
本发明的另一目的在于,不管1/0请求经过模块结构的存储系统所具有的 哪个端口, 1/0性能都尽量统一。
本发明的其它目的根据后面的说明变得明了 。
多个模块具有与同一巻识别号码关联的多个虚拟巻。从上位装置接收到写 请求的模块(本模块),若未对遵从该写请求的作为写对象的虚拟区域分配实 际区域,则不是从其它模块内的多个实际区域、而是从本模块内的多个实际区 域寻找未分配的实际区域。本模块对作为写对象的虚拟区域分配在本模块内寻 找到的实际区域,在该实际区域中写入遵从写请求的数据。多个模块例如由一 个以上的第 一模块和一个以上的第二模块构成。第 一和第二模块具有的功能相 同。


图l表示本发明的实施例1的计算机系统的整体结构的一例。 图2是表示存储器封装的详细内容的一例的图。 图3是表示路径信息表的一例的图。
图4是表示模块结构的存储系统中的1/0处理的流程的一例的图。
图5是表示虛拟巻技术的一例的图。
图6是表示池表的一例的图。
图7是表示页表的一例的图。
图8是表示虚拟巻表的一例的图。
图9是实施例1的一个特征的概要的说明图。图IO是表示生成虛拟巻的处理的一例的图。
图U是表示实施例1中的路径定义处理的一例的图。
图12是表示已分配了本模块内的页的虚拟区域为作为写对象的虚拟区域 的情况下的写处理的 一例的图。
图13是表示未对作为读对象的虚拟区域分配本模块内的页的情况下的读 处理的一例的图。
图14是表示未对作为写对象的虚拟区域分配本;f莫块内的页的情况下的写 处理的一例的图。
图15是表示对虚拟巻分配页的处理的一例。
图16是实施例2的一个特征的概要的说明图。
图17是表示实施例2中的虚拟巻表的一例的图。
图18是表示路径定义时的页复制处理的一例的图。
图19是表示写处理时的页复制处理的一例的图。
图20是表示读处理时的页复制处理的一例的图。
图21是表示实施例2中的路径信息表的一例的图。
图22是表示实施例2中的路径定义处理的一例的图。
图23是表示读 写处理时的页复制处理的另一例的图。
图24是表示写处理时的副本页删除处理的一例的图。
图25是表示写处理时的副本页更新处理的一例的图。
图26是表示新分配页时的副本页删除处理的一例的图。
图27是表示路径定义时的副本页删除处理的一例的图。
图28是表示基于时间经过的副本页删除处理的一例的图。
图29是表示模块间的耦合的变形例的图。
图30是课题的说明图。
符号说明
100主机;110网络;120网络;200存储系统模块;210处理器封装; 211处理器;212本地存储器;213维护端口; 220存储器封装;221控制信 息部;222程序部;223高速緩沖存储部;230后端封装;231端口; 240 HDD; 250巻;260前端封装;261端口
具体实施例方式
以下,参照附图来说明本发明的若干实施例。另外,以下以计算机程序为
主语时,实际上是通过执行该计算机程序的处理器(CPU)进行处理。
实施例1
图1表示实施例1的计算机系统的整体结构的一例。
具备主机100、模块结构的存储系统(以下简称为"存储系统,,)和维 护终端270。存储系统例如由2台存储系统模块(以下称为"才莫块")200构成。 模块200是具备控制器和物理存储装置的、存储系统的一个要素(子系统)。 另外,主机100和各模块200经由第一通信网络110相连。另外,模块200彼 此经由第二通信网络282相连。第二通信网络282是与第一通信网络110独立 的网络。也可以代替第一或第二通信网络110、 282而分别采用第一或第二专
用线路等其它种类的通信纟某体。
2台模块200像1台存储系统那样被主机100识别。以下,当区别说明2 台模块200时,称为"模块(l)"、"模块(2)"。此外,在实施例1中模块200 为2台,^旦也可以为3台以上。
主机100是向模块结构的存储系统发送I/O请求的计算机。
维护终端270是用于维护存储系统的终端(计算机),其经由第三通信网 络281与各模块200相连。维护终端270具备维护端口 275、 CPU271、存储 器272以及输入输出部274。维护端口 275与处理器封装(processor package) 210的维护端口 213连接。经由维护端口 275从处理器封装210取得运转信息, 或者向处理器封装210发送维护操作。存储器272中存储有维护用程序273。 CPU271从存储器272中读出维护用程序273并执行,由此实现维护。此外, 存储器272也可以存储从处理器封装210取得的信息。输入输出部274是用于 接受来自用户的操作、或者向用户显示存储系统的运转信息的用户接口 (例如 键盘、鼠标、监视器等)。此外,使维护终端270具有电源(未图示)。
模块200具备控制器、HDD (Hard Disk Drive) 240和交换器290。控制 器由前端封装260 (以下称为"FE封装")、处理器封装210、存储器封装220 和后端封装230 (以下简称为"BE封装")构成。构成控制器的各要素和交换 机290经由内部网络(例如纵横式交换机(Crossbar Switch)) 280相互连接。
13此外,FE封装260、处理器封装210、存储器封装220以及BE封装230中的 至少一种可以存在多个。
FE封装260具有一个以上的端口 261。端口 261经由第一通信网络110 与从主机100输出I/O请求的端口 (未图示)连接,从主机100接收I/O请求 (写请求/读请求)。
处理器封装210具有处理器(例如微处理器)211、本地存储器212以及 维护端口213。它们通过封装内网络(例如CPU总线)214相互连接。在一个 处理器封装210中,处理器2H、本地存储器212以及维护端口 213中的至少 一种可以存在多个。
处理器211通过执行在处理器封装220的程序部222中存储的计算机程 序,执行来自主机100的I/O请求的处理等。
本地存储器212除了临时存储处理器211执行的计算机程序所临时使用的 数据之外,还对存储在HDD240或存储器封装220中的数据(控制信息、业 务数据、程序等)进行存储。与从处理器211到存储器封装220或到HDD240 的物理距离相比,从处理器211到本地存储器212的物理距离更近。因此,与 将处理器211执行的处理中所使用的数据存储在存储器封装220或HDD20中 相比,存储在本地存储器212中可以高速地进行处理。
维护端口 213经由第三通信网络281与维护终端270中的维护端口 275相 连。经由维护端口 213向维护终端270发送处理器封装210的运转信息,或者 接收来自维护终端270的维护操作。
存储器封装220由一个或多个存储器构成,具有控制信息部221、程序部 222以及高速缓冲存储部223。在程序部222中存储有用于实现由存储系统200 执行的处理的程序。在控制信息部221中存储有这些程序所利用的控制信息。
信息。在高速緩冲存储部223中临时存储相对于HDD240输入输出的数据。 若高速緩冲存储部223中存在目标数据,则处理器211能够不访问HDD240 而从高速緩冲存储部223取得目标数据。若HDD240中存储的使用频率高的 数据等被存储在高速緩沖存储部223中,则可以期待来自主机100的I/O请求 的处理速度的提高。此外,为了避免故障发生时的数据消失等,存储器封装220可以被二重化。
BE封装230具有一个以上的端口 231。端口 231经由后端的通信网络(例 如光纤通道网络)283与HDD240相连。经由端口 231,将在高速缓沖存储部 223中临时存储的、作为写对象的数据写入HDD240,或者将从HDD240读出 的作为读对象的数据临时存储在高速緩冲存储部223中。
交换机290与前端封装260、后端封装230、处理器封装210以及存储器 封装220相连,是控制这些要素间的通信的电路板。 一个模块200内的交换机 290与另一个模块200内的交换机290相连。经由各交换机290进行模块间通 信。此外,以下有时将交换机290彼此的耦合称为"松耦合",将经由内部网 络280的要素间的耦合称为"紧耦合"。原因是,在一个模块200内的封装间 可以直接参照以及更新在该模块200的高速緩冲存储部223中存储的控制信 息,另一方面,不允许从一个模块200直接参照以及更新在另一模块200的高 速緩冲存储部223中存储的控制信息, 一个模块200内的处理器211通过向另 一模块200内的处理器211进行请求,可以间接地进行参照以及更新。即,所 谓紧耦合,是指可以直接地参照以及更新控制信息的耦合,所谓松耦合,是指 间接地参照以及更新控制信息的耦合。
HDD240存储由主机100执行的软件(例如数据库管理系统)所利用的数 据、即作为来自主机100的1/0请求的对象的数据。另外, 一个以上的HDD240 可以以校验组(或者RAID组)这样的单位被分组。即,可以通过RAID (Redundant Arrays of Inexpensive Disks )等方法实现高可靠化。可以将构成校 验组的存储空间的各存储区域设为作为逻辑存储设备的巻250。此外,在实施 例1中,作为物理存储装置而使用了 HDD240,但也可以采用闪速存储器或 DVD等其它种类的物理的非易失性存储装置。另外,多个种类的物理存储装 置可以共存于一个模块200或者一个存储系统中。
图2表示存储器封装220的详细内容。
作为存储在控制信息部211中的控制信息,存在例如记录与路径相关的信 息的路径信息表2211、记录与虚拟巻相关的信息的虚拟巻表2212、记录与池 相关的信息的池表2213、以及记录与后述的页相关的信息的页表2214。作为 在程序部222中存储的计算机程序,存在例如控制读处理的读程序2221、控制写处理的写程序2222、用于定义路径的路径定义程序2223、用于删除已定 义的路径的路径删除程序2224、用于将页分配给虚拟区域的页分配程序2225、 用于在模块间以页为单位复制数据的副本生成程序2226、用于删除副本页的 副本删除程序2227、用于更新控制信息的控制信息更新程序2228、以及用于 生成虚拟巻的虚拟巻生成程序2229。关于这些表或程序,在后面进行详细描 述。此外,通过处理器执行这些计算机程序2221 -2229来进行的全部或一部 分处理,也可以通过硬件电路等其它种类的处理部来实现。
如前所述,模块(1 )以及(2)相对于主机100被识别为一台存储系统。 因此,当管理者定义与模块(2)的巻250相连的路径(1/0用的路径)时,有 可能指定模块(1)的端口 261。在进行了这样的指定时,需要如下所述来实 现I/O处理。即,模块(1 )从主机100接收I/O请求,并向模块(2 )请求I/O 处理。模块(2)对该请求进行应答,执行针对模块(2)内的巻250的I/0。 以下,有时将这种I/0称为"跨越模块200的I/O"。下面,对跨越模块200的 I/O的处理方式进行说明。
首先,说明用于实现跨越模块200的I/O的控制信息。
图3表示路径信息表2211的详细内容。
在路径信息表2211中针对每条路径记录端口号码、巻号码以及模块号码。 当对一条路径(以下,在该段落中称为"对象路径,,)进行说明时,"端口号码" 是作为对象路径的一个构成要素的、端口 261的识别号码。"巻号码"是与对 象路径相连的逻辑巻(例如巻250或后述的虚拟巻)的识别号码。在实施例1 中,路径的信息由端口号码和巻号码构成。"才莫块号码"是具有与对象路径相 连的逻辑巻的模块200的识别号码。根据图3的例子,巻0、巻1以及巻2在 模块(1)中,巻3在模块(2)中。
使用图4,说明写处理的一例来作为跨越模块200的I/O。 通过在模块(1)以及模块(2)各自中执行写程序2222来实现写处理。 在图4的说明中,将通过模块(1 )的处理器211执行的写程序2222称为"写 程序(1 )",将通过才莫块(2 )的处理器211执行的写程序2222称为"写程序 (2)"。此外,以下当区别模块(l)以及(2)中的同种要素时,与写程序2222 同样地,有时代替参照符号而使用(1)或(2)这样的符号。主机100利用具有模块(1 )的端口 261的路径来发行写请求(S100 ),并 等待来自存储系统的写完成报告(SIOI)。
当主机100利用上述路径发行写请求时,模块(1 )接收写请求(S102 )。 写程序(1)参照路径信息表(1),检查写数据(作为写对象的数据)的写入 目的地巻250的位置(S103)。写程序(1)判定具有写入目的地巻250的模块 200是模块(1 )和模块(2 )的哪一个(S104 )。在S104中判定为模块(1 ) 时(S104:否),写程序(1)在写入目的地巻250中写入写数据(S105),向 主机100报告写完成(S106 )。另 一方面,在S104中判定为模块(2 )时(S104: 是),写程序(1)将写数据存储在高速緩冲存储部(1 )中。然后,写程序(1) 向模块(2)请求写处理(S108),并等待来自模块(2)的应答(S109)。此 时,写程序(1)向模块(2)通知写数据的高速緩冲存储地址。所谓高速緩冲 存储地址,是存储了对象数据的存储区域的地址,是高速缓冲存储部223内的 存储区域(以下,称为高速緩冲存储区域)的地址。
写程序(2)从模块(1 )接收写处理的请求(SllO),将写数据从与该请 求一起接收到的高速緩沖存储地址所表示的高速緩冲存储区域向模块(2)转 发(从高速緩冲存储区域读出写数据)(Slll),将该写数据写入写入目的地巻 250 (S112)。写入完成后,写程序(2)向模块(1)报告写完成(S113)。
写程序(1)若从写程序(2)接收到写完成的报告,则向主机100报告写 完成(S116)。
主机IOO,当从模块(1)接收写完成报告时(S117),结束处理(S118)。 作为跨越模块200的I/O,以写为例进行了说明,但在读的情况下进行例 如以下处理。即,省略了 S107,在S108中,读程序(1)向才莫块(2)发行读 请求。读程序(2)接收该读请求,从读源巻250读出读数据(作为读对象的 数据),将读出的读数据写入高速緩冲存储部(2),将读数据的高速緩冲存储 地址(高速緩冲存储部(2 )内的高速緩冲存储区域的地址)通知给模块(1 )。 读程序(1)与步骤Slll同样地从模块(2 )向模块(1 )转发读数据(即,从 所通知的高速緩冲存储地址所表示的高速緩冲存储区域读出读数据)。最后, 读程序(1 )将读数据与读完成报告一起转发至主机100。
通过如上所述,可以实现跨越模块200的写或读。但是,在跨越模块200的I/0的情况下,由于进行模块间通信,因此I/0性能降低。而且,在模块(l)
内的巻250和主机100之间设置了具有FE的端口 (1)的第一路径和具有FE 的端口 (2)的第二路径时,根据使用第一和第二路径的哪一个(即,根据FE 的端口 (1)和(2)中的哪一个接收I/0请求),1/0性能不同。
在实施例1中,在模块(1 )以及(2)的双方中具有虚拟巻技术(动态容 量分配功能),实施了用于避免I/O性能降低的工作。以下说明该工作,但在 此之前,使用图5至图8说明虚拟巻。
图5表示虚拟巻技术的概要。
模块(1 )以及(2 )具备虛拟巻302和池300。
虚拟巻302与由巻250那样的实际区域构成的逻辑巻不同,是不具有实际 区域的虛拟的逻辑巻。虚拟巻302由多个虚拟的存储区域(虚拟区域)构成。
池300是例如由巻250构成的存储空间,由多个页301构成。在此,所谓 "页",是巻250的构要要素,是基于HDD240的实体的存储区域(实际区域)。 当将页301分配给虚拟区域时,以该虚拟区域作为写入目的地的写数据304 被写入所分配的页301。 一个虚拟区域的存储容量可以是规定个数(例如一个) 的页301的存储容量, 一个页301的存储容量可以是规定个数(例如一个)的 虚拟区域的存储容量。
此外,池300不需要针对每个虚拟巻302而存在。例如,可以从一个池 300对多个虚拟巻302分配页301,也可以乂人多个池300对一个虚拟巻302分 配页301。对于虚拟巻302,也可以从不具有该虛拟巻302的其它模块200中 的池300分配页301。
图6是池表2213的一例。
池表2213是针对每个池300而存在的表。在池表2213中记录与对应于 该表2213的池300相关的池号码、池大小以及页表。"池号码"是上述对应的 池300的识别号码。"池大小"是上述对应的池300的存储容量。"页表"是用 于管理上述对应的池300具有的各页301的信息,具体而言,是图7所示的信 息。即,在页表2214中,针对构成上述对应的池300的每个页301而记录页 号码、开始地址、结束地址、状态以及分配目的地。当对一个页301 (以下, 在该段落中称为"对象页301")进行说明时,"页号码"是对象页301的识别号码。"开始地址"是对象页301在池300中的开始地址,"结束地址"是对象 页301在池300中的最终地址。"状态,,是对象页301的状态,例如是否已分 配给虚拟区域。"分配目的地"是具有作为对象页301的分配目的地的虚拟区 域的虚拟巻302的巻号码。当"状态"的值为"未分配"时,作为"分配目的 地"的值,采用例如无意义的值(例如"-")。此外,在实施例1中为了简化 说明, 一个页301为固定大小,但通过在页表2214内管理页大小,可以设为 可变大小。
图8表示虚拟巻表2212的一例。
在虚拟巻表2212中,针对每个虚拟区域而记录虚拟巻号码、地址、页分 配状态、分配模块、池号码以及页号码。以下,对一个虚拟区域(以下,在图 8 (以及图17)的说明中称为"对象虚拟区域")进行说明。"虚拟巻号码"是 具有对象虚拟区域的虚拟巻的识别号码。"虚拟巻号码"的值可以作为"巻号 码,,还记录在路径信息表2211 (参照图3)中。"地址"是虚拟巻内的对象虚 拟区域的地址,例如通过对象虚拟区域的先头地址和末尾地址的组合来表示。 "页分配状态"表示是否已将页301分配给对象虚拟区域。"分配模块"是具 有已分配给对象虚拟区域的页(以下,在图8的说明中称为"对象页")301 的模块200的识别号码。"池号码"是具有对象页301的池的识别号码。"页号 码"是对象页301的识别号码。
图9是实施例1的一个特征的概要的说明图。在以下的说明中,有时将接 收到I/0请求的模块称为"本模块",将此外的模块称为"其它模块"。
在实施例1中实施了例如下述的(工作1 )和(工作2 )。 (工作1 )在模块(1)和模块(2 )的双方中具备被分配了同一巻号码的 虛拟巻302。
(工作2)模块(1)和模块(2),在接收到写请求时,若未对根据该写 请求确定的写入目的地虚拟区域分配页301,则将本模块中的池300内的页301 分配给写入目的地虛拟区域。
此外,在(工作l)中,巻号码可以是例如2重的号码。即,可以具有由 主机100识别的、在模块(1 )和(2 )中相同的第一种的巻号码(全局的号码); 以及通过主机100无法识别的、通过各个模块200识别的第二种的巻号码(本
19地号码)。
以下,说明具体例。
在模块(1 )和(2 )中具备被分配了同一巻号码"1"的虚拟巻(1 )和(2 )。
由于虚拟巻(1 )和(2 )的巻号码相同,因此主片几100不分别识别虚拟巻(1) 和(2),而识别为将虚拟巻(1)和(2)合并而得的一个逻辑巻(以下,在参 照图9的说明中称为"巻(T)")。
当模块(1 )接收到以第一虛拟区域作为写对象虚拟区域的写请求时,如 箭号612所示,对虚拟巻(1)的第一虚拟区域611分配池(1)内的页711, 在该页711中写入写数据。同样地,当模块2接收到以第二虚拟区域作为写对 象虚拟区域的写请求时,如箭号622所示,对虚拟巻(2)的第二虚拟区域623 分配池(2)内的页723,在该页723中写入写数据。
在上述情况下,在主机100中识别出在巻(T)中的第一存储区域(地址 "0 99")和第二存储区域(地址"100 199")中已经存储了写数据。另夕卜, 虚拟巻表(1 )和(2)分别成为图9所示那样。即,未对虚拟巻(1 )中的第 二虚拟区域613 (地址"100 ~ 199")分配池(1)内的页301 ,但对虚拟巻(2 ) 中的第二虚拟区域623已分配了池(2)内的页301,因此在虚拟巻表(l)中, 作为"页分配状态"的值而记录"已",作为"分配模块"的值而记录"模块 (2),,。同样地,未对虛拟巻(2)中的第一虚拟区域621 (地址"0 99")分 配池(2)内的页301,但对虛拟巻(l)中的第一虚拟区域611分配了池(1) 内的页(301),因此在虚拟巻表(2)中作为"页分配状态"的值而记录"已", 作为"分配模块"的值而记录"模块(l)"。
当模块(2)如箭号640所示接收到从第二虚拟区域623读出读数据的请 求时,参照虚拟巻表(2),检查第二虚拟区域623的"页分配状况"。检查的 结果,得知在;f莫块(2)内的页301 (与池号码"1"以及页号码"1"对应的 页301)中存储有读数据。因此,模块(2)从^4莫块内的该页301读出读数 据,向主机100转发读出的读数据。
另外,在向已分配了页301的虚拟区域623写入数据的情况下,也与读的 情况同样地实现。即,不需要模块间的通信。
通过应用上述(工作1)以及(工作2),在从同一模块的端口反复执行写和读的情况下可以削减模块间通信次数。
另一方面,当模块(2)如箭号630所示接收到从第一虚拟区域621读出 读数据的读请求时,参照虚拟巻表(2),检查第一虚拟区域621的"页分配状 况"。检查的结果,得知使用了模块(l)内的页。因此,模块(2)如箭号625 所示,向模块(1 )请求读处理。模块(1 )对该请求进行应答,从分配给虚拟 巻(1)的第一虚拟区域6U的、模块(1)内的页301 (与池号码"3"以及 页"2"对应的页301)中读出读数据。将读出的读数据从模块(1)转发给才莫 块(2),从模块(2)将该读数据转发给主机100。
作为虚拟巻302的生成契机以及生成方法,考虑以下的(TM1)以及 (TM2 )。
(TM1)以用户生成虚拟巻302为契机,在全部才莫块200中生成虚拟巻
302。
(TM2)以用户生成虚拟巻302为契机,仅在用户指定的模块200中生成 虚拟巻302。并且,以定义了从其它模块200的端口 261到该虛拟巻302的路 径为契机,在其它模块200中生成该虚拟巻302。
使用图IO说明与上述(TM1)相关的处理的一例。
当用户从维护终端270指示生成虚拟巻时,通过执行维护终端270的维护 程序273和各模块200的虚拟巻生成程序2229进行虚拟巻生成。假定用户对 维护终端270指定生成的虚拟巻302的巻号码。
维护程序273判定是否存在尚未指示虚拟巻生成的模块200 ( S1600 )。在 对全部模块200指示了虚拟巻生成时,进行S1607 (即处理结束)。另一方面, 当存在尚未指示虚拟巻生成的模块200时,执行S1601到S1606。
维护程序273向模块200指示虛拟巻的生成(S1601 ),等待来自指示目的 地模块200的完成报告(S1602)。此外,与虚拟巻生成的指示一起,维护程序 273向模块200通知生成的虛拟巻302的巻号码(例如从用户指定的号码)。
虚拟巻生成程序2229从维护程序273接收虛拟巻生成的指示(S1603 ), 在虚拟巻表2212中登录虚拟巻信息(S1604)。具体而言,例如作为虚拟巻信 息,"虚拟巻号码"的值是从维护程序273通知的号码,"页分配状态"的值全 部是"未","分配模块"以及"页号码"的值是表示未分配的值(例如"-")。
21虚拟巻生成程序2229在登录了虚拟巻信息后,向维护程序273发送完成 报告(S1605 )。维护程序273接收完成报告(S1606 )。 下面,说明与上述(TM2)相关的处理。
通过上述(TM2),仅对用户指定的模块200指示虚拟巻生成。即,若以 图IO来说,则不需要S1600。并且,此后以定义了从其它模块200的端口 261 到该虛拟巻302的路径为契机,在其它模块200中生成该虚拟巻302。以下, 使用图ll说明与其相关的处理。
当用户从维护终端270指示路径定义时,执行维护终端270的维护程序 273和各模块200的路径定义程序2223。用户对维护终端270指定例如使用的 端口 261的端口号码、和成为对象的虚拟巻302的巻号码。
维护程序273对具有所指定的端口 261的模块200指示路径定义(S200 ), 等待来自作为指示目的地的模块200的完成报告(S201 )。与路径定义的指示 一起,维护程序273向模块200通知使用的端口 261的端口号码、以及成为对 象的虚拟巻302的巻号码。
路径定义程序2223,当从维护程序273接收到路径定义的指示时(S202 ), 在虚拟巻表2212中检查是否已登录了成为对象的虚拟巻(以下,在图11的说 明中称为"对象虛拟巻")302的虚拟巻信息(S203 )。与参照图IO说明的相 同,在用户指定的模块200内的虚拟巻表2212中登录了对象虚拟巻的虚拟巻 信息。若已登录了对象虚拟巻的虚拟巻信息(S203:是),则跳过S204。若未 登录对象虚拟巻的虚拟巻信息(S203:否),则路径定义程序2223在虚拟巻表 2212中登录该虚拟巻信息(S204)。在此登录的虚拟巻信息的内容与图10的 S1604中登录的内容实质上相同。
然后,路径定义程序2223在路径信息表2211中登录所指定的端口 261的 端口号码、所指定的巻号码、和执行该程序2223的模块(在图11的说明中, 为方便起见简称为"本模块")200的模块号码(S205 )。然后,路径定义程序 2223向维护程序273报告完成(S206 )。
维护程序273从路径定义程序2223接收完成报告(S207),结束处理 (S208 )。
此外,在路径定义时生成虚拟巻302的情况下,有可能已经通过其它模块200对该虚拟巻302进行了 1/0处理。因此,有可能通过其它^^块200对该虚 拟巻302分配了页301。从而,在该时刻,本模块200可以向其它模块200查 询对虚拟巻302分配页的状况,并将查询结果登录在本模块200的虚拟巻表 2212中。在经由新定义的路径接收到1/0请求的时刻,本模块200可以向其它 模块200查询关于作为遵从I/O请求的I/O对象的虚拟区域的页分配状况。
通过如上所述,可以在各^^块200中生成虚拟巻302。
下面,使用图12至图15说明相对于虛拟巻302的1/0处理的一例。另夕卜, 图12表示对作为I/O对象的虛拟区域分配了接收到I/O请求的模块(本模块) 200内的页301时的I/0处理的一例。图13表示未对作为读对象的虚拟区域分 配本模块200内的页301时的读处理的一例。图14表示未对作为写对象的虚 拟区域分配本;f莫块200内的页301时的写处理的一例。图15表示对虛拟巻302 分配页301的处理的一例。
使用图12说明分配了本^f莫块200内的页的虚拟区域是作为1/0对象的虚 拟区域时的I/O处理。通过执行读程序2221或写程序2222来实现该I/O处理。 以下采用写处理为例来说明I/O处理。
主机100对才莫块200发行写请求(S500 ),并等待来自模块200的写完成 报告(S501 )。
写程序2222,当接收写请求(S502)时,检查本模块200内的虛拟巻表 3312 (S504),判定是否已对作为写对象的虚拟区域分配了本模块200内的页 301 (S504)。图12的例子,是将本模块200内的页301分配给作为写对象的 虛拟区域时的写处理的例子。因此,使S504的判定为"是"。使用图13以及 图14说明S504的判定为"否"时的处理。
然后,写程序2222参照页表2214,决定写入写数据的池300的地址(即, 确定已分配给作为写对象的虚拟区域的页301 ) (S505)。写程序2222在决定 的地址(页301)中写入写数据(S506),然后向主机100报告完成(S507)。
主机100,当接收来自写程序2222的完成报告时(S508 ),结束处理(S509 )。
在上述说明中,以写处理为例进行了说明,^E在读处理的情况下成为例如 以下这样。即,在S502中接收读请求,在S506中从已分配的页301中读出 读数据,并向主机100转发该读数据。下面,使用图13说明未对遵从读请求的作为读对象的虚拟区域分配本模
块(接收到读请求的模块)200内的页301的情况下的读处理。在这种情况下, 其它模块200内的页301有可能被分配给该其它模块200内的虚拟巻302中的 读对象虚拟区域。以下,以本模块200作为模块(1),以其它模块200作为模 块(2),说明此情况下的读处理。此外,通过在模块(1)以及模块(2)各自 中执行读程序2221来实现读处理。
当步骤S504的判定为"否"时,读程序(1 )参照虚拟巻表(1 ),判定与 读对象虚拟区域对应的分配模块是否不明(S301)。关于读对象虚拟区域,若 "页分配状态"的值为"已"、"分配模块"的值为其它模块的模块号码,则是 已判明了分配模块。另一方面,关于读对象虚拟区域,若"页分配状态"的值 为"未"、"分配模块,,的值是表示未分配的值"-",则为分配模块不明。
在判明了分配模块时(S302:否),读程序(1)向作为分配模块的模块(2) 请求读对象虚拟区域的读(例如,通知读对象虚拟区域的地址)(S302)。接收 到数据的转发请求的读程序(2)通过参照虚拟巻表(2)来确定分配给读对象 虛拟区域的页301,从所确定的页301中读出读数据,并存储在高速緩冲存储 部223中(S303)。读程序(2)向模块(1)指示数据转发(S304 )。此时, 读程序(2)向模块(1)通知读数据的高速緩冲存储地址。读程序(1)接收 到数据转发指示时,从模块(2)转发数据(从所通知的高速緩沖存储地址表 示的高速緩冲存储区域读出读数据)(S305 )。接着,读程序(1)向主机100 转发读出的读数据(S306)。
另一方面,当分配模块不明时(S301:是),读程序(1)判定是否存在未 被查询页分配状况的模块200 (S307)。当存在未被查询的模块200时,读程 序(1 )向该模块200查询页301的分配状况(S308 )。
接受了页301的分配状况的查询的模块(2)的读程序(2),参照虛拟巻 表(2),检查页分配状况(S309),判定是否已对读对象虚拟区域分配了模块 (2)内的页301 (S310)。当未分配页301时(S310:否),读程序(2 )向模 块(1)通知未分配(S311)。另一方面,当已分配页301时(S310:是),读 程序(2)将读数据存储在高速緩冲存储部223中(S312),然后向模块(1) 指示该读数据的转发(S313 )。读程序(1),当接收到来自模块(2)的应答时,判定是否在模块(2)中 已分配了页(S314)。当模块(2)内的页301未分配给读对象虚拟区域时(S314: 否),读程序(1 )针对别的模块200执行S307。另一方面,当模块(2)内的 页301已分配给读对象虚拟区域时,读程序(1 )从模块(2)向模块(1 )转 发读数据(S315),更新模块(1 )的虚拟巻表2212 (S316)。具体而言,读程 序(1),关于读对象虚拟区域,将"页分配状况"的值变更为"已",作为"分 配模块"的值而登录"模块(2)"。
然后,读程序(1 )将从模块(2 )转发的读数据向主机100转发(S317 ), 结束处理。
当已分配页的模块200未判明,且不存在未实施查询的模块200时(S307: 否),即读对象虚拟区域是未分配任何模块200内的页301的虚拟区域的情况 下,进行以下处理。
在这种情况下,读程序(1)向主机100转发表示在读对象虚拟区域中不 存在数据的数据、例如由"0"构成的数据(S318),结束处理。此外,在S318 中,可以代替由"0"构成的数据而转发错误。
然后,使用图14以及图15说明未对遵从写请求的作为写对象的虚拟区域 分配本模块(接收到写请求的模块)200内的页301的情况下的写处理。以下, 将本模块200作为模块(1 ),将其它模块200作为模块(2 )来进行说明。
通过在模块(1)以及^jt块(2)中执行写程序2222以及页分配程序2225 来实现写处理。
当步骤S504的判定为"否"时,写程序(1 )参照虚拟巻表(1),针对写 对象虛拟区域判定分配模块是否不明(S1001)。此外,不明的定义,与参照图 13说明的读处理的情况相同。
在判明了分配模块的情况下(S1001:是),写数据被转发至其它模块(2) 并存储(S1002)。即,在S1002中进行图4的S107至SU5。
当分配模块不明的情况下(S1001:否),写程序(l)针对写对象虛拟区 域,判定是否存在未被查询页分配状况的模块200 (S1003 )。当存在未被查询 的模块200时,写程序(1 )向未被查询的其它模块200查询页分配状况(S1004 )。
接受了页分配状况的查询的模块(2)的写程序(2),参照虚拟巻表(2)来检查页分配状况(S1005 ),判定是否已对写对象虚拟区域分配了模块(2) 内的页301 (S1006)。当未分配页301时(S1006:否),写程序(2)向模块 (1)通知未分配(S1007)。另一方面,当已分配页301时(S1006:是),写 程序(2 )向模块(1 )通知已分配(1008 )。
写程序(1),当接收到来自模块(2)的应答时,判定在模块(2)中是否 已分配了页(S1009)。当在模块(2)中未分配页时(S1009:否),写程序(1 ) 针对别的模块200执行S1003。另 一方面,在模块(2 )中已分配了页时(S1009: 是),写程序(1 )更新虚拟巻表(1 ) (SIOIO)。此后,将写数据转发至其它模 块(2)并存储(S1011 )。即,执行图4的步骤S104至S115。此外,与步骤 S1002不同,也执行步骤S104至S106的理由是考虑到在步骤S1012中新分配 了页301的情况。具体而言,是因为在步骤S1012中分配了模块(1)内的页 301时,写程序(1 )需要向本模块(1 )内的页301写入写数据。另外,步骤 S1010中的虚拟巻表2212的更新,与读处理的情况一样,针对写对象虚拟区 域,将虚拟巻表2212的"页分配状况"的值更新为"已",作为"分配模块" 的值而登录"模块(2)"。
当已分配页的模块200未判明,且不存在未实施查询的模块200时(S1003: 否),写程序(1 )启动页分配程序(1 ),实施页分配处理(步骤S012 )。然后, 写程序(1)判定页分配是否完成(S1013)。当判定的结果是新分配了页301 时(S1013:是),写程序(1)在所分配的页301中存储写数据(S1010)。另 一方面,当由于模块(1 )内的池300的空闲容量不足(未分配的页301不足) 等原因而未分配页301时(S1013:否),写程序(1 )向主初j 100t艮告异常结 束(S1014),并结束处理。
使用图15,详细说明步骤S1012 (页分配处理)。
页分配程序(1)参照池表(1)以及页表(1 ),寻找未分配页(S400 )。 然后,页分配程序(1 )判定在才莫块(1 )内的池300内是否存在未分配页(S401 )。 当模块(1)内存在未分配页时(S401:是),页分配程序(1)更新页表 (1 )以及虚拟巻表(1 ) ( S402以及S403 ),并结束处理(S404 )。具体而言, 页分配程序(1 )针对分配的页301,将页表(1)的"状态"的值变更为"已 分配",将"分配目的地"的值变更为对象虚拟巻的虚拟巻号码。另外,页分配程序(1)针对写对象虚拟区域,将虚拟巻表2212的"页分配状态"的值变
更为"已",作为"分配模块,,的值而登录"模块(l)",作为"池号码"的值
而登录所分配的页301所属的池300的池号码,作为"页号码"的值而登录所 分配的页301的页号码。
另一方面,当在模块(1)内不存在未分配页时(S40L否),页分配程序
(1)判定是否存在未被查询有无未分配页的模块200 ( S405 )。当存在未被查 询的模块200时,页分配程序(1)向该模块200查询有无未分配页(S407)。 接受查询的其它模块(2)的页分配程序(2),接收有无未分配页的查询
(S408),并参照池表(2)以及页表(2)寻找未分配页,判定在模块(2)内 的池300中是否存在未分配页(S409)。
当存在未分配页时(S409:是),页分配程序(2)更新页表(2)(具体而 言,针对分配的页,将页表(2)的"状态"的值变更为"已分配")(S410)。 然后,页分配程序(2)判定在模块(2)中是否生成了作为页分配目的地 的虛拟巻302 (S411 )。当与作为页分配目的地的虚拟巻302相关的虚拟巻信 息存在于虚拟巻表(2)中时,该判定的结果是已生成的判定结果,当该信息 不存在时,该判定的结果是未生成的判定结果。在以用户生成巻302为契^L在 全部模块200中生成虚拟巻302的情况(所述(TM1 )的情况)下,在模块(2 ) 中生成了虚拟巻302。而且,以路径定义为契机生成虚拟巻302的情况(所述
(TM2)的情况)下,若在模块(2)中定义了到该虛拟巻302的路径,则已 生成了虛拟巻302。
在已生成虚拟巻302的情况下(S411:是),页分配程序(2)更新虚拟巻 表(2)(S412)。具体而言,针对写对象虚拟区域,将虛拟巻表(2)的"页分 配状态"的值更新为"已分配",作为"分配模块"的值而登录"模块(2)", 作为"池号码"的值而登录分配给写对象虛拟区域的页301所属的池300的池 号码,作为"页号码"的值而登录该页301的页号码。另一方面,当未生成虛 拟巻302时(S411:否),跳过S412。页分配程序(2 )向模块(1)报告存在 未分配页(S413)。
通过如上所述更新了虚拟巻表(2),当模块(2)从主机IOO接收到以其 页301的分配目的地虚拟区域作为1/0对象的1/0请求时,可以不与模块(1 )进行通信地判断关于该虚拟区域的页分配状况。
在S409中,当不存在未分配页时(S409:否),页分配程序(2)向模块 (1 )才艮告不存在未分配页(S414 )。
接收到来自模块(2)的报告的模块(1 )的页分配程序(1 ),判定在模块 (2)中是否存在未分配页(S415)。
在模块(2)中存在未分配页时(S415:是),页分配程序(1)更新虚拟 巻表(1)(S416),并结束处理(S417)。具体而言,针对写对象区域,将虚 拟巻表(l)的"页分配状态"的值变更为"已分配",作为"分配模块"的值 而登录"模块(2)"。反之,当模块(2)中不存在未分配页时(S415:否), 页分配程序(1 )针对别的模块200执行S405。
当具有未分配页的模块200未判明,且不存在未实施查询的模块200时 (S405:否),页分配程序(1)向调用页分配程序(1 )的写程序(1)报告不 可分配(S406 )。
通过如上所述,可以实现针对未分配本」模块200内的页301的虚拟区域的 写和读的处理。
通过以上的说明,在模块(2)中具备虚拟巻(2),分配给该虚拟巻(2) 的巻号码与分配给模块(1 )具有的虚拟巻(1)的巻号码相同。当模块(2) 从主机IOO接收到以未分配页的虚拟区域作为写对象虚拟区域的写请求时,将 模块(2)内的页分配给写对象虚拟区域,在该页中写入写数据。另外,当模 块(2)从主机IOO接收到以该虚拟区域作为读对象虚拟区域的读请求时,模 块(2)从模块(2)内的页中读出读数据并转发至主机IOO。因此,在这种情 况下不发生模块间通信。实施例2
以下,说明本发明的实施例2。此时,主要说明与实施例1的不同点,关 于与实施例l的相同点,省略或简略说明。
在实施例1中,例如在对遵从本模块(2)接收到的读请求的读对象虚拟 区域分配了其它模块(1)内的页301时,发生模块间通信。
因此,在实施例2中,通过在模块间复制在页301中存储的数据,可以减 少发生模块间通信的情况。具体而言,例如作为在模块(1)内的页301中存
28储的数据的、在模块(2)内的页301中未存储的数据,被从模块(1 )内的页 复制到模块(2)内的页中。在这种情况下,模块(1)内的页是作为复制源的 页,模块(2)的页是作为复制目的地的页。
更具体而言,例如图16所示,在分配给虚拟巻(1)的第一虚拟区域611 的页711中存储的数据不存在于模块(2)内。在该实施例2中,该页711中 存储的数据如箭号720所示被复制到模块(2)内的未分配页721中。页721 被分配给虚拟巻(2)的第一虚拟区域621。由此,模块(2)当如箭号630所 示接收到以第一虚拟区域621作为读对象区域的读请求时,可以从模块(2) 内的页721读出读数据,并转发至主机100。即,不发生模块间通信。以下, 将在模块间复制在页中所存储的数据称为"页复制"。另外,将所复制的数据 称为"副本数据",将存储了副本数据的页称为"副本页"。
图17说明实施例2中的虚拟巻表的一例。
冲艮据虛拟巻表22121,除了虚拟巻号码、地址、页分配状态、分配模块、 池号码以及页号码以外,针对每个虚拟区域登录了复制有无位、副本模块以及 读频率。"复制有无位,,表示在分配给对象虚拟区域的页(根据与对象虚拟区 域对应的"池号码"的值以及"页号码"而确定的页)301中存储的数据是否 被复制到其它模块200中。"副本模块"是具有在该页301中存储的数据的副 本的模块200的模块号码。"读频率"表示来自主机100的、对该页301的读 请求的频率(每单位时间的读请求的接收次数)。
设图17所示的表是模块(1)内的虚拟巻表时,从图17所示的表可知以 下内容。例如可知最初对与地址"0 99"对应的虚拟区域分配模块(2)内的 页,然后从模块(2)对模块(1)进行页复制。而且可知与对应于地址"0~ 99"的虛拟区域对应的读频率是每秒IOOO次。此外,图17所示的表中的"读 频率,,的值,例如通过读程序(1)被更新。读程序(1)可以针对每个第一虛 拟区域,对每单位时间的读请求的接收次数进行计数,并适时地更新与各第一 虚拟区域对应的"读频率"的值。
说明追加读频率的优点。例如,如图16所示,假定对虛拟巻(l)中的第 一虚拟区域611分配了模块(1)内的页711,对虚拟巻(2)中的第一虚拟区 域621分配了存储了在页711中存储的数据的副本的、模块(2)内的页721。在此,尽管页711中存储的数据被更新,但是如果不更新在页721中存储的数 据时,则页721中存储的数据仍是旧内容的数据。因此,当模块(2)接收到 以第一虚拟区域作为读对象虚拟区域的读请求时,将旧数据转发至主机100。 为了防止这一点,需要始终使与第一虚拟区域611以及621对应的数据同步。 但是,这样一来,在更新属于虚拟区域的数据时,需要更新虚拟区域611以及 621双方等的处理,从而会发生模块间通信。因此如图17所示,若针对每个 虚拟区域登录了读频率,则可以仅针对分配给读频率高的虚拟区域的页进行页 复制。
此外,所谓读频率高,是读频率与基准值相比较高。在此,所谓"基准值", 可以是预定的值,也可以是基于写频率的值。所谓针对各虚拟区域的写频率, 是以该虚拟区域为对象的写请求在每单位时间的接收次数。例如,针对一个虚 拟区域,当读频率比写频率高时、或者读频率比在写频率上乘以规定系数而得 到的值高时,可以认为"读频率高"。写频率,例如也可以与读频率同样地登 录在虚拟巻表22121中。
以下,说明执行页复制的契机以及条件、删除副本页的契机以及条件、和 写处理。详细描述写处理以不参照旧数据的方式进行控制的方法。
首先,作为执行页复制的契机而考虑(a)路径定义的契机、(b)I/0处理 的契机等。在以I/0处理为契机时,考虑以下的(bl)以及(b2)的情况
(bl )对于其它模块200内的页301发生I/O时,从其它模块200向本模 块200进行页复制的情况、
(b2 )对于本模块200内的页301发生I/O时,从本模块200向其它模块 200进行页复制的情况。
另外,还考虑以维护操作为契机执行页复制的情况、或存储系统定期地进 行页复制的精况等。
使用图18,说明在路径定义时将在模块(2)中已分配的页301中存储的 数据复制到实施路径定义的模块(1)中的页复制处理的一例。
该处理如下这样来实现。例如,在模块(l)内执行路径定义程序2223。 在模块(2)内执行副本生成程序2226。另外,在具有与图18中的复制源页 对应的副本页的全部模块内执行控制信息更新程序2228。例如,在图11所示的S205后,路径定义程序2223立刻判定是否存在未 被查询是否具有可以成为复制源的页301的模块200 (S600)。当对全部模块 200进行了查询时(S600:否),结束处理(S615 )。
当存在未被查询的模块200时(S600:是),路径定义程序2223向该模块 200 (模块(2))查询是否有作为分配给路径定义对象的巻的页301的、而且 是分配给读频率高的虚拟区域的页(高读频率页)301 (S601)。此外,路径定 义程序2223,与该查询一起,向模块(2)通知作为路径定义对象的虚拟巻302 的巻号码。
副本生成程序2226接受查询并检查虚拟巻表(2),由此寻找高读频率页 (S602)。然后,副本生成程序2226决定复制源页301 (例如将S602中寻找 到的页决定为复制源页301),将该复制源页301中存储的数据存储在高速緩 冲存储部(2 )中(S603 )。然后,副本生成程序2226向模块(1)通知该数据 的高速緩冲存储地址、与分配了复制源页301的虚拟区域对应的"分配模块,, 的值、"地址"的值、"副本模块"的值以及"读频率"的值(S604),然后结 束处理(S605 )。此外,当不存在复制源页301时,副本生成程序2226例如在 步骤S604中向模块(1 )通知复制源页301不存在。
接收到模块(2)的报告的模块(1)的路径定义程序2223,判定在模块 (1)内是否存在未分配页301 (S606)。当才莫块(1)内不存在未分配页301 时(S606:否),路径定义程序2223结束处理(S615)。
当模块(1)内存在未分配页301时(S606:是),路径定义程序2223判 定来自模块(2)内的复制源页301的数据转发(即页复制)是否全部完成 (S607 )。然后,将存储在全部复制源页301中的数据转发到模块(1 )时(S607: 是),路径定义程序2223针对别的模块200进行S600。
另一方面,当仅从模块(2)内的复制源页301的一部分页301向模块(1 ) 转发数据时(S607:否),路径定义程序2223从模块(2)内的复制源页301 中的一个页301向模块(1)转发数据(读出数据)(S608)。接着,路径定义 程序2223通过更新页表(1 )以及虚拟巻表(1 ) ( S609以及S610 ),对作为 对象的虚拟区域(与从模块(2)通知的"地址"的值对应的虚拟区域)分配 未分配的页(复制目的地页)301。具体而言,针对复制目的地页,将页表(1 )中的"状态"变更为"已分配",将"分配目的地"的值变更为对象虚拟巻的 虚拟巻号码。而且,针对作为对象的虚拟区域,将虚拟巻表(l)中的"页分 配状态,,的值变更为"已,,,将"分配模块"的值变更为"模块(2)",将"池
号码"的值设定为上述选择的页301所属的池的池号码,使复制有无位为 "ON",使"副本模块,,的值为"模块(l)",将"读频率"的值变更为从模 块(2)通知的读频率的值。
然后,路径定义程序2223在所分配的复制目的地页301中存储从;漠块(2) 转发的、在复制源页301中存储的数据的副本(副本数据),(S611 )。然后,路 径定义程序2223向具有与图18中的复制源页对应的副本页的全部模块(除模 块(1 )以外)进行以下通知针对作为复制目的地页301的分配目的地的虚 拟区域,追加了模块(l)作为"副本模块"(例如作为对象的虛拟区域的地址、 和模块(1)的号码)(S612)。
路径定义程序2223通过反复执行S607至S612,针对其它复制源页301 也进行页复制。
接收到步骤S612的通知的模块200内的控制信息更新程序2228,更新该 模块200内的虚拟巻表22121 (S613),并结束处理(S614)。具体而言,针对 根据所通知的地址而确定的虚拟区域,追加"模块(l)" 作为"副本模块" 的值。因此,例如存在3个以上模块200时,作为与一个虚拟区域对应的"副 本模块"的值可以登录多个值(模块号码)。
如上所述,以在模块(1)中定义了路径为契机,可以在模块(1)中生成 已经在模块(2)中对作为路径定义对象的虚拟巻302分配的页301中存储的 数据的副本。而且,关于作为对象的虛拟区域,向已经具有副本数据的全部模 块200通知作为"副本模块"而新增加了模块(l)。由此,具有副本数据的各 模块200可以掌握在哪里生成了副本数据。例如在写处理时使各模块200的页 301同步的处理中利用该信息(使用图24以及图25在后面描述)。
然后,使用图19以及图20,说明在其它模块的页301中发生I/0时,从 其它模块向本模块进行页复制的处理的一例。该处理,在进行了跨越模块的I/O 时,将写入分配给I/0对象虚拟区域的页的数据,从其它模块内的所述页复制 到本模块内的页。图19是写处理时的页复制处理的一例,图20是读处理时的页复制处理的一例。
图19所示的处理例如以下这样来实现。在模块(1)内执行写程序2222。 在模块(2)内执行副本生成程序2226。在具有与图19中的复制源页对应的 副本页的全部模块内执行控制信息更新程序2228。
例如在图14的S1011中,当模块(1)在模块(2)内的页301中存储了 写数据后,模块(1 )的写程序2222判定在模块(1 )内是否存在未分配页301 (S700)。当模块(l)内不存在未分配页301时,由于不存在存储副本数据的 页301,因此结束处理(S715)。
当模块(1 )内存在未分配页301时,写程序2222向模块(2)请求对分 配给写对象虛拟区域的页中的数据进行复制(S701 )。
接收到复制请求的模块(2)的副本生成程序2226参照虚拟巻表(2),检 查写对象虚拟区域的读频率(S702),判定读频率是否高(S703 )。当读频率 低时,副本生成程序2226向模块(1)通知读频率低(S704),结束处理。然 后,模块(1)的写程序2222接收到读频率低的通知(S707:否),然后结束 处理(S715)。
另一方面,当写对象虛拟区域的读频率高(以下,在图19中称为"高读 频率虚拟区域")时(S703:是),副本生成程序2226将分配给高读频率虚拟 区域的页内的凄t据存储在高速緩冲存储部(2)中(S705 )。然后,副本生成程 序2226向模块(1)通知该数据的高速緩沖存储地址、关于分配了复制源页 301的虚拟区域的"分配模块"的值、"地址"的值、"副本模块,,的值以及"读 频率"的值(S706),然后结束处理。
接收到模块(2)的报告的模块(1)的写程序2222,将在分配给高读频 率虛拟区域的复制源页中存储的数据从模块(2)转发至模块(1 ) (S708)。然 后,写程序2222分配模块(1)内的未使用页301,将所转发的数据存储在该 分配的页301中(S709至S711)。然后,写程序2222向具有与图19中的复制 源页对应的副本页的全部模块(除了模块(1)以外)进行以下通知关于作 为复制目的地页301的分配目的地的虛拟区域,追加了模块(1 )作为"副本 模块"(例如,作为对象的虛拟区域的地址和模块(1 )的号码)(S712),并结束处理(S715)。接收到该通知的各模块200更新本模块内的虚拟巻表22121 (S713),并结束处理(S714)。该S708到S714的处理内容与图18的S608 到S614相同。
此外,在图19所示的写处理时的页复制处理中,模块(2)根据存储在虚 拟巻表(2)中的、对象虚拟区域的读频率的值,决定是否将分配给对象虚拟 区域的页301作为复制源。但是,请求页301的复制的模块(1 ),也可以根据 在虛拟巻表(1 )中存储的、对象虚拟区域的读频率的值,决定是否将模块(2) 内的、分配给对象虚拟区域的页301作为复制源。而且,模块(l),关于对象 虚拟区域,也可以根据模块(1)以及(2)的双方中的读频率的值,决定是否 将模块(2)内的、分配给对象虚拟区域的页301作为复制源。
对跨越模块200的读处理时的页复制处理进行说明。该页复制处理,可以 通过与写处理时的页复制处理相同的处理步骤来实现。例如,可以通过在图 13所示的^争越^t块200的读处理的S316和S317之间追加图19所示的用于生 成副本的处理(步骤S700至S715 )来实现。
使用图20说明读处理时的别的页复制处理。读处理与写处理不同,为了 向主机100转发数据,需要从其它模块(2 )向本模块(1 )转发读数据。通过 利用该转发,可以改善读处理时的页复制处理。具体而言,例如当读数据;故存 储在高读频率页301中时,不是从其它模块(2 )向本^f莫块(1)仅转发读数据, 而是本模块(1)在模块(1)内的空闲页301中存储来自模块(2 )的读数据。 由此,可以削减页复制处理中需要的模块间通信的发生次数。
图20所示的处理,例如以下这样来实现。在模块(1)以及(2)内执行 读程序2221。在模块(2)内执行控制信息更新程序2228。
而且,该处理可以通过图13所示的跨越模块200的读处理的变更来实现。 此外,当S504的结果成为"是"的情况下,在模块(l)中已分配了页,因此 不需要复制。因此,省略说明(在图13中已说明)。步骤301的结果成为"是" 的情况下,可以应用以下说明的页复制处理,但与S301的结果成为"否"的 情况下的处理相同,因此省略。
读程序(1)通过执行S504以及S301识别出模块(2 )具有读数据。接着, 读程序(1)对模块(2 )发行读请求(S302 )。从模块(1 )接收到读请求的模块(2)的读程序(2),检查作为存储读数
据的页301的分配目的地的虚拟区域的读频率,判定读频率是否高(S716)。 当读频率低时,才莫块(2)执行使用图13说明的处理(S303以及S304)。
另一方面,当读频率高时,读程序(2)读出分配给读频率高的虚拟区域 的页内的全部数据,并存储在高速緩冲存储部(2)中(S717)。
然后,读程序(2)向模块(1)指示页复制(S718),然后结束处理。此 时,从读程序(2)向模块(1 )通知复制源页301内的转发数据的高速緩冲存 储地址、与作为复制源页301的分配目的地的虚拟区域对应的"分配模块"的 值、"地址,,的值、"副本模块"的值、"读频率"的值。
从模块(2 )接收到上述通知的模块(1 )的读程序(1 ),从模块(2 )向 模块(1)转发所通知的高速缓冲存储地址表示的高速緩冲存储区域中的数据 (S719 )。然后,读程序(1 )判定来自模块(2 )的通知是否是页复制指示(S720 )。 当不是页复制指示时(S720:否),读程序(1)向主机100转发从模块(2) 转发的读数据,然后结束处理(S724)。
另一方面,当通知是页复制指示时(S720:是),读程序(l)判定在模块 (1)内是否存在未分配页301 (S721)。当模块(1)内不存在未分配页301 时(S721:否)进行S724。当模块(1)内存在未分配页301时(S721:是), 读程序(1)分配模块(1)内的未使用页301,在所分配的页301中存储所转 发的数据(S722)。然后,读程序(1)向具有与图20中的复制源页对应的副 本页的全部模块(除了模块(1)以外)通知在"副本模块,,中追加了模块(1 )。 接收到该通知的各模块200,更新本模块200内的虚拟巻表22121 (作为"副 本模块"的值,追加"模块(l)"),并结束处理(S723 )。 S722的处理与图 19的S708到S711相同。而且,S723的处理,与图19的S712到S714相同。 读程序(1)在执行S723后向主机100转发读数据,然后结束处理(S724 )。
此外,当步骤S301的结果成为"是,,时,通过将步骤S312以及S313变 更为步骤S716至S718,将步骤S315以及S316变更为步骤S719至S724,可 以进行页复制处理。
然后,使用图21至图23,说明在本模块内的页301中发生I/0时,从本 模块向具有到作为1/0对象的虚拟巻302的路径的其它模块进行页复制的处理的一例。
为了实现该处理,本模块200需要能够识别出哪个模块200具有到作为I/O 对象的虚拟巻302的路径。这例如可以通过图21所示的路径信息表22111来 实现这一点。即,在实施例1中的路径信息表2211中针对每条路径追加路径 已定义模块号码。"路径已定义模块号码",是具有到根据巻号码而识别的虚拟 巻302的路径的、模块200的模块号码。当多个模块200具有到根据巻号码而 识別的虚拟巻302的路径时,作为"路径已定义模块号码"的值,存储多个模 块200的模块号码。
使用图22说明路径定义时的各模块200中的路径信息表22111的路径已 定义模块号码的更新处理。以下,将具有在路径定义中使用的端口 261的模块 200作为模块(1 )、将已经具有到对象虚拟巻302的路径的模块200作为模块 (2)来说明该更新处理。
通过由维护终端270的CPU271执行维护程序273,并在模块(1 )以及 (2)内执行路径定义程序2223来实现该处理。而且,该处理可以设为图11 所示的路径定义处理的变形例。
维护程序273对模块(1)发行路径定义指示(S800)。此时,维护程序 273除了向模块(1)通知由用户指定的端口 261的端口号码、所指定的虚拟 巻302的巻号码以外,还通知已定义了到该巻号码的虚拟巻302的路径的模块 200的模块号码。
接收到路径定义指示的模块(1)的路径定义程序2223,通过与图11的 处理相同地执行步骤S202至204,根据需要来更新虚拟巻表22121。
然后,路径定义程序2223在路径信息表22111中登录所指定的端口 261 的端口号码、所指定的虚拟巻302的巻号码、模块(1)的模块号码、以及路 径已定义模块200的模块号码(S801)。此外,在路径已定义模块200的模块 号码中登录从维护程序273通知得到的值。
在路径信息表22111的更新后,路径定义程序2223向维护终端270的维 护程序273报告完成(S206 )。
维护程序273向已经具有到路径定义的对象虚拟巻302的路径的模块(2 ) 通知模块(1)新实施了路径定义(S802),然后等待来自模块(2)的完成报告(S803 )。此外,此时,维护程序273向模块(2)传送模块(1 )的模块号 码、以及对象虚拟巻302的巻号码。
为了执行步骤S802,例如维护程序273需要能够识别到模块(2 )具有到 对象虚拟巻302的路径。例如可以如下这样实现这一点。即,维护程序273 以前向模块(2)指示了到对象虚拟巻302的路径定义。通过将该以前的指示 内容存储在维护终端270的存储器272中,维护程序273可以识别出模块(2 ) 具有到对象虚拟巻302的路径。
接收到来自维护程序273的通知的模块(2 )的路径定义程序2223更新路 径信息表22111 (S804)。具体而言,路径定义程序2223,追加所通知的才莫块 (1)的模块号码作为与所通知的巻号码对应的行的"路径已定义模块号码" 的值。在路径信息表22111的更新后,路径定义程序2223向维护终端270报 告完成(S805 )。
维护程序273从模块(2 )的路径定义程序2223接收到完成报告(S806 ), 并结束处理(S807 )。
此外,在图22的例子中,对已经具有到对象虛拟巻302的路径的模块200, 仅为模块(2)的情况进行了说明,但当存在3个以上的模块200时,维护程 序273对于模块(2 )以外的各模块200也执行步骤S802到S807。
通过以上这样,具有到对象虚拟巻302的路径的全部模块200可以识别为 具有到该虚拟巻302的路径的模块200。
使用图23,说明在I/O处理时向具有到I/O对象虚拟巻302的路径的其它 模块进行页复制的处理的一例。此时,以从主机100接收I/O请求的本模块200 作为模块(1 ),以新成为复制目的地的模块200作为模块(2)。以下,假定作 为1/0请求而接收到写请求。
在执行图12的步骤S506后,写程序(1 )参照虚拟巻表(1 ),检查写对 象虛拟区域的读频率,判定读频率是否高(S900)。当读频率低时(S900:否), 写程序(1)结束处理(S卯4)。
另一方面,当读频率高时(S900:是),写程序(1)针对高读频率虚拟区 域,判定是否存在具有到写对象巻的路径、并且不具有副本的模块200( S901 )。 具体而言,写程序(i)检查路径信息表(1)的"路径已定义模块号码"以及
37虚拟巻表(l)中的高读频率虚拟区域所对应的"副本模块"。当不存在相应的
模块200时(S901:否),写程序(1)结束处理(S卯4)。在此,所谓"相应 的模块",是指不包含在虚拟巻表(l)的"副本^^莫块"的值中的、而且包含在 路径信息表(1)的"路径已定义模块号码"的值中的模块。
当存在相应的模块200 (在此例中为模块(2))时(S901:是),写程序 (1)将存储在分配给高读频率虚拟区域的复制源页301中的数据存储在高速 緩冲存储部(1 )中(S卯2 ),并向相应的模块200 (模块(2 ))请求复制(S903 )。 此时,写程序(1)向模块(2)通知该数据的高速緩冲存储地址、关于该高读 频率虚拟区域的"分配模块,,的值、"地址,,的值、"副本模块"的值、以及"读 频率"的值。
写程序(1 )为了进一步向别的模块200进行页复制,反复执行S901至 S903。
对模块(2)的处理进行说明。从模块(1)接收到复制指示的模块(2) 的副本生成程序2226判定在模块(2)中是否存在未分配页301 (S905 )。当 不存在未分配页301时(S905:否),结束处理(S卯8 )。反之,当存在未分 配页301时(S905:是),副本生成程序2226将对象数据从模块(1)(所通知 的高速緩冲存储地址)向模块(2)转发,并存储在模块(2)内的未分配页 301中(S卯6)。该处理与图18的步骤S608至S611相同。
然后,副本生成程序2226向具有分配给对象虛拟区域的页301的全部才莫 块200 (除了模块(2)、包含模块(l))通知作为"副本模块"而新追加了模 块(2)。接收到该通知的各模块200,追加"模块(2)"作为该模块200内 的虚拟巻表22121的"副本模块"的值(S907)。该处理与图18的步骤S612 至S614相同。
如上所述,在写处理时可以将写数据等对象数据向其它模块200复制。此 外,在说明中以写处理为例来说明,但在读处理的情况下也同样可以实现。
另夕卜,关于有的虚拟区域,当仅在接收到写请求的模块200中更新数据时, 在该模块200中有更新后的数据,其它模块200中的副本数据为更新前的数据。 即数据的内容变得不同。在这种情况下,当其他模块200从主机IOO接收以上 述有的虚拟区域作为读对象区域的读请求时,有可能将更新前的数据转发至主机亂
以下,说明避免这样的不一致状态的写处理。具体而言,说明在写时删除 副本页的方法、和在写时更新全体副本数据的方法。此时,以接收到写请求的
本模块200内所存在的数据作为原始数据,以与该数据相同内容的、存在于其 它模块200内的数据作为副本数据。
使用图24,说明在写处理时删除本模块200以外的模块200具有的副本 页的处理的一例。此时,以本模块200作为模块(1),以具有副本页的其它才莫 块200作为模块(2)来进行说明。
图24所示的处理如下这样来实现。例如,在模块(1 )内执行写程序2222。 在模块(2)内执行副本删除程序2227。
而且,该处理是图12以及图14所示的写处理的变形例。具体而言,在图 12的情况下,可以在步骤S504和S505之间追加图24所示的用于删除副本的 处理(步骤S1100到S1107)。另外,在图14的情况下,可以在步骤1011(与 从步骤S104到S115相同)内的Slll和S112之间追加图24所示的用于删除 副本的处理(步骤S1100到S1107)。此外,图24中表示了在图12的处理中 追加了用于删除副本的处理(步骤S1100到S1107)后的所有步骤。
写程序2222识别出写数据在模块(1 )中(S500到S504 )。
然后,写程序2222通过参照虚拟巻表(1 ),检查是否存在具有与写数据 对应的副本数据的模块200 (SllOO)。具体而言,写程序(1)参照与写对象 虛拟区域对应的"副本模块"。当不存在相应的模块200时(S1100:否),写 程序(1 )执行写处理(S505到S509 )。
当存在相应的模块200 (模块(2))时(S1100:是),写程序(1)向模 块(2)请求副本页的删除(SllOl)。此时,写程序(1)例如向模块(2)通 知作为写对象的虚拟巻的巻号码、以及写对象虚拟区域的地址。
接收到副本页301的删除请求的模块(2 )的副本删除程序2227确定模块 (2)内的副本页301 (S1102)。具体而言,副本删除程序2227使用从模块(1) 通知的虛拟巻号码以及地址来参照虚拟巻表(2)。
然后,副本删除程序2227通过更新页表(2)以及虚拟巻表(2),解除 S1102中所确定的页301的、对于虚拟区域的分配(释放该页301) (S1103、S1104)。具体而言,关于在S1102中确定的页301,将页表(2)中的"状态" 的值变更为"未分配",将"分配目的地"的值变更为"-"。而且,关于作为 该页301的分配目的地的虚拟区域,将虚拟巻表(2)中的"分配模块"的值 变更为"模块(l)",而且将"副本模块,'的值变更为"-"。如此来删除副本 数据。即,在实施例2中,所谓"副本页的删除",是指解除副本页的分配(即, 该页的"状态"从"已分配,,变为"未分配,,)。
在副本页的删除后,副本删除程序2227向模块(1 )报告完成(S1105 )。 写程序(1 )当从模块(2)接收完成报告时(S1106),更新虚拟巻表(1 ) (S1107)。具体而言,将虚拟巻表(l)的"分配模块"的值变更为"模块(l)", 而且将"副本模块"的值变更为"-"。
接着,写程序(1)为了进一步删除别的模块200具有的副本页,反复执 行SllOO到S1107。
通过以上这样,可以删除其它模块200具有的副本页。 接着,使用图25说明在写处理时更新全体副本页的处理的一例。此时, 以本模块200作为模块(1)、以具有副本数据的其它模块200作为模块(2) 来进行说明。
通过在模块(1 )以及(2 )内执行写程序2222来实现图25所示的处理。 而且,该处理是图12以及图14所示的写处理的变形例。具体而言,在图 12的情况下,在步骤S504和S505之间追加图25所示的用于更新其它才莫块 200的副本的处理(从步骤S1200到S1204)。另外,在图14的情况下,在步 骤1011 (与从步骤S104到S115相同)内的Slll和S112之间追加图25所示 的用于更新其它模块200的副本的处理(从步骤S1200到S1204)。此外,在 图25中表示出追加了用于更新其它模块200的副本的处理(从步骤S1200到 S1204)后的全体步骤。
写程序(1 )识别出写数据在模块(1)中(从S500到S504 )。 然后,写程序(1 )通过参照虛拟巻表(1 ),检查是否存在具有写数据的 副本数据的模块200 (S1200)。具体而言,写程序(1)参照与写对象虚拟区 域对应的"副本模块"。当不存在相应的模块200时(S1200:否),写程序(1) 执行写处理(从S505到S509 )。当存在相应的模块200 (模块(2))时(S1200:是),写程序(1)将写 数据存储在高速緩冲存储部223中(S1201),并向模块(2)请求写数据的写 入(S1202)。
接收到写数据的写入请求的模块(2)的写程序(2),在模块(2)内的副 本页301中存储写数据,然后结束处理(S1203 )。该处理与图4的步骤S110 到S113相同。
写程序(1),当从模块(2)接收到完成报告时(S1204),为了进一步更 新别的片莫块200具有的副本页301,反复执行S1200到S1204。
如上所述,可以伴随写数据的更新来更新其它模块200具有的副本页内的 数据。此外,作为副本页的更新,可以采用例如第一和第二更新方法的任意一 种。第一更新方法是在已分配给虚拟区域的副本页中存储的数据上覆盖更新后 的副本数据的方法。第二更新方法是对于作为副本页的分配目的地的虚拟区 域,代替该副本页而分配存储了更新后的副本数据的新的副本页的方法。
以下,使用图26至图28说明(1)页301的分配时的副本页删除、(2) 路径删除时的副本页删除、以及(3)基于时间的副本页删除。
首先,使用图26说明页301的分配时的副本页删除的处理的一例。未对 作为写对象的虚拟区域分配页时,可能不存在能够分配给该虛拟区域的页
301。此时,通过删除副本页301可以确保用于存储写数据的页。在以下的说 明中,将从主机100接收写请求的模块200作为模块(1),将具有作为删除对 象的副本页的模块200作为模块(2)。
图26所示的处理例如以下这样来实现。即,在模块(1 )内执行页分配程 序2225,在模块(2)内执行控制信息更新程序2228。
而且,该处理可以通过图15所示的页分配处理的变更来实现。具体而言, 在即将进行图15的步骤S405之前,追加用于释放本模块200内的副本页301 的处理(从S1300到S1309)。
当新分配了页301时,模块(1)的页分配程序2225判断在才莫块(1 )内 是否存在未使用页301 (S400、 S401)。
当在模块(1)内不存在未使用页301时(S401:否),页分配程序2225 判定在模块(1 )内是否存在副本页301 ( S腦)。具体而言,从虛拟巻表22121
41中检索"复制有无位"的值为"ON"的行。此外,写对象巻以外的巻也是^r 索的对象。即,也可以删除分配给写对象巻以外的虚拟巻302的副本页。当检 索的结果是不存在副本页301时(S1300:否),执行图15的S405到S416, 然后结束处理(S1301 )。
另一方面,当存在副本页301时(S1300:是),页分配程序2225参照副 本页301的"读频率",决定"读频率"的值最低的页301 (S1302)。
页分配程序2225通过更新页表(i )以及虛拟巻表(1 ) ( S1303、 S1304 ) 来释放副本页301。具体而言,在页表(1)中,将副本页301的"状态"的 值变更为"未分配",将"分配目的地"变更为"-"。而且,在虚拟巻表(l) 中,从与作为副本页301的分配目的地的虚拟区域对应的"分配模块"以及"副 本模块"的值中删除"模块(l)"。
然后,页分配程序2225判定是否存在具有与所释放的副本页301对应的 副本页的其它模块200 (模块(2)) (S1305 )。当存在时(S1305:是),页分 配程序2225向相应的其它模块200通知释放了副本页301 (S1306)。相应的 其它模块例如是与分配了所释放的副本页的虛拟区域对应的"副本模块"的值 所对应的模块。页分配程序2225在S1306时向模块(2 )通知分配了所释放的 副本页的虚拟区域所对应的"地址,,的值、和"虚拟巻号码"的值。
从模块(1)接收到通知的模块(2)内的控制信息更新程序2228,对于 虚拟巻表(2)中的、与上述通知的"地址"以及"虚拟巻号码"对应的"分 配模块,,以及"副本模块"的值,删除"模块(l)" (S1307)。此后,控制信 息更新程序2228向模块(1)报告完成(S1308 )。
模块(1)的页分配程序2225接收来自模块(2)的完成报告(S1309)。 然后,页分配程序2225反复执行S1305到S1309。
完成向具有与所释放的副本页301对应的副本页的全部模块200的通知 时,页分配程序2225返回S401,执行与写请求对应的页分配处理(从S402 到S404)。由于释放了副本页301,因此S401的判定成为"是"。
通过如上所述这样释放副本页301,可以避免由于页不足而导致的不可写 的状况。
接着,使用图27说明在路径删除时删除副本页的处理的一例。当删除到虚拟巻的路径时,具有删除对象路径所使用的端口 261的模块
200不再从主机100接收I/O请求。因此,此时执行副本页删除是有效率的。
以具有删除对象路径所使用的端口 261的模块200作为模块(1 ),以具有 到成为删除对象路径的目的地的巻的别的路径的模块200作为模块(2)来进 行说明。
图27所示的处理,例如以下这样来执行。在模块(1 )内执行路径删除程 序2224。在模块(2)内执行副本生成程序2226、路径删除程序2224、以及 控制信息更新程序2228。此外,以来自模块(1)的通知为契机来执行这些模 块(2)的程序。
首先,路径删除程序(l)接收路径删除的指示(S1400)。此外,虽未图 示,但该指示是来自维护终端270的维护程序273的指示。
然后,路径删除程序(1)判定是否存在具有到对象路径的目的地巻的路 径、并且未通知模块(1)的路径删除的其它模块200 (S1401)。当存在相应 的模块200时,路径删除程序2224向相应的模块200通知路径信息表22111 的更新(S1402)。此时,路径删除程序2224通知目的地巻的巻号码。
从路径删除程序(1 )接收到路径信息表22111的更新通知的模块(2)的 路径删除程序(2 ),更新可以根据路径信息表22111的目的地巻的巻号码来确 定的路径信息(S1403 )。具体而言,对于"路径已定义模块"的值,删除"模 块(l)"。
在删除后,路径删除程序(2)向模块(1)报告完成(S1404)。 模块(1)的路径删除程序(1 )接收来自模块(2 )的完成报告(S1405 )。 然后,路径删除程序(1 )为了向具有到目的地巻的路径的其它模块200通知 路径信息表2211的更新,反复执行S1401到S1405。
当向具有到目的地巻的路径的全部模块200通知路径信息表22111的更新 后,路径删除程序(1)进入S1406。 S1406以后的步骤是将仅模块(1)具 有的页301向其它模块200复制的处理;以及在模块(1)中删除已向模块(1) 以外的模块200复制过的页301的处理。当路径被删除时,模块(1)不从主 机100接收I/0。因此,如上所述向其它模块200副本页301的方式,跨越模 块200的I/O的发生频率变低。路径删除程序(1)判定在对删除对象路径的目的地巻分配的页301中,
是否存在仅模块(1 )具有的页301 ( S1406 )。通过在虚拟巻表(1 )中寻找"复 制有无位"的值为"OFF"、并且"分配模块"的值为"模块(l)"的行可以 实现该处理。当存在仅模块(1 )具有的页301时,路径删除程序(1 )判定是 否存在具有到删除对象路径的目的地巻的路径的其它模块200 ( S1407 )。当存 在具有到目的地巻的路径的其它模块200 (模块(2))时,路径删除程序(1) 向模块(2 )复制仅模块(1)具有的页301内的数据(S1408 )。该处理与使用 图23说明的S卯2到S卯8相同。接着,路径删除程序(1)从模块(1)中删 除分配给目的地巻的页301中的、在模块(1)以外的模块中存在副本页的页 301 (S1409)。该处理与使用图26说明的S1303到S1309相同。另夕卜,当步 骤S1406以及S1407的判定结果为"否"时,跳过S1408,进行S1409。
接着,路径删除程序(1)判定在分配给删除对象路径的目的地巻的页301 中,是否存在仅模块(1)具有的页301 (S1410)。在该判定中,"是(存在)", 是指从S1407进入S1409的情况、以及在S1408中无法将仅模块(1 )具有的 全部页301向模块(2)复制的情况。在这种情况下,由于有可能经由其它模 块200具有的端口 261读写模块(1)内的数据,因此无法从虚拟巻表(1)中 删除对象巻的信息。因此,路径删除程序(1 )跳过S1411,进入S1412。
另一方面,在S1410的判定中成为"否(不存在)"的情况下,路径删除 程序(1)从虛拟巻表(1 )中删除目的地巻的信息,进入S1412。
路径删除程序(1)从路径信息表(1)中删除作为删除对象的路径信息, 然后报告完成(S1413)。此外,完成的报告目的地是维护终端270的维护程序 273。 -
使用图28,说明将从写入副本数据起经过一定时间之后的副本页301删 除的处理的一例。此外,该处理也可以与所述的写时的副本页删除、新分配页 时的副本页删除、路径定义时的副本页删除并用。
此外,虽未图示,但为了实现该处理,在虛拟巻表22121中记录了分配页 301的时刻(以后,称为页分配时刻)。另外,以下,将不删除副本页301而 保留的时间长度称为"副本时间长"。以下,釆用模块(l)中的处理为例进行 说明,但该处理在各模块中通过副本删除程序2227来进行。
44副本删除程序(1)以巻号码为"0"的虚拟巻的先头虚拟区域(在本实施
例中,地址"0"到"99")作为处理对象(S1500)。
然后,副本删除程序(1 )判定处理对象虚拟区域是否已分配了页(S1501 )。 当已分配页时,副本删除程序(1 )判定在模块(1 )中分配的页301是否是在 其它模块200中分配的页301的副本(S1502)。这一点可以参照虚拟巻表(1 ), 根据作为"副本模块"的值而是否存在"模块(l)"来进行判断。
当S1501或S1502的结果为"否"时,副本删除程序(l)判定当前的处 理对象虚拟区域是否是处理对象巻的末尾(S1506 )。在当前的处理对象区域是 巻的末尾时,副本删除程序(1)以下一巻(下一巻号码的巻)的先头虚拟区 域作为下一个处理对象(S1507),然后返回S1501。另一方面,在当前的处理 对象虚拟区域不是巻的末尾时,副本删除程序(1)以同一巻内的下一虚拟区 域作为处理对象(S1508 ),然后返回S1501。
另一方面,当S1501以及S1502都为"是"时,副本删除程序(1)从虚 拟巻表(1)得到与处理对象虚拟区域对应的"页分配时刻"的值(S1503 )。 然后,副本删除程序(1 )判定(副本时间长+页分配时刻)是否大于当前时 刻(S1504)。当(副本时间长+页分配时刻)在当前时刻以上时,由于超过了 副本时间长,因此副本删除程序2227删除分配给处理对象区域的副本页301 (S1505 )。该删除处理与使用图26说明的S1303到S1309相同。另一方面, 当(副本时间长+页分配时刻)比当前时刻小时,关于分配给处理对象虛拟区 域的副本页301,由于未超过副本时间长、不需要删除,因此副本删除程序2227 进入S1506。
如上所述,可以才艮据时间删除副本页。此外,可以才艮据副本页301的读频 率来自动地变更副本时间长。例如,关于分配给读频率高的虛拟区域的副本页, 副本时间长可以进一步增长。具体而言,例如在图28的S1504中,可以参照 与分配给处理对象虛拟区域的副本页301对应的"读频率"的值,根据该值变 更副本时间长。
以上说明了本发明的几个适当的实施例,但它们只是用于说明本发明的例 子,并不意味着将本发明的范围仅限定于这些实施例。本发明也可以通过其它 各种方式来实施。例如,可以代替识别号码而采用其它种类的识别符。例如, 可以如图29所示,在一个模块间进行紧耦合,在其它模块间进行松耦合。
权利要求
1.一种从上位装置接收I/O请求并进行处理的存储系统,其特征在于,具有从所述上位装置接收I/O请求的第一以及第二模块,所述第一模块具备第一端口,其与所述上位装置连接;第一虚拟卷,其由多个第一虚拟区域构成,与所述第一端口关联;第一存储器区域,其存储与各第一虚拟区域相关的信息、即第一虚拟区域管理信息;第一物理存储装置;第一池,其由基于所述第一物理存储装置的多个第一实际区域构成;第一I/O处理器部,其处理从所述上位装置经由所述第一端口接收到的I/O请求;以及第一模块接口装置,其与所述第二模块连接,所述第一虚拟区域管理信息,针对每个所述第一虚拟区域,包含具有已分配的实际区域的模块、即分配模块的识别符,所述第二模块具备第二端口,其与所述上位装置连接;第二虚拟卷,其由多个第二虚拟区域构成,与所述第二端口关联,并且关联了与所述第一虚拟卷所关联的卷识别符相同的卷识别符;第二存储器区域,其存储与各第二虚拟区域相关的信息、即第二虚拟区域管理信息;第二物理存储装置;第二池,其由基于所述第二物理存储装置的多个第二实际区域构成;第二I/O处理部,其处理从所述上位装置经由所述第二端口接收到的I/O请求;以及第二模块接口装置,其与所述第一模块连接,所述第二虚拟区域管理信息,针对每个所述第二虚拟区域,包含具有已分配的实际区域的模块、即分配模块的识别符,(A)当所述第二模块从所述上位装置接收到写请求(W1)时,若未对根据所述写请求(W1)确定的作为写对象的第二虚拟区域(V21)分配第二实际区域,则所述第二I/O处理部从所述多个第二实际区域中寻找未分配的第二实际区域(R21)来分配给所述第二虚拟区域(V21),在所述第二实际区域(R21)中写入遵从所述写请求(W1)的数据,在所述第二虚拟区域管理信息中,作为与所述第二虚拟区域(V21)对应的所述分配模块识别符,写入所述第二模块的识别符,(B)当所述第一模块从所述上位装置接收到写请求(W2)时,若未对根据所述写请求(W2)确定的作为写对象的第一虚拟区域(V11)分配第一实际区域,则所述第一I/O处理部从所述多个第一实际区域中寻找未分配的第一实际区域(R11)来分配给所述第一虚拟区域(V11),在所述第一实际区域(R11)中写入遵从所述写请求(W2)的数据,在所述第一虚拟区域管理信息中,作为与所述第一虚拟区域(V11)对应的所述分配模块识别符,写入所述第一模块的识别符。
2.根据权利要求1所述的存储系统,其特征在于,所述第一虚拟区域管理信息,针对每个所述第一虚拟区域,包含副本模块 的识别符,所述副本^f莫块是具有存储了副本数据的实际区域的模块,所述副本 数据是复制在与所述第 一虚拟区域对应的所述分配模块内的实际区域中存储 的数据而得的数据,所述第二虚拟区域管理信息,针对每个所述第二虚拟区域,包含副本模块 的识别符,所述第 一模块还具有第 一数据复制部,(C) 所述第一数据复制部,将所述第二实际区域(R21)中存储的数据 的副本数据,写入作为所述多个第一实际区域中的未分配的实际区域的、分配 给与所述第二虚拟区域(V21)相同地址的第一虚拟区域(V12)的实际区域(R12),在所述第一虚拟区域管理信息中,作为与所述第一虛拟区域(V12) 对应的所述副本模块识别符,写入所述第 一模块的识别符,(D )所述第一模块,当从所述上位装置接收到以所述第一虛拟区域(V12 ) 作为读对象的读请求时,通过参照所述第一虚拟区域管理信息,即使与所述第一虚拟区域(V12)对应的所述分配模块不是所述第一模块,只要确定了与所 述第一虚拟区域(V12)对应的所述副本模块是所述第一模块,就从所述实际 区域(R12)读出数据,将所述取得的数据转发到所述上位装置。
3. 根据权利要求2所述的存储系统,其特征在于, 所述第二模块还具备第二数据复制部,(E)所述第二数据复制部,通过参照所述第二虚拟区域管理信息,确定 在分配给所述第二虚拟区域(V21)的所述第二实际区域(R21)中存储的数 据没有被复制,所述第一数据复制部,针对与所述确定的所述第二虚拟区域(V21)对应 的所述第一虚拟区域(V12),执行所述(C)的处理。
4. 根据权利要求2或3所述的存储系统,其特征在于, 所述第一虚拟区域管理信息,针对每个所述第一虚拟区域,包含每单位时间内将第一虚拟区域作为读对象的次数、即读频率,所述第一I/0处理部根据 读请求的接收,更新与遵从该读请求的作为读对象的第一虚拟区域对应的所述 读频率,所述第二虚拟区域管理信息,针对每个所述第二虚拟区域,包含每单位时 间内将第二虚拟区域作为读对象的次数、即读频率,所述第二i/o处理部根据 读请求的接收,更新与遵从该读请求的作为读对象的第二虚拟区域对应的所述 读频率,当与所述第一虚拟区域(V12)以及所述第二虚拟区域(V21)中至少一 方对应的所述读频率高于基准值时,向所述实际区域(R12)进行数据复制。
5. 根据权利要求4所述的存储系统,其特征在于,所述第一虚拟区域管理信息,针对每个所述第一虚拟区域,包含每单位时 间内将第一虚拟区域作为写对象的次数、即写频率,所述第一I/0处理部根据 写请求的接收,更新与遵从该写请求的作为写对象的第一虚拟区域对应的所述 写频率,所述第二虚拟区域管理信息,针对每个所述第二虚拟区域,包含每单位时 间内将第二虚拟区域作为写对象的次数、即写频率,所述第二I/0处理部根据 写请求的接收,更新与遵从该写请求的作为写对象的第二虚拟区域对应的所述写频率,与所述第一虚拟区域(V12)以及所述第二虚拟区域(V21)中至少一方 所对应的所述读频率进行比较的所述基准值,是基于与所述第一虚拟区域 (V12)以及所述第二虚拟区域(V21)中至少一方所对应的写频率的值。
6. 根据权利要求2所述的存储系统,其特征在于,在所述第一模块中定义所述第一虚拟巻之前,对在所述第二模块中定义的 所述第二虚拟巻的所述第二虚拟区域(V21)分配所述实际区域(R21),以在所述第 一模块中定义了与所述第 一端口关联的所述第 一虚拟巻为契 机,所述第一模块从所述第二模块取得在所述第二实际区域(R21)中存储的 数据的所述副本数据。
7. 根据权利要求2所述的存储系统,其特征在于,在所述(A)中,以在所述第二实际区域(R21)中写入遵从所述写请求 (Wl)的数据为契机,所述第一模块从所述第二模块取得在所述第二实际区 域(R21)中存储的数据的所述副本数据。
8. 根据权利要求2所述的存储系统,其特征在于,(F )所述第二 I/O处理部向所述第一模块通知对所述第二虛拟区域(V21) 分配了第二实际区域,所述第一 I/O处理部在所述第一虚拟区域管理信息中, 作为与所述第二虚拟区域(V21)相同地址的第一虚拟区域(V12)所对应的 模块识别符,写入所述第二模块的识别符,(G) 所述第一模块,当从所述上位装置接收到以与所述第二虚拟区域 (V21)相同地址的第一虚拟区域(V12)作为读对象的读请求时,通过参照所述第一虚拟区域管理信息,确定对所述第一虛拟区域(V12)分配的实际区 域位于所述第二模块中,从所述第二模块取得在分配给所述第二虛拟区域 (V21)的所述第二实际区域(R21)中存储的数据,将所述取得的数据转发 到所述上位装置,在所述(G)中,以取得在所述第二实际区城(R21)中存储的数据为契 机,进行所述(C)。
9. 根据权利要求2所述的存储系统,其特征在于,(H) 所述第二模块,当从所述上位装置接收到以分配了所述第二实际区域(R21)的所述第二虚拟区域(V21)作为写对象的写请求(W3)时,将在 以所述第二虛拟区域(V21)作为分配目的地的第二实际区域中存储的数据, 作为遵从所述写请求(W3)的数据,以所述(H)为契机,所述第一模块从所述第二模块取得在分配给所述第 二虚拟区域(V21)的第二实际区域中存储的、遵从所述写请求(W3)的数 据,将在以所述第一虛拟区域(V12)作为分配目的地的第一实际区域中存储 的数据,作为遵从所述写请求(W3)的数据的副本数据。
10. 根据权利要求2所述的存储系统,其特征在于, 所述第一模块还具有第一副本删除部,所述第 一副本删除部,解除所述分配模块是所述第二模块所述副本模块是 所述第一模块的、对于作为册〗除对象的所述第一虛拟区域的所述第一实际区域 的分配。
11. 根据权利要求IO所述的存储系统,其特征在于,所述第一副本删除部,以解除了所述第一端口针对所述第一虚拟巻的关联 为契机,解除对于所述作为删除对象的第一虚拟区域的所述第一实际区域的分 配。
12. 根据权利要求IO所述的存储系统,其特征在于,所述第 一副本删除部,以未分配的所述第 一实际区域的数量变为预定数以 下为契机,解除对于所述作为删除对象的第一虛拟区域的所述第一实际区域的 分配。
13. 根据权利要求12所述的存储系统,其特征在于,所述第 一副本删除部,优先将所述读频率低的第 一虚拟区域设为所述作为 删除对象的第 一虛拟区域。
14. 根据权利要求IO所述的存储系统,其特征在于, 所述第一模块从所述上位装置接收写请求(W4 ),所述第一副本删除部,当未对根据所述写请求(W4)确定的作为写对象 的第一虚拟区域(V4)分配第二实际区域、而且所述第一模块不具有未分配 的所述第一实际区域时,解除对于所述第一虛拟区域(V12)的所述第一实际 区域(R12)的分配。
15. 根据权利要求10至14中任意一项所述的存储系统,其特征在于,所述第 一 副本删除部解除在写入所述副本数据后经过了 一定时间的第一 实际区域的分配。
16. —种在具有多个模块的存储系统中实现的存储控制方法,所述多个模 块从上位装置接收I/O请求并进行处理,所述存储系统具有与所述上位装置连 接的端口、物理存储装置、由基于所述物理存储装置的多个实际区域构成的池、 以及与其它模块连接的模块接口装置,该存储控制方法的特征在于,所述多个模块具有,由关联了同 一巻识别符的多个虚拟区域构成的虚拟巻,作为从所述上位装置接收到写请求的所述^f莫块的第 一模块,若未对根据所 述写请求确定的作为写对象的虚拟区域分配实际区域,则从所述第一模块内的区域,在所述已分配的实际区域中写入遵从所述写请求的数据。
17. 根据权利要求16所述的存储控制方法,其特征在于,所述第 一模块向所述多个模块中的所述第 一模块以外的第二模块通知对 所述作为写对象的虚拟区域分配了所述本模块内的实际区域,某个所述第二模块,将在所述分配的实际区域中存储的数据的副本数据, 写入作为所述某个第二模块内的多个实际区域中的未分配的实际区域的、分配 给与所述作为写对象的虚拟区域相同地址的虚拟区域的实际区域中,某个所述第二沖莫块,当从所述上位装置接收到以与所述作为写对象的虚拟 区域相同地址的虚拟区域作为读对象虚拟区域的读请求时,从对该虚拟区域分 配的、所述某个第二模块内的实际区域中读出数据,转发到所述上位装置。
18. —种从上位装置接收I/0请求的存储系统的模块,其特征在于, 具备与所述上位装置连接的端口;由多个虚拟区域构成的虛拟巻;存储与各虚拟区域相关的信息、即虚拟区域管理信息的存储介质; 物理存储装置;由基于所述物理存储装置的多个实际区域构成的池; 处理从所述上位装置经由所述端口接收到的I/O请求的I/O处理部;以及与其它模块连接的模块接口装置,在所述虚拟巻上,关联了与其它模块具有的虚拟巻所关联的巻识别符相同 的巻识别符,所述虚拟区域管理信息,针对每个虚拟区域,包含具有已分配的实际区域 的模块、即分配模块的识别符,当从所述上位装置接收到写请求时,若未对根据所述写请求确定的作为写 对象的虚拟区域分配实际区域,则所述I/O处理部从该冲莫块内的所述多个实际 区域中寻找未分配的实际区域来分配给所述作为写对象的虚拟区域,在所述分 配的实际区域中写入遵从所述写请求的数据。
19. 根据权利要求18所述的存储系统模块,其特征在于,还具有第一副本处理部,其将在所述已分配的实际区域中存储的数据的副 本数据转发到该模块以外的其它模块。
20. 根据权利要求18或19所述的存储系统模块,其特征在于, 还具有第二副本处理部,其从该模块以外的其它模块取得在所述其它模块内的实际区域中存储的数据的副本数据,在所述其它模块中,在分配给与其实 际区域的分配目的地虚拟区域相同地址的、该模块内的虚拟巻中的虚拟区域的 实际区域中,写入所述取得的副本数据。
21. 根据权利要求1所述的存储系统,其特征在于,当所述第一模块从所述上位装置接收到读请求时,若已对根据所述读请求 确定的作为读对象的虚拟区域分配了第一实际区域,则所述第一 I/O处理部从 所述第一实际区域读出遵从所述读请求的数据,并将所述读出的数据向主机转 发。
全文摘要
本发明提供一种具有多个存储系统模块的存储系统。使得在模块结构的存储系统中尽量不发生模块间通信。多个模块(1)和(2)具有与同一卷识别号码关联的多个虚拟卷(302)。从上位装置(100)接收到写请求的模块(2),若未对遵从该写请求的作为写对象的虚拟区域分配实际区域,则不从其它模块(1)内的多个实际区域、而从本模块(2)内的多个实际区域中寻找未分配的实际区域。模块(2)对作为写对象的虚拟区域分配在本模块内寻找出的实际区域,在该实际区域中写入遵从写请求的数据。
文档编号G06F12/08GK101556529SQ20091000419
公开日2009年10月14日 申请日期2009年2月20日 优先权日2008年4月7日
发明者出口彰, 森下升, 竹内久治, 里山爱 申请人:株式会社日立制作所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1