以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
また、本明細書では、プログラムが何らかの処理を実行する、という表現(プログラムが動作主体となる表現)が用いられることがある。プログラムはプロセッサで実行されることによって、プログラムに記述された処理を計算機(以下で説明するストレージシステムや管理サーバ)に行わせるものであるから、プログラムを動作主体とする記載は必ずしも正確な表現ではない。ただし説明が冗長になることを避けるため、本明細書では、「プログラム」を主語にして、処理の内容を説明することがある。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって、プログラムを使用するユーザに提供され、プログラムを実行する計算機にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、例えば、ICカード、SDカード、DVD等の不揮発性記憶媒体である。また、プログラムの一部または全てが専用ハードウェアによって実現されてもよい。
以下の実施例では、「圧縮」とは、LZWアルゴリズム等の可逆圧縮アルゴリズムを用いて、データの意味を保ったままデータサイズを縮小する処理のことを意味する。実施例に係る計算機システムでは、ストレージシステムに搭載される記憶デバイスが、ホストから書き込まれるデータの圧縮を行うことがある。ストレージシステムで圧縮処理が行われたことによりサイズの縮小されたデータのことを、「圧縮データ」と呼び、ストレージシステムで圧縮処理が施されていないデータの事を「非圧縮データ」または「伸張データ」と呼ぶ。また可逆圧縮アルゴリズムを用いて、圧縮データを元のデータサイズに戻す処理のことを、「伸張」と呼ぶ。
また以下の実施例では、データ圧縮によるデータサイズの縮小効率の指標として、「圧縮率」を用いる。本明細書における圧縮率は、以下の計算式により定義されるものである。
圧縮率=圧縮データのサイズ÷非圧縮データのサイズ
記憶領域の「更新」とは、記憶領域に格納されているデータの内容を新しい内容に書き換える(上書きする)ことを意味する。ある記憶領域が更新される前に、その記憶領域に格納されていたデータは、「更新前データ」と呼ばれる。一方その記憶領域に新たに書き込まれるデータのことは、「更新データ」または「更新後データ」と呼ばれる。
「ボリューム」とは、ストレージシステムや記憶デバイス等のターゲットデバイスが、ホスト計算機等のイニシエータに提供する記憶空間のことを意味する。また、本明細書において「ブロック」とは、ボリューム上の領域を意味する語として用いられる。ブロックは、イニシエータがボリュームにアクセスする時の最小アクセス単位と等しい、固定サイズ(一例として512バイト)の領域である。
イニシエータがボリューム上の各ブロックにアクセスする際には、各ブロックにアサインされているアドレスを指定することでアクセスする。このアドレスは、「Logical Block Address(LBA)」と呼ばれる。以下の実施例では、n番のLBA(nは非負の整数値とする)がアサインされたブロックのことを、“LBA#n”と表記する。また、以下の実施例では特に、ストレージシステムがホストに提供するボリューム(仮想ボリューム)のブロックにアサインされているLBAのことを、「ホストLBA」と呼ぶことがある。
(1)システム構成
以下、図面を用いて実施例の説明を行う。図1は、実施例に係る計算機システム100の構成例を示している。計算機システム100は、ホスト計算機101(以下、「ホスト101」と略記する)、管理サーバ102、ストレージシステム104を有する。ホスト101、管理サーバ102、ストレージシステム104は、ネットワーク103で互いに接続される。ネットワーク103は一例として、ファイバチャネルを用いて形成されるSAN(Storage Area Network)である。
ホスト101はストレージシステム104が提供する仮想ボリュームを使用する計算機である。ホスト101は仮想ボリュームに対して、リードコマンドやライトコマンドを発行することで、仮想ボリュームに格納されたデータにアクセスする。
管理サーバ102は、ストレージシステム104の管理を行うための計算機で、パーソナルコンピュータ等の汎用のコンピュータと同様に、プロセッサとメモリを有する。本実施例では、管理とは具体的には、ストレージシステム104の状態を参照する、あるいはストレージシステム104の構成の変更等の処理を意味する。管理サーバ102では、ストレージシステム104の管理を行うための管理プログラムが実行される。また管理サーバ102は、キーボードやディスプレイ等の入出力デバイスを有し、ストレージシステム104の状態等の情報を、ディスプレイ等に出力(表示)することもできる。
ストレージシステム104は、ホスト101に対して1以上のボリューム(仮想ボリューム)を提供する装置である。ストレージシステム104は、ポート106、保守インタフェース107(図中では「保守I/F」と表記されている)、ポート108、マイクロプロセッサパッケージボード109(109A、109B)、キャッシュメモリ110、共有メモリ111、圧縮対応ドライブ113、ドライブ114を有する。また、これらの各要素は、バス112によって相互接続されている。これらの構成物のうち、ポート106、保守I/F107、ポート108、マイクロプロセッサパッケージボード109、キャッシュメモリ110、共有メモリ111、バス112の集合を、ストレージコントローラと呼ぶこともある。
圧縮対応ドライブ113、ドライブ114は、ホスト101からのライトデータを記憶するための不揮発性記憶媒体を有する記憶デバイスである。記憶媒体としては、たとえば磁気ディスクや、フラッシュメモリ等の不揮発性半導体メモリを用いることができる。圧縮対応ドライブ113、ドライブ114は、一例として、HDD(Hard Disk Drive)あるいはSSD(Solid State Drive)である。ただし本実施例では、フラッシュメモリを記憶媒体として用いる圧縮対応ドライブ113の例について説明する。
圧縮対応ドライブ113とドライブ114の違いは、圧縮対応ドライブ113は、ライトデータを圧縮して自身の記憶媒体に格納する機能(圧縮機能)を有するが、ドライブ114は圧縮機能を持たない点にある。なお、以下では、圧縮対応ドライブ113、ドライブ114を区別せずに表現する場合、「記憶デバイス」と呼ぶ。
ポート106は、ストレージシステム104がホスト101等のイニシエータと通信するために用いられる、インタフェースデバイスである。ホスト101が仮想ボリュームにアクセスするために発行するコマンド(リードコマンド、ライトコマンド等)は、ポート106に到来する。またストレージシステム104がホスト101に応答等の情報を返送する時には、ポート106から情報を返却する。
保守I/F107は、ストレージシステム104が管理サーバ102と通信するためのインタフェースデバイスである。管理サーバ102からのコマンドは保守I/F107に到来する。そしてストレージシステム104が管理サーバ102に応答等の情報を返却する時には、保守I/F107から情報を返却する。
図1では、ポート106と保守I/F107がいずれもネットワーク103に接続された構成が示されているが、これ以外の構成もあり得る。ポート106が接続されるネットワークと、保守I/F107が接続されるネットワークが、異なるネットワークであってもよい。
ポート108は、ストレージシステム104が外部ストレージ105等のターゲットデバイスと通信するためのインタフェースデバイスである。外部ストレージ105は、ドライブ114等の記憶デバイスでもよいし、またはストレージシステム104のように複数の記憶デバイスを有する大容量の記憶装置でもよい。ポート108に外部ストレージ105が接続されると、ストレージシステム104は外部ストレージ105が提供する記憶領域を、ドライブ114が提供する記憶領域と同様のものとして使用することができる。
マイクロプロセッサパッケージボード(以下、“MPB”と表記する)109は、プロセッサ119とローカルメモリ118を有するパッケージボードである。プロセッサ119はストレージシステム104の各種制御を行うためのプログラムを実行するデバイスである。ローカルメモリ118は、プロセッサ119が実行するプログラムや、プロセッサ119が使用する情報を一時的に保存するために用いられる。図1では、ストレージシステム104が2つのMPB109(MPB109A及び109B)を有する構成が示されているが、MPB109の数は2以外でもよい。ストレージシステム104にMPB109が1つだけ搭載されている構成でも良いし、或いは3以上のMPB109が搭載されていてもよい。
キャッシュメモリ110は、仮想ボリューム(記憶デバイス)に対するライトデータ、または仮想ボリューム(記憶デバイス)から読み出されたデータ(リードデータ)を一時的に記憶するために用いられる。キャッシュメモリ110には、DRAM、SRAM等の揮発性記憶媒体が用いられるが、別の実施形態として、キャッシュメモリ110に不揮発性メモリが用いられてもよい。また、キャッシュメモリ110に揮発性記憶媒体が用いられる場合、ストレージシステム104にバッテリ等の補助電源を搭載し、停電時に補助電源を用いてキャッシュメモリ110の記憶内容を維持できるように構成されていてもよい。
共有メモリ111は、MPB109(のプロセッサ119)が使用する管理情報を格納するための記憶領域である。キャッシュメモリ110と同様、共有メモリ111には、DRAM、SRAM等の揮発性記憶媒体が用いられるが、不揮発性メモリが用いられてもよい。またキャッシュメモリ110と共有メモリ111は、ローカルメモリ118と異なり、任意のMPB109(たとえばMPB109AとMPB109B)のプロセッサ119からアクセス可能な記憶領域である。
続いて図2を用いて、圧縮対応ドライブ113の構成を説明する。圧縮対応ドライブ113は、コントローラ210と、ホスト101からのライトデータを記憶するための記憶媒体であるフラッシュメモリ280を有する。コントローラ210は、ドライブI/F211、プロセッサ213、メモリ214、フラッシュI/F215、圧縮伸張回路216を有し、これらは内部ネットワーク212を介して相互接続されている。
ドライブI/F211は、ストレージシステム104と通信するためのインタフェースデバイスである。一方フラッシュI/F215は、コントローラ210がフラッシュメモリ280と通信するためのインタフェースデバイスである。
プロセッサ213は、圧縮対応ドライブ113の制御を行うためのプログラムを実行する。メモリ214は、プロセッサ213が実行するプログラムや、プロセッサ213が使用する制御情報等を格納するためのものである。本実施例では、以下で説明する圧縮対応ドライブ113が行う処理(記憶領域の管理、ストレージシステム104からのアクセス要求の処理等)は、プロセッサ213がプログラムを実行することにより行われる。
圧縮伸張回路216は、データの圧縮または伸張を行うデバイスである。圧縮伸張回路216は、ASIC(Application Specific Integrated Circuit)等のハードウェアで実装される.ただし、圧縮伸張回路216をCPUとメモリで構成してもよい。その場合、CPUでデータ圧縮(または伸張)を行うためのプログラムが実行されることで、データの圧縮または伸張が行われる。あるいは、プロセッサ213でデータ圧縮(または伸張)を行うためのプログラムを実行させることで、プロセッサ213にデータの圧縮または伸張を行わせるようにしてもよい。この場合、コントローラ210に圧縮伸張回路216は不要になる。
(2)記憶領域の管理
続いて、本実施例に係るストレージシステム104が扱う記憶領域について説明する。まず、記憶デバイス(とくに圧縮対応ドライブ113)がストレージシステム104に提供するボリュームについて、図3を用いて説明する。
圧縮対応ドライブ113は、イニシエータに対して1つのボリューム(記憶空間)を提供する。本実施例の場合、圧縮対応ドライブ113はストレージシステム104に接続されるため、圧縮対応ドライブ113に対するイニシエータは、ストレージシステム104(のプロセッサ119)である。圧縮対応ドライブ113が提供するボリュームのサイズは、圧縮対応ドライブ113の有する記憶媒体(フラッシュメモリ280)の総記憶容量よりも大きくてもよい。
本実施例では、圧縮対応ドライブ113がイニシエータに提供するボリュームのことを、「(圧縮対応ドライブ113の)論理アドレス空間」(図3における、論理アドレス空間400)と呼ぶ。また、論理アドレス空間400のサイズは、「(圧縮対応ドライブ113の)論理容量」と呼ばれる。一方圧縮対応ドライブ113は、圧縮対応ドライブ113が有する全てのフラッシュメモリ280が有する記憶領域で構成される記憶空間も管理している。この記憶空間のことを、物理アドレス空間(図3における、物理アドレス空間450)と呼ぶ。また物理アドレス空間上の領域のことを「物理領域」と呼ぶ。物理アドレス空間のサイズは、圧縮対応ドライブ113の有するフラッシュメモリ280の総記憶容量に等しい。また、物理アドレス空間のサイズのことを、「(圧縮対応ドライブ113の)実容量」と呼ぶ。言い換えると、実容量とは、データを格納可能な物理領域の合計サイズといえる。
先にも述べたが、圧縮対応ドライブ113は、圧縮伸張回路216を用いてイニシエータからのライトデータを圧縮し、圧縮されたライトデータ(圧縮データ)を物理領域に格納する。本実施例では一例として、圧縮対応ドライブ113は、論理アドレス空間400を4KBごとの部分領域に区分し、この部分領域ごとに圧縮を行う。本実施例では、この論理アドレス空間400上の4KBの部分領域は「セグメント」と呼ばれる。たとえばストレージシステム104が、圧縮対応ドライブ113の論理アドレス空間400の先頭から8KBの領域に対してデータライトを行うと、圧縮対応ドライブ113はまず論理アドレス空間400の先頭のセグメント401(LBA#0からLBA#7までの領域)に対して書き込まれたデータを圧縮する。続いて圧縮対応ドライブ113は、論理アドレス空間400の先頭から2番目に位置するセグメント402(LBA#8からLBA#15までの領域)に対して書き込まれたデータを圧縮する。
圧縮後のデータは、物理領域に格納される。本実施例において、コントローラ210は物理領域(物理アドレス空間450)を512Bごとの部分領域に区分し、この部分領域を圧縮データに割り当てる。ここで「割り当てる」とは、コントローラ210が、ストレージシステム104からライト要求を受け付けた論理アドレス空間400上のセグメントのアドレスと、このセグメントに対して書き込まれたライトデータの圧縮データが格納された部分領域のアドレス(及びこの物理領域のサイズ)との対応関係(マッピング)を、マッピングテーブル等を用いて管理することである。本実施例では、この物理アドレス空間450上の部分領域は「コードワード」と呼ばれる。図3においては、CW431〜435で表される。たとえばセグメント401に対する圧縮データはCW431が割り当てられる。セグメント402に対する圧縮データはCW432、CW433、CW434の3つが割り当てられる。マッピングテーブルで管理される物理領域のサイズは、セグメントに対して書き込まれたライトデータの圧縮データに対して割り当てたコードワードのサイズの総和に等しい。
コントローラ210がストレージシステム104から、論理アドレス空間400上のアドレスを指定したリード要求を受け付けると、このマッピングテーブルを参照することで、リード要求で指定された領域(セグメント)にマッピングされている、物理領域のアドレスを特定する。そしてコントローラ210は、特定されたアドレスに対応する物理領域から圧縮データを読み出し、圧縮伸張回路216を用いて読み出した圧縮データを伸張する。そしてコントローラ210は伸張されたデータをストレージシステム104に返却する。
なお、セグメントのアドレス(論理アドレス空間400上のアドレス)と、物理領域のアドレス(物理アドレス空間450上アドレス)とのマッピングは、必ずしも静的ではなく、動的なマッピングである。コントローラ210はセグメントに対する更新要求及び更新データを受け付けると、更新データの圧縮後のデータは、更新前データの書き込まれている物理領域とは別の物理領域に格納される。そのため、セグメントに対する更新が発生するたびに、マッピングテーブルの内容は変更される。更新前データの書き込まれている物理領域は、後で消去処理が行われることにより、新たなデータを書き込み可能な状態にされる。これは、従来からあるフラッシュメモリストレージで行われる処理と同様である。
圧縮後のデータのサイズは、データ内容に依存して変わり得る。本実施例では、圧縮伸張回路216が4KB(1セグメント分)のデータを圧縮した時、圧縮後のデータサイズは最小で512バイト(圧縮前に比べてデータサイズが1/8になる場合)、最大で4KB(圧縮前とデータサイズが変わらない場合)になるという前提で説明する。圧縮後のデータサイズが小さいほど、圧縮率が良い。
最も圧縮率が良い場合、つまり圧縮によりすべてのデータのサイズが、圧縮前の1/8になる場合、圧縮対応ドライブ113には実容量の8倍のデータを格納できる。本実施例では、圧縮対応ドライブ113の論理容量は、圧縮率が最も良い場合にあわせて定められている。つまり圧縮対応ドライブ113の論理容量は、実容量の8倍という関係にある。
圧縮対応ドライブ113と同様、ドライブ114もストレージシステム104に1つのボリュームを提供する。ただしドライブ114はデータの圧縮を行わないので、ボリュームのサイズは、ドライブ114が有する記憶媒体の容量と同じという関係にある。つまりドライブ114の論理容量と実容量は等しい。
続いて、ストレージシステム104がホスト101に提供する仮想ボリュームについて説明する。図4は、圧縮対応ドライブ113、ドライブ114、外部ストレージ105と、仮想ボリュームの関係を表した概念図である。
ストレージシステム104はホスト101に、Thin Provisioning技術により形成されるボリューム(以下、「仮想ボリューム」と呼ぶ)を提供する。よく知られているように、仮想ボリュームは、その初期状態(仮想ボリュームが定義された直後)では、仮想ボリューム上の各ブロックには記憶領域が対応付けられていない。ホスト101が仮想ボリューム上のブロックに対してデータライト要求(ライトコマンド)を発行した時点で、ストレージシステム104はそのブロックに記憶領域を割り当てる。
仮想ボリューム上のブロックには、圧縮対応ドライブ113、ドライブ114、または外部ストレージ105がストレージシステム104に提供するボリューム上の領域が動的に割り当てられる。以下では、圧縮対応ドライブ113、ドライブ114、または外部ストレージ105がストレージシステム104に提供するボリューム上の領域のことを、「論理記憶領域」と呼ぶ。
ストレージシステム104は論理記憶領域のうち、仮想ボリュームに割り当てて良い領域を管理するために、「プール」と呼ばれる管理単位を定義する。ストレージシステム104は仮想ボリューム上領域に論理記憶領域の割り当てを行う際、プールに属している論理記憶領域の中から、未使用の論理記憶領域(まだどの仮想ボリュームにも割り当てられていない論理記憶領域)を割り当てる。論理記憶領域をプールに所属させる処理は、ユーザが管理サーバ102を用いて行う。
またストレージシステム104はRAID技術を用いて、複数の記憶デバイスのボリュームから1つの記憶空間を形成する。本実施例では、RAID技術を用いて形成される記憶空間、あるいはこの記憶空間を構成する記憶デバイスの集合のことを、「RAIDグループ」と呼ぶ。よく知られているように、RAIDグループには、ホスト101からのライトデータに加えて、ライトデータを用いて生成される冗長データ(パリティ)も格納される。
なお、本実施例に係るストレージシステム104では、1つのRAIDグループに属する記憶デバイスは、全て同じ種類のものに制限されている。たとえばRAIDグループ内に、圧縮対応ドライブ113とドライブ114が混在してはならない。以下では、圧縮対応ドライブ113のみで構成されるRAIDグループのことを、「圧縮RG」と呼ぶ。
図5に、RAIDグループの一例を示す。図5において、ボリューム(113−0)〜ボリューム(113−3)は、記憶デバイス(たとえば圧縮対応ドライブ113)がストレージシステム104に提供しているボリュームを表す。図5では4つのボリューム((113−0)〜(113−3))によってRAIDグループ115が形成されている例が示されている。
ストレージシステム104は、各ボリューム((113−0)〜(113−3))を、ストライプブロック(図5では301−0〜301−3)と呼ばれる、所定サイズ(たとえば64KB)の領域に分割して管理する。図5で、ストライプブロックのうち、「P」と記載されているストライプブロックは、冗長データ(パリティ)の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、数字(0、1等)が記載されているストライプブロックは、ホスト101から書き込まれるデータ(冗長データではないデータ)が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。
パリティストライプには、ストレージシステム104が複数のデータストライプを用いて生成した冗長データが格納される。以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセット(たとえば図5中の要素305)のことを、「ストライプライン」と呼ぶ。
またストレージシステム104は、RAIDグループの記憶領域をプールに所属させる時、RAIDグループを1以上の部分領域に分割し、この部分領域をプールに所属させる。この部分領域のことを、本実施例では「論理デバイス」または「LDEV」と呼ぶ。図5において、要素300がLDEVである。LDEVのサイズは任意である。ただし本実施例では図5に示されているように、LDEV300は複数のストライプラインから構成されるものとする。そのためLDEV300のサイズは、ストライプラインのサイズの整数倍である。
LDEVを定義する処理は、ユーザが管理サーバ102を用いてストレージシステム104に指示を行うことで実施される。RAIDグループ内には、任意の数のLDEVを定義可能である。またLDEVを定義する契機はいつでも良く、初期状態(ストレージシステム104の導入時など)の時点では、ユーザはRAIDグループ内に1つだけLDEVを定義しておき、その後プールに記憶領域を追加する必要が出た時点で、ユーザはRAIDグループ内の未使用領域(LDEVとして定義されていない領域)に新たにLDEVを定義することもできる。
プールには、複数のLDEVを所属させることができる。以下では、プールに所属した状態にあるLDEVのことを、「プールVOL」と呼ぶ。また、1つのプールに所属する各LDEVは、それぞれ異なるRAIDグループに含まれているLDEVでよい。たとえば圧縮対応ドライブ113から構成されるRAIDグループに含まれているLDEVと、ドライブ114から構成されるRAIDグループに含まれているLDEVが、1つのプールに所属していてもよい。
また、ストレージシステム104はプールを複数定義することができる。ただしプールにLDEVを所属させる際、圧縮対応ドライブ113から構成される1つのRAIDグループに定義される複数のLDEVは、必ず同じプールに所属しなければならない。この制約が設けられている理由は、圧縮対応ドライブ113で構成されたRAIDグループに定義されるLDEVにデータを格納する場合、各LDEVに格納可能な最大データ量を明確に定められないためである。
たとえば、コントローラ210が圧縮対応ドライブ113の物理アドレス空間450の2倍の論理アドレス空間400をストレージシステム104に提供している場合、この圧縮対応ドライブ113を用いて構成されるRAIDグループ115の論理容量(RAIDグループ115に属する圧縮対応ドライブ113の論理容量の合計)は、実容量(RAIDグループ115に属する圧縮対応ドライブ113の実容量の合計)の2倍である。仮にこのRAIDグループ115の実容量をV(TB)とすると、このRAIDグループ115の論理容量は2V(TB)である。
そして、このRAIDグループを二等分することで2つのLDEV(仮にLDEV1、LDEV2とする)を定義し、プール1にLDEV1、プール2にLDEV2を所属させる例を想定する。V(TB)の量のデータがLDEV1に書き込まれた場合、かつそのデータが圧縮によってサイズが全く減少しなかった場合、RAIDグループの実容量(つまりV(TB)の物理領域)はすべて使用されることになる。
その状態で、コントローラ210がプール2に属するLDEV2にデータを格納しようとしても、LDEV2には全くデータを書き込んでいないにもかかわらず、RAIDグループ内に使用可能な物理領域が存在しなくなっているため、データを書き込むことが出来ない。結果、ユーザのプール容量の管理を難しくさせる。この問題を防ぐ為、圧縮対応ドライブ113から構成される1つのRAIDグループに定義された複数のLDEVは必ず同じプールに所属させるようにしている。
本制限から、あるRAIDグループ(仮に“RAIDグループA”と呼ぶ)に含まれるLDEVがあるプール(仮に“プール#1”と呼ぶ)に所属している場合、RAIDグループAのことを「プール#1に属するRAIDグループ」と呼ぶこともある。そしてこの場合、RAIDグループA内の各LDEVは、プール#1に属しているか、あるいはいずれのプールにも属していない状態にあることを意味する。
一方で、ドライブ114から構成される1つのRAIDグループに定義された複数のLDEVは、複数のプールに所属していても良い。ドライブ114ではデータ圧縮が行われないため、ドライブ114から構成されるLDEVに格納可能なデータの量が変動することがないからである。
ストレージシステム104は、プールに属する論理記憶領域を仮想ボリュームに割り当てる時、ページと呼ばれる所定サイズの領域毎に割り当てる。本実施例では、ページはLDEV内の部分領域で、1または複数のストライプラインから構成されるものとする。
またストレージシステム104は仮想ボリュームを仮想ページという領域に分割して管理している。ストレージシステム104はホスト101から仮想ページに対するライト要求を受領すると、プール内の未使用ページをその仮想ページに割り当てる。なお、本明細書において、「未使用ページ」とは、いずれの仮想ページにも割り当てられていないページを意味する。逆に仮想ページにマッピングされているページのことを「使用中ページ」と呼ぶ。仮想ページと、仮想ページに割り当てられたページとの関係(マッピング)は、後述するダイナミックマッピングテーブルに格納されて管理される。図4の502A〜502Eはプール内のページが割り当てられた仮想ページ、504A〜504Fは「使用中ページ」を表している。
プールが複数存在する場合、各仮想ボリュームはいずれか1つのプールに属する。ストレージシステム104が仮想ボリュームの仮想ページにページを割り当てる際、その仮想ボリュームの属するプール内の未使用ページを割り当てる。なお、ページにはRAID技術により生成されたパリティが含まれているが、仮想ページにページを割り当てる際、パリティは割り当てられない。そのため仮想ページのサイズは、ページのサイズから、ページに含まれているパリティストライプのサイズを除いたものになる。
ここまで、仮想ボリューム、RAIDグループ、プール、論理デバイス等の概念を説明してきたが、仮想ボリューム、RAIDグループ、プール、論理デバイスを定義して管理する処理、また仮想ボリュームをホスト101に提供する(ホスト101が仮想ボリュームを認識できるようにし、ホスト101からの仮想ボリュームに対するアクセス要求を受け付け可能な状態にする)処理は、プロセッサ119で実行されるプログラムによって行われる。ただし別の実施形態として、プログラムに代えて、これらの処理を実行する専用のハードウェアをストレージシステム104に設けてもよい。
(3)ストレージシステムの管理情報
続いて、本実施例に係るストレージシステム104で用いる主な管理情報の内容を説明する。ただしその前に、管理情報の内容を理解するうえで必要になる用語の定義を説明する。
上では、記憶デバイス(特に圧縮対応ドライブ113)の論理容量と実容量について説明したが、本実施例では論理容量と実容量以外に、実使用量、論理使用量という概念も用いられる。また記憶デバイス以外に、プール、RAIDグループにも、論理容量、実容量、実使用量、論理使用量が定義される。
圧縮対応ドライブ113の論理使用量と実使用量について説明する。圧縮対応ドライブ113の論理アドレス空間のうち、イニシエータから書き込みが行われた領域の合計サイズのことを、圧縮対応ドライブ113の論理使用量と呼ぶ。また、イニシエータから書き込みが行われた論理アドレス空間上のセグメントにマッピングされている、コードワードの合計サイズのことを、圧縮対応ドライブ113の実使用量と呼ぶ。なお、ドライブ114の論理使用量の定義は、圧縮対応ドライブ113の論理使用量と同じである。またドライブ114の実使用量は、ドライブ114の論理使用量と等しい。
圧縮対応ドライブ113は、イニシエータからの要求があると、圧縮対応ドライブ113の実容量、実使用量をイニシエータに通知する機能を有する。また圧縮対応ドライブ113は、イニシエータからの要求があると、論理アドレス空間400上の各セグメントにマッピングされている物理領域のサイズを通知する機能も有する。各セグメントにマッピングされている物理領域のサイズは、圧縮データのサイズである。この機能により、イニシエータ(ストレージシステム104)は、各セグメントに対して書き込んだデータの圧縮後のサイズを知ることができる。
RAIDグループの論理容量及び実容量は以下のように定義される。RAIDグループは複数の記憶デバイスから構成される。RAIDグループを構成する記憶デバイスの論理容量の合計が、RAIDグループの論理容量として定義される。一方RAIDグループを構成する記憶デバイスの実容量の合計(つまり記憶デバイスが有する物理領域の合計サイズ)が、RAIDグループの実容量として定義される。なお、本実施例において、RAIDグループの論理容量及び実容量には、パリティストライプのサイズも含まれる。ただし別の実施形態として、RAIDグループの論理容量及び実容量に、パリティストライプのサイズを含めないようにしてもよい。
またRAIDグループの論理使用量及び実使用量、とくに圧縮対応ドライブ113から構成されるRAIDグループの論理使用量及び実使用量は以下のように定義される。RAIDグループ上のページのうち、仮想ページにマッピングされているページ(使用中ページ)の合計サイズが、RAIDグループの論理使用量として定義される。またRAIDグループ上の使用中ページに対してマッピングされている、圧縮対応ドライブ113の物理領域の合計サイズのことを、RAIDグループの実使用量と呼ぶ。
ドライブ114から構成されるRAIDグループの論理使用量の定義は、圧縮対応ドライブ113から構成されるRAIDグループの論理使用量の定義と同じである。またドライブ114から構成されるRAIDグループの実使用量は、論理使用量と等しい。
なお、本実施例ではRAIDグループの論理使用量には、パリティストライプのサイズも含まれているものとする。ただし別の実施形態として、パリティストライプのサイズを含まないサイズを論理使用量と定義してもよい。またRAIDグループの実使用量も同様に、パリティストライプの圧縮データが格納された物理領域のサイズを含んでいる。ただし別の実施形態として、パリティストライプの圧縮データが格納された物理領域のサイズは実使用量に含まれないという定義が採用されてもよい。
LDEVの論理容量及び論理使用量の定義は、RAIDグループの論理容量及び論理使用量の定義と同様である。具体的には、LDEVに含まれるページの合計容量が、LDEVの論理容量であり、またLDEVに含まれるページのうち、使用中ページの合計サイズがLDEVの論理使用量である。
またプールの論理容量、実容量、論理使用量及び実使用量は以下のように定義される。プールに属しているLDEV(プールVOL)の論理容量の合計が、プールの論理容量である。言い換えれば、プールVOLに含まれるページの合計容量が、プールの論理容量である。
またプールの実容量は、他の実容量の定義と同様、プールに属する(プールで使用可能な)物理領域の合計サイズであるが、以下の手順で計算される値として定義される。n個(nは1以上の整数)のRAIDグループが所属するプールを例にとって説明する。以下ではこのプールに属する各RAIDグループを、RG#1,RG#2,...,RG#nと表記する。またRG#iの実容量をR
iと表記する(iは、1≦i≦nを満たす整数である)。また、RG#iが有するプールVOLの論理容量の総和をV
iと表記する。このとき、このプールの実容量Pは以下の式(1)で定義される。
なお、式(1)中の表記“Min(A,B)”は、A,Bのうち小さい方の値を意味する。
つまり、プールに属するRAIDグループ毎に、RAIDグループの実容量とプールVOLの論理容量の合計の最小値を求め、このRAIDグループ毎に求められた値の和を求めることで、プールの実容量が算出される。プールに属するRAIDグループが1つの場合、プールVOLの論理容量の合計がRAIDグループの実容量より小さい場合には、プールVOLの論理容量の合計がプールの実容量である。そしてプールVOLの論理容量の合計がRAIDグループの実容量より大きい場合には、RAIDグループの実容量がプールの実容量になる。
なお、プールVOLが、圧縮機能を持たないドライブ114から構成される場合も、圧縮対応ドライブ113から構成される場合も、プールの実容量Pの計算方法は上の式(1)に従って求められる。ただし、圧縮機能を持たないドライブ114から構成されるRAIDグループでは、常にRi≧Viの関係が成り立つ。そのため、仮に圧縮機能を持たないドライブ114から構成されるLDEVしか所属していないプールがあった場合、そのプールの実容量は、プールVOLの論理容量の総和を算出する事で求められる。
プールの論理使用量は、プール内ページのうち使用中のページの合計である。またプールの実使用量は、プール内の全ての使用中ページにマッピングされている、圧縮対応ドライブ113の物理領域の合計サイズである。
RAIDグループの論理容量等と同様、プールの論理容量、実容量、論理使用量及び実使用量には、パリティストライプのサイズも含まれる。ただし別の実施形態として、パリティストライプのサイズを含めないサイズを、プールの論理容量、実容量、論理使用量または実使用量とする定義が採用されてもよい。
続いて、本実施例に係るストレージシステム104で用いる主な管理情報の内容を説明する。図6に示されているように、ストレージシステム104は共有メモリ111に、ダイナミックマッピングテーブル701、論理物理アドレス変換テーブル702、圧縮RG容量情報管理テーブル703、プール管理テーブル600を有する。
図7にダイナミックマッピングテーブル701の例を示す。ダイナミックマッピングテーブル701は、ストレージシステム104が有する仮想ページの情報を管理するためのテーブルである。ダイナミックマッピングテーブル701の各行(レコード)には、仮想ページの属性情報が格納されている。各仮想ページは、プール番号(701−1)、仮想ボリューム番号(701−2)、仮想ページ番号(仮想ページ#と表記されることもある)(701−3)、ホストLBA(701−4)、プールボリューム番号(701−5)、ページ#(701−6)の属性情報を有する。
仮想ボリューム番号(701−2)は、仮想ページの属する仮想ボリュームの識別番号で、仮想ページ#(701−3)は仮想ページの識別番号である。またホストLBA(701−4)は、仮想ページの先頭ブロックのホストLBAである。プール番号(701−1)は仮想ページの属するプールの識別番号を表す。そして、プールボリューム番号(701−5)とページ#(701−6)の組は、仮想ページにマッピングされているページの属性情報である。仮想ページにページがマッピングされていないとき、プールボリューム番号(701−5)とページ#(701−6)には無効値(NULL)が格納されている。ストレージシステム104はホスト101から仮想ページに対するライト要求を受け付け、仮想ページにマッピングされるべきページを選択すると、選択されたページのページ番号及びそのページの属する論理デバイスの識別子(プールボリューム番号)をそれぞれ、ページ#(701−6)とプールボリューム番号(701−5)に記録する。
図8に、論理物理アドレス変換テーブル702の例を示す。論理物理アドレス変換テーブル702は、ページの属性情報を管理するテーブルである。このテーブルの各レコードには、ストレージシステム104が管理するページに対応付けられたRAIDグループ及び記憶デバイスの情報が格納される。論理物理アドレス変換テーブル702は、プールごとに設けられるテーブルである。そのためストレージシステム104にプールがn個設けられる場合、n個の論理物理アドレス変換テーブル702がストレージシステム104内に定義される。また論理物理アドレス変換テーブル702は、LP変換テーブル702とも呼ばれる。
論理物理アドレス変換テーブル702の各レコードは、プールボリューム番号(702−1)及びページ#(702−2)で特定されるページが、RG番号(702−3)で特定されるRAIDグループに属していることを表している。またドライブ番号(702−4)には、ページが所属するRAIDグループを構成している全記憶デバイスの識別番号が格納される。開始アドレス(702−5)は、ページ内先頭位置に対応する、記憶デバイスのアドレスを表している。
本実施例に係るストレージシステム104では、ユーザが管理サーバ102から指示をすることでプールにLDEVが追加される。あるいはストレージシステム104がプールの状態に応じてLDEVを追加することがある。プールにLDEVが追加されることが決定されると、ストレージシステム104は論理物理アドレス変換テーブル702に、追加対象のLDEVに含まれる全ページの情報を登録する。逆にプールからLDEVが削除される場合、ストレージシステム104は論理物理アドレス変換テーブル702から、削除対象のLDEVに含まれる全ページの情報を削除する。この処理の詳細は後述する。
次に図9を用いて、圧縮RG容量情報管理テーブル703の例を説明する。圧縮RG容量情報管理テーブル703は、圧縮対応ドライブ113から構成されるRAIDグループ(圧縮RG)の情報を管理するためのテーブルである。また圧縮RG容量情報管理テーブル703には、圧縮RGのうち、プールに記憶領域を提供している圧縮RGの情報のみが格納される。
圧縮RG容量情報管理テーブル703の各レコードには、プールに記憶領域を提供している圧縮RGの属性情報が格納される。RG番号703−1は圧縮RGの識別番号であり、プールVOL容量総和703−2は、圧縮RG内のLDEVのうち、プールに所属しているLDEV(プールVOL)の論理容量の合計値である。
プール内実容量703−3は、圧縮RGの実容量、あるいは圧縮RG内LDEVのうちプールに属しているLDEVの論理容量の合計値のうち、いずれか小さい方の値が格納される。
実使用量703−4は、圧縮RGの実使用量である。再配置要求ビット703−5は、後述する再配置処理が必要であることを表す情報である。再配置要求ビット703−5には、後述する圧縮RG監視プログラム803が情報を格納する。再配置処理が必要な圧縮RGがある場合、その圧縮RGの再配置要求ビット703−5には“1”が格納され、そうでない圧縮RGの再配置要求ビット703−5は“0”が格納される。再配置要求ビット703−5の初期値は“0”である。なお、再配置要求ビット703−5に“1”が格納された状態を、再配置要求ビット703−5が“ON”状態であるともいう。逆に再配置要求ビット703−5に“0”が格納された状態を、再配置要求ビット703−5が“OFF”状態であるともいう。
なお、上では、仮想ボリュームと圧縮RGの管理に用いられる管理情報を中心に説明した。仮想ボリュームの形成に用いられる(プールに所属する)論理デバイス及びRAIDグループは、LP変換テーブル702や圧縮RG容量情報管理テーブル703等によって管理される。しかし、プールに所属していない論理デバイス及びRAIDグループの構成を管理するための情報(容量やRAIDグループを構成するために用いられる記憶デバイスの情報等)は、LP変換テーブル702や圧縮RG容量情報管理テーブル703で管理されない。ストレージシステム104は上で説明した管理情報以外にも、RAIDグループ及び論理デバイスの構成を管理するための情報(構成情報と呼ぶ)を共有メモリ111に格納しており、プールに所属していない論理デバイス及びRAIDグループの構成に関する情報は、この構成情報で管理される。これらの情報は公知のため、ここでの説明は略す。
(4)閾値、及びプールの管理
本実施例に係るストレージシステム104では、プールの論理容量、実容量、論理使用量、実使用量を管理している。図10に管理サーバ102のディスプレイに表示されるプール容量管理GUI600’の内容を示す。プール容量管理GUI600’では、プールごとに、状態606、論理容量607、論理使用量608、実容量609、実使用量610が表示される。また論理容量601、実容量602はそれぞれ、ストレージシステム104が有する全プールの論理容量の合計、実容量の合計を表す。仮想VOL容量603はストレージシステム104内に定義されている全仮想ボリュームの容量(論理容量)の合計である。またプール数604は、ストレージシステム104が有するプールの総数を表す。
ストレージシステム104はプールの論理使用量が所定の閾値(論理使用量閾値)を超過した場合、あるいはプールの実使用量が所定の閾値(実使用量閾値)を超過した場合、管理サーバ102に通知(警告)を出す。通知を受領した管理サーバ102は、プールの容量を増やす処理を行う。本実施例では、論理使用量閾値及び実使用量閾値は80%とする。つまり、プールの論理使用量がプールの論理容量の80%を超過した場合、またはプールの実使用量がプールの実容量の80%を超過した場合に、ストレージシステム104が管理サーバ102に警告を出す。
プールの論理使用量がプールの論理容量の80%を超過した場合、管理サーバ102はそのプールの状態606に“論理使用量閾値超過”を表示する。またプールの実使用量がプールの実容量の80%を超過した場合に、管理サーバ102はそのプールの状態606に“実使用量閾値超過”を表示する。なお、これは一例であり、閾値は80%以外の値でも良い。また論理使用量閾値と実使用量閾値が、それぞれ異なる値であってもよい。
また本実施例に係るストレージシステム104では、プールに属するある圧縮RGの実使用量が所定の閾値を超過した場合、その圧縮RG内のデータの一部を、プール内の別のRAIDグループへと移動(再配置)する。この所定の閾値は、プールの使用量(実使用量または論理使用量)の閾値と異なっていても同じでも良い。本実施例ではこの所定の閾値も80%とするが、この閾値として80%以外の値が用いられてもよい。
なお、ストレージシステム104は、プール容量管理GUI600’に表示される内容のうち、プールID605、状態606、論理容量607、論理使用量608、実容量609、実使用量610の情報を、プール管理テーブル600に格納して管理している。
(5)ストレージシステムで実行されるプログラム
続いて、ストレージシステム104(のプロセッサ119)で実行される各種プログラムの説明を行う。ストレージシステム104では少なくとも、ホストライト処理プログラム802、圧縮RG監視プログラム803、デステージ処理プログラム804、枯渇回避再配置処理プログラム805、ページ再配置処理プログラム806、プール容量拡張プログラム807、プール容量縮小プログラム808が実行される。以下ではこれらのプログラムの処理の流れを説明する。
なお、ストレージシステム104では、上にあげたプログラム以外のプログラムも実行される。先に述べたように、ストレージシステム104(のプロセッサ119)は、仮想ボリューム、RAIDグループ、プール、論理デバイスを定義してこれらを管理するための管理情報を作成・維持する処理や、仮想ボリュームをホスト101に提供する処理を行うためのプログラムを実行する。また、ストレージシステム104がホスト101から仮想ボリュームに対するリード要求(リードコマンド)を受領した時には、プロセッサ119ではリード要求を処理するためのプログラム(ホストリード処理プログラム)が実行される。ただし、これらのプログラムによって行われる処理は公知の処理であるため、本明細書では説明を略す。
まず、ストレージシステム104が、ホスト101から仮想ボリュームに対するライト要求及びライトデータを受領した時の処理(ライト処理)の流れを、図11を用いて説明する。ストレージシステム104にライト要求が到来すると、ホストライト処理プログラム802がプロセッサ119で実行される。ホスト101が発行するライト要求には、ライトデータの書き込み先仮想ボリュームの識別番号、及びライトデータの書き込み位置の情報(仮想ボリューム上のホストLBA及びデータ長)が含まれている。
ステップ802−1でホストライト処理プログラム802は、プール容量管理テーブル600を参照しライト対象の仮想ボリュームの属するプールの実容量が枯渇しているか判定する。「実容量が枯渇している」とは、実容量と実使用量の差(空き容量)が0になり、プールにライトデータを書き込む領域(物理領域)がなくなった状態を意味する。なお、プールの実容量が枯渇している場合、論理容量が枯渇していることもあるし、論理容量が枯渇していない場合もある。
プールの実容量が枯渇している場合(ステップ802−1:Y)、ホストライト処理プログラム802はホスト101にエラーを報告し(ステップ802−10)、処理を終了する。プールの実容量が枯渇していない場合(ステップ802−1:N)、ホストライト処理プログラム802は、ステップ802−2を実行する。
ステップ802−2でホストライト処理プログラム802は、ライト要求に含まれる書き込み先位置の情報から、ライトデータの書き込み先となる仮想ページを特定する(仮想ページ番号を算出する)。
さらにステップ802−2では、ホストライト処理プログラム802は、ダイナミックマッピングテーブル701を参照することで、特定された仮想ページにページが割り当てられているか判定する。ダイナミックマッピングテーブル701の仮想ボリューム番号(701−2)及び仮想ページ#(701−3)が、特定された仮想ページ番号と等しいレコードのページ#(701−6)に有効な値(NULLでない値)が格納されている場合、特定された仮想ページにページが割り当てられていることを意味する。
特定された仮想ページにページが割り当てられていない場合(ステップ802−2:N)、ホストライト処理プログラム802はプール容量管理テーブル600を参照し、ライト対象の仮想ボリュームの属するプールの論理容量が枯渇しているか判定する(ステップ802−3)。「論理容量が枯渇している」とは、論理容量と論理使用量の差(空き容量)が0になり、プールにライトデータを書き込む領域(ページ)がなくなった状態を意味する。プールの論理容量が枯渇している場合(ステップ802−3:Y)、ホストライト処理プログラム802はホスト101にエラーを報告し(ステップ802−10)、処理を終了する。プールの論理容量が枯渇していない場合(ステップ802−3:N)、次にステップ802−4が実行される。
ステップ802−4でホストライト処理プログラム802は、未使用のページを選択し、選択されたページをライト対象仮想ページに割り当てる。ここでは具体的には、ホストライト処理プログラム802はLP変換テーブル702に記録されているページの情報(プールボリューム番号(702−1)、ページ#(702−2)のセット)のうち、ダイナミックマッピングテーブル701にまだ登録されていないページの情報を1つ選択する。そしてホストライト処理プログラム802は選択されたページの情報を、ダイナミックマッピングテーブル701内の、ライト対象仮想ページに対応するレコードに記録する。またページが仮想ページに割り当てられることで、プールの使用量(論理使用量)が変化するので、ホストライト処理プログラム802はプール容量管理テーブル600の内容も更新する。
ステップ802−4の実行後、ホストライト処理プログラム802はプール容量管理テーブル600を参照し、ライト対象の仮想ボリュームの属するプールの論理使用量が閾値を超過していないか判定する(ステップ802−5)。プールの論理使用量が閾値を超過している場合(ステップ802−5:Y)、ホストライト処理プログラム802は管理サーバ102に、プールの論理使用量が閾値を超過している旨を通知する(ステップ802−6)。なお、管理サーバ102には、警告と共に、実使用量が閾値を超過しているプールの識別番号も通知される。プールの論理使用量が閾値を超過していない場合(ステップ802−5:N)には、ステップ802−6は行われない。
ページの割り当て(ステップ802−4)が実行されることで、ライト対象データの格納先記憶デバイス(1または複数)が一意に特定される。ステップ802−7では、ホストライト処理プログラム802はライト対象データの格納される記憶デバイスから、記憶デバイスの実容量と実使用量を取得し、ライト対象データの格納される記憶デバイスの空き実容量(実容量と実使用量の差)を計算する。ライト対象データが大きく、複数の記憶デバイスに格納される場合、ホストライト処理プログラム802はこれら複数の記憶デバイスごとに、空き実容量を算出する。またホストライト処理プログラム802は、キャッシュメモリ110上の各ダーティデータ(キャッシュメモリ110上のデータのうちまだ記憶デバイスにデータ書き込みが行われていないデータ)の書き込み先記憶デバイスを特定し、さらにライト対象データの格納される記憶デバイスごとのダーティデータの量を算出する。
ライト対象データの格納される記憶デバイスの空き実容量が、その記憶デバイスに書き込まれるべきダーティデータ量以下である場合、全てのダーティデータを記憶デバイスに書き込めないことがある。たとえば圧縮によりデータサイズが殆ど変わらなかった場合、このような事態が発生し得る。そのためこの場合(ステップ802−7:Y)、ホストライト処理プログラム802は、ライト対象データの格納される記憶デバイスの空き実容量が、その記憶デバイスに書き込まれるべきダーティデータ量より大きくなるまで、ライト対象データのストレージシステム104(キャッシュメモリ110)への格納を行わない。
又、ホストライト処理プログラム802はステップ802−7の処理において、空き実容量とダーティデータの量を、記憶デバイスごとではなく、RAIDグループごとに算出しても良い。
ステップ802−7の判定が肯定的である場合、ホストライト処理プログラム802は一定時間処理をSleepする(ステップ802−8)。ステップ802−7とステップ802−8の処理をあわせて流入制限と呼ぶ。ステップ802−8で処理を停止している間に、ホストライト処理プログラム802とは独立に実行されるデステージ処理プログラム804がキャッシュメモリ110上のダーティデータを記憶デバイスに格納することがある。そうすると、ダーティデータ量が減るので、ホストライト処理プログラム802が再度ステップ802−7の判定をした際に、流入制限不要となり、ホスト101のライト要求を受け付けることが出来る。
ステップ802−9では、ホストライト処理プログラム802はホスト101にタイムアウトエラーを返却すべき時間に達したか否かを判定する。ステップ802−8によるSleepが複数回発生した結果、ステップ802−9の判定が肯定的になった場合、ホストライト処理プログラム802はホスト101にエラーを報告する(ステップ802−10)。ステップ802−9の判定が否定的である場合、ホストライト処理プログラム802は再びステップ802−7を実行する。
ステップ802−7の判定が否定的である場合、つまりライト対象データの格納される記憶デバイスの空き実容量が、その記憶デバイスに書き込まれるべきダーティデータ量より大きいため流入制限不要である場合、ステップ802−11が実行される。ホストライト処理プログラム802はステップ802−11で、ライト対象データを格納するためのキャッシュメモリ110の領域を確保し、ステップ802−12で、確保されたキャッシュメモリ110上の領域に、ライト対象データを格納する。なおステップ802−12では、ホストライト処理プログラム802はRAIDグループのパリティの生成も行う。またステップ802−11では、ホストライト処理プログラム802はパリティを格納するためのキャッシュメモリ110上領域も確保し、ステップ802−12では生成したパリティをキャッシュメモリ110に格納する。
その後ホストライト処理プログラム802は、ホスト101にライト処理が正常に完了した旨を応答し(ステップ802−13)、処理を終了する。なお、ステップ802−7、ステップ802−8、ステップ802−9が実施されるのは、ライト対象データの格納されるページが圧縮対応ドライブ113で構成されている場合のみである。ライト対象データの格納されるページが圧縮対応ドライブ113で構成されていない場合には、ステップ802−7、ステップ802−8、ステップ802−9が実施されない。また、上ではステップ802−12でパリティの生成が行われる例を説明したが、別の実施形態として、ステップ802−13の後でパリティの生成が行われてもよい。
本実施例に係るストレージシステム104は、キャッシュメモリ110をいわゆるライトバックキャッシュとして用いる。そのためキャッシュメモリ110に格納されたライト対象データが記憶デバイスに格納されていない時点で、ホスト101に応答が返却される(ステップ802−13)。ステップ802−12でキャッシュメモリ110に書き込まれたライト対象データは、ホストライト処理プログラム802とは独立に実行されるデステージ処理プログラム804によって、記憶デバイスに書き込まれる。キャッシュメモリ110上のデータを記憶デバイスに書き込む処理のことをデステージ処理と呼ぶ。ストレージシステム104では、デステージ処理プログラム804が実行されることで、デステージ処理が行われる。プロセッサ119は一定周期で(たとえば10分に1回など)、デステージ処理プログラム804を実行する。
図12を用いて、デステージ処理プログラム804によって行われる処理の流れを説明する。デステージ処理プログラム804が開始されると、デステージ処理プログラム804はキャッシュメモリ110上にダーティデータがあるか判定し、ダーティデータがない場合には(ステップ804−1:N)、デステージ処理プログラム804は処理を終了する。
ダーティデータがある場合には(ステップ804−1:N)、デステージ処理プログラム804は、そのダーティデータの書き込まれる記憶デバイス、およびその記憶デバイス上の書き込み先アドレスを特定する(ステップ804−2)。ストレージシステム104は、ホスト101からのライトデータをキャッシュメモリ110に格納する時に、そのライトデータ(ダーティデータ)の書き込み先位置の情報(ホストLBAあるいはページ番号等、データの書き込み先の記憶デバイスを一意に特定可能な情報)もキャッシュメモリ110あるいは共有メモリ111に格納している。ステップ804−2では、この情報を用いて、ダーティデータの書き込み先アドレスを特定する。
そしてデステージ処理プログラム804は、算出したアドレスにダーティデータを書き込む(ステップ804−3)。ダーティデータが多量にある場合、デステージ処理プログラム804は、ステップ804−1〜ステップ804−3を繰り返し実施し、ダーティデータがなくなった時点で(ステップ804−1:N)、処理を終了する。
(6)圧縮対応ドライブに対する処理
続いて圧縮RG監視プログラム803が実行する処理の流れを、図13を用いて説明する。圧縮RG監視プログラム803は、プールの実使用量、プールに属するRAIDグループの実使用量を算出するためのプログラムである。圧縮RG監視プログラム803は定期的に起動される。また圧縮RG監視プログラム803は、ストレージシステム104に定義されているプールごとに実行される。以下、特定の1つのプールについて実行される圧縮RG監視プログラム803の処理の流れを説明する。
圧縮RG監視プログラム803が起動されると、圧縮RG監視プログラム803はプールに属する圧縮RGのうち、ステップ803−4の処理をまだ行っていない圧縮RGがあるか判定する(ステップ803−1)。ステップ803−4の処理をまだ行っていない圧縮RGがある場合(ステップ803−1:Y)、圧縮RG監視プログラム803はステップ803−4の処理をまだ行っていない圧縮RGを1つ選択する。
ステップ803−2で、圧縮RG監視プログラム803はLP変換テーブル702を参照することで、選択された圧縮RGを構成する各圧縮対応ドライブ113を特定する。そして圧縮RG監視プログラム803は、特定された記憶デバイスのうち、ステップ803−3の処理がまだ行われていない記憶デバイスがあるか判定する。
ステップ803−3の処理がまだ行われていない記憶デバイスがある場合(ステップ803−2:Y)、圧縮RG監視プログラム803はその圧縮対応ドライブ113に容量情報の取得要求を発行することで、各圧縮対応ドライブ113から容量情報を取得する(ステップ803−3)。圧縮対応ドライブ113は、圧縮RG監視プログラム803(が実行されるプロセッサ119)から容量情報の取得要求を受領すると、プロセッサ119に容量情報を返却する。
圧縮対応ドライブ113が返却する容量情報とは、論理アドレス空間400上のセグメントにマッピングされている、物理領域のサイズ(割り当てたコードワードのサイズの総和)である。圧縮対応ドライブ113が容量情報の取得要求を受領すると、セグメントにマッピングされている物理領域のサイズの情報を、論理アドレス空間400上全セグメントについて返却する(セグメントに物理アドレス空間450上領域が割り当てられていない場合、そのセグメントにマッピングされている物理領域のサイズは0KBという情報が返却される)。
圧縮RG監視プログラム803は、圧縮対応ドライブ113から返却された容量情報と、LP変換テーブル702、ダイナミックマッピングテーブル701を用いて、圧縮RGの実使用量を算出し、圧縮RG容量情報管理テーブル703の内容を更新する(ステップ803−4)。プールに属する全ての圧縮RGについて、ステップ803−2〜803−4の処理が行われると(ステップ803−1:N)、圧縮RG監視プログラム803は、プール管理テーブル600の実使用量610及び実容量602の情報を更新する(ステップ803−5)。
ステップ803−4及びステップ803−5で行われる処理、特に実使用量の算出方法を概説する。ステップ803−4では、まず圧縮RG監視プログラム803は圧縮RGに含まれるLDEVのうちプールVOLであるLDEVを特定する。これはLP変換テーブル702に登録されている、プールボリューム番号(702−1)とRG番号(702−3)の組を参照することで判明する。また圧縮RG監視プログラム803は、特定されたLDEV内の各ページが、記憶デバイス上のどの位置(アドレス)に配置されているか特定する。これは各ページについて、LP変換テーブル702のドライブ番号(702−4)と開始アドレス(702−5)を参照することで判明する。ここで得られた情報とダイナミックマッピングテーブル701と、ステップ803−3で得られた容量情報とを用いることで、圧縮RG内の使用中ページにマッピングされている、物理領域の合計サイズ(つまり圧縮RGの実使用量)を得ることができる。
ステップ803−5でも、圧縮RG監視プログラム803は上で説明した方法と同様の方法で、プール内の使用中ページにマッピングされている物理領域の合計サイズ(プールの実使用量)を得ることができる。
プールの実使用量及びプールに属する圧縮RGの実使用量の算出後、圧縮RG監視プログラム803はプール実使用量が閾値を超過しているか判定する。閾値を超過している場合(ステップ803−6:Y)、圧縮RG監視プログラム803は、プール管理テーブル600の状態606を“実使用量閾値超過”に変更し、また管理サーバ102にプールの実使用量が閾値を超過している旨の警告を出す(ステップ803−7)。なお、管理サーバ102には、警告と共に、実使用量が閾値を超過しているプールの識別番号も通知される。閾値を超過していない場合には(ステップ803−6:N)、ステップ803−7は行われない。
続いて圧縮RG監視プログラム803は、プールに属する圧縮RGのうち実使用量が閾値を超過している圧縮RGがあるか判定する。閾値を超過している圧縮RGがある場合(ステップ803−8:Y)、圧縮RG監視プログラム803はその圧縮RGの再配置要求ビット(703−5)を“1”にし、閾値を超過していない圧縮RGについては(ステップ803−8:N)、圧縮RG監視プログラム803はその圧縮RGの再配置要求ビット(703−5)を“0”にし、処理を終了する。
続いて、枯渇回避再配置処理プログラム805が実行する処理の流れを、図14を用いて説明する。枯渇回避再配置処理プログラム805は、定期的に起動される。
枯渇回避再配置処理プログラム805が起動されると、枯渇回避再配置処理プログラム805は圧縮RG容量情報管理テーブル703を参照することで、再配置要求ビット(703−5)が“1”の圧縮RGがあるか判定する。再配置要求ビット(703−5)が“1”の圧縮RGがない場合(ステップ805−1:N)、枯渇回避再配置処理プログラム805は処理を終了する。再配置要求ビット(703−5)が“1”の圧縮RGがある場合(ステップ805−1:Y)、枯渇回避再配置処理プログラム805は再配置要求ビット(703−5)が“1”の圧縮RGのページ内データを別のRAIDグループに移動する処理を行う。以下、再配置要求ビット(703−5)が“1”の圧縮RGのことを、「対象RG」と呼ぶ。
再配置要求ビット(703−5)が“1”の圧縮RGがある場合(ステップ805−1:Y)、枯渇回避再配置処理プログラム805は対象RGの中で1つのページを選択する。選択されるページは、仮想ページにマッピングされているページであれば任意のページで良い。あるいは別の実施形態として、枯渇回避再配置処理プログラム805はアクセス頻度の低いページを選択してもよい。圧縮対応ドライブ113が高速なフラッシュメモリ等を用いたSSDで、ドライブ114がSSDよりも低速なHDDである場合、ユーザは圧縮対応ドライブ113で構成されるRAIDグループに属するページとドライブ114で構成されるRAIDグループに属するページが混在するプール定義することもできる。そのようなプールを階層プールと呼ぶ。階層プールが用いられる場合、ストレージシステム104はホスト101からのリード/ライト要求の頻度をページごとにカウントした結果を共有メモリ111にリード/ライト頻度情報として保持し、リード/ライト頻度に応じてページを移動させるプログラムを実行する。階層プールの中から枯渇回避再配置処理プログラム805がページを選択する場合、リード/ライト頻度情報を参照し、圧縮対応ドライブ113で構成されるRAIDグループに属するページの中で、リード/ライト頻度が低いページを選択しても良い。
続いて枯渇回避再配置処理プログラム805は、プール内に、ステップ805−2で選択されたページ内のデータを移動可能なRAIDグループが存在するか判定する(ステップ805−3)。具体的には枯渇回避再配置処理プログラム805は、ダイナミックマッピングテーブル701、LP変換テーブル702を参照することで、未使用ページを有するRAIDグループがあるか判定し、そのようなRAIDグループがある場合、そのRAIDグループはデータを移動可能なRAIDグループと判断する。
データを移動可能なRAIDグループが存在しない場合(ステップ805−3:N)、枯渇回避再配置処理プログラム805は処理を終了する。データを移動可能なRAIDグループが存在する場合(ステップ805−3:Y)、枯渇回避再配置処理プログラム805はページ再配置処理プログラム806を呼び出して、ステップ805−2で選択されたページ内のデータの移動を行う(ステップ805−4)。ステップ805−4の詳細は後述する。
ステップ805−4の後、枯渇回避再配置処理プログラム805は対象RGの実使用量を再計算し、圧縮RG容量情報管理テーブル703の内容を更新する。これはたとえば、ステップ803−3、ステップ803−4と同様の処理を行えば良い。その結果、対象RGの実使用量が閾値を下回っている場合(ステップ805−5:N)、枯渇回避再配置処理プログラム805は処理を終了する。対象RGの実使用量が閾値を下回っていない場合(ステップ805−5:Y)、枯渇回避再配置処理プログラム805はステップ805−2から処理を繰り返す。
続いてステップ805−4の処理の流れを、図15を用いて説明する。図15はページ再配置処理プログラム806が実行する処理のフローチャートである。
ページ再配置処理プログラム806は最初に、データの移動先ページを選択する(ステップ806−1)。具体的にはページ再配置処理プログラム806は、ステップ805−2で選択されたページが属するプールと同じプールに属しているプールVOLの中から、未使用のページを1つ選択する。ただしここで選択されるページを有するプールVOLは、ステップ805−2で選択されたページが属しているRAIDグループ以外のRAIDグループに含まれれているものでなければならない。
ステップ806−2ではページ再配置処理プログラム806は、ステップ805−2で選択されたページのデータがキャッシュメモリ110に格納されているか判定する。ステップ805−2で選択されたページのデータがキャッシュメモリ110に格納されていない場合(ステップ806−2:N)、ページ再配置処理プログラム806はキャッシュメモリ110上に1ページ分の領域を確保し(ステップ806−3)、ステップ805−2で選択されたページのデータを記憶デバイスから読み出して、確保された領域に格納する(ステップ806−4)。
ステップ806−4の後、あるいはステップ805−2で選択されたページのデータがキャッシュメモリ110に格納されていた場合(ステップ806−2:Y)、ページ再配置処理プログラム806はステップ805−2で選択されたページのデータを、ステップ806−1で選択したページ(記憶デバイス)に書き込み、ダイナミックマッピングテーブル701とLP変換テーブル702の更新を行う(ステップ806−5)。ステップ806−5が終了すると、ページ再配置処理プログラム806は処理を終了する。
ステップ805−2で選択されたページのマッピング先が、仮想ボリューム番号=n、仮想ページ番号=mで、ステップ806−1で選択したページのページ番号がk、またこのページが属する論理デバイス(プールボリューム)の識別番号がjの場合の例を説明する。この場合ステップ806−5では、ダイナミックマッピングテーブル701の仮想ボリューム番号(701−2)がn、仮想ページ#(701−3)がmの行のプールボリューム番号(701−5)にjを、ページ#(701−6)にkを格納する処理が行われる。
なお、上では、ステップ806−4で読み出されたデータが即座にステップ806−5で記憶デバイスに書き込まれる例を説明したが、ステップ806−5ではデータを記憶デバイスに書き込まずにキャッシュメモリ110に保持したままでも良い。ただしその場合、キャッシュメモリ110上に保持されたデータは、後でデステージされる必要がある。そのため、ストレージシステム104はキャッシュメモリ110上に保持された移動対象のデータを、ダーティデータとして管理しておく必要がある。
(7)管理サーバにおける容量管理
続いて、ストレージシステム104から警告を通知された管理サーバ102が実施する処理の流れを説明する。管理サーバ102では少なくとも、プール容量管理プログラム901、プールVOL構成最適化プログラム902、プール容量拡張自動化プログラム903が実行される。プール容量管理プログラム901は、ストレージシステム104から論理使用量または実使用量が閾値を超過した旨の警告(通知)を受領すると、実行される。プールVOL構成最適化プログラム902、プール容量拡張自動化プログラム903はそれぞれ、プール容量管理プログラム901から呼び出されるプログラムである。図16は管理サーバ102で実行されるプール容量管理プログラム901のフローチャートである。
プール容量管理プログラム901は、ストレージシステム104から論理使用量または実使用量が閾値を超過した旨の警告(通知)を受領すると(ステップ901−1)、ステップ901−2以降の処理を行う。ステップ901−1で受領する警告は、先に説明したステップ802−6、ステップ803−7がストレージシステム104で実行されることで、管理サーバ102に通知される。また受領する警告とともに、(実使用量または論理使用量の)閾値を超過しているプールの識別番号も通知されるので、プール容量管理プログラム901はステップ901−2以降で、通知された識別番号で特定されるプールについて、論理容量または実容量の拡張などの処理を行う。
ステップ901−1で受領した警告が、プール実使用量が閾値を超過している旨の警告である場合(ステップ901−2:Y)、プール容量管理プログラム901はストレージシステム104から、ストレージシステム104が有する管理情報を取得し、取得した管理情報を基に拡張すべき実容量(以下、「実容量増分」と呼ぶ)を算出する(ステップ901−3)。管理情報にはプール管理テーブル600の他、上で説明した論理物理アドレス変換テーブル702、圧縮RG容量情報管理テーブル703、ストレージシステム104が有する全LDEV、全RAIDグループの構成情報が含まれる。
また、ステップ901−3における実容量増分の算出方法の一例は以下の通りである。プール容量管理プログラム901は、少なくとも実容量閾値超過状態が解消されるだけの実容量を、実容量増分として算出する。たとえばプール実使用量が閾値を超過している時点におけるプール実容量をC、実使用量をU、閾値をT%、実容量増分をΔCとする。この場合、プール実使用量が閾値を下回るようにするためには、プール実容量(C+ΔC)は以下の式(2)を満たすべきである。
[数2]
(C+ΔC)×T÷100>U ・・・・(2)
上記の式から、プール容量管理プログラム901は、以下の式(3)
[数3]
ΔC>U×100÷T−C・・・・(3)
を満たすように実容量増分ΔCを決定する。例えば、C=100、U=90、T=80%とすると、ΔC>12.5となる。
続いてプール容量管理プログラム901はプール容量拡張自動化プログラム903を呼び出すことで、ストレージシステム104にプール容量の拡張を指示する(ステップ901−4)。ステップ901−4で行われる処理の詳細は後述する。ステップ901−2の判定が否定的だった場合には、ステップ901−3、901−4は行われない。
ステップ901−1で受領した警告が、プール論理使用量が閾値を超過している旨の警告である場合(ステップ901−5:Y)、プール容量管理プログラム901はストレージシステム104から、ストレージシステム104が有する管理情報を取得し、拡張すべき論理容量(以下、「論理容量増分」と呼ぶ)を算出する(ステップ901−6)。なお、ステップ901−6で算出される論理容量増分も、実容量増分の算出方法と同様の考え方で求められる。つまりプール容量管理プログラム901は、少なくとも論理容量閾値超過状態が解消されるだけの論理容量を、論理容量増分として算出する。
そしてプール容量管理プログラム901はプール容量拡張自動化プログラム903を呼び出すことで、ストレージシステム104にプールの論理容量の拡張を指示する(ステップ901−7)。なお、ステップ901−4の実行時及びステップ901−7の実行時のいずれも、プール容量拡張自動化プログラム903が呼び出される。プール容量拡張自動化プログラム903が行う処理の詳細は後述する。またステップ901−5の判定が否定的だった場合には、ステップ901−6、ステップ901−7は行われない。
最後にプール容量管理プログラム901は、プールVOL構成最適化プログラム902を呼び出すことで、プールボリュームの最適化を行う(ステップ901−8)。ステップ901−8が終了すると、プール容量管理プログラム901は処理を終了する。プールVOL構成最適化プログラム902で行われる処理の詳細は後述する。
次に、ステップ901−4またはステップ901−7で実行される処理、つまりプール容量拡張自動化プログラム903が行う処理のフローを、図17を用いて説明する。
プール容量拡張自動化プログラム903は、ステップ901−3またはステップ901−6で求められた増分(実容量増分または論理容量増分)を満たすことができる未使用LDEVが存在するか判定する(ステップ903−1)。ここでの「未使用LDEV」とは、プールに属しておらず、且つホスト101からリード/ライト可能な状態になっていない(IOパスが定義されていない)LDEVを意味する。そのためプール容量拡張自動化プログラム903は、ストレージシステム104から取得した管理情報を参照することで、実容量増分または論理容量増分に相当する量の未使用LDEVが存在するか判定する。
まず、実容量増分に相当する量の未使用LDEVが存在するか否かの判定方法を説明する。プール容量拡張自動化プログラム903は、ステップ901−3またはステップ901−6でストレージシステム104から取得した管理情報を参照することで、未使用LDEVの候補を抽出し、それをもとに判定を行う。
ドライブ114(つまり圧縮機能を持たない記憶デバイス)から構成されるRAIDグループに属しているLDEVをプールに追加する場合、どのLDEVをプールに追加しても、プールの実容量はLDEVの論理容量に相当する分だけ増加する。そのため、ドライブ114から構成されるRAIDグループに属している、全ての未使用LDEVの論理容量の合計が実容量増分と同じかそれ以上あれば、実容量増分に相当する量の未使用LDEVが存在するといえる。
一方、圧縮RGの中から未使用LDEVを選択する場合、以下の二条件を満たす圧縮RGから選択されなければならない。
a)圧縮RGの有するプールVOLの論理容量の合計と、今回選択される未使用LDEVの論理容量の和が、圧縮RGの実容量より小さいこと、
b)圧縮RGの有するプールVOLが、今回処理対象のプール以外のプールに属していないこと
上の条件a)に該当しない圧縮RG、つまり圧縮RGの有するプールVOLの論理容量の合計が、圧縮RGの実容量を超過している圧縮RGから未使用LDEVを選択してプールに追加しても、プールの実容量は増加しない(これは先に述べた、プールの実容量の定義から明らかである)。また上の条件b)に該当しない圧縮RGの未使用LDEVは、今回処理対象のプールに追加できないという制約がある。そのため、本実施例に係るストレージシステム104は、上の条件a)及びb)を満たす圧縮RGから未使用LDEVを選択する。
また、この条件を満たす圧縮RGから選択された未使用LDEVをプールに追加した場合、追加された未使用LDEVの論理容量の分だけ、プールの実容量は増加する。そのため、上の条件a)及びb)を満たす圧縮RGの中から選択された未使用LDEVの論理容量の合計が実容量増分以上である場合、実容量増分に相当する量の未使用LDEVが存在するといえる。
以上の考え方に基づいて、プール容量拡張自動化プログラム903はステップ903−1の判定を行う。つまりプール容量拡張自動化プログラム903は、実容量閾値超過状態の場合は、ドライブ114から構成されるRAIDグループに属している未使用LDEVの論理容量の合計と、圧縮RGの中から選択された未使用LDEVの論理容量合計の和を算出する。そしてこれが実容量増分(ΔC)以上である場合(903−1:Y)、プール容量拡張自動化プログラム903はステップ903−7を実行する。ステップ903−1の判定が否定的な場合、プール容量拡張自動化プログラム903はステップ903−2を実行する。
論理容量増分に相当する未使用LDEVが存在するか否かの判定方法は、実容量増分に相当する未使用LDEVの存在有無判定よりは易しい。この場合は、プール容量拡張自動化プログラム903は、任意の未使用LDEVの論理容量の合計が論理容量増分以上であるか判定すればよい。
実容量増分または論理容量増分に相当する量の未使用LDEVが存在しなかった場合(ステップ903−1:N)、プール容量拡張自動化プログラム903は、ストレージシステム104内に新たにLDEVを定義可能か判定する(ステップ903−2)。先に述べたとおり、RAIDグループには1以上のLDEVを定義可能である。またRAIDグループ内に、LDEVとして定義されていない領域が残っていることがある。ステップ903−2では、そのような領域が存在するか、かつその領域の合計サイズが、実容量増分または論理容量増分以上存在するか判定される。
新たにLDEVを定義可能である場合(ステップ903−2:Y)、プール容量拡張自動化プログラム903は、プール容量を拡張するためにLDEVを新規に作成することが可能である旨をユーザに通知するとともに、及び新規LDEVの作成を許可するかユーザに確認する(ステップ903−3)。具体的にはプール容量拡張自動化プログラム903は、管理サーバ102のディスプレイに、新規LDEVの作成を許可するか否かを選択させるGUI画面を表示する。
ユーザが新規LDEVの作成を許可した場合(ステップ903−4:Y)、プール容量拡張自動化プログラム903は新規LDEVを作成する指示をストレージシステム104に発行する(ステップ903−5)。この指示を受領したストレージシステム104は、新規LDEVの作成を行う。又、ステップ903−3及びステップ903−4は無くてもよい。すなわちプール容量拡張自動化プログラム903がユーザの許可を得ることなく、自動的に新規LDEVを作成する指示を発行(ステップ903−5)しても良い。
ステップ903−2の判定が否定的だった場合、或いはステップ903−4でユーザが新規LDEVの作成を許可しなかった場合、プール容量拡張自動化プログラム903は、ストレージシステム104に記憶デバイスを追加する必要がある旨のメッセージを管理サーバ102のディスプレイに出力し(ステップ903−6)、処理を終了する。
ステップ903−5の処理の後、あるいはステップ903−1の判定が肯定的だった場合、ステップ903−7が実行される。ステップ903−7では、プール容量拡張自動化プログラム903は、未使用LDEVの中からプールに追加するLDEVを選択する。ステップ903−7でプール容量拡張自動化プログラム903が未使用LDEVを選択する際の選択基準については後述する。
プール容量拡張自動化プログラム903は、プールに追加するLDEVを選択した後、選択したLDEVの一覧を管理サーバ102の画面に表示する(ステップ903−8)。またステップ903−8では、プール容量拡張自動化プログラム903は選択したLDEVをプールに追加して良いか、ユーザに確認する。
プール容量拡張自動化プログラム903が選択したLDEVのプールへの追加をユーザが許可した場合(ステップ903−9:Y)、プール容量拡張自動化プログラム903は選択したLDEVの情報と、LDEVを追加するプールの識別番号をストレージシステム104に送信し、ストレージシステム104は選択したLDEVをプールに追加する(ステップ903−10)。プールにLDEVが追加されることで、プールの容量が変動するので、ストレージシステム104では、プールにLDEVを追加するとともに、プール管理テーブル600、LP変換テーブル702、圧縮RG容量情報管理テーブル703の更新も行われる。ステップ903−10が実行された時にストレージシステム104で行われる処理の詳細は後述する。ステップ903−10の後、プール容量拡張自動化プログラム903は終了する。選択したLDEVのプールへの追加をユーザが許可しなかった場合(ステップ903−9:N)、プール容量拡張自動化プログラム903はステップ903−10を実行せずに終了する。また、ステップ903−8及びステップ903−9は無くてもよい。すなわち、プール容量拡張自動化プログラム903はユーザの許可を得ることなくステップ903−10を実行しても良い。
ステップ903−7でプール容量拡張自動化プログラム903が未使用LDEVを選択する際の選択基準について、図18及び図19を用いて説明する。図18には、プールの実容量を拡張する場合(ステップ901−4からプール容量拡張自動化プログラム903が呼び出された場合)に選択すべきLDEVの候補(以下、「候補LDEV」と呼ぶ)を選択する時のルール(条件)を、優先度の高い順に並べたテーブルが示されている。一方図19には、プールの論理容量を拡張する場合(ステップ901−7からプール容量拡張自動化プログラム903が呼び出された場合)に候補LDEVを選択する時のルール(条件)を、優先度の高い順に並べたテーブルが示されている。各カラム(903−9−A2、903−9−B2、903−9−A3、903−9−B3、903−9−A4、903−9−B4)がルール(選択基準)を表している。
プール容量拡張自動化プログラム903が用いる各ルールについて説明する。プール容量拡張自動化プログラム903は、以下の選択基準を用いる。
(a)候補LDEVの属するRAIDグループの属性(カラム903−9−A2、903−9−B2)
(b)候補LDEVの属するRAIDグループに含まれる各LDEVが所属するプール(カラム903−9−A3、903−9−B3)
(c)候補LDEVの属するRAIDグループ内LDEVのうち、プールVOLであるLDEVの合計容量(カラム903−9−A4、903−9−B4)
(a)の基準に関して、プール容量拡張自動化プログラム903は、候補LDEVの属するRAIDグループが、圧縮対応ドライブ113から構成されたRAIDグループに属しているか否かによって、LDEVを選択する。図18(カラム903−9−A2)及び図19(カラム903−9−B2)が示す通り、プール容量拡張自動化プログラム903は、圧縮RGに属するLDEVを優先的に選択する。
(b)の基準に関して、プール容量拡張自動化プログラム903は以下のいずれかの条件(条件b−1、b−2)に合致するLDEVを候補LDEVとして選択する。
(b−1)容量拡張対象のプールに既に属しているLDEV(プールVOL)と同一RAIDグループに含まれているLDEV
(b−2)いずれのプールにも属していないRAIDグループに含まれるLDEV
条件b−1、b−2のいずれにも当てはまらないLDEV、たとえば既に他のプールに属するLDEVを含むRAIDグループ内のLDEVは、候補LDEVとして選択されない。図18(カラム903−9−A3)及び図19(カラム903−9−B3)が示す通り、プール容量拡張自動化プログラム903は、条件b−1に該当するLDEVを、条件b−2に該当するLDEVよりも優先的に、候補LDEVとして選択する。
(c)の基準に関しては、実容量を拡張する場合と論理容量を拡張する場合とで、プール容量拡張自動化プログラム903が選択する候補LDEVは異なる。実容量を拡張する場合、プール容量拡張自動化プログラム903はRAIDグループ(圧縮RG)のうち、プールVOLとして用いられているLDEVの合計容量(論理容量)が、RAIDグループの実容量未満である圧縮RGの中から、候補LDEVを選択する。この条件に合致する圧縮RGの中から候補LDEVを選択しないと、プールの実容量を増加させることにならないためである。
一方、論理容量を拡張する場合は、プール容量拡張自動化プログラム903は、プールVOLとして用いられているLDEVの合計容量(論理容量)が、RAIDグループの実容量以上のRAIDグループから、候補LDEVを優先的に選択する。論理容量を拡張する必要がある場合(図16:ステップ901−7)は、既に実容量の拡張がなされており(ステップ901−4)、実容量の拡張の必要がないからである。
プール容量拡張自動化プログラム903は、上で説明した選択基準に従って、未使用LDEVを選択する。また、実容量増分(または論理容量増分)以上の容量がプールに追加されなければならないので、複数の未使用LDEVが選択されることもある。
次に、ステップ901−8で実行される処理、つまりプールVOL構成最適化プログラム902が行う処理のフローを、図20を用いて説明する。プールVOL構成最適化プログラム902はプール容量管理プログラム901から呼び出される時、構成最適化を行う対象のプールのプールIDを指定される(引数として渡される)。プールVOL構成最適化プログラム902は指定されたプール(以下、このプールを「対象プール」と呼ぶ)について構成最適化を行う。
最初にプールVOL構成最適化プログラム902は、ストレージシステム104から構成情報を取得する(ステップ902−1)。ここで取得される構成情報は、ストレージシステム104の有するLDEVの容量(論理容量)、対象プールに属するRAIDグループの容量(論理容量、実容量、論理使用量、実使用量)の情報である。
続いてプールVOL構成最適化プログラム902は、対象プールに属する圧縮RGのうち、ステップ902−3以降の処理が行われていない圧縮RGを1つ選択する(ステップ902−2)。以降、図20の説明の過程において、ここで選択された圧縮RGを「対象RG」と呼ぶ。
ステップ902−3では、プールVOL構成最適化プログラム902はステップ902−2で選択された圧縮RGの拡張率と圧縮率の逆数を算出する。ここで算出される拡張率とは、“RAIDグループに属するプールVOLの論理容量合計÷RAIDグループの実容量”である。また圧縮率の逆数は、“RAIDグループの実使用量÷RAIDグループの論理使用量”である。なお、以下では圧縮率の逆数のことを“1/圧縮率”と表記することがある。
拡張率と1/圧縮率が等しく、かつ圧縮率が今後も変動しない場合、記憶デバイスの物理アドレス空間と論理アドレス空間が同じ割合で消費される。たとえば記憶デバイスの物理アドレス空間が全て消費された時(物理アドレス空間の全領域にデータが書き込まれた時)、論理アドレス空間も100%消費された状態になる。そのため、論理容量と実容量の関係が理想的な状態にあるといえ、この場合には対象RGの論理容量または実容量の調整は不要である。よって拡張率と1/圧縮率が等しい場合(ステップ902−3:=)、プールVOL構成最適化プログラム902はステップ902−8に進む。
拡張率が1/圧縮率より大きい場合、理想的な状態に比べて、RAIDグループの論理容量が過剰に存在すること、つまり物理領域の量が不足気味の状態にあることを意味する。そのような状態にあるRAIDグループの領域がプールVOLとして使用されると、未使用のページはあるにもかかわらず、未使用の物理領域がないために、プールVOL(RAIDグループ内の記憶領域)にデータを書き込めない状態が発生する。この場合、プールVOLを削減することにより、拡張率と1/圧縮率の差を現状より少なくすることが望ましい(プールからプールVOLを削除することで、削除されたプールVOLの属するRAIDグループの拡張率が小さくなるからである)。
そのためプールVOL構成最適化プログラム902は、拡張率が1/圧縮率より大きい場合(ステップ902−3:>)、対象プールから対象RGに属するプールVOLを削除することでRAIDグループの論理容量を削減する。プールVOL構成最適化プログラム902は、対象プールから削減すべきプールVOLの論理容量を算出する(ステップ902−4)。ここで算出された論理容量を削減容量と呼ぶ。本実施例では、対象RGに属するプールVOLの論理容量合計と対象RGの実容量/圧縮率の差を、削減容量とする。一例として、拡張率300%、圧縮率50%、実容量10TBのRAIDグループについて削減容量を求める場合の例を説明する。この場合、このRAIDグループ内のプールVOL論理容量合計は30TBで、RAIDグループの実容量/圧縮率は20TBであるから、削減容量は30TB−20TB=10TBである。
続いてステップ902−5では、プールVOL構成最適化プログラム902は、対象RGから、削除対象のプールVOLを選択する。ここでプールVOL構成最適化プログラム902は、選択されるプールVOLの論理容量の合計がステップ902−4で算出された削減容量以上になるように、プールVOLを選択する。またプールVOL構成最適化プログラム902が削除対象のプールVOLを選択する際、論理使用量の小さいプールVOLから優先的に選択する。これはプールVOLをプールから削除する際、削除対象プールVOLに格納されたデータを別のプールVOLに移動(退避)させる必要があるからである。
例えば、LDEV1の論理容量が11TB、論理使用量が5TB、LDEV2の論理容量が6TB、論理使用量が2TB、LDEV3の論理容量が5TB、論理使用量が1TBの場合、LDEV1のみ選択しても、LDEV2とLDEV3を選択しても、何れでも削減容量10TBを超えるが、LDEV2とLDEV3を選択した方が論理使用量合計が少ない為(LDEV1は5TB,LDEV2とLDEV3は合計で3TB)、プールに退避するデータ量が少なくなり、後のステップ902−12の実行時間を短くすることが出来る。
一方、拡張率が1/圧縮率より小さい場合、RAIDグループの実容量が理想的な状態よりも過剰に存在することを意味する。この場合には、ページを使い切っても、記憶デバイスの物理アドレス空間には未使用の物理領域が残っている状態になり得る。そのためこの時には、プールVOL構成最適化プログラム902は対象RGの未使用LDEVをプールに追加することで拡張率を増加させ、拡張率と1/圧縮率の差を今よりも少なくすることを試みる。
そのため拡張率が1/圧縮率より小さい場合(ステップ902−3:<)、プールVOL構成最適化プログラム902は、対象プールに追加すべき論理容量を算出する(ステップ902−6)。追加すべき論理容量は、対象RGの実容量/圧縮率と対象RGに属するプールVOLの論理容量合計との差から求められる。例えば拡張率200%、圧縮率25%、実容量10TBのRAIDグループを例にとって説明する。この場合、このRAIDグループ内のプールVOL論理容量合計は20TB、実容量/圧縮率は40TBであるため、追加すべき論理容量は40TB−20TB=20TBである。
続いてステップ902−7では、プールVOL構成最適化プログラム902は、対象RGの中から対象プールに追加すべきLDEVを選択する。ここでプールVOL構成最適化プログラム902は、選択されるLDEVの論理容量の合計が、ステップ902−6で算出された追加すべき論理容量以上になるように、LDEVを選択する。
ステップ902−5またはステップ902−7の終了後、プールVOL構成最適化プログラム902は、対象プールに属する全ての圧縮RGについてステップ902−2〜ステップ902−7の処理を行ったか判定する。まだステップ902−2〜ステップ902−7の処理が行われていない圧縮RGが残っている場合には(ステップ902−8:N)、プールVOL構成最適化プログラム902は再びステップ902−2から処理を行う。すべての圧縮RGについて処理が行われている場合には(ステップ902−8:Y)、ステップ902−9以降の処理が行われる。
ステップ902−8までの処理が行われた結果、プールから削除すべきプールVOLが選択された場合(ステップ902−9:Y)、プールVOL構成最適化プログラム902は、ステップ902−5で選択されたLDEV(プールVOL)をプールから削除して良いか、ユーザに確認するための確認画面を管理サーバ102のディスプレイに表示する(ステップ902−10)。ここでの表示例を図21に示す。プールVOL構成最適化プログラム902は確認画面に、選択された削除候補LDEVのID(識別番号)や容量を表示する(B902−12)。また、図21(B902−12)に示されているように、確認画面には削除候補LDEVのRAIDレベルや、使用されている記憶デバイスの種類が表示されてもよい。さらに選択されたLDEVを削除することの妥当性をユーザが判断できるように、プールVOL構成最適化プログラム902はプールからLDEVを削除した時の容量の予測値を算出して、確認画面に表示してもよい(B902−11)。
プールVOL構成最適化プログラム902は、ユーザが確認画面上の“適用”ボタン(B902−13)を押したことを確認すると(ステップ902−11:Y)、ストレージシステム104に削除候補LDEVを対象プールから削除するよう指示する(ステップ902−12)。ユーザが“キャンセル”ボタン(B902−14)を押した場合には、(ステップ902−11:N)、ステップ902−12はスキップされる。なお、ステップ902−10及びステップ902−11は無くてもよい。つまりプールVOL構成最適化プログラム902はユーザの許可を得ずに、ステップ902−12を実行しても良い。
また、ステップ902−8までの処理が行われた結果、プールに追加すべきLDEVが選択された場合(ステップ902−13:Y)、プールVOL構成最適化プログラム902は、ステップ902−7で選択されたLDEVをプールに追加して良いか、ユーザに確認するための確認画面を、管理サーバ102のディスプレイに表示する(ステップ902−14)。ここでの表示例を図22に示す。プールVOL構成最適化プログラム902は確認画面に、選択された追加候補LDEVのID(識別番号)や容量を表示する(B902−14)。また図21と同様に、確認画面に削除候補LDEVのRAIDレベルや、使用されている記憶デバイスの種類が表示されてもよい。
プールVOL構成最適化プログラム902は、ユーザが確認画面上の“適用”ボタンを押したことを確認すると(ステップ902−15:Y)、ストレージシステム104に追加候補LDEVを対象プールに追加するよう指示する(ステップ902−16)。ステップ902−16の終了後、プールVOL構成最適化プログラム902の処理は終了する。一方ユーザが“キャンセル”ボタンを押した場合には、(ステップ902−15:N)、プールVOL構成最適化プログラム902の処理は終了する。又、ステップ902−11及びステップ902−12は無くてもよい。プールVOL構成最適化プログラム902がユーザの許可を得ずに、ステップ902−16を実行しても良い。
なお、上ではステップ902−3において、拡張率が1/圧縮率と等しい場合にプールVOL構成最適化プログラム902の処理が終了する例が説明された。ただし、拡張率が1/圧縮率と完全に一致するケースは少ないため、1/圧縮率が以下の式(4)
[数4]
(拡張率−α)≦1/圧縮率≦(拡張率+α)・・・・(4)
を満たす場合(αは固定値で、拡張率よりも充分小さい値)に、プールVOL構成最適化プログラム902が処理を終了するようにしてもよい。
又、ステップ902−4において、RAIDグループに属するプールVOL論理容量合計とRAIDグループの実容量/圧縮率の差を削減容量とすることを説明したが、以下の式(5)
[数5]
RAIDグループ内プールVOL論理容量合計−RAIDグループ実容量/(圧縮率+β)・・・・(5)
で算出される値を削減容量としても良い(なお、βは所定の定数である)。すなわち削減容量を現在の圧縮率よりβだけ大きい圧縮率で算出し、現在の圧縮率から算出される理論値より小さくすることで、圧縮率が変動して物理領域がより多く消費された場合でも、RAIDグループまたはプールの論理空き容量(論理容量と論理使用量の差)が足りなくなる事を防ぐことが出来る。
又、ステップ902−9において、RAIDグループの実容量/圧縮率とRAIDグループの論理容量との差を、追加すべき論理容量とすることを説明したが、これも以下の式(6)
[数6]
RAIDグループ実容量/(圧縮率ーγ)−RAIDグループ内プールVOL論理容量合計・・・・(6)
を用いて算出されるようにしても良い(なお、γは所定の定数である)。すなわち追加すべき論理容量を現在の圧縮率よりγだけ小さい圧縮率で算出し、現在の圧縮率から算出される理論値より大きくすることで、より圧縮され実空き容量が増えた場合でも、RAIDグループまたはプールの論理空き容量が足りなくなる事を防ぐことが出来る。
次に、管理サーバ102がステップ902−13またはステップ903−10を実行した時にストレージシステム104で行われる処理の流れを、図23を用いて説明する。管理サーバ102がステップ902−13またはステップ903−10を実行すると、ストレージシステム104ではプール容量拡張プログラム807が起動され、プール容量拡張プログラム807によってプールへのLDEV追加が行われる。またこの時、管理サーバ102からは拡張対象プールの識別番号、追加すべきLDEVの識別番号が通知される。
プール容量拡張プログラム807が開始されると、プール容量拡張プログラム807はまずLP変換テーブル702にレコードの追加を行う(ステップ807−1)。もし管理サーバ102から通知されたLDEV(追加すべきLDEV)のサイズが、nページ分のサイズだった場合、プール容量拡張プログラム807はLP変換テーブル702にnレコード分のエントリを追加する。また各レコードのプールボリューム番号(702−1)、ページ#(702−2)、RG番号(702−3)、ドライブ番号(702−4)、開始アドレス(702−5)に情報を登録する。
もし、プールに追加すべきLDEVが、圧縮RGに属するLDEVである場合(ステップ807−2:Y)、プール容量拡張プログラム807は、圧縮RG容量情報管理テーブル703の内容を更新し(プールVOL容量総和703−2に追加すべきLDEVの論理容量を加算する。また必要があれば、プール内実容量703−3も加算される)、処理を終了する。プールに追加すべきLDEVが圧縮RGに属するLDEVでない場合(ステップ807−2:N)は、プール容量拡張プログラム807はステップ807−3を実行せずに終了する。
次に、管理サーバ102がステップ902−8を実行した時にストレージシステム104で行われる処理の流れを、図24を用いて説明する。管理サーバ102がステップ902−8を実行すると、ストレージシステム104ではプール容量縮小プログラム808が起動され、プール容量縮小プログラム808によってLDEVがプールから削除される。またこの時、管理サーバ102からはLDEV削除対象プールの識別番号、削除すべきLDEVの識別番号が通知される。
まずプール容量縮小プログラム808は、管理サーバ102から通知された削除対象LDEVのページが使用中か判定する(ステップ808−1)。もし削除対象LDEV内のいずれかのページが、仮想ボリュームの仮想ページに割り当てられている場合、削除対象LDEVのページが使用中と判定される。この場合プール容量縮小プログラム808は、削除対象LDEV内のページのうち、仮想ボリュームの仮想ページに割り当てられているページをすべて特定する(ステップ808−2)。削除対象LDEVのページがいずれも未使用の場合(ステップ808−1:N)、次にステップ808−6が行われる。
削除対象LDEV内のページが仮想ページに割り当てられている場合、削除対象LDEVをプールから削除する前に、仮想ページに割り当てられているページ内のデータを別のプールVOLに移動する必要がある。なお、ここでの「別のプールVOL」は、削除対象LDEVが属するRAIDグループとは異なるRAIDグループに属するLDEVの中から選択される。そのためステップ808−3でプール容量縮小プログラム808は、削除対象LDEVが属するRAIDグループとは異なるRAIDグループに属しているプールVOL(1または複数)を探す。また、ここで見つかったプールVOLに、削除対象LDEVのデータを移動可能か判定するために、プール容量縮小プログラム808は、見つかったプールVOL内の未使用ページの合計サイズが、削除対象LDEVの使用中ページの合計サイズより大きいか判定する。
ステップ808−3の判定が否定的な場合、プール容量縮小プログラム808はプールからLDEV(プールVOL)を削除できない旨を管理サーバ102に通知して処理を終了する。この通知を受けた管理サーバ102は、ディスプレイにプール容量の縮小に失敗した旨を表示する。
ステップ808−3の判定が肯定的な場合、プール容量縮小プログラム808は削除対象LDEVの使用中ページ内のデータを、見つかったプールVOL内の未使用ページに移動する(ステップ808−5)。ステップ808−5の処理は、ステップ805−4の処理(つまり図15の処理)と同様なので、ここでの説明は略す。
ステップ808−5の後、プール容量縮小プログラム808はステップ808−6で、削除対象LDEVが圧縮RGに属するLDEVか判定する。削除対象LDEVが圧縮RGに属するLDEVである場合(ステップ808−6:Y)、プール容量縮小プログラム808は圧縮RG容量情報管理テーブル703を更新する(ステップ808−7)。ここでは、プールVOL容量総和703−2から削除対象LDEVの論理容量を減算する。また必要があれば、プール内実容量703−3も減算される。
最後にプール容量縮小プログラム808は、LP変換テーブル702から削除対象のLDEVに含まれる全ページの情報を削除し(ステップ808−8)、処理を終了する。
以上が、実施例に係るストレージシステムの説明である。本実施例に係る計算機システムは、プールの論理使用量に加えて、実使用量も監視する。実使用量が所定の閾値を超過した場合には、プールの実容量を増加させる。さらに論理使用量が所定の閾値を超過している場合には、プールの論理容量を増加させる。これにより、プール内に未使用ページは多く残っているが、記憶デバイスが有する物理領域が不足しているために、ホストからストレージシステムへのデータ書き込みができなくなる事態を防ぐことができる。逆に記憶デバイスが有する物理領域は多く残っているが、プール内の未使用ページが不足しているために、ホストからストレージシステムへのデータ書き込みができなくなる事態も防ぐことができる。
さらに本実施例に係る計算機システムは、RAIDグループの拡張率(プールVOLの論理容量合計と実容量の比)と、圧縮率の逆数(論理使用量÷実使用量)が乖離しないように、プールの容量の調節を行う。拡張率と1/圧縮率が等しい場合、プールの論理容量と実容量が同じ割合で消費されるため、プール内の未使用ページと物理領域の一方だけが過剰に不足する事態を防ぐことができる。
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
たとえば上で説明した実施例では、管理サーバ102でプール容量拡張自動化プログラム903やプールVOL構成最適化プログラム902が実行される。ただし別の実施形態として、プール容量拡張自動化プログラム903やプールVOL構成最適化プログラム902によって行われる処理の大半をストレージシステム104で実施するような、計算機システムの構成になっていてもよい。たとえば上で説明したプール容量拡張自動化プログラム903やプールVOL構成最適化プログラム902の処理のうち、管理サーバ102では画面表示やユーザからの情報入力を受け付けるためのプログラムコードだけが実行され、それ以外のプログラムコードはストレージシステム104のプロセッサ119が実行するようにしてよい。
また、別の実施形態として、ホストライト処理プログラム802、圧縮RG監視プログラム803、デステージ処理プログラム804、枯渇回避再配置処理プログラム805、ページ再配置処理プログラム806、プール容量拡張プログラム807、プール容量縮小プログラム808(以下ではこれらを「プログラム802〜808」と略記する)は、ストレージシステム104ではなく、サーバやパーソナルコンピュータ等の汎用のコンピュータ(以下、これを単に「コンピュータ」と呼ぶ)で実行される構成でもよい。この場合、コンピュータが圧縮対応ドライブ113やドライブ114を有し、コンピュータが上の実施例で説明した各プログラムを実行することで、外部のホスト101等から受け付けたライトデータを圧縮対応ドライブ113やドライブ114に格納する処理を行う。
又、プール容量管理プログラム901、プールVOL構成最適化プログラム902、プール容量拡張自動化プログラム903(以下ではこれらを「プログラム901〜903」と略記する)も、コンピュータで実行されてもよい。なお、プログラム802〜808と、プログラム901〜903とは、それぞれ同一のコンピュータで実行される構成であってもよいし、異なるコンピュータで実行される構成であってもよい。プログラム802〜808と、プログラム901〜903とが、同一のコンピュータで実行される場合、仮想マシンを形成するハイパーバイザプログラムをコンピュータで実行することで、コンピュータ上に少なくとも、プログラム802〜808を実行する仮想マシンと、プログラム901〜903を実行する仮想マシンとを形成するとよい。さらにプログラム802〜808と、プログラム901〜903を実行するコンピュータが、上の実施例で説明したホスト101のような、仮想ボリュームを使用するプログラムを実行する仮想マシンも生成し、上の実施例で説明した計算機システムが、単一のコンピュータ上で実現される構成であってもよい。
また、上で説明した実施例では、プールに論理デバイス(LDEV)を追加または削除する際に、ユーザに確認する処理が行われる。しかし別の実施形態として、プール容量拡張自動化プログラム903やプールVOL構成最適化プログラム902は、ユーザに確認せずに、プールに論理デバイス(LDEV)を追加または削除してもよい。
また、上で説明したストレージシステム104では、記憶デバイスからRAIDグループを作成しているが、RAIDのパリティを生成することは、本発明の必須要件ではない。たとえば、いわゆるRAID−0(パリティ等の冗長データを生成しないDisk Array)が用いられてもよい。また、複数の記憶デバイスからRAIDグループを形成しることも必須ではない。単一の記憶デバイスが提供する記憶領域を分割することで形成される部分領域のそれぞれを論理デバイスとして定義し、この定義された論理デバイスをプールVOLとして用いてもよい。
また、上で説明した実施例に係る計算機システムは、圧縮RGの拡張率と圧縮率を比較し、拡張率と1/圧縮率の差が減少するように、プールVOLの追加または削除を行っている。ただし別の実施形態として、計算機システムが圧縮RGを構成する各記憶デバイスについて拡張率と圧縮率を算出し、各記憶デバイスの拡張率と圧縮率に基づいてプールVOLの追加または削除を行ってもよい。その場合、計算機システムは圧縮RGを構成する記憶デバイスのうち、拡張率と1/圧縮率の差(つまり“拡張率−1/圧縮率”)が最も大きい記憶デバイスを特定し、その記憶デバイスの拡張率と1/圧縮率の差に基づいて、削除または追加するプールVOLの数を決定するとよい。プールの容量を調整する場合、物理領域の量が不足している状態を解消することが、最も優先すべき事項だからである。