[go: up one dir, main page]

JP2009251970A - 複数のストレージシステムモジュールを備えたストレージシステム - Google Patents

複数のストレージシステムモジュールを備えたストレージシステム Download PDF

Info

Publication number
JP2009251970A
JP2009251970A JP2008099797A JP2008099797A JP2009251970A JP 2009251970 A JP2009251970 A JP 2009251970A JP 2008099797 A JP2008099797 A JP 2008099797A JP 2008099797 A JP2008099797 A JP 2008099797A JP 2009251970 A JP2009251970 A JP 2009251970A
Authority
JP
Japan
Prior art keywords
module
area
virtual
virtual area
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008099797A
Other languages
English (en)
Other versions
JP5072692B2 (ja
Inventor
Akira Deguchi
彰 出口
Noboru Morishita
昇 森下
Ai Satoyama
愛 里山
Hisaharu Takeuchi
久治 竹内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008099797A priority Critical patent/JP5072692B2/ja
Priority to US12/130,071 priority patent/US8645658B2/en
Priority to EP09250097A priority patent/EP2109033A3/en
Priority to CN2009100041918A priority patent/CN101556529B/zh
Publication of JP2009251970A publication Critical patent/JP2009251970A/ja
Application granted granted Critical
Publication of JP5072692B2 publication Critical patent/JP5072692B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】モジュール構成のストレージシステムにおいてモジュール間通信がなるべく発生しないようにする。
【解決手段】複数のモジュール(1)及び(2)が、同一のボリューム識別番号が関連付けられた複数の仮想ボリューム302を備える。上位装置100からライト要求を受領したモジュール(2)は、そのライト要求に従うライト対象の仮想領域に実領域が未割当てであれば、他のモジュール(1)内の複数の実領域からではなく、自モジュール(2)内の複数の実領域から、未割当ての実領域を探す。モジュール(2)は、ライト対象の仮想領域に、自モジュール内の探し出された実領域を割り当て、その実領域に、ライト要求に従うデータを書き込む。
【選択図】図9

Description

本発明は、複数の物理的な記憶装置を備えるストレージシステムに関する。
複数の物理的な記憶装置を備えるストレージシステムの一つとして、動的容量割り当て機能を有したストレージシステムが知られている(例えば、特許文献1及び特許文献2参照)。このストレージシステムには、仮想的な論理ボリューム(以下、「仮想ボリューム」と言う)と、記憶領域プール(以下、「プール」と言う)とが備えられる。仮想ボリュームは、複数の仮想的な記憶領域(以下、「仮想領域」と言う)で構成されている。プールは、複数の実体的な記憶領域(以下、「実領域」と言う)で構成されている。実領域は、複数の物理的な記憶装置に基づく記憶領域である。
動的容量割り当て機能によれば、仮想ボリューム内の仮想領域に対するデータの書き込み発生を契機として、その仮想領域に、プール内の実領域が割り当てられ、データは、その割り当てられた実領域に書き込まれる。
特開2005−011316号公報 特開2006−302258号公報
ところで、ストレージシステムを、複数のストレージシステムモジュール(以下、「モジュール」と省略する)で構成することが考えられる。以下、複数のモジュールで構成されたストレージシステムを、「モジュール構成のストレージシステム」と呼ぶ。個々のモジュールは、複数の物理記憶装置と、複数の物理記憶装置に対するアクセスを制御するコントローラとを備える。複数のモジュールを1台のストレージシステムであるかのように運用したり管理したりすることができる。また、必要に応じて、モジュールを増やしたり減らしたりすることで、ストレージシステムの記憶容量や処理能力を変更することができる。
モジュール構成のストレージシステムに、上述した動的容量割り当て機能を適用させると、例えば図30に示す構成が考えられる。
すなわち、モジュール構成のストレージシステムが、ポート(A)及びプール(A)を有するモジュール(A)と、ポート(B)及びプール(B)を有するモジュール(B)で構成される。モジュール(A)及び(B)が、一つのストレージシステムであるかのように管理される。このため、ホスト(H)には、一つのストレージシステムにポート(A)及び(B)があるかのように認識される。
モジュール(A)にのみ、仮想ボリューム(VVOL)が備えられる。ホスト(H)がポート(A)とポート(B)のどちらを経由しても仮想ボリューム(VVOL)にアクセスできるようにするため、ポート(A)と仮想ボリューム(VVOL)とを結ぶ第一のパス(P1)の他に、ポート(B)と仮想ボリューム(VVOL)とを結ぶ第二のパス(P2)が張られる。
仮想ボリューム(VVOL)内の仮想領域(V)に対するデータのライト要求(W)がホスト(H)から送信されるケースについて考察すると、下記の4通りが考えられる。
ケースW1:モジュール(A)が、第一のパス(P1)を介してライト要求(W)を受信し、仮想領域(V)に、プール(A)内の実領域を割り当てる。
ケースW2:モジュール(A)が、第一のパス(P1)を介してライト要求(W)を受信し、仮想領域(V)に、プール(B)内の実領域を割り当てる。
ケースW3:モジュール(A)が、第二のパス(P2)を介してライト要求(W)を受信し、仮想領域(V)に、プール(A)内の実領域を割り当てる。
ケースW4:モジュール(A)が、第二のパス(P2)を介してライト要求(W)を受信し、仮想領域(V)に、プール(B)内の実領域を割り当てる。
以上のことは、図30には示していないが、仮想領域(V)からのデータのリード要求(R)がホスト(H)から送信されるケースについて考察しても、下記の4通り、すなわち上記と同種のケースが考えられる。
ケースR1:モジュール(A)が、第一のパス(P1)を介してリード要求(R)を受信し、プール(A)内の実領域からデータを読出しホスト(H)に送信する。
ケースR2:モジュール(A)が、第一のパス(P1)を介してリード要求(R)を受信し、プール(B)内の実領域からデータを読出しホスト(H)に送信する。
ケースR3:モジュール(A)が、第二のパス(P2)を介してリード要求(R)を受信し、プール(A)内の実領域からデータを読出しホスト(H)に送信する。
ケースR4:モジュール(A)が、第二のパス(P2)を介してリード要求(R)を受信し、プール(B)内の実領域からデータを読出しホスト(H)に送信する。
上述のケースW2〜W4やR2〜R4では、モジュール(A)とモジュール(B)との間に通信(以下、「モジュール間通信」と言う)が発生する。例えば、ケースW2では、仮想領域(V)にプール(B)内の実領域を割り当てるためのモジュール間通信が発生する。ケースW3では、ポート(B)を経由したライト要求(W)をモジュール(A)に転送するためのモジュール間通信が発生する。ケースW4では、ポート(B)を経由したライト要求(W)をモジュール(A)に転送するためのモジュール間通信と、仮想領域(V)にプール(B)内の実領域を割り当てるためのモジュール間通信とが発生する。
上記考察によれば、同一のポート(A)或いは(B)をライト要求/リード要求(I/O要求)が経由しても、モジュール間通信の発生により、I/O性能が低下してしまう(具体的には、モジュール構成のストレージシステムがホスト(H)からI/O要求を受けてからレスポンスをホスト(H)に返すまでの時間長が長くなってしまう)ことがある。また、I/O要求(ライト要求/リード要求)が経由するポートが異なると、モジュール間通信の発生回数が異なることがあるため、I/O性能が異なることがある。
従って、本発明の目的は、モジュール構成のストレージシステムにおいてモジュール間通信がなるべく発生しないようにすることにある。
本発明の別の目的は、モジュール構成のストレージシステムが有するどのポートをI/O要求が経由してもI/O性能がなるべく均一になるようにすることにある。
本発明の他の目的は、後の説明から明らかになるであろう。
複数のモジュールが、同一のボリューム識別番号が関連付けられた複数の仮想ボリュームを備える。上位装置からライト要求を受領したモジュール(自モジュール)は、そのライト要求に従うライト対象の仮想領域に実領域が未割当てであれば、他のモジュール内の複数の実領域からではなく、自モジュール内の複数の実領域から、未割当ての実領域を探す。自モジュールは、ライト対象の仮想領域に、自モジュール内の探し出された実領域を割り当て、その実領域に、ライト要求に従うデータを書き込む。複数のモジュールは、例えば、一以上の第一のモジュールと一以上の第二のモジュールとで構成される。第一と第二のモジュールが有する機能は同じである。
以下、図面を参照して、本発明の幾つかの実施例を説明する。また、以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するプロセッサ(CPU)によって処理が行われるものとする。
図1は、実施例1に係るコンピュータシステムの全体構成の一例を示す。
ホスト100と、モジュール構成のストレージシステム(以下、「ストレージシステム」と省略する、保守端末270とが備えられる。ストレージシステムは、例えば2台のストレージシステムモジュール(以下、「モジュール」と言う)200で構成されている。モジュール200は、コントローラや物理記憶装置を備える、ストレージシステムの一要素(サブシステム)である。また、ホスト100と各モジュール200は、第一の通信ネットワーク110を介して接続される。また、モジュール200同士は、第二の通信ネットワーク282を介して接続される。第二の通信ネットワーク282は、第一の通信ネットワーク110から独立したネットワークである。第一又は第二の通信ネットワーク110、282に代えて、第一又は第二の専用線など他種の通信媒体がそれぞれ採用されてもよい。
2台のモジュール200が1台のストレージシステムであるかのようにホスト100に認識される。以下、2台のモジュール200を区別して説明する場合には、「モジュール(1)」、「モジュール(2)」と言う。なお、実施例1では、モジュール200は2台であるが、3台以上あってもよい。
ホスト100は、I/O要求をモジュール構成のストレージシステムに送信する計算機である。
保守端末270は、ストレージシステムを保守するための端末(計算機)であり、第三の通信ネットワーク281を介して各モジュール200に接続される。保守端末270は、保守ポート275、CPU271、メモリ272及び入出力部274を備える。保守ポート275は、プロセッサパッケージ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が、内部ネットワーク(例えばクロスバスイッチ)280を介して相互に接続されている。なお、FEパッケージ260、プロセッサパッケージ210、メモリパッケージ220及びBEパッケージ230の少なくとも一つが、複数個存在しても良い。
FEパッケージ260は、一つ以上のポート261を有する。ポート261は、ホスト100からI/O要求が出力されるポート(図示せず)と第一の通信ネットワーク110を介して接続され、ホスト100からI/O要求(ライト要求/リード要求)を受け付ける。
プロセッサパッケージ210は、プロセッサ(例えばマイクロプロセッサ)211、ローカルメモリ212、及び保守ポート213を有する。これらは、パッケージ内ネットワーク(例えばCPUバス)214によって相互に接続されている。一つのプロセッサパッケージ210に、プロセッサ211、ローカルメモリ212及び保守ポート213のうちの少なくとも一つが、複数個存在しても良い。
プロセッサ211は、メモリパッケージ220のプログラム部222に格納されているコンピュータプログラムを実行することで、ホスト100からのI/O要求の処理などを実行する。
ローカルメモリ212は、プロセッサ211が実行するコンピュータプログラムが一時的に使用するデータを一時的に記憶しておくほか、HDD240やメモリパッケージ220に格納されているデータ(制御情報、業務データ、プログラムなど)を記憶する。プロセッサ211からローカルメモリ212までの物理的な距離が、プロセッサ221からメモリパッケージ220やHDD240までの物理的な距離に比べ近い。このため、プロセッサ211が実行する処理に使用されるデータをメモリパッケージ220やHDD240に格納するよりも、ローカルメモリ212に格納するほうが高速に処理を行うことができる。
保守ポート213は、第二の通信ネットワーク281を介して、保守端末270にある保守ポート275に接続される。保守ポート213を介して、保守端末270にプロセッサパッケージ210の稼動情報が送信されたり、保守端末270からの保守操作が受け付けられたりする。
メモリパッケージ220は、一又は複数のメモリで構成されており、制御情報部221、プログラム部222及びキャッシュ部223を有する。プログラム部222には、ストレージシステム200が実行する処理を実現するためのプログラムが記憶されている。制御情報部221には、これらプログラムが利用する制御情報が記憶されている。メモリパッケージ220に記憶されているプログラム及び制御情報は、プロセッサパッケージ210のプロセッサ211から読み出される。キャッシュ部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からのI/O要求の対象となるデータを記憶する。また、1つ以上のHDD240が、パリティグループ(或いはRAIDグループ)という単位でグループ化されても良い。つまり、RAID(Redundant Arrays of Inexpensive Disks)のような方法で高信頼化が実現されてもよい。パリティグループの記憶空間を構成する各記憶領域を、論理的な記憶デバイスであるボリューム250とすることができる。なお、実施例1では、物理的な記憶装置としてHDD240が使用されるが、フラッシュメモリやDVDなどの他種の物理的な不揮発性の記憶装置が採用されても良い。また、複数種類の物理的な記憶装置が、一つのモジュール200或いは一つのストレージシステムに混在しても良い。
図2は、メモリパッケージ220の詳細を示す。
制御情報部221に記憶される制御情報として、例えば、パスに関する情報が記録されるパス情報テーブル2211、仮想ボリュームに関する情報が記録される仮想ボリュームテーブル2212、プールに関する情報が記録されるプールテーブル2213、及び後述のページに関する情報が記録されるページテーブル2214がある。プログラム部222に記憶されるコンピュータプログラムとして、例えば、リード処理を制御するリードプログラム2221、ライト処理を制御するライトプログラム2222、パスを定義するためのパス定義プログラム2223、定義されているパスを削除するためのパス削除プログラム2224、ページを仮想領域に割り当てるためのページ割当プログラム2225、モジュール間でページ単位にデータを複製するための複製作成プログラム2226、複製ページを削除するための複製削除プログラム2227、制御情報を更新するための制御情報更新プログラム2228、及び仮想ボリュームを作成するための仮想ボリューム作成プログラム2229がある。これらのテーブルやプログラムについては、後に詳述する。なお、これらのコンピュータプログラム2221〜2229がプロセッサで実行されることによって行われる処理の全部又は一部が、ハードウェア回路など別種の処理部で実現されても良い。
前述したように、モジュール(1)及び(2)が、ホスト100に対して一台のストレージシステムとして認識される。このため、管理者が、モジュール(2)のボリューム250に繋がるパス(I/O用のパス)を定義する場合に、モジュール(1)のポート261を指定する可能性がある。このような指定がされた場合、次のようにI/O処理を実現する必要がある。すなわち、モジュール(1)が、ホスト100からI/O要求を受領し、モジュール(2)にI/O処理を依頼する。モジュール(2)が、その依頼に応答して、モジュール(2)内のボリューム250に対するI/Oを実行する。このようなI/Oを、以下、「モジュール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)」と言う。なお、以下、モジュール(1)及び(2)における同種の要素を区別するときには、ライトプログラム2222と同様に、参照符号に代えて、(1)或いは(2)と言う符号を用いることがある。
ホスト100が、モジュール(1)のポート261を有するパスを利用してライト要求を発行し(S100)、ストレージシステムからのライト完了報告を待つ(S101)。
ホスト100が上記パスを利用してライト要求を発行すると、モジュール(1)がライト要求を受領する(S102)。ライトプログラム(1)が、パス情報テーブル(1)を参照し、ライトデータ(ライト対象のデータ)の書込み先のボリューム250の所在をチェックする(S103)。ライトプログラム(1)は、書込み先ボリューム250を有するモジュール200がモジュール(1)と(2)のどちらであるかの判定を行う(S104)。S104でモジュール(1)と判定された場合(S104でNo)、ライトプログラム(1)は、書込み先ボリューム250にライトデータを書込み(S105)、ホスト100へライト完了を報告する(S106)。一方、S104でモジュール(2)と判定された場合(S104でYes)、ライトプログラム(1)は、ライトデータをキャッシュ部(1)に格納する。そして、ライトプログラム(1)は、モジュール(2)にライト処理を依頼し(S108)、モジュール(2)からの応答を待つ(S109)。このとき、ライトプログラム(1)は、モジュール(2)に、ライトデータのキャッシュアドレスを通知する。キャッシュアドレスとは、対象のデータが記憶されている記憶領域のアドレスであって、キャッシュ部223内の記憶領域(以下、キャッシュ領域)のアドレスである。
ライトプログラム(2)は、ライト処理の依頼をモジュール(1)から受領し(S110)、その依頼と共に受けたキャッシュアドレスが示すキャッシュ領域から、ライトデータをモジュール(2)へ転送し(キャッシュ領域からライトデータの読出し)(S111)、そのライトデータを書き込み先ボリューム250に書き込む(S112)。書込み完了後、ライトプログラム(2)は、モジュール(1)へライト完了を報告する(S113)。
ライトプログラム(1)は、ライト完了の報告をライトプログラム(2)から受領したならば、ホスト100へライト完了を報告する(S116)。
ホスト100は、モジュール(1)からライト完了報告を受領すると(S117)、処理を終了する(S118)。
モジュール200を跨ぐI/Oとしてライトを例に採り説明したが、リードの場合は、例えば以下の処理が行われる。すなわち、S107が省略され、S108で、リードプログラム(1)が、モジュール(2)にリード要求を発行する。リードプログラム(2)が、そのリード要求を受領し、リードデータ(リード対象のデータ)を、キャッシュ部(2)に書き込み、リードデータのキャッシュアドレス(キャッシュ部(2)内のキャッシュ領域のアドレス)をモジュール(1)に通知する。リードプログラム(1)が、ステップS111同様に、モジュール(2)からモジュール(1)へリードデータを転送する(つまり、通知されたキャッシュアドレスが示すキャッシュ領域からリードデータを読み出す)。最後に、リードプログラム(1)が、リード完了報告と共に、リードデータをホスト100へ転送する。
以上のようにして、モジュール200を跨ぐライトやリードを実現することができる。しかし、モジュール200を跨ぐI/Oの場合、モジュール間通信が行われるため、I/O性能が低下する。さらに、モジュール(1)内のボリューム250とホスト100との間に、FEのポート(1)を有する第一のパスとFEのポート(2)を有する第二のパスとが張られている場合、第一と第二のパスのどちらが使用されるかによって(つまり、FEのポート(1)と(2)のどちらがI/O要求を受領するかによって)、I/O性能が異なってしまう。
実施例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が割り当てられても良いし、一つの仮想ボリューム302に複数のプール300からページ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/O要求を受領したモジュールを「自モジュール」と言い、そうではないモジュールを「他モジュール」と言うことがある。
実施例1では、例えば下記(工夫1)及び(工夫2)が施される。
(工夫1)モジュール(1)及びモジュール(2)の両方に、同一のボリューム番号が割り当てられた仮想ボリューム302が備えられる。
(工夫2)モジュール(1)及び(2)は、ライト要求を受領した場合、そのライト要求から特定される書込み先仮想領域にページ301が未割り当てであるならば、自モジュールにあるプール300内のページ301を、書込み先の仮想領域に割り当てる。
なお、(工夫1)では、例えば、ボリューム番号が例えば2層の番号であっても良い。すなわち、ホスト100に認識されモジュール(1)及び(2)で共通の第一種のボリューム番号(グローバルな番号)と、ホスト100では認識されず個々のモジュール200で認識される第二種のボリューム番号(ローカルな番号)とがあっても良い。
以下、具体例を説明する。
同一のボリューム番号“1”が割り当てられた仮想ボリューム(1)及び(2)が、モジュール(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が割り当て済みであるため、仮想ボリュームテーブル(1)には、「ページ割当状態」の値として“済み”が記録され、「割当モジュール」の値として“モジュール(2)”が記録される。同様に、仮想ボリューム(2)における第一の仮想領域621(アドレス“0〜99”)にプール(2)内のページ301が割り当てられていないが、仮想ボリューム(1)における第一の仮想領域611にプール(1)内のページ(301)が割り当てられているため、仮想ボリュームテーブル(2)には、「ページ割当状態」の値として“済み”が記録され、「割当モジュール」の値として“モジュール(1)”が記録される。
モジュール(2)が、矢印640に示すように、第二の仮想領域623からリードデータを読み出すリード要求を受領した場合、仮想ボリュームテーブル(2)を参照し、第二の仮想領域623の「ページ割当状況」をチェックする。チェックの結果、モジュール(2)内のページ301(プール番号“1”及びページ番号“1”に対応したページ301)にリードデータが記憶されていることがわかる。このため、モジュール(2)は、自モジュール内のそのページ301からリードデータを読出し、読み出したリードデータをホスト100へ転送する。
また、ページ301が割り当て済みの仮想領域623へデータをライトする場合にも、リードの場合と同様に実現される。すなわち、モジュール間の通信は不要である。
上記(工夫1)及び(工夫2)を適用することで、同一のモジュールのポートからライト、および、リードを繰り返し実行する場合には、モジュール間通回数を削減できる。
一方、モジュール(2)が、矢印630に示すように、第一の仮想領域621からリードデータを読み出すリード要求を受領した場合、仮想ボリュームテーブル(2)を参照し、第一の仮想領域621の「ページ割当状況」をチェックする。チェックの結果、モジュール(1)内のページが使用されていることがわかる。このため、モジュール(2)は、矢印625に示すように、モジュール(1)に、リード処理を依頼する。モジュール(1)が、その依頼に応答して、仮想ボリューム(1)の第一の仮想領域611に割り当てられている、モジュール(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が作成される。
図10を用いて、上記(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から通知された番号であり、「ページ割当状態」の値は、全て“未”であり、「割当モジュール」及び「ページ番号」の値は、未割当を意味する値(例えば“−”)である。
仮想ボリューム作成プログラム2229は、仮想ボリューム情報を登録したら、完了報告を保守プログラム273に送る(S1605)。保守プログラム273は、完了報告を受領する(S1606)。
次に、上記(TM2)に関わる処理を説明する。
上記(TM2)によれば、ユーザが指定するモジュール200に対してのみ、仮想ボリューム作成が指示される。すなわち、図10で言えば、S1600が不要となる。そして、その後、他モジュール200のポート261からその仮想ボリューム302へのパスが定義された契機で、他モジュール200に、その仮想ボリューム302が作成される。以下、それに関わる処理を、図11を用いて説明する。
ユーザが保守端末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)。図10を参照して説明したとおり、ユーザが指定したモジュール200内の仮想ボリュームテーブル2212には、対象仮想ボリュームの仮想ボリューム情報が登録されている。対象仮想ボリュームの仮想ボリューム情報が登録済みであれば(S203でYES)、S204はスキップされる。対象仮想ボリュームの仮想ボリューム情報が未登録であれば(S203でNO)、パス定義プログラム2223は、仮想ボリュームテーブル2212に、その仮想ボリューム情報を登録する(S204)。ここで登録される仮想ボリューム情報の内容は、図10のS1604で登録される内容と実質的に同じである。
次に、パス定義プログラム2223は、パス情報テーブル2211に、指定されたポート261のポート番号と、指定されたボリューム番号と、このプログラム2223が実行されているモジュール(図11の説明において便宜上「自モジュール」と言う)200のモジュール番号とを登録する(S205)。そして、パス定義プログラム2223は、保守プログラム273に、完了を報告する(S206)。
保守プログラム273は、パス定義プログラム2223から完了報告を受領し(S207)、処理を終了する(S208)。
なお、パス定義時に仮想ボリューム302を作成する場合、既に、他モジュール200で、その仮想ボリューム302に対してI/O処理が行われている可能性がある。このため、他モジュール200で、その仮想ボリューム302にページ301が割当てられている可能性がある。従って、この時点で、自モジュール200が、他モジュール200に、仮想ボリューム302へのページ割当状況を問い合わせ、問い合わせ結果を、自モジュール200の仮想ボリュームテーブル2212に登録してもよい。新たに定義されたパスを介してI/O要求を受領した時点で、自モジュール200が、他モジュール200に、I/O要求に従うI/O対象の仮想領域についてページ割当状況を問い合わせることができる。
以上のようにして、各モジュール200に仮想ボリューム302を作成することができる。
以降、図12から図15を用いて、仮想ボリューム302へのI/O処理の一例を説明する。ちなみに、図12は、I/O対象の仮想領域に、I/O要求を受領したモジュール(自モジュール)200内のページ301が割当てられている場合の、I/O処理の一例を示している。図13は、リード対象の仮想領域に自モジュール200内のページ301が割り当てられていない場合のリード処理の一例を示している。図14は、ライト対象の仮想領域に自モジュール200内のページ301が割り当てられていない場合のライト処理の一例を示している。図15は、仮想ボリューム302にページ301を割当てる処理の一例を示している。
図12を用いて、自モジュール200内のページが割当済みの仮想領域がI/O対象の仮想領域である場合のI/O処理を説明する。このI/O処理は、リードプログラム2221又はライトプログラム2222が実行されることで実現される。以下、I/O処理としてライト処理を例に採り説明する。
ホスト100が、モジュール200に対してライト要求を発行し(S500)、モジュール200からのライト完了報告を待つ(S501)。
ライトプログラム2222は、ライト要求を受領すると(S502)、自モジュール200内の仮想ボリュームテーブル3312をチェックし(S504)、ライト対象の仮想領域に自モジュール200内のページ301が割当済みか否かを判定する(S504)。図12の例は、自モジュール200内のページ301がライト対象の仮想領域に割り当てられている場合のライト処理の例である。このため、S504の判定は、「Yes」になるものとする。S504の判定が「No」の場合の処理は、図13及び図14を用いて説明する。
次に、ライトプログラム2222は、ページテーブル2214を参照し、ライトデータを書き込むプール300のアドレスを決定する(すなわち、ライト対象の仮想領域に割当済みのページ301を特定する)(S505)。ライトプログラム2222は、決定したアドレス(ページ301)にライトデータを書き込み(S506)、ホスト100に完了を報告する(S507)。
ホスト100は、ライトプログラム2222からの完了報告を受領すると(S508)、処理を終了する(S509)。
上の説明では、ライト処理を例に説明したが、リード処理の場合は、例えば以下のようになる。すなわち、S502で、リード要求が受領され、S506で、割当済みページ301からリードデータが読み出され、ホスト100へそのリードデータが転送される。
次に、図13を用いて、リード要求に従うリード対象の仮想領域に自モジュール(リード要求を受領したモジュール)200内のページ301が未割当てのケースでのリード処理を説明する。このケースでは、他モジュール200内のページ301が、その他モジュール200内の仮想ボリューム302におけるリード対象仮想領域に割り当てられている可能性がある。以下、自モジュール200をモジュール(1)とし、他モジュール200をモジュール(2)として、このケースでのリード処理を説明する。なお、リード処理は、モジュール(1)及びモジュール(2)のそれぞれにおいてリードプログラム2221が実行されることで実現される。
ステップS504の判定が「No」となると、リードプログラム(1)は、仮想ボリュームテーブル(1)を参照し、リード対象仮想領域に対応する割当モジュールが不明であるか否かを判定する(S301)。リード対象仮想領域について、「ページ割当状態」の値が“済み”であり、「割当モジュール」の値が他モジュールのモジュール番号であれば、割当モジュールが判明しているということである。一方、リード対象仮想領域について、「ページ割当状態」の値が“未”であり、「割当モジュール」の値が未割当を意味する値“−”であれば、割当モジュールが不明であるということである。
割当モジュールが判明している場合(S302でNo)、リードプログラム(1)は、割当モジュールであるモジュール(2)に、リード対象仮想領域のリードを依頼する(例えばリード対象仮想領域のアドレスを通知する)(S302)。データの転送依頼を受領したリードプログラム(2)は、リード対象仮想領域に割り当てられているページ301を、仮想ボリュームテーブル(2)を参照することにより特定し、特定されたページ301からリードデータを読み出しキャッシュ部223に格納する(S303)。リードプログラム(2)は、モジュール(1)にデータ転送を指示する(S304)。このとき、リードプログラム(2)は、モジュール(1)に、リードデータのキャッシュアドレスを通知する。リードプログラム(1)は、データ転送指示を受領すると、モジュール(2)からデータを転送する(通知されたキャッシュアドレスが示すキャッシュ領域からリードデータを読み出す)(S305)。続けて、リードプログラム(1)は、読み出されたリードデータを、ホスト100へ転送する(S306)。
一方、割当モジュールが不明の場合(S301でYes)、リードプログラム(1)は、ページ割当状況が問い合わせされていないモジュール200が存在するか否かを判定する(S307)。問い合わせされていないモジュール200が存在する場合、リードプログラム(1)は、当該モジュール200にページ301の割当状況を問い合わせる(S308)。
ページ301の割当状況の問い合わせを受けたモジュール(2)のリードプログラム(2)は、仮想ボリュームテーブル(2)を参照し、ページ割当状況をチェックし(S309)、リード対象仮想領域にモジュール(2)内のページ301を割当済みか否か判定する(S310)。リードプログラム(2)は、ページ301を未割当の場合は(S310でNo)、未割当であることをモジュール(1)へ通知する(S311)。一方、ページ301を割当済みの場合は(S310でYes)、リードプログラム(2)は、リードデータをキャッシュ部223に格納し(S312)、モジュール(1)にそのリードデータの転送を指示する(S313)。
リードプログラム(1)は、モジュール(2)からの応答を受領すると、モジュール(2)でページ割当済みであるか否かを判定する(S314)。モジュール(2)内のページ301がリード対象仮想領域に未割当である場合(S314でNo)、リードプログラム(1)は、別のモジュール200についてS307を実行する。一方、モジュール(2)内のページ301がリード対象仮想領域に割り当て済みである場合、リードプログラム(1)は、モジュール(2)からモジュール(1)へリードデータを転送し(S315)、モジュール(1)の仮想ボリュームテーブル2212を更新する(S316)。具体的には、リードプログラム(1)は、リード対象仮想領域について、「ページ割当状況」の値を“済み”に変更し、「割当モジュール」の値として“モジュール(2)”を登録する。
次に、リードプログラム(1)は、モジュール(2)から転送したリードデータを、ホスト100へ転送し(S317)、処理を終了する。
ページ割当済みのモジュール200が判明しないまま、問い合わせ未実施のモジュール200がなくなった場合(S307でNo)、すなわち、リード対象仮想領域が、どのモジュール200内のページ301が割当られていない仮想領域の場合、以下の処理が行われる。
この場合、リードプログラム(1)は、ホスト100へ、リード対象仮想領域にデータが存在しないことを意味するデータ、例えば“0”で構成されたデータを転送し(S318)、処理を終了する。なお、S318では、“0”で構成されたデータに代えて、エラーが転送されても良い。
次に、図14及び図15を用いて、ライト要求に従うライト対象の仮想領域に自モジュール(ライト要求を受領したモジュール)200内のページ301が割当てられていないケースでのライト処理を説明する。以下、自モジュール200をモジュール(1)とし、他モジュール200をモジュール(2)として説明する。
ライト処理は、モジュール(1)及びモジュール(2)でライトプログラム2222及びページ割当プログラム2225が実行されることで実現される。
ステップS504の判定が「No」となると、ライトプログラム(1)は、仮想ボリュームテーブル(1)を参照し、ライト対象仮想領域について割当モジュールが不明であるか否かを判定する(S1001)。なお、不明の定義は、図13を参照して説明したリード処理の場合と同じである。
割当モジュールが判明している場合(S1001でYes)、ライトデータが他モジュール(2)に転送され格納される(S1002)。すなわち、S1002では、図4のS107からS115が行われる。
割当モジュールが不明の場合(S1001でNo)、ライトプログラム(1)は、ライト対象仮想領域についてページ割当状況が問い合わせされていないモジュール200が存在するか否かを判定する(S1003)。問い合わせされていないモジュール200が存在する場合、ライトプログラム(1)は、問い合わせされていない他モジュール200にページ割当状況を問い合わせる(S1004)。
ページ割当状況の問い合わせを受けたモジュール(2)のライトプログラム(2)は、仮想ボリュームテーブル(2)を参照してページ割当状況をチェックし(S1005)、ライト対象仮想領域にモジュール(2)内のページ301が割当済みか否かを判定する(S1006)。ページ301が未割当の場合は(S1006でNo)、ライトプログラム(2)は、未割当であることをモジュール(1)へ通知する(S1007)。一方、ページ301が割当済みの場合は(S1006でYes)、ライトプログラム(2)は、割当済みであることをモジュール(1)へ通知する(S1008)。
ライトプログラム(1)は、モジュール(2)からの応答を受領すると、モジュール(2)でページ割当済みであったか否かを判定する(S1009)。モジュール(2)でページ未割当であった場合(S1009でNo)、ライトプログラム(1)は、別のモジュール200についてS1003を実行する。一方、モジュール(2)でページ割当済みであった場合(S1009でYes)、ライトプログラム(1)は、仮想ボリュームテーブル(1)を更新する(S1010)。その後、ライトデータが他モジュール(2)に転送され格納される(S1011)。すなわち、図4のステップS104からS115が実行される。なお、ステップS1002と異なり、ステップS104からS106も実行する理由は、ステップS1012で新規にページ301を割当てた場合が考慮されるからである。具体的には、ステップS1012でモジュール(1)内のページ301が割り当てられた場合、ライトプログラム(1)が自モジュール(1)内のページ301へライトデータを書き込む必要があるためである。また、ステップS1010における仮想ボリュームテーブル2212の更新は、リード処理の場合と同様に、ライト対象仮想領域について、仮想ボリュームテーブル2212の「ページ割当状況」の値が“済み”に更新され、「割当モジュール」の値として“モジュール(2)”が登録される。
ページ割当済みのモジュール200が判明しないまま、問い合わせ未実施のモジュール200がなくなった場合(S1003でNo)、ライトプログラム(1)は、ページ割当プログラム(1)を起動し、ページ割当処理を実施する(ステップS1012)。次に、ライトプログラム(1)は、ページ割当が完了したか否かを判定する(S1013)。判定の結果、新しくページ301が割当てられた場合(S1013でYes)、ライトプログラム(1)は、割当てられたページ301にライトデータを格納する(S1011)。一方、モジュール(1)内のプール300の空き容量不足(未割当てのページ301が不足している)などが原因で、ページ301が割当られなかった場合(S1013でNo)、ライトプログラム(1)は、異常終了をホスト100へ報告し(S1014)、処理を終了する。
図15を用いて、ステップS1012(ページ割当処理)を詳細に説明する。
ページ割当プログラム(1)は、プールテーブル(1)及びページテーブル(1)を参照し、未割当ページを探す(S400)。そして、ページ割当プログラム(1)は、モジュール(1)内のプール300に未割当ページが存在するか否かを判定する(S401)。
モジュール(1)内に未割当ページが存在する場合(S401でYes)、ページ割当プログラム(1)は、ページテーブル(1)及び仮想ボリュームテーブル(1)を更新し(S402及びS403)、処理を終了する(S404)。具体的には、ページ割当プログラム(1)は、割り当てるページ301について、ページテーブル(1)の「状態」の値を“割当済み”に変更し、「割当先」の値を対象仮想ボリュームの仮想ボリューム番号に変更する。また、ページ割当プログラム(1)は、ライト対象仮想領域について、仮想ボリュームテーブル2212の「ページ割当状態」の値を“済み”に変更し、「割当モジュール」の値として“モジュール(1)”を登録し、「プール番号」の値として、割り当てたページ301が属するプール300のプール番号を登録し、「ページ番号」の値として、割り当てたページ301のページ番号を登録する。
一方、モジュール(1)内に未割当ページが存在しない場合(S401でNo)、ページ割当プログラム(1)は、未割当ページの有無が問い合わせされていないモジュール200が存在するか否かを判定する(S405)。問い合わせされていないモジュール200が存在する場合、ページ割当プログラム(1)は、当該モジュール200に未割当ページの有無を問い合わせる(S407)。
問い合わせを受ける他モジュール(2)のページ割当プログラム(2)は、未割当ページの有無の問い合わせを受領し(S408)、プールテーブル(2)及びページテーブル(2)を参照し、未割当ページを探し、モジュール(2)内のプール300に未割当ページが存在するか否かを判定する(S409)。
未割当ページが存在する場合(S409でYes)、ページ割当プログラム(2)は、ページテーブル(2)を更新する(具体的には、割り当てるページについて、ページテーブル(2)の「状態」の値を“割当済み”に変更する)(S410)。
次に、ページ割当プログラム(2)は、モジュール(2)でページ割当先の仮想ボリューム302が作成されているか否かを判定する(S411)。この判定の結果は、ページ割当先の仮想ボリューム302に関する仮想ボリューム情報が仮想ボリュームテーブル(2)に存在する場合は、作成済みとの判定結果であり、その情報が存在しない場合は、未作成との判定結果である。ユーザがボリューム302を作成する契機で全モジュール200に仮想ボリューム302が作成されるケース(前述の(TM1)のケース)では、モジュール(2)で仮想ボリューム302が作成されている。さらに、パス定義契機で仮想ボリューム302が作成されるケース(前述の(TM2)のケース)では、モジュール(2)に当該仮想ボリューム302へのパスが定義されていれば仮想ボリューム302が作成済みである。
仮想ボリューム302が作成済みの場合は(S411でYes)、ページ割当プログラム(2)は、仮想ボリュームテーブル(2)を更新する(S412)。具体的には、ライト対象仮想領域について、仮想ボリュームテーブル(2)の「ページ割当状態」の値が“割当済み”に更新され、「割当モジュール」の値として“モジュール(2)”が登録され、「プール番号」の値として、ライト対象仮想領域に割り当てられたページ301が属するプール300のプール番号が登録され、「ページ番号」の値として、そのページ301のページ番号が登録される。一方、仮想ボリューム302が未作成の場合は(S411でNo)、S412がスキップされる。ページ割当プログラム(2)は、未割当ページが存在することをモジュール(1)に報告する(S413)。
上記のように仮想ボリュームテーブル(2)を更新しておくことで、モジュール(2)が、そのページ301の割当先の仮想領域をI/O対象とするI/O要求をホスト100から受領した場合に、モジュール(1)と通信することなく、その仮想領域についてのページ割当状況を判断できる。
さて、S409で、未割当ページが存在しない場合には(S409でNo)、ページ割当プログラム(2)は、未割当ページが存在しないことをモジュール(1)に報告する(S414)。
モジュール(2)からの報告を受領したモジュール(1)のページ割当プログラム(1)は、モジュール(2)に未割当ページが存在するか否かを判定する(S415)。
モジュール(2)に未割当ページが存在する場合(S415でYes)、ページ割当プログラム(1)は、仮想ボリュームテーブル(1)を更新し(S416)、処理を終了する(S417)。具体的には、ライト対象領域について、仮想ボリュームテーブル(1)の「ページ割当状態」の値が“割当済み”に変更され、「割当モジュール」の値として“モジュール(2)”が登録される。逆に、モジュール(2)に未割当ページが存在しない場合(S415でNo)、ページ割当プログラム(1)は、別のモジュール200についてS405を実行する。
未割当ページを有するモジュール200が判明しないまま、問い合わせ未実施のモジュール200がなくなった場合(S405でNo)、ページ割当プログラム(1)は、ページ割当プログラム(1)をコールしたライトプログラム(1)に割当不可を報告する(S406)。
以上のようにして、自モジュール200内のページ301が割り当てられていない仮想領域に対するライトやリードの処理が実現できる。
以上の説明によれば、モジュール(1)が有する仮想ボリューム(1)に割り当てられているボリューム番号と同一のボリューム番号が割り当てられた仮想ボリューム(2)が、モジュール(2)に備えられる。モジュール(2)が、ページ未割当ての仮想領域をライト対象仮想領域とするライト要求をホスト100から受領した場合、モジュール(2)内のページをライト対象仮想領域に割り当て、そのページにライトデータを書き込む。また、その仮想領域をリード対象仮想領域とするリード要求をモジュール(2)がホスト100から受領した場合、モジュール(2)は、モジュール(2)内のページからリードデータを読み出してホスト100に転送する。従って、このようなケースで、モジュール間通信が発生しない。
以下、本発明の実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
実施例1では、例えば、自モジュール(2)が受領したリード要求に従うリード対象仮想領域に、他モジュール(1)内のページ301が割り当てられている場合には、モジュール間通信が発生する。
そこで、実施例2では、ページ301に記憶されているデータがモジュール間で複製されることで、モジュール間通信が発生するケースを減らすことができる。具体的には、例えば、モジュール(1)内のページ301に記憶されているデータであって、モジュール(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のモジュール番号である。「リード頻度」は、そのページ301へのホスト100からのリード要求の頻度(単位時間当たりのリード要求の受領回数)を示している。
図17に示すテーブルが、モジュール(1)内の仮想ボリュームテーブルであるとすると、図17に示すテーブルから、以下のことがわかる。例えば、アドレス“0〜99”に対応する仮想領域には、最初にモジュール(2)内のページが割り当てられ、その後、モジュール(2)からモジュール(1)に対してページ複製が行われたことがわかる。さらに、アドレス“0〜99”に対応する仮想領域に対応したリード頻度は、毎秒1000回であることがわかる。なお、図17に示すテーブルにおける「リード頻度」の値は、例えば、リードプログラム(1)によって更新される。リードプログラム(1)は、第一の仮想領域毎に、単位時間当りのリード要求の受領回数をカウントし、適時に、各第一の仮想領域に対応した「リード頻度」の値を更新することができる。
リード頻度が追加される利点を説明する。例えば、図16に示したように、仮想ボリューム(1)における第一の仮想領域611に、モジュール(1)内のページ711が割り当てられており、仮想ボリューム(2)における第一の仮想領域621に、ページ711に記憶されているデータの複製が記憶された、モジュール(2)内のページ721が、割り当てられているとする。ここで、ページ711に記憶されているデータが更新されたにも関わらず、ページ721に記憶されているデータが更新されないと、ページ721に記憶されているデータは古い内容のデータとなる。このため、第一の仮想領域をリード対象仮想領域とするリード要求をモジュール(2)が受領すると、古いデータがホスト100に転送されてしまう。これを防ぐためには、第一の仮想領域611及び621に対応付けられるデータを常に同期させる必要がある。しかし、そうすると、仮想領域に属するデータ更新時に、仮想領域611及び621の両方を更新するなどの処理が必要となりモジュール間通信が発生することになる。そこで、図17に示すように、仮想領域毎にリード頻度が登録されていれば、例えば、リード頻度が高い仮想領域に割り当てられているページについてのみページ複製が行われるようにすることができる。
なお、リード頻度が高いとは、基準値よりもリード頻度が高いことである。ここで、「基準値」とは、予め定められた値であっても良いし、ライト頻度に基づく値であっても良い。各仮想領域についてのライト頻度とは、その仮想領域が対象とされたライト要求の単位時間当りの受領回数である。例えば、一つの仮想領域について、ライト頻度よりもリード頻度が高い場合、或いは、ライト頻度に所定の係数が乗算された値よりもリード頻度が高い場合に、「リード頻度が高い」とされても良い。ライト頻度は、例えばリード頻度と同様に、仮想ボリュームテーブル22121に登録されても良い。
以下、ページ複製を実行する契機及び条件と、複製ページを削除する契機及び条件と、ライト処理とを説明する。ライト処理は、古いデータを参照しないように制御する方法について詳細に述べる。
まず、ページ複製を実行する契機として、(a)パス定義する契機、(b)I/O処理の契機、などが考えられる。I/O処理の契機では、以下の(b1)及び(b2)のケース、
(b1)他モジュール200内のページ301に対してI/Oが発生する時に、他モジュール200から自モジュール200にページ複製を行うケース、
(b2)自モジュール200内のページ301に対してI/Oが発生する時に、自モジュール200から他モジュール200にページ複製を行うケース、
が考えられる。また、保守操作契機でページ複製が実行されるケースや、ストレージシステムが定期的にページ複製を行うケースなども考えられる。
図18を用いて、パス定義時に、モジュール(2)で割当済みのページ301に記憶されているデータを、パス定義を実施するモジュール(1)に複製するページ複製処理の一例を説明する。
この処理は、以下のように実現される。例えば、モジュール(1)内でパス定義プログラム2223が実行される。モジュール(2)内で、複製作成プログラム2226が実行される。また、図18での複製元ページに対応した複製ページを有する全てのモジュール内で、制御情報更新プログラム2228が実行される。
例えば図11に示したS205の直後に、パス定義プログラム2223は、複製元となり得るページ301を有するか否かが問い合わせされていないモジュール200が存在するか否かを判定する(S600)。全モジュール200に問い合わせがされた場合(S600でNo)、処理を終了する(S615)。
問い合わせされていないモジュール200が存在する場合(S600でYes)、パス定義プログラム2223は、そのモジュール200(モジュール(2))に、パス定義対象のボリュームへ割当てられているページ301であり、且つ、リード頻度が高い仮想領域に割り当てられているページ(高リード頻度ページ)301の有無を問い合わせる(S601)。なお、パス定義プログラム2223は、この問い合わせとともに、パス定義対象の仮想ボリューム302のボリューム番号をモジュール(2)へ通知する。
複製作成プログラム2226は、問い合わせを受領し、仮想ボリュームテーブル(2)をチェックすることで、高リード頻度ページを探す(S602)。次に、複製作成プログラム2226は、複製元ページ301を決定し(例えばS602で探し出されたページを複製元ページ301に決定し)、その複製元ページ301に記憶されているデータをキャッシュ部(2)に格納する(S603)。そして、複製作成プログラム2226は、そのデータのキャッシュアドレスと、複製元ページ301が割り当てられている仮想領域に対応した「割当モジュール」の値、「アドレス」の値、「複製モジュール」の値、及び「リード頻度」の値とを、モジュール(1)に通知し(S604)、処理を終了する(S605)。なお、複製元ページ301が存在しない場合、複製作成プログラム2226は、例えば、ステップS604で複製元ページ301が存在しないことをモジュール(1)へ通知する。
モジュール(2)の報告を受領したモジュール(1)のパス定義プログラム2223は、モジュール(1)内に未割当ページ301が存在するか否かの判定を行う(S606)。モジュール(1)内に未割当ページ301が存在しない場合(S606でNo)、パス定義プログラム2223は、処理を終了する(S615)。
モジュール(1)内に未割当ページ301が存在する場合(S606でYes)、パス定義プログラム2223は、モジュール(2)内の複製元ページ301からのデータ転送(つまりページ複製)が全て完了したか否かの判定を行う(S607)。そして、全ての複製元ページ301に記憶されているデータがモジュール(1)へ転送された場合(S607でYes)、パス定義プログラム2223は、別のモジュール200についてS600を行う。
一方、モジュール(2)内の複製元ページ301の一部のページ301からしかモジュール(1)へデータが転送されていない場合(S607でNo)、パス定義プログラム2223は、モジュール(2)内の複製元ページ301のうちの一つのページ301からデータをモジュール(1)へ転送する(データを読み出す)(S608)。続けて、パス定義プログラム2223は、ページテーブル(1)及び仮想ボリュームテーブル(1)を更新することで(S609及びS610)、対象の仮想領域(モジュール(2)から通された「アドレス」の値に対応する仮想領域)に、未割当のページ(複製先ページ)301を割り当てる。具体的には、複製先ページについて、ページテーブル(1)における「状態」が“割当済み”に変更し、「割当先」の値を対象仮想ボリュームの仮想ボリューム番号に変更される。さらに、対象の仮想領域について、仮想ボリュームテーブル(1)における「ページ割当状態」の値が“済み”に変更され、「割当モジュール」の値が“モジュール(2)”に変更され、「プール番号」の値が上記選択されたページ301が属するプールのプール番号とされ、複製有無ビットが“ON”とされ、「複製モジュール」の値が“モジュール(1)”とされ、「リード頻度」の値が、モジュール(2)から通知されたリード頻度の値に変更される。
次に、パス定義プログラム2223は、割当てた複製先ページ301に、モジュール(2)から転送された、複製元ページ301に記憶されているデータの複製(複製データ)を格納する(S611)。そして、パス定義プログラム2223は、図18での複製元ページに対応した複製ページを有する全てのモジュール(モジュール(1)以外)に、複製先ページ301の割当先の仮想領域についてモジュール(1)が「複製モジュール」として追加されたこと(例えば、対象の仮想領域のアドレスと、モジュール(1)の番号)を通知する(S612)。
パス定義プログラム2223は、S607からS612を繰り返し実行することで、他の複製元ページ301についてもページ複製を行う。
ステップS612の通知を受領したモジュール200内の制御情報更新プログラム2228は、そのモジュール200内の仮想ボリュームテーブル22121を更新し(S613)、処理を終了する(S614)。具体的には、通知されたアドレスから特定される仮想領域について、「複製モジュール」の値として“モジュール(1)”が追加される。従って、例えば、3以上のモジュール200が存在する場合、一つの仮想領域に対応した「複製モジュール」の値として、複数個の値(モジュール番号)が登録されることがあり得る。
以上のようにして、モジュール(1)にパスが定義された契機で、パス定義対象の仮想ボリューム302に対して、既にモジュール(2)で割当てられているページ301に記憶されているデータの複製を、モジュール(1)に作成することができる。さらに、対象の仮想領域について複製データを既に有する全てのモジュール200に、モジュール(1)が「複製モジュール」として新たに加わったことが通知される。これにより、複製データを持つ各モジュール200は、複製データがどこに作成されているかを把握することができる。この情報は、例えば、ライト処理時に各モジュール200のページ301を同期させる処理で利用される(図24及び図25を用いて後述する)。
次に、図19及び図20を用いて、他モジュールのページ301にI/Oが発生する時に、他モジュールから自モジュールにページ複製を行う処理の一例を説明する。この処理は、モジュールを跨ぐI/Oが行われた際に、I/O対象仮想領域に割り当てられたページに書き込まれるデータが、他モジュール内のそのページから自モジュール内のページに複製される。
図19は、ライト処理時のページ複製処理の一例であり、図20は、リード処理時のページ複製処理の一例である。
図19に示す処理は、例えば以下のように実現される。モジュール(1)内でライトプログラム2222が実行される。モジュール(2)内で複製作成プログラム2226が実行される。図19での複製元ページに対応した複製ページを有する全てのモジュール内で、制御情報更新プログラム2228が実行される。
例えば図14のS1011で、モジュール(1)がモジュール(2)内のページ301にライトデータを格納した後、モジュール(1)のライトプログラム2222は、モジュール(1)内に未割当ページ301が存在するか否かを判定する(S700)。モジュール(1)内に未割当ページ301が存在しない場合、複製データを格納するページ301が存在しないため、処理が終了となる(S715)。
モジュール(1)内に未割当ページ301が存在する場合、ライトプログラム2222は、ライト対象仮想領域に割り当てられているページにあるデータの複製を、モジュール(2)へ依頼する(S701)。
複製依頼を受領したモジュール(2)の複製作成プログラム2226は、仮想ボリュームテーブル(2)を参照し、ライト対象仮想領域のリード頻度をチェックし(S702)、リード頻度が高いか否かを判定する(S703)。リード頻度が低い場合、複製作成プログラム2226は、モジュール(1)にリード頻度が低いことを通知し(S704)、処理を終了する。そして、モジュール(1)のライトプログラム2222は、リード頻度が低いという通知を受領し(S707でNo)、処理を終了する(S715)。
一方、ライト対象仮想領域のリード頻度が高い(以下、図19において「高リード頻度仮想領域」と言う)場合(S703Yes)、複製作成プログラム2226は、高リード頻度仮想領域に割り当てられているページ内のデータをキャッシュ部(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を、複製元とするか否かを決定してもよい。さらに、モジュール(1)が、対象仮想領域について、モジュール(1)及び(2)の両方でのリード頻度の値に基づき、モジュール(2)内の、対象仮想領域に割り当てられているページ301を、複製元とするか否かを決定してもよい。
モジュール200を跨ぐリードの処理の時のページ複製処理について説明する。このページ複製処理は、ライト処理時のページ複製処理と同じ処理ステップによって実現できる。例えば、図13に示したモジュール200を跨ぐリード処理のS316とS317との間に、図19に示した複製を作成するための処理(ステップS700からS715)を追加することで実現できる。
図20を用いて、リード処理時の別のページ複製処理について説明する。リード処理は、ライト処理と異なり、データをホスト100へ転送するため、他モジュール(2)から自モジュール(1)へリードデータを転送する必要がある。この転送を利用することで、リード処理時のページ複製処理を改善することができる。具体的には、例えば、リードデータが高リード頻度ページ301に記憶されている場合、他モジュール(2)から自モジュール(1)へリードデータのみを転送するのではなく、自モジュール(1)が、モジュール(1)内の空きページ301に、モジュール(2)からのリードデータを格納する。これにより、ページ複製処理で必要となるモジュール間通信の発生回数を削減することができる。
図20に示す処理は、例えば以下のように実現される。モジュール(1)及び(2)内で、リードプログラム2221が実行される。モジュール(2)内で、制御情報更新プログラム2228が実行される。
さらに、この処理は、図13に示したモジュール200を跨ぐリードの処理の変更で実現できる。なお、S504の結果、「Yes」になるケースは、モジュール(1)でページ割当済みのため、複製の必要がない。よって、説明を省略する(図13で説明済み)。ステップ301の結果、「Yes」になるケースは、以下に説明するページ複製処理を適用することができるが、S301の結果が「No」になる場合の処理と同等であるため省略する。
リードプログラム(1)は、S504及びS301を実行することで、モジュール(2)がリードデータを有することを認識する。次に、リードプログラム(1)は、モジュール(2)に対してリード要求を発行する(S302)。
モジュール(1)からリード要求を受領したモジュール(2)のリードプログラム(2)は、リードデータを記憶するページ301の割当先の仮想領域のリード頻度をチェックし、リード頻度が高いか否かを判定する(S716)。リード頻度が低い場合、モジュール(2)は、図13を用いて説明した処理を実行する(S303、及び、S304)。
一方、リード頻度が高い場合、リードプログラム(2)は、リード頻度が高い仮想領域に割り当てられているページ内の全データを読み出してキャッシュ部(2)に格納する(S717)。
そして、リードプログラム(2)は、モジュール(1)にページ複製を指示し(S718)、処理を終了する。このとき、複製元ページ301内の転送データのキャッシュアドレスと、複製元ページ301の割当先の仮想領域に対応した「割当モジュール」の値、「アドレス」の値、「複製モジュール」の値、「リード頻度」の値とが、リードプログラム(2)からモジュール(1)に通知される。
モジュール(2)から上記の通知を受領したモジュール(1)のリードプログラム(1)は、通知されたキャッシュアドレスが示すキャッシュ領域にあるデータを、モジュール(2)からモジュール(1)へ転送する(S719)。次に、リードプログラム(1)は、モジュール(2)からの通知がページ複製指示であるか否かを判定する(S720)。ページ複製指示でない場合(S720でNo)、リードプログラム(1)は、モジュール(2)から転送されたリードデータをホスト100へ転送し、処理を終了する(S724)。
一方、通知がページ複製指示である場合(S720でYes)、リードプログラム(1)は、モジュール(1)内に未割当ページ301が存在するか否かの判定を行う(S721)。モジュール(1)内に未割当ページ301が存在しない場合(S721でNo)、S724が行われる。モジュール(1)内に未割当ページ301が存在する場合(S721でYes)、リードプログラム(1)は、モジュール(1)内の未使用ページ301を割り当て、割り当てたページ301に、転送されたデータを格納する(S722)。次に、リードプログラム(1)は、図20での複製元ページに対応した複製ページを有する全モジュール(モジュール(1)以外)に、モジュール(1)が「複製モジュール」に追加されたことを通知する。この通知を受領した各モジュール200は、自モジュール200内の仮想ボリュームテーブル22121を更新し(「複製モジュール」の値として“モジュール(1)”を追加し)、処理を終了する(S723)。S722の処理は、図19のS708からS711と同じである。さらに、S723の処理は、図19のS712からS714と同じである。リードプログラム(1)は、S723を実行した後、ホスト100へリードデータを転送し、処理を終了する(S724)。
なお、ステップS301の結果が「Yes」になる場合は、ステップS312及びS313を、ステップS716からS718に変更し、ステップS315及びS316を、ステップS719からS724に変更することで、ページ複製処理を行うことができる。
次に、図21から図23を用いて、自モジュール内のページ301にI/Oが発生する時に、I/O対象の仮想ボリューム302へのパスを有する他モジュールへ自モジュールからページ複製する処理の一例を説明する。
この処理を実現するためには、自モジュール200が、I/O対象の仮想ボリューム302へのパスを、どのモジュール200が有しているかを認識できる必要がある。これは、例えば、図21に示すパス情報テーブル22111により実現できる。すなわち、実施例1におけるパス情報テーブル2211に、パス毎にパス定義済みモジュール番号が追加される。「パス定義済みモジュール番号」は、ボリューム番号によって識別される仮想ボリューム302へのパスを有するモジュール200のモジュール番号である。ボリューム番号によって識別される仮想ボリューム302へのパスを複数のモジュール200が有する場合、「パス定義済みモジュール番号」の値としては、複数個のモジュール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処理時に行う処理の一例を説明する。その際、ホスト100からI/O要求を受領する自モジュール200をモジュール(1)とし、新たに複製先となるモジュール200をモジュール(2)とする。以下、I/O要求としてライト要求が受領されたものとする。
図12のステップS506を実行した後、ライトプログラム(1)は、仮想ボリュームテーブル(1)を参照し、ライト対象仮想領域のリード頻度をチェックし、リード頻度が高いか否かを判定する(S900)。リード頻度が低い場合(S900でNo)、ライトプログラム(1)は、処理を終了する(S904)。
一方、リード頻度が高い場合(S900でYes)、ライトプログラム(1)は、高リード頻度仮想領域について、ライト対象ボリュームへのパスを有しており、かつ、複製を持たないモジュール200が存在するか否かを判定する(S901)。具体的には、ライトプログラム(1)は、パス情報テーブル(1)の「パス定義済みモジュール番号」、及び、仮想ボリュームテーブル(1)における高リード頻度仮想領域に対応した「複製モジュール」をチェックする。該当するモジュール200が存在しない場合には(S901でNo)、ライトプログラム(1)は、処理を終了する(S904)。ここで、「該当するモジュール」とは、仮想ボリュームテーブル(1)の「複製モジュール」の値に含まれず、かつ、パス情報テーブル(1)の「パス定義済みモジュール番号」の値に含まれるモジュールである。
該当するモジュール200(この例ではモジュール(2))が存在する場合(S901でYes)、ライトプログラム(1)は、高リード頻度仮想領域へ割り当てられている複製元ページ301に記憶されているデータをキャッシュ部(1)に格納し(S902)、当該モジュール200(モジュール(2))へ複製を依頼する(S903)。このとき、ライトプログラム(1)は、そのデータのキャッシュアドレスと、その高リード頻度仮想領域についての「割当モジュール」の値、「アドレス」の値、「複製モジュール」の値、及び「リード頻度」の値とを、モジュール(2)に通知する。
ライトプログラム(1)は、更に別のモジュール200へページ複製を行うために、S901からS903を繰り返し実行する。
モジュール(2)の処理について説明する。モジュール(1)から複製指示を受領したモジュール(2)の複製作成プログラム2226は、モジュール(2)に未割当ページ301が存在するか否かを判定する(S905)。未割当ページ301が存在しない場合(S905でNo)、処理を終了する(S908)。逆に、未割当ページ301が存在する場合(S905でYes)、複製作成プログラム2226は、対象データをモジュール(1)(通知されたキャッシュアドレス)からモジュール(2)へ転送し、モジュール(2)内の未割当ページ301に格納する(S906)。この処理は、図18のステップS608からS611と同じである。
次に、複製作成プログラム2226は、対象仮想領域に割り当てられているページ301を有する全モジュール200(モジュール(2)を除く、モジュール(1)を含む)に、新たにモジュール(2)が「複製モジュール」として追加されたことを通知する。この通知を受領した各モジュール200は、そのモジュール200内の仮想ボリュームテーブル22121の「複製モジュール」の値として、“モジュール(2)”を追加する(S907)。この処理は、図18のステップS612からS614と同じである。
以上のようにして、ライト処理時に、ライトデータなどの対象データを他モジュール200へ複製することができる。なお、説明では、ライト処理を例に説明したがリード処理の場合も同様に実現できる。
ところで、或る仮想領域について、ライト要求を受領したモジュール200のみでデータが更新されると、そのモジュール200では更新後のデータがあり、他モジュール200での複製データは、更新前のデータとなってしまう。つまり、データの内容が異なってしまう。この場合、他モジュール200が上記或る仮想領域をリード対象領域とするリード要求をホスト100から受領すると、更新前のデータがホスト100へ転送されてしまう可能性がある。
以下、このような不整合状態を回避するライト処理について説明する。具体的には、ライト時に複製ページを削除する方法と、ライト時に全複製データを更新する方法について説明する。その際、ライト要求を受領した自モジュール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と同じ)内のS111とS112の間に、図24に示す複製を削除するための処理(ステップS1100からS1107)を追加することができる。なお、図24には、図12の処理に、複製を削除するための処理(ステップS1100からS1107)を追加した全ステップを示している。
ライトプログラム2222が、ライトデータがモジュール(1)にあることを認識する(S500からS504)。
次に、ライトプログラム2222は、仮想ボリュームテーブル(1)を参照することで、ライトデータに対応する複製データを有するモジュール200が存在するか否かをチェックする(S1100)。具体的には、ライトプログラム(1)が、ライト対象仮想領域に対応する「複製モジュール」を参照する。該当するモジュール200が存在しない場合(S110でNo)、ライトプログラム(1)は、ライト処理(S505からS509)を実行する。
該当するモジュール200(モジュール(2))が存在する場合(S1100でYes)、ライトプログラム(1)は、モジュール(2)に複製ページの削除を依頼する(S1101)。このとき、ライトプログラム(1)は、例えば、モジュール(2)に、ライト対象の仮想ボリュームのボリューム番号、及び、ライト対象仮想領域のアドレスを通知する。
複製ページ301の削除依頼を受領したモジュール(2)の複製削除プログラム2227は、モジュール(2)内の複製ページ301を特定する(S1102)。具体的には、複製削除プログラム2227は、モジュール(1)から通知された仮想ボリューム番号及びアドレスを用いて仮想ボリュームテーブル(2)を参照する。
次に、複製削除プログラム2227は、ページテーブル(2)及び仮想ボリュームテーブル(2)を更新することで、S1102で特定されたページ301の、仮想領域に対する割当てを解除する(そのページ301を解放する)(S1103、S1104)。具体的には、S1102で特定されたページ301について、ページテーブル(2)における「状態」の値が“未割当”に変更され、“割当先”の値が“−”に変更される。さらに、そのページ301の割当先の仮想領域について、仮想ボリュームテーブル(2)における「割当モジュール」の値が“モジュール(1)”に変更され、さらに、「複製モジュール」の値が“−”に変更される。このようにして、複製データが削除される。つまり、実施例2において、「複製ページの削除」とは、複製ページの割当てが解除されること(つまりそのページの「状態」が“割り当て済み”から“未割当”になること)である。
複製ページの削除後、複製削除プログラム2227は、モジュール(1)へ完了を報告する(S1105)。
ライトプログラム(1)は、モジュール(2)から完了報告を受領すると(S1106)、仮想ボリュームテーブル(1)を更新する(S1107)。具体的には、仮想ボリュームテーブル(1)の「割当モジュール」の値が“モジュール(1)”に変更され、さらに、「複製モジュール」の値が“−”に変更される。
続けて、ライトプログラム(1)は、更に別のモジュール200が有する複製ページを削除するために、ステップS1100からS1107を繰り返し実行する。
以上のようにして、他モジュール200が有する複製ページを削除することができる。
次に、図25を用いて、ライト処理時に全複製ページを更新する処理の一例を説明する。その際、自モジュール200をモジュール(1)とし、複製データを有する他モジュール200をモジュール(2)として説明する。
図25に示す処理は、モジュール(1)及び(2)内でライトプログラム2222が実行されることで実現される。
さらに、この処理は、図12及び図14に示したライト処理の変形例である。具体的には、図12の場合、ステップS504とS505の間に、図25に示す他モジュール200の複製を更新するための処理(ステップS1200からS1204)を追加する。また、図14の場合、ステップ1011(ステップS104からS115と同じ)内のS111とS112の間に、図25に示す他モジュール200の複製を更新するための処理(ステップS1200からS1204)を追加する。なお、図25には、図12の処理に、他モジュール200の複製を更新するための処理(ステップS1200からS1204)を追加した全ステップを示している。
ライトプログラム(1)が、ライトデータがモジュール(1)にあることを認識する(S500からS504)。
次に、ライトプログラム(1)は、仮想ボリュームテーブル(1)を参照することで、ライトデータの複製データを有するモジュール200が存在するか否かをチェックする(S1200)。具体的には、ライトプログラム(1)が、ライト対象仮想領域に対応する「複製モジュール」を参照する。該当するモジュール200が存在しない場合(S1200でNo)、ライトプログラム(1)は、ライト処理を実行する(S505からS509)。
該当するモジュール200(モジュール(2))が存在する場合(S1200でYes)、ライトプログラム(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でNo)、ページ割当プログラム2225は、モジュール(1)内に複製ページ301が存在するか否かを判定する(S1300)。具体的には、仮想ボリュームテーブル22121から、「複製有無ビット」の値が“ON”の行が検索される。なお、ライト対象ボリューム以外のボリュームも探索の対象である。つまり、ライト対象ボリューム以外の仮想ボリューム302に割当てられている複製ページも削除することもできる。探索の結果、複製ページ301が存在しない場合(S1300でNo)、図15のS405からS416が実行され、処理が終了する(S1301)。
一方、複製ページ301が存在する場合(S1300でYes)、ページ割当プログラム2225は、複製ページ301の「リード頻度」を参照し、「リード頻度」の値が最も低いページ301を決定する(S1302)。
ページ割当プログラム2225は、ページテーブル(1)及び仮想ボリュームテーブル(1)を更新することで(S1303、S1304)、複製ページ301を解放する。具体的には、ページテーブル(1)において、複製ページ301の「状態」の値が“未割当”に変更され、「割当先」が“−”へ変更される。さらに、仮想ボリュームテーブル(1)において、複製ページ301が割当先である仮想領域に対応した「割当モジュール」及び「複製モジュール」の値から“モジュール(1)”が削除される。
次に、ページ割当プログラム2225は、解放した複製ページ301に対応する複製ページを有する他モジュール200(モジュール(2))が存在するか否かを判定する(S1305)。存在する場合(S1305でYes)、ページ割当プログラム2225は、複製ページ301を解放したことを当該他モジュール200に通知する(S1306)。当該他モジュールは、例えば、解放された複製ページが割り当てられていた仮想領域に対応する「複製モジュール」の値に対応したモジュールである。ページ割当プログラム2225は、S1306の際、モジュール(2)に、解放された複製ページが割り当てられていた仮想領域に対応した「アドレス」の値と、「仮想ボリューム番号」の値とを通知する。
モジュール(1)から通知を受領したモジュール(2)内の制御情報更新プログラム2228は、仮想ボリュームテーブル(2)における、上記通知された「アドレス」及び「仮想ボリューム番号」に対応する「割当モジュール」及び「複製モジュール」の値として“モジュール(1)”を削除する(S1307)。その除後、制御情報更新プログラム2228は、モジュール(1)へ完了を報告する(S1308)。
モジュール(1)のページ割当プログラム2225は、モジュール(2)からの完了報告を受領する(S1309)。そして、ページ割当プログラム2225は、S1305からS1309を繰り返し実行する。
解放した複製ページ301に対応する複製ページを有する全てのモジュール200への通知が完了すると、ページ割当プログラム2225は、S401へ戻り、ライト要求に対するページ割当処理を実行する(S402からS404)。複製ページ301が解放されたため、S401の判定は“Yes”になる。
以上のように、複製ページ301を解放することで、ページ不足によるライト不可という状況を回避することができる。
次に、図27を用いて、パス削除時に複製ページを削除する処理の一例を説明する。
仮想ボリュームへのパスを削除する場合、削除対象のパスが使用するポート261を有するモジュール200は、ホスト100からI/O要求を受領しなくなる。このため、このときに複製ページ削除を実行することは、効率的である。
削除対象のパスが使用するポート261を有するモジュール200をモジュール(1)、削除対象のパスの宛先となるボリュームへの別のパスを有するモジュール200をモジュール(2)として説明する。
図27に示す処理は、例えば次のように実行される。モジュール(1)内でパス削除プログラム2224が実行される。モジュール(2)内で複製作製プログラム2226、パス削除プログラム2224、及び制御情報更新プログラム2228が実行される。なお、これらのモジュール(2)のプログラムはモジュール(1)からの通知を契機に実行される。
まず、パス削除プログラム(1)は、パス削除の指示を受領する(S1400)。なお、図示していないが、この指示は、保守端末270の保守プログラム273からの指示である。
次に、パス削除プログラム(1)は、対象パスの宛先ボリュームへのパスを有し、かつ、モジュール(1)のパス削除を通知していない他モジュール200が存在するか否かを判定する(S1401)。該当するモジュール200が存在する場合、パス削除プログラム2224は、該当するモジュール200へ、パス情報テーブル22111の更新を通知する(S1402)。このとき、パス削除プログラム2224は、宛先ボリュームのボリューム番号を通知する。
パス削除プログラム(1)からパス情報テーブル22111の更新通知を受領したモジュール(2)のパス削除プログラム(2)は、パス情報テーブル22111の宛先ボリュームのボリューム番号によって特定できるパス情報を更新する(S1403)。具体的には、「パス定義済みモジュール」の値として“モジュール(1)”が削除される。
削除後、パス削除プログラム(2)は、モジュール(1)へ完了を報告する(S1404)。
モジュール(1)のパス削除プログラム(1)は、モジュール(2)からの完了報告を受領する(S1405)。そして、パス削除プログラム(1)は、宛先ボリュームへのパスを有する更に別のモジュール200へ、パス情報テーブル22111の更新を通知するため、S1401からS1405を繰り返し実行する。
宛先ボリュームへのパスを有する全てのモジュール200へ、パス情報テーブル22111の更新を通知すると、パス削除プログラム(1)は、S1406へ進む。S1406以降のステップは、モジュール(1)のみが有するページ301を、他モジュール200へのページ301をコピーする処理、及び、モジュール(1)以外のモジュール200へ複製済みのページ301をモジュール(1)で削除する処理である。パスが削除されると、モジュール(1)はホスト100からI/Oを受領しない。このため、上記のように他モジュール200へページ301をコピーするほうがモジュール200を跨ぐI/Oの発生頻度が低くなる。
パス削除プログラム(1)は、削除対象のパスの宛先ボリュームに対して割当られているページ301のうちで、モジュール(1)のみが有するページ301が存在するか否かを判定する(S1406)。この処理は、仮想ボリュームテーブル(1)において「複製有無ビット」の値が“OFF”、且つ、「割当モジュール」の値が“モジュール(1)”である行を探すことで実現できる。モジュール(1)のみが有するページ301が存在する場合、パス削除プログラム(1)は、削除対象パスの宛先ボリュームへのパスを有する他モジュール200が存在するか否かを判定する(S1407)。宛先ボリュームへのパスを有する他モジュール200(モジュール(2))が存在する場合、パス削除プログラム(1)は、モジュール(1)のみが有するページ301内のデータをモジュール(2)へ複製する(S1408)。この処理は、図23を用いて説明したS902からS908と同じである。続けて、パス削除プログラム(1)は、宛先ボリュームへ割当てられているページ301のうち、モジュール(1)以外のモジュールに複製ページが存在するページ301を、モジュール(1)から削除する(S1409)。この処理は、図26を用いて説明したS1303からS1309と同じである。また、ステップS1406、及び、S1407の判定の結果が“No”の場合は、S1408がスキップされ、S1409が行われる。
次に、パス削除プログラム(1)は、削除対象のパスの宛先ボリュームに割り当てられているページ301のうちで、モジュール(1)のみが有するページ301が存在するか否かを判定する(S1410)。この判定において、「“Yes”(存在する)」になるのは、S1407からS1409へ進んだ場合、及び、S1408でモジュール(1)のみが有する全てのページ301をモジュール(2)へ複製できなかった場合である。この場合、他モジュール200が有するポート261を介してモジュール(1)内のデータがリード・ライトされる可能性があるため、仮想ボリュームテーブル(1)から対象ボリュームの情報を削除できない。よって、パス削除プログラム(1)は、S1411をスキップし、S1412へ進む。
一方で、S1410の判定において、「“No”(存在しない)」となる場合、パス削除プログラム(1)は、仮想ボリュームテーブル(1)から宛先ボリュームの情報を削除し、S1412へ進む。
パス削除プログラム(1)は、パス情報テーブル(1)から削除対象のパス情報を削除し、完了を報告する(S1413)。なお、完了の報告先は、保守端末270の保守プログラム273である。
図28を用いて、複製データが書込まれてから一定時間が経過した複製ページ301を削除する処理の一例を説明する。なお、この処理は、既に述べたライト時の複製ページ削除、新規ページ割当時の複製ページ削除、パス定義時の複製ページ削除と併用することも可能である。
なお、図示しないが、この処理を実現するために、仮想ボリュームテーブル22121に、ページ301を割当てた時刻(以後、ページ割当時刻)が記録される。また、以下、複製ページ301を削除せずに残しておく時間長を「複製時間長」と呼ぶ。以下、モジュール(1)での処理を例に採り説明するが、この処理は、各モジュールで複製削除プログラム2227により行われる。
複製削除プログラム(1)は、ボリューム番号が“0”の仮想ボリュームの先頭仮想領域(本実施例では、アドレス「0」から「99」)を処理対象とする(S1500)。
次に、複製削除プログラム(1)は、処理対象仮想領域がページ割当済みであるか否かを判定する(S1501)。ページ割当済みの場合、複製削除プログラム(1)は、モジュール(1)で割当てているページ301が他モジュール200で割当てられたページ301の複製であるか否かを判定する(S1502)。これは、仮想ボリュームテーブル(1)を参照し、「複製モジュール」の値として“モジュール(1)”が存在するか否かによって判断することができる。
S1501又はS1502の結果が“No”の場合、複製削除プログラム(1)は、現在の処理対象仮想領域が処理対象ボリュームの末尾であるか否かを判定する(S1506)。現在の処理対象領域がボリュームの末尾の場合、複製削除プログラム(1)は、次のボリューム(ボリューム番号が次のボリューム)の先頭仮想領域を次の処理対象とし(S1507)、S1501へ返る。一方、現在の処理対象仮想領域がボリュームの末尾でない場合、複製削除プログラム(1)は、同一ボリューム内の次の仮想領域を処理対象とし(S1508)、S1501へ返る。
一方、S1501及びS1502が共に“Yes”の場合、複製削除プログラム(1)は、仮想ボリュームテーブル(1)から、処理対象仮想領域に対応する「ページ割当時刻」の値を得る(S1503)。次に、複製削除プログラム(1)は、(複製時間長+ページ割当時刻)が現在時刻より大きいか否かを判定する(S1504)。(複製時間長+ページ割当時刻)が現在時刻以上の場合、複製時間長を超過しているため、複製削除プログラム2227は、処理対象仮想領域に割り当てられている複製ページ301を削除する(S1505)。この削除処理は、図26を用いて説明したS1303からS1309と同じである。一方、(複製時間長+ページ割当時刻)が現在時刻よりも小さい場合、処理対象仮想領域に割り当てられている複製ページ301については、複製時間長が超過されておらず、削除する必要がないため、複製削除プログラム2227は、S1506へ進む。
以上のようにして、時間に基づいて複製ページを削除することができる。なお、複製ページ301のリード頻度に応じて複製時間長が自動で変更されても良い。例えば、リード頻度が高い仮想領域に割り当てられている複製ページについては、複製時間長はより長くされても良い。具体的には、例えば、図28のS1504で、処理対象仮想領域に割り当てられている複製ページ301に対応する「リード頻度」の値を参照し、その値に応じて、複製時間長が変更されても良い。
以上、本発明の好適な幾つかの実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、識別番号に代えて、他種の識別子が採用されても良い。例えば、図29に示すように、一つのモジュール間が密結合となって、その他のモジュール間が疎結合とされても良い。
本発明の実施例1に係るコンピュータシステムの全体構成の一例を示す。 メモリパッケージの詳細の一例を示す図である。 パス情報テーブルの一例を示す図である。 モジュール構成のストレージにおけるI/O処理の流れの一例を示す図である。 仮想ボリューム技術の一例を示す図である。 プールテーブルの一例を示す図である。 ページテーブルの一例を示す図である。 仮想ボリュームテーブルの一例を示す図である。 実施例1の一つの特徴の概要の説明図である。 仮想ボリュームを作成する処理の一例を示す図である。 実施例1でのパス定義処理の一例を示す図である。 自モジュール内のページが割当済みの仮想領域がライト対象の仮想領域である場合のライト処理の一例を示す図である。 リード対象の仮想領域に自モジュール内のページが割り当てられていない場合のリード処理の一例を示す図である。 ライト対象の仮想領域に自モジュール内のページが割り当てられていない場合のライト処理の一例を示す図である。 仮想ボリュームにページを割当てる処理の一例を示す図である。 実施例2の一つの特徴の概要の説明図である。 実施例2における仮想ボリュームテーブルの一例を示す図である。 パス定義時のページ複製処理の一例を示す図である。 ライト処理時のページ複製処理の一例を示す図である。 リード処理時のページ複製処理の一例を示す図である。 実施例2におけるパス情報テーブルの一例を示す図である。 実施例2でのパス定義処理の一例を示す図である。 リード・ライト処理時のページ複製処理の別の一例を示す図である。 ライト処理時の複製ページ削除処理の一例を示す図である。 ライト処理時の複製ページ更新処理の一例を示す図である。 新規ページ割当時の複製ページ削除処理の一例を示す図である。 パス定義時の複製ページ削除処理の一例を示す図である。 時間経過による複製ページ削除処理の一例を示す図である。 モジュール間の結合の変形例を示す図である。 課題の説明図である。
符号の説明
100・・・ホスト 110・・・ネットワーク 120・・・ネットワーク 200・・・ストレージシステムモジュール 210・・・プロセッサパッケージ 211・・・プロセッサ 212・・・ローカルメモリ 213・・・保守ポート 220・・・メモリパッケージ 221・・・制御情報部 222・・・プログラム部 223・・・キャッシュ部 230・・・バックエンドパッケージ 231・・・ポート 240・・・HDD 250・・・ボリューム 260・・・フロントエンドパッケージ 261・・・ポート

Claims (21)

  1. 上位装置からI/O要求を受信し処理するストレージシステムであって、
    前記上位装置からI/O要求を受け付ける第一及び第二のモジュールを備え、
    前記第一のモジュールが、
    前記上位装置に接続される第一のポートと、
    複数の第一の仮想領域で構成され前記第一のポートに関連付けられる第一の仮想ボリュームと、
    各第一の仮想領域に関する情報である第一の仮想領域管理情報を記憶する第一のメモリ領域と、
    第一の物理記憶装置と、
    前記第一の物理記憶装置に基づく複数の第一の実領域で構成された第一のプールと、
    前記上位装置から前記第一のポートを介して受け付けたI/O要求を処理する第一のI/O処理部と、
    前記第二のモジュールに接続される第一のモジュールインタフェース装置と
    を備え、
    前記第一の仮想領域管理情報は、前記第一の仮想領域毎に、割り当てられている実領域を有するモジュールである割当モジュールの識別子を含み、
    前記第二のモジュールが、
    前記上位装置に接続される第二のポートと、
    複数の第二の仮想領域で構成され前記第二のポートに関連付けられており、且つ、前記第一の仮想ボリュームに関連付けられているボリューム識別子と同一のボリューム識別子が関連付けられている第二の仮想ボリュームと、
    各第二の仮想領域に関する情報である第二の仮想領域管理情報を記憶する第二のメモリ領域と、
    第二の物理記憶装置と、
    前記第二の物理記憶装置に基づく複数の第二の実領域で構成された第二のプールと、
    前記上位装置から前記第二のポートを介して受け付けたI/O要求を処理する第二のI/O処理部と、
    前記第一のモジュールに接続される第二のモジュールインタフェース装置と
    を備え、
    前記第二の仮想領域管理情報は、前記第二の仮想領域毎に、割り当てられている実領域を有するモジュールである割当モジュールの識別子を含み、
    (A)前記第二のモジュールが、前記上位装置からライト要求(W1)を受領した場合、前記第二のI/O処理部は、前記ライト要求(W1)から特定されるライト対象の第二の仮想領域(V21)に第二の実領域が未割当てであれば、前記複数の第二の実領域から未割当ての第二の実領域(R21)を探して前記第二の仮想領域(V21)に割り当て、前記第二の実領域(R21)に、前記ライト要求(W1)に従うデータを書き込み、前記第二の仮想領域管理情報に、前記第二の仮想領域(V21)に対応する前記割当モジュール識別子として前記第二のモジュールの識別子を書き込み、
    (B)前記第一のモジュールが、前記上位装置からライト要求(W2)を受領した場合、前記第一のI/O処理部は、前記ライト要求(W2)から特定されるライト対象の第一の仮想領域(V11)に第一の実領域が未割当てであれば、前記複数の第一の実領域から未割当ての第一の実領域(R11)を探して前記第一の仮想領域(V11)に割り当て、前記第一の実領域(V11)に、前記ライト要求(W2)に従うデータを書き込み、前記第一の仮想領域管理情報に、前記第一の仮想領域(V11)に対応する前記割当モジュール識別子として前記第一のモジュールの識別子を書き込む、
    ストレージシステム。
  2. 前記第一の仮想領域管理情報が、前記第一の仮想領域毎に、複製モジュールの識別子を含み、前記複製モジュールは、複製データが記憶されている実領域を有するモジュールであり、前記複製データは、前記第一の仮想領域に対応する前記割当モジュール内の実領域に記憶されているデータが複製されたものであり、
    前記第二の仮想領域管理情報が、前記第二の仮想領域毎に、複製モジュールの識別子を含み、
    前記第一のモジュールが、第一のデータ複製部を更に備え、
    (C)前記第一のデータ複製部が、前記第二の実領域(R21)に記憶されているデータの複製データを、前記複数の第一の実領域のうちの未割当ての実領域であって、前記第二の仮想領域(V21)と同じアドレスの第一の仮想領域(V12)に割り当てられる実領域(R12)に書き込み、前記第一の仮想領域管理情報に、前記第一の仮想領域(V12)に対応する前記複製モジュール識別子として前記第一のモジュールの識別子を書き込み、
    (D)前記第一のモジュールが、前記上位装置から、前記第一の仮想領域(V12)がリード対象であるリード要求を受領した場合、前記第一の仮想領域管理情報を参照することにより、前記第一の仮想領域(V12)に対応する前記割当モジュールが前記第一のモジュールでなくても、前記第一の仮想領域(V12)に対応する前記複製モジュールが前記第一のモジュールであることを特定したならば、前記実領域(R12)からデータを読み出し、前記取得されたデータを前記上位装置に転送する、
    請求項1記載のストレージシステム。
  3. 前記第二のモジュールが、第二のデータ複製部を更に備え、
    (E)前記第二のデータ複製部が、前記第二の仮想領域管理情報を参照することにより、前記第二の仮想領域(V21)に割り当てられている前記第二の実領域(R21)に記憶されているデータが複製されていないことを特定し、
    前記第一のデータ複製部が、前記特定された前記第二の仮想領域(V21)に対応する前記第一の仮想領域(V12)について、前記(C)の処理を実行する、
    請求項2記載のストレージシステム。
  4. 前記第一の仮想領域管理情報が、前記第一の仮想領域毎に、単位時間当たりに第一の仮想領域がリード対象とされた回数であるリード頻度を含み、前記第一のI/O処理部が、リード要求の受信に応じて、そのリード要求に従うリード対象の第一の仮想領域に対応した前記リード頻度を更新し、
    前記第二の仮想領域管理情報が、前記第二の仮想領域毎に、単位時間当たりに第二の仮想領域がリード対象とされた回数であるリード頻度を含み、前記第二のI/O処理部が、リード要求の受信に応じて、そのリード要求に従うリード対象の第二の仮想領域に対応した前記リード頻度を更新し、
    前記第一の仮想領域(V12)及び前記第二の仮想領域(V21)の少なくとも一方に対応する前記リード頻度が基準値よりも高い場合に、前記実領域(R12)へのデータの複製が行われる、
    請求項2又は3記載のストレージシステム。
  5. 前記第一の仮想領域管理情報が、前記第一の仮想領域毎に、単位時間当たりに第一の仮想領域がライト対象とされた回数であるライト頻度を含み、前記第一のI/O処理部が、ライト要求の受信に応じて、そのライト要求に従うライト対象の第一の仮想領域に対応した前記ライト頻度を更新し、
    前記第二の仮想領域管理情報が、前記第二の仮想領域毎に、単位時間当たりに第二の仮想領域がライト対象とされた回数であるライト頻度を含み、前記第二のI/O処理部が、ライト要求の受信に応じて、そのライト要求に従うライト対象の第二の仮想領域に対応した前記ライト頻度を更新し、
    前記第一の仮想領域(V12)及び前記第二の仮想領域(V21)の少なくとも一方に対応する前記リード頻度と比較される前記基準値は、前記第一の仮想領域(V12)及び前記第二の仮想領域(V21)の少なくとも一方に対応するライト頻度に基づく値である、
    請求項4記載のストレージシステム。
  6. 前記第一のモジュールに前記第一の仮想ボリュームが定義されるよりも先に、前記第二のモジュールに定義された前記第二の仮想ボリュームの前記第二の仮想領域(V21)に前記実領域(R21)が割り当てられており、
    前記第一のポートに関連付けられた前記第一の仮想ボリュームが前記第一のモジュールに定義された契機で、前記第一のモジュールが、前記第二の実領域(R21)に記憶されているデータの前記複製データを前記第二のモジュールから取得する、
    請求項2乃至5のうちのいずれか1項に記載のストレージシステム。
  7. 前記(A)において前記第二の実領域(R21)に前記ライト要求(W1)に従うデータが書き込まれた契機で、前記第一のモジュールが、前記第二の実領域(R21)に記憶されているデータの前記複製データを前記第二のモジュールから取得する、
    請求項2乃至5のうちのいずれか1項に記載のストレージシステム。
  8. (F)前記第二のI/O処理部が、前記第二の仮想領域(V21)に第二の実領域が割り当てられたことを前記第一のモジュールに通知し、前記第一のI/O処理部が、前記第一の仮想領域管理情報において、前記第二の仮想領域(V21)と同じアドレスの第一の仮想領域(V12)に対応するモジュール識別子として前記第二のモジュールの識別子を書き込み、
    (G)前記第一のモジュールが、前記上位装置から、前記第二の仮想領域(V21)と同じアドレスである第一の仮想領域(V12)がリード対象であるリード要求を受領した場合、前記第一の仮想領域管理情報を参照することにより、前記第一の仮想領域(V12)に割り当てられている実領域が前記第二のモジュールにあることを特定し、前記第二のモジュールから、前記第二の仮想領域(V21)に割り当てられている前記第二の実領域(R21)に記憶されているデータを取得し、前記取得されたデータを前記上位装置に転送し、
    前記(G)において前記第二の実領域(R21)に記憶されているデータが取得された契機で、前記(C)が行われる、
    請求項2乃至5のうちのいずれか1項に記載のストレージシステム。
  9. (H)前記第二のモジュールが、前記上位装置から、前記第二の実領域(R21)が割り当て済みの前記第二の仮想領域(V21)がライト対象であるライト要求(W3)を受領した場合、前記第二の仮想領域(V21)が割当先の第二の実領域に記憶されるデータを、前記ライト要求(W3)に従うデータとし、
    前記(H)を契機として、前記第一のモジュールが、前記第二の仮想領域(V21)に割り当てられている第二の実領域に記憶される、前記ライト要求(W3)に従うデータを、前記第二のモジュールから取得し、前記第一の仮想領域(V12)が割当先の第一の実領域に記憶されるデータを、前記ライト要求(W3)に従うデータの複製データとする、
    請求項2乃至8のうちのいずれか1項に記載のストレージシステム。
  10. 前記第一のモジュールが、第一の複製削除部を更に備え、
    前記第一の複製削除部が、前記割当モジュールが前記第二のモジュールであり前記複製モジュールが前記第一のモジュールである削除対象の前記第一の仮想領域に対する前記第一の実領域の割り当てを解除する、
    請求項2乃至9のうちのいずれか1項に記載のストレージシステム。
  11. 前記第一の複製削除部が、前記第一の仮想ボリュームに対する前記第一のポートの関連付けが解除されたことを契機に、前記削除対象の第一の仮想領域に対する前記第一の実領域の割り当てを解除する、
    請求項10記載のストレージシステム。
  12. 前記第一の複製削除部が、未割当ての前記第一の実領域の数が所定数以下になったことを契機に、前記削除対象の第一の仮想領域に対する前記第一の実領域の割り当てを解除する、
    請求項10記載のストレージシステム。
  13. 前記第一の複製削除部が、前記リード頻度が低い第一の仮想領域ほど優先的に前記削除対象の第一の仮想領域とする、
    請求項12記載のストレージシステム。
  14. 前記第一のモジュールが、前記上位装置からライト要求(W4)を受領し、
    前記第一の複製削除部は、前記ライト要求(W4)から特定されるライト対象の第一の仮想領域(V4)に第二の実領域が未割当てで、さらに、前記第一のモジュールが未割当の前記第一の実領域を有していない場合、前記第一の仮想領域(V12)に対する前記第一の実領域(R12)の割り当てを解除する、
    請求項10記載のストレージシステム。
  15. 前記第一の複製削除部が、前記複製データが書き込まれてから一定時間が経過した第一の実領域の割当てを解除する、
    請求項10乃至14のうちのいずれか1項に記載のストレージシステム。
  16. 上位装置からI/O要求を受信し処理する各モジュールが、前記上位装置に接続されるポートと、物理記憶装置と、前記物理記憶装置に基づく複数の実領域で構成されたプールと、他のモジュールに接続されるモジュールインタフェース装置とを備えており、
    前記モジュールを複数個備えたストレージシステムで実現される方法であって、
    前記複数のモジュールが、同一のボリューム識別子が関連付けられた、複数の仮想領域で構成されている仮想ボリュームを有し、
    前記上位装置からライト要求を受領した前記モジュールである第一のモジュールが、前記ライト要求から特定されるライト対象の仮想領域に実領域が未割当てであれば、前記第一のモジュール内の前記複数の実領域から未割当ての実領域を探して前記ライト対象の仮想領域に割り当て、前記割り当てた実領域に、前記ライト要求に従うデータを書き込む、
    記憶制御方法。
  17. 前記ライト対象の仮想領域に前記自モジュール内の実領域が割り当てられたことを、前記第一のモジュールが、前記複数のモジュールのうちの前記第一のモジュール以外である第二のモジュールに通知し、
    或る前記第二のモジュールが、前記割り当てられた実領域に記憶されているデータの複製データを、前記或る第二のモジュール内の複数の実領域のうちの未割当ての実領域であって、前記ライト対象の仮想領域と同じアドレスの仮想領域に割り当てられる実領域に書き込み、
    或る前記第二のモジュールが、前記上位装置から、前記ライト対象の仮想領域と同じアドレスの仮想領域がリード対象の仮想領域であるリード要求を受領した場合、その仮想領域に割り当てられている、前記或る第二のモジュール内の実領域からデータを読出して前記上位装置に転送する、
    請求項16記載の記憶制御方法。
  18. 上位装置からI/O要求を受け付ける、ストレージシステムのモジュールであって、
    前記上位装置に接続されるポートと、
    複数の仮想領域で構成されている仮想ボリュームと、
    各仮想領域に関する情報である仮想領域管理情報を記憶する記憶媒体と、
    物理記憶装置と、
    前記物理記憶装置に基づく複数の実領域で構成されたプールと、
    前記上位装置から前記ポートを介して受け付けたI/O要求を処理するI/O処理部と、
    他のモジュールに接続されるモジュールインタフェース装置と
    を備え、
    前記仮想ボリュームには、他のモジュールが有する仮想ボリュームに関連付けられるボリューム識別子と同一のボリューム識別子が関連付けられ、
    前記仮想領域管理情報は、仮想領域毎に、割り当てられている実領域を有するモジュールである割当モジュールの識別子を含み、
    前記上位装置からライト要求を受領した場合、前記I/O処理部が、前記ライト要求から特定されるライト対象の仮想領域に実領域が未割当てであれば、このモジュール内の前記複数の実領域から未割当ての実領域を探して前記ライト対象の仮想領域に割り当て、前記割り当てた実領域に、前記ライト要求に従うデータを書き込む、
    ストレージシステムモジュール。
  19. 前記割り当てた実領域に記憶されるデータの複製データを、このモジュール以外の他のモジュールに転送する第一の複製処理部を更に備える、
    請求項18記載のストレージシステムモジュール。
  20. このモジュール以外の他のモジュール内の実領域に記憶されたデータの複製データを、前記他のモジュールから取得し、前記他のモジュールにおいて、その実領域の割当先の仮想領域と同じアドレスの、このモジュール内の仮想ボリュームにおける仮想領域に割り当てられる実領域に、前記取得した複製データを書き込む第二の複製処理部を更に備える、
    請求項18又は19記載のストレージシステムモジュール。
  21. 前記第一のモジュールが、前記上位装置からリード要求を受領した場合、前記第一のI/O処理部は、前記リード要求から特定されるリード対象のライト対象の仮想領域に第一の実領域が割り当てられていれば、前記第一の実領域から、前記リード要求に従うデータを読み出し、前記読み出したデータをホストへ転送する、
    請求項1記載のストレージシステム。
JP2008099797A 2008-04-07 2008-04-07 複数のストレージシステムモジュールを備えたストレージシステム Expired - Fee Related JP5072692B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2008099797A JP5072692B2 (ja) 2008-04-07 2008-04-07 複数のストレージシステムモジュールを備えたストレージシステム
US12/130,071 US8645658B2 (en) 2008-04-07 2008-05-30 Storage system comprising plurality of storage system modules
EP09250097A EP2109033A3 (en) 2008-04-07 2009-01-15 Storage system comprising plurality of storage system modules
CN2009100041918A CN101556529B (zh) 2008-04-07 2009-02-20 具有多个存储系统模块的存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008099797A JP5072692B2 (ja) 2008-04-07 2008-04-07 複数のストレージシステムモジュールを備えたストレージシステム

Publications (2)

Publication Number Publication Date
JP2009251970A true JP2009251970A (ja) 2009-10-29
JP5072692B2 JP5072692B2 (ja) 2012-11-14

Family

ID=40823584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008099797A Expired - Fee Related JP5072692B2 (ja) 2008-04-07 2008-04-07 複数のストレージシステムモジュールを備えたストレージシステム

Country Status (4)

Country Link
US (1) US8645658B2 (ja)
EP (1) EP2109033A3 (ja)
JP (1) JP5072692B2 (ja)
CN (1) CN101556529B (ja)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011138321A (ja) * 2009-12-28 2011-07-14 Hitachi Ltd ストレージ管理システム、ストレージ階層管理方法及び管理サーバ
WO2011111093A1 (ja) * 2010-03-09 2011-09-15 株式会社日立製作所 ボリューム管理装置及びストレージシステム
JP2011242840A (ja) * 2010-05-14 2011-12-01 Hitachi Ltd ThinProvisioningが適用されたストレージ装置
JP2012524934A (ja) * 2009-04-23 2012-10-18 ネットアップ,インコーポレーテッド ストレージ・エリア・ネットワーク(「san」)内の仮想ストレージ管理のアクティブ−アクティブ・サポート
WO2014155493A1 (ja) * 2013-03-25 2014-10-02 株式会社日立製作所 計算機システム及びアクセス制御方法
JP2015510616A (ja) * 2012-06-26 2015-04-09 株式会社日立製作所 ストレージシステム、及びストレージシステムの制御方法
US9141304B2 (en) 2012-05-24 2015-09-22 Fujitsu Limited Storage device and method for controlling storage device
JP2015207269A (ja) * 2014-09-17 2015-11-19 株式会社日立製作所 ストレージシステム
US9552172B2 (en) 2013-09-27 2017-01-24 Fujitsu Limited Storage processing apparatus, computer-readable recording medium storing program for controlling storage, and storage system
US9632701B2 (en) 2014-04-21 2017-04-25 Hitachi, Ltd. Storage system
JP2017090951A (ja) * 2015-11-02 2017-05-25 富士通株式会社 ストレージ制御装置、および制御プログラム
JP2018018271A (ja) * 2016-07-27 2018-02-01 富士通株式会社 ストレージ制御装置、ストレージシステムおよびストレージ制御プログラム

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5323989B2 (ja) * 2010-05-18 2013-10-23 株式会社日立製作所 ストレージ装置及びデータ管理方法
US9311013B2 (en) * 2011-03-25 2016-04-12 Hitachi, Ltd. Storage system and storage area allocation method having an automatic tier location function
US9104590B2 (en) * 2012-07-20 2015-08-11 Hitachi, Ltd. Storage system including multiple storage apparatuses and pool virtualization method
JP6005446B2 (ja) * 2012-08-31 2016-10-12 富士通株式会社 ストレージシステム、仮想化制御装置、情報処理装置、および、ストレージシステムの制御方法
CN104516792A (zh) * 2013-10-08 2015-04-15 杰发科技(合肥)有限公司 一种数据备份方法及装置
CN104636077B (zh) * 2013-11-15 2017-10-10 中国电信股份有限公司 用于虚拟机的网络块设备存储系统与方法
US20160224479A1 (en) * 2013-11-28 2016-08-04 Hitachi, Ltd. Computer system, and computer system control method
US10229055B2 (en) * 2014-10-29 2019-03-12 Seagate Technology Llc Adaptive spanning control
US10757175B2 (en) * 2015-02-10 2020-08-25 Vmware, Inc. Synchronization optimization based upon allocation data
US20180213462A1 (en) * 2015-08-03 2018-07-26 Nec Corporation Transmission device, transmission control method, and recording medium
CN105260129B (zh) * 2015-09-17 2018-06-26 浪潮(北京)电子信息产业有限公司 一种回收卷空间的方法和装置
US10838624B2 (en) * 2018-01-31 2020-11-17 Hewlett Packard Enterprise Development Lp Extent pool allocations based on file system instance identifiers

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008059353A (ja) * 2006-08-31 2008-03-13 Hitachi Ltd 仮想化システム及び領域割当て制御方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6148414A (en) * 1998-09-24 2000-11-14 Seek Systems, Inc. Methods and systems for implementing shared disk array management functions
US7191304B1 (en) * 2002-09-06 2007-03-13 3Pardata, Inc. Efficient and reliable virtual volume mapping
US7100089B1 (en) * 2002-09-06 2006-08-29 3Pardata, Inc. Determining differences between snapshots
US7263593B2 (en) * 2002-11-25 2007-08-28 Hitachi, Ltd. Virtualization controller and data transfer control method
US6889305B2 (en) * 2003-02-14 2005-05-03 Hewlett-Packard Development Company, L.P. Device identification using a memory profile
JP4438457B2 (ja) 2003-05-28 2010-03-24 株式会社日立製作所 記憶領域割当方法、システム及び仮想化装置
JP2007502470A (ja) * 2003-08-14 2007-02-08 コンペレント・テクノロジーズ 仮想ディスク・ドライブのシステムおよび方法
US7412583B2 (en) * 2003-11-14 2008-08-12 International Business Machines Corporation Virtual incremental storage method
US7149859B2 (en) * 2004-03-01 2006-12-12 Hitachi, Ltd. Method and apparatus for data migration with the efficient use of old assets
US7058731B2 (en) * 2004-08-03 2006-06-06 Hitachi, Ltd. Failover and data migration using data replication
US20060161810A1 (en) * 2004-08-25 2006-07-20 Bao Bill Q Remote replication
CN1304961C (zh) * 2005-03-11 2007-03-14 清华大学 基于元数据服务器的存储虚拟化管理方法
US7130960B1 (en) 2005-04-21 2006-10-31 Hitachi, Ltd. System and method for managing disk space in a thin-provisioned storage subsystem
US20070061540A1 (en) * 2005-06-06 2007-03-15 Jim Rafert Data storage system using segmentable virtual volumes
JP4927408B2 (ja) * 2006-01-25 2012-05-09 株式会社日立製作所 記憶システム及びそのデータ復元方法
JP4963892B2 (ja) * 2006-08-02 2012-06-27 株式会社日立製作所 仮想ストレージシステムの構成要素となることが可能なストレージシステムの制御装置
JP2008099797A (ja) 2006-10-18 2008-05-01 Mitsubishi Electric Corp 手乾燥装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008059353A (ja) * 2006-08-31 2008-03-13 Hitachi Ltd 仮想化システム及び領域割当て制御方法

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012524934A (ja) * 2009-04-23 2012-10-18 ネットアップ,インコーポレーテッド ストレージ・エリア・ネットワーク(「san」)内の仮想ストレージ管理のアクティブ−アクティブ・サポート
JP2011138321A (ja) * 2009-12-28 2011-07-14 Hitachi Ltd ストレージ管理システム、ストレージ階層管理方法及び管理サーバ
WO2011111093A1 (ja) * 2010-03-09 2011-09-15 株式会社日立製作所 ボリューム管理装置及びストレージシステム
US8458421B2 (en) 2010-03-09 2013-06-04 Hitachi, Ltd. Volume management apparatus and storage system
JP5323982B2 (ja) * 2010-03-09 2013-10-23 株式会社日立製作所 ボリューム管理装置及びストレージシステム
JP2011242840A (ja) * 2010-05-14 2011-12-01 Hitachi Ltd ThinProvisioningが適用されたストレージ装置
US9141304B2 (en) 2012-05-24 2015-09-22 Fujitsu Limited Storage device and method for controlling storage device
JP2015510616A (ja) * 2012-06-26 2015-04-09 株式会社日立製作所 ストレージシステム、及びストレージシステムの制御方法
WO2014155493A1 (ja) * 2013-03-25 2014-10-02 株式会社日立製作所 計算機システム及びアクセス制御方法
US9552172B2 (en) 2013-09-27 2017-01-24 Fujitsu Limited Storage processing apparatus, computer-readable recording medium storing program for controlling storage, and storage system
US9632701B2 (en) 2014-04-21 2017-04-25 Hitachi, Ltd. Storage system
JP2015207269A (ja) * 2014-09-17 2015-11-19 株式会社日立製作所 ストレージシステム
JP2017090951A (ja) * 2015-11-02 2017-05-25 富士通株式会社 ストレージ制御装置、および制御プログラム
JP2018018271A (ja) * 2016-07-27 2018-02-01 富士通株式会社 ストレージ制御装置、ストレージシステムおよびストレージ制御プログラム

Also Published As

Publication number Publication date
US8645658B2 (en) 2014-02-04
US20090254695A1 (en) 2009-10-08
CN101556529A (zh) 2009-10-14
EP2109033A3 (en) 2012-08-22
EP2109033A2 (en) 2009-10-14
CN101556529B (zh) 2012-07-18
JP5072692B2 (ja) 2012-11-14

Similar Documents

Publication Publication Date Title
JP5072692B2 (ja) 複数のストレージシステムモジュールを備えたストレージシステム
JP5302582B2 (ja) 上位装置から指定されるデバイスに関する記憶容量を変更するストレージシステム及び方法
JP4438457B2 (ja) 記憶領域割当方法、システム及び仮想化装置
JP5341184B2 (ja) ストレージシステム及びストレージシステムの運用方法
CN103392166B (zh) 信息存储系统和存储系统管理方法
KR102055164B1 (ko) 스토리지 시스템, 스토리지 관리 디바이스, 스토리지 디바이스, 하이브리드 스토리지 디바이스, 및 스토리지 관리 방법
CN100394401C (zh) 文件管理方法和信息处理设备
JP6114397B2 (ja) 複合型ストレージシステム及び記憶制御方法
WO2012077162A1 (en) Storage apparatus
JP2009104421A (ja) ストレージアクセス装置
US9122415B2 (en) Storage system using real data storage area dynamic allocation method
JP5391277B2 (ja) ストレージシステム及びストレージシステムの処理効率向上方法
CN103229134B (zh) 存储设备及其控制方法
JP2007265403A (ja) 階層型ストレージシステム間でのリモートミラー方式
US20090228658A1 (en) Management method for cache memory, storage apparatus, and computer system
JP2007102760A (ja) ストレージエリアネットワークにおけるボリュームの自動割り当て
JP4283004B2 (ja) ディスク制御装置およびディスク制御装置の制御方法
JP2004265110A (ja) メタデータ配置方法、プログラムおよびディスク装置
JP2008065445A (ja) 同一データを纏める事で格納領域を節約する計算機システム、ストレージシステム及びそれらの制御方法
JP5378604B2 (ja) ThinProvisioningが適用された、メインフレーム系のストレージ装置
JP2010079624A (ja) 計算機システム及びストレージシステム
JP2006302253A (ja) ストレージシステム
JP4630734B2 (ja) 論理ボリューム管理装置、論理ボリューム管理方法およびプログラム
US8656070B2 (en) Striping with SCSI I/O referrals
JP6019169B2 (ja) 情報記憶システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100723

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120515

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120717

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120814

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120821

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150831

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees