以下では、幾つかの実施例を、図面を参照して説明する。
なお、以下の説明では、「aaaテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「aaaテーブル」を「aaa情報」と呼ぶこともできる。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インタフェースデバイス(例えばポート)を用いながら行うため、処理の主語がプログラムとされても良い。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機(例えば、管理計算機、ホスト計算機、コントローラ等)が行う処理としても良い。また、コントローラ(ストレージコントローラ)は、プロセッサそれ自体であっても良いし、コントローラが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又はコンピュータ読取可能な記憶メディアであっても良い。
また、以下の説明では、要素の識別情報として、IDが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたIDを使用することがある。
また、以下の説明では、I/O(Input/Output)要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
RAIDグループは、PG(Parity Group)と呼ばれてもよい。
図1は、本実施例の計算機システムにおける、仮想記憶領域と物理記憶領域との間のマッピングの概要を示す。
この図の上部は、仮想記憶領域を示し、この図の下部は、物理記憶領域を示す。
本実施例の計算機システムは、仮想ボリュームをホストに提供し、仮想記憶ドライブ402により提供される仮想記憶領域を仮想ボリュームに割り当てる。仮想記憶領域は、例えばページである。
さらに、複数の仮想記憶ドライブ402を含む仮想パリティグループ(VPG:Virtual Parity Group)204が構成される。この図の例においては、4個の仮想記憶ドライブ402が、一つの仮想パリティグループ204を構成する。この図の例においては、3個の仮想パリティグループ204が示されており、それぞれにVPG#(番号)が与えられている。また、各仮想パリティグループ204に属するドライブには、それぞれ仮想パリティグループ内の位置を示すVCDEV(Virtual Column DEVice)#が与えられる。この図の例においては、各仮想パリティグループ204内に4個の仮想記憶ドライブ402が示されており、それぞれに異なるVCDEV#が与えられている。
仮想パリティグループ204は、RAID(Redundant Array of Inexpensive Disks)グループであり、複数の仮想記憶ドライブ402に跨る冗長データセットを格納する。冗長データセットは、RAIDにおいてデータをリビルドするためのデータセットであり、ホストからのデータと冗長データとを含む。
仮想記憶領域は、所定サイズの仮想ストライプ405に分割されている。仮想パリティグループ204内の複数の仮想記憶ドライブ402のそれぞれの中の特定の論理アドレスの仮想ストライプ405は、仮想ストライプ列406を構成する。この図の例においては、4個の仮想ストライプ405が一つの仮想ストライプ列406を構成する。仮想ストライプ列406は、冗長データセットを格納する。冗長データセットは、ホストからのデータDと、データDに基づくパリティPとを含む。一つの仮想ストライプ列406内の各仮想ストライプ405は、対応する冗長データセット内のデータD又はパリティPを格納する。
なお、データDを、ユーザデータと呼ぶことがある。パリティPを、冗長データと呼ぶことがある。冗長データセット内の各仮想ストライプに格納されるデータを要素データと呼ぶことがある。
一つの仮想記憶ドライブ402において、一つの仮想ストライプ405、又は論理アドレスが連続する所定数の仮想ストライプ405が、一つの仮想パーセル400を構成する。この図の例においては、連続する論理アドレスを有する2個の仮想ストライプ405が、一つの仮想パーセル400を構成する。
さらに、連続する論理アドレスを有する所定数の仮想ストライプ列406は、仮想チャンク(Vchunk:Virtual chunk)401を構成する。仮想チャンク401は、一つの仮想パーセル列である。仮想パーセル列は、一つの仮想パリティグループ204内の複数の仮想記憶ドライブ402のそれぞれの中の特定の論理アドレスの仮想パーセル400で構成される。言い換えれば、一つの仮想チャンク401は連続する論理アドレスを有する1以上の仮想ストライプ列406で構成されている。この図の例においては、一つの仮想チャンク401は、連続する論理アドレスを有する2個の仮想ストライプ列406で構成されている。この図の例においては、12個の仮想チャンク401が示されており、それぞれにVPG204内のVchunk#が与えられている。仮想パーセル400が一つの仮想ストライプ405で構成される場合、仮想チャンク401は一つの仮想ストライプ列406で構成される。
この図の例においては、各仮想パーセル400内に記された数字のペアは、VPG#とVchunk#で表されるVchunk識別子である。例えば、Vchunk識別子が“0−1”である仮想パーセル400は、VPG#=0、Vchunk#=1に属することを示す。
仮想記憶領域は、物理記憶ドライブ170が提供する物理記憶領域にマッピングされている。複数の物理記憶ドライブ170を含む物理パリティグループ(PPG:Physical Parity Group)205が構成される。この図の例においては、4個の物理記憶ドライブ170が、一つの物理パリティグループ205を構成する。この図の例においては、3個の物理パリティグループ205が示されており、それぞれにPPG#が与えられている。仮想記憶領域と物理記憶領域の間のマッピングをパーセルマッピングと呼ぶことがある。また、各物理パリティグループ205に属するドライブには、それぞれ物理パリティグループ内の位置を示すPCDEV(Physical Column DEVice)#が与えられる。この図の例においては、各物理パリティグループ205内に4個の物理記憶ドライブ170が示されており、それぞれに異なるPCDEV#が与えられている。
仮想チャンク401内の各仮想パーセル400は、物理記憶領域における物理パーセル701にマッピングされる。各物理パーセル701内の数字は、対応する仮想パーセル400が属するVchunk識別子(VPG#とVchunk#)を示し、“S”はスペア領域を示す。
仮想チャンク401と同様に、物理記憶領域において物理チャンク(Pchunk:Physical chunk)501が構成されている。物理チャンク501は、一つの物理パリティグループ205内の複数の物理記憶ドライブ170のそれぞれの中の特定の物理アドレスの物理パーセル701で構成される。この図の例においては、15個の物理チャンク501が示されており、それぞれにPchunk#が与えられている。各物理チャンク501は、Pchunk#とPPG#で同定される。
この図の例においては、仮想チャンク401内の複数の仮想パーセル400は、障害回復のため、それぞれ異なる複数の物理記憶ドライブ170にマッピングされる。言い換えれば、仮想ストライプ列406内の複数の仮想ストライプ405も、それぞれ異なる複数の物理記憶ドライブ170にマッピングされる。これにより、冗長データセットは、物理パリティグループ内の物理記憶ドライブ数の要素データ(データD又はパリティP)を含み、それらは、物理パリティグループ内の物理記憶ドライブ数の物理記憶ドライブ170にそれぞれ書き込まれる。
また、仮想チャンク401に含まれる複数の仮想パーセル400は、1以上の物理パリティグループ205に分散してマッピングされる。つまり、各仮想チャンク401を構成する仮想ストライプ405は、複数の物理パリティグループ205に分散してマッピングされうる。これにより、計算機システムは、I/O処理の負荷が特定の物理記憶ドライブ170に集中することを低減する。
パーセルマッピングは、マッピング条件を満たす。マッピング条件は、各仮想チャンク401が複数の物理記憶ドライブ170にマッピングされることである。言い換えれば、マッピング条件は、一つの物理記憶ドライブ170内の複数の物理パーセル701が同一の仮想チャンク401にマッピングされないことである。
物理記憶領域においては、所定のPchunk#の物理チャンク501は、スペア領域に割り当てられており、この図の例においては、Pchunk#が0である物理チャンク501は、スペア領域に割り当てられている。
以下、実施例に係る計算機システムを説明する。以下では、本実施例を実現するための一例として特許文献1に示された構成を用いて説明することがあるが、本実施例は特許文献1に示された構成に限定されない。
図2は、本実施例に係る計算機システムのハードウェア構成を示す。
計算機システム1は、1以上のホスト計算機(以下、ホストという)10と、管理サーバ20と、ストレージコントローラ100と、ドライブエンクロージャ160とを含む。ホスト計算機10と、管理サーバ20と、ストレージコントローラ100とは、ネットワーク30を介して接続されている。ドライブエンクロージャ160は、ストレージコントローラ100と接続されている。ネットワーク30は、ローカルエリアネットワーク(LAN:Local Area Network)であっても良く、ワイドエリアネットワーク(WAN:Wide Area Network)であってもよい。ホスト10とストレージコントローラ100が一つの計算機であってもよい。また、ホスト10とストレージコントローラ100のそれぞれが仮想マシンであってもよい。
ホスト10は、例えば、アプリケーションを実行する計算機であり、アプリケーションにより利用されるデータをストレージコントローラ100から読み出し、アプリケーションにより作成されたデータをストレージコントローラ100へ書き込む。
管理サーバ20は、管理者により使用される計算機である。管理サーバ20は、情報を入力するための入力デバイスと、情報を表示するための出力デバイスとを含んでもよい。管理サーバ20は、入力デバイスに対する管理者の操作により、データの復元のためのデータ復元処理の種類の設定を受け付け、ストレージコントローラ100に受け付けたデータ復元処理を実行させるように設定する。
ストレージシステムは、例えば、ストレージコントローラ100、及びドライブエンクロージャ160を含む。ドライブエンクロージャ160には、物理記憶ドライブ170(単にドライブとも呼ぶ)が複数含まれている。物理記憶ドライブ170は、1以上の記憶媒体を含む。記憶媒体は、例えば、磁気ディスク、フラッシュメモリ、その他の不揮発性半導体メモリ(PRAM、ReRAM等)である。
ストレージコントローラ100は、1以上のフロントエンドパッケージ(FEPK:FrontEnd PacKage)110と、保守インタフェース(保守I/F)112と、1以上のCPU120と、1以上のキャッシュメモリパッケージ(CMPK:CM PacKage)130と、1以上のバックエンドパッケージ(BEPK:BackEnd PacKage)140と、内部ネットワーク150とを有する。
FEPK110、保守I/F112、CPU120、CMPK130、及びBEPK140は、内部ネットワーク150を介して接続されている。BEPK140は、複数系統のパスを介してドライブエンクロージャ160と接続されている。
FEPK110は、ホスト10とのインタフェースの一例であり、1以上のポート111を有する。ポート111は、ストレージコントローラ100を、ネットワーク30等を介して種々の装置と接続する。保守I/F112は、ストレージコントローラ100を、管理サーバ20と接続するためのインタフェースである。
CPU120は制御部であって、1以上のCore121と、ローカルメモリ(LM:Local Memory)122とを有する。Core121は、LM122に格納されたプログラムを実行して各種処理を実行する。Core121は、BEPK140を介して、各種コマンド(例えばSCSIにおけるREADコマンドやWRITEコマンドなど)をドライブエンクロージャ160内の物理記憶ドライブ170に送信する。LM122は、各種プログラムや、各種情報を記憶する。
CMPK130は、1以上のキャッシュメモリ(CM)131を有する。CM131は、ホスト10から物理記憶ドライブ170に書き込むデータ(ライトデータ)や、物理記憶ドライブ170から読み出したデータ(リードデータ)を一時的に格納する。
BEPK140は、ドライブエンクロージャ160とのインタフェースの一例であり、1以上のポート111を有する。
ドライブエンクロージャ160は、複数の物理記憶ドライブ170を有する。
ストレージコントローラ100は、複数の物理記憶ドライブ170の記憶領域で構成される容量プール(以下、単にプールという)を管理する。ストレージコントローラ100は、プール内の記憶領域を用いてRAIDグループを構成する。すなわち、ストレージコントローラ100は、複数の物理記憶ドライブ170を用いて、複数の仮想パリティグループ(VPG)を構成する。VPGは、仮想的なRAIDグループである。
VPGの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、複数のサブ記憶領域で構成されている。複数のサブ記憶領域は、VPGを構成する複数の物理記憶ドライブ170に跨っており、複数の物理記憶ドライブ170にそれぞれ対応している。ここで、一つのサブ記憶領域を、「ストライプ」と呼び、サブ記憶領域列を、「ストライプ列」と呼ぶ。複数のストライプ列によって、RAIDグループの記憶領域が構成されている。
RAIDには、いくつかのレベル(以下、「RAIDレベル」という)がある。例えば、RAID5では、RAID5に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ(以下、便宜上「データ単位」という)に分割される。各データ単位は、複数のデータ要素に分割される。複数のデータ要素は、同一のストレイプ列内の複数のストライプにそれぞれ書き込まれる。
RAID5では、物理記憶ドライブ170に障害が発生したことにより、その物理記憶ドライブ170から読み出せなくなったデータ要素をリビルドするために、各データ単位に対して、“パリティ”と呼ばれる冗長な情報(以下、「冗長コード」)が生成される。冗長コードも、複数のデータ要素と同一のストライプ列内のストライプに書き込まれる。
例えば、RAIDグループを構成する物理記憶ドライブ170の数が4である場合、そのうちの3個の物理記憶ドライブ170に対応する3個のストライプに、データ単位を構成する3個のデータ要素が書き込まれ、残りの一つの物理記憶ドライブ170に対応するストライプに、冗長コードが書き込まれる。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
RAID6では、各データ単位に対して、2種類の冗長コード(Pパリティ、Qパリティという)が生成されて、それぞれの冗長コードが同一のストライプ列内のストライプに書き込まれる。これにより、データ単位を構成する複数のデータ要素のうちの2個のデータ要素を読み出すことができない場合に、これら2個のデータ要素を復元することができる。
上記に説明した以外にもRAIDレベルは存在する(例えばRAID1〜4)。データの冗長化技術として、3重ミラー(Triplication)や、パリティを3個用いたトリプルパリティ技術等もある。冗長コードの生成技術についても、ガロア演算を用いたReed−solomon符号や、EVEN−ODD等さまざまな技術が存在する。以下においては、主にRAID5又は6について説明するが、冗長化技術を上述した方法に置き換え可能である。
ストレージコントローラ100は、物理記憶ドライブ170のうちいずれかの物理記憶ドライブ170が故障した場合に、故障した物理記憶ドライブ170に格納されているデータ要素を復元する。
CPU(Central Processing Unit)120内のCore121は、故障した物理記憶ドライブ170に格納されていたデータ要素を復元するために必要なストライプデータ要素(例えば、他のデータ要素及びパリティ)を、当該データを格納している複数の物理記憶ドライブ170から取得する。Core121は、インタフェースデバイス(例えば、BEPK140)を介して、取得したストライプデータ要素をキャッシュメモリ(CM:Cache Memory)131に格納する。その後、キャッシュメモリ131のストライプデータ要素に基づいてデータ要素を復元し、当該データ要素を所定の物理記憶ドライブ170に格納する。
例えば、RAID5で構成されたRAIDグループのデータ単位に対して、Core121は、データ単位を構成する複数のデータ要素の排他的論理和(XOR)をとることによってPパリティを生成する。RAID6で構成されたRAIDグループのデータ単位に対して、Core121は、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Qパリティを生成する。
以下、Core121の動作をストレージコントローラ100の動作として説明することがある。
図3は、本実施例に係る計算機システムの論理構成を示す。
ストレージコントローラ100は、複数、たとえば、4個のドライブ170を束ねて、物理パリティグループ(PPG)205を構成する。ストレージコントローラ100は、1以上の物理パリティグループ205とそれに対応する1以上の仮想パリティグループ(VPG)204とを含むDG(Distribution Group)207を構成する。
ストレージコントローラ100は、DG207内の複数のPPG205の一部記憶領域を、同一DG207内のVPG204へ割り当てる。これにより、VPG204内の仮想的なストライプ列である仮想ストライプ列は、DG207の範囲で、複数のPPG205のドライブに分散される。つまり、VPG204へのI/O要求によって、そのVPG204が所属するDG207の範囲を超えたドライブ170へのアクセスは実行されない。DG207内に、VPG204とPPG205は同数存在し、DG207内に存在するその識別番号も同じである。論理的な記憶容量の集合であるプール200は、1以上のDG207を含む。
前述したように、ストレージコントローラ100は、ドライブ170として、例えば、フラッシュメモリドライブ、SASドライブ、SATAドライブなど、性能特性が異なる複数種類のドライブを持つ場合がある。ドライブ170は、異なる特性に応じて階層(Tier)206に分類される。Tier206はそれぞれ性能特性が異なるため、DG207が異なるTier206に属するドライブ170で構成されていた場合、性能の低いドライブがボトルネックとなってしまう。そのため、DG207は、単一のTier206に属するドライブ170のみを含むように構成されることが望ましい。
プール200内には複数の仮想ボリューム(VVOL:Virtual VOLume)201が存在する。VVOL201は、仮想的な記憶デバイスであり、ホスト10から参照されることができる。ストレージコントローラ100の管理者からの指示に応じて、管理サーバ20は、保守I/F112を介して、ストレージコントローラ100に任意のサイズのVVOL201を作成させる。サイズは、実際のドライブ170の合計容量に依存しない。ストレージコントローラ100は、ホスト10からのI/O要求(ホストI/O)により示されたVVOL201内の記憶領域(VVOLページ202)に対して、VPG203内の記憶領域(VPGページ203)を動的に割り当てる。
ストレージコントローラ100は、VVOLページ202毎にアクセス頻度を記録し、高頻度のVVOLページ202に対して、高性能なVPGページ203を割り当てるようにしてもよい。例えばこの図において、高性能なVPGページ203は、高性能なフラッシュメモリドライブで構成されたTier206内のVPG204に属するVPGページ203である。ストレージコントローラ100は、継続的にVVOLページ202の負荷を監視して、周期的にVPGページ203の割り当てを変更してもよい。
図4は、物理記憶ドライブのデータ構成を示す。
物理記憶ドライブ170は、ストレージコントローラ100等の上位の装置との間で、SCSIコマンド処理の最小単位(例えば、512Byte)であるサブブロック300を単位として、データの受け渡しを行う。スロット301は、キャッシュメモリ131上でのデータをキャッシュする際の管理単位であり、例えば、256KBである。スロット301は、連続する複数のサブブロック300の集合で構成される。物理ストライプ302は、複数(例えば、2個)のスロット301を格納する。
図5は、仮想ボリュームのページマッピングを示す。
ホスト10により認識可能なVVOL201は、複数のVVOLページ202で構成される。VVOL201は、ユニークな識別子(VVOL番号)を持つ。ストレージコントローラ100は、VVOLページ202に、VPG204内のVPGページ203を割り当てる。この関係をページマッピング403と呼ぶ。ページマッピング403は、ストレージコントローラ100により動的に管理される。連続するVVOLページ#を持つ複数のVVOLページには、連続するVVOL空間のアドレスが与えられる。
VPG204は、1以上の仮想チャンク(Vchunk)401を含む。Vchunk401は、複数の仮想パーセル400で構成される。この図の例では、Vchunk401は、8個の仮想パーセル400で構成されている。
仮想パーセル400は、一つの仮想記憶ドライブ402内の連続した領域で構成されている。仮想パーセル400は、1又は複数の仮想ストライプ405で構成されている。この図の例において、仮想パーセル400は、8個の仮想ストライプ405で構成されている。仮想パーセル400における仮想ストライプ405の数は特に限定されない。仮想パーセル400が複数の仮想ストライプ405を含むことで、処理の効率化が実現される。
この図の例において、VPG204は、RAID6の6D+2P構成である、すなわち、データ単位を構成する6つのデータ要素(D)と、これらデータ要素に対応する2つのパリティ(P、Q)とをそれぞれ異なる物理記憶ドライブ170に格納する。この場合、Vchunk401は、例えば、8個の異なる物理記憶ドライブ170の仮想パーセル400で構成される。
言い換えれば、Vchunk401は、複数の仮想ストライプ列406で構成されており、この図の例においては、8個の仮想ストライプ列406で構成されている。Vchunk401が複数の仮想ストライプ列406を含むことで、処理の効率化が実現される。なお、Vchunk401は、一つの仮想ストライプ列406で構成されてもよい。
Vchunk401は、複数(例えば、4個)のVPGページ203を含む。VPGページ203は、複数(例えば、2個)の連続する仮想ストライプ列406のストライプデータ要素を格納することができる。例えば、この複数のデータ単位を数MBとすることで、ドライブ170が磁気ディスクなどである場合でも、ホストI/Oのシーケンシャル性能を一定に保つことができる。
この図においては、1_D1、1_D2、1_D3、1_D4、1_D5、1_D6、1_P、1_Qのように、「_」の前の数字が共通するものが、同一の仮想ストライプ列406のストライプデータ要素を示す。なお、各ストライプデータ要素のサイズは、物理ストライプ302のサイズである。
VPG204は上位ストレージシステムにおいて、ユニークな識別子(VPG番号)を持つ。また、各VPG204内のN個の仮想記憶ドライブ402のそれぞれには、ドライブ番号(VCDEV番号)が与えられている。これは、VPG204内の記憶領域のアドレッシングのための識別子で、後述するPPG205内のドライブとの対応関係を表すための識別子である。NをPGドライブ数と呼ぶことがある。
各VVOL201は、ホスト10から、VVOL201を表す識別子とLBAとを用いてアクセスされる。この図に示すように、VVOLページ202には、VVOL201の先頭からVVOLPage#が与えられる。ホストI/Oにより指定されたLBAに対して、以下の式によりVVOLPage#を算出することが出来る。ここで、Floor(x)は、実数xに対してx以下の最大の整数を示す記号である。LBA及びVVOLPagesizeのそれぞれは、サブブロック数で表されてもよい。
VVOLPage#=Flооr(LBA/VVOLPagesize)
また、VVOLページ202及びVPGページ203のそれぞれは、複数の仮想ストライプで構成されている。ただし、ホスト10にパリティのデータをアクセスさせないため、VVOL201上ではパリティが見えない。例えば、この図で示している6D+2Pの場合、VPG204の空間において8×2個の仮想ストライプを含むVPGページ203は、VVOL201の空間において6×2個の仮想ストライプを含むVVOLページ202として見える。
ストレージコントローラ100は、VPG204の空間とVVOL201の空間を補正することにより、ページマッピング401と合わせて、VVOL201側のLBAに対応するVPG#でのVCDEV#とVchunk#、及び仮想パーセル400内のオフセットアドレスを算出することが出来る。もちろん、ストレージコントローラ100は、ホストI/Oに対応したパリティ領域のVPG#でのVCDEV#とVchunk#、及び仮想パーセル400内のオフセットアドレスも算出可能である。
この図は、RAID6(6D+2P)を用いるケースを示すが、例えば14D+2Pなど、D数を増やしてもよいし、RAID5やRAID1を用いてもよい。また、RAID4のようにパリティのみの仮想パーセルを作成してもよい。通常のRAID4の場合、上位層の論理設計を簡略化できるというメリットがある一方、Write時にパリティドライブにアクセスが集中するため、パリティドライブがボトルネック化しやすいというデメリットがあるが、分散RAID構成の場合、VPG204上のパリティドライブ内のデータは、PPG205上では複数の物理ドライブ170に分散されているため、当該デメリットの影響を最小化することができる。また、RAID6におけるQパリティのエンコーディングはガロア演算以外でも、EVEN−ODD法など他の一般的に知られた方法を使ってもよい。
図6は、VPGとPPGの間のパーセルマッピングを示す。
Vchunk401は、前述のとおり、VPG204の記憶領域の空間において連続的である。連続するc個のVchunk401は、Vchunk周期504を構成する。PPG205は、1以上の物理チャンク(Pchunk)501を含む。Pchunk501は、複数の物理パーセルで構成される。この図の例では、Pchunk501は、8個の物理パーセルで構成されている。
連続する一つ以上のPchunk501bとc個のPchunk501aとは、Pchunk周期505を構成する。cを周期Vchunk数と呼ぶ。Pchunk501bはスペア領域であり、Pchunk501aはデータ領域である。一つのVchunk周期504は、一つのPchunk周期505に対応する。また、パーセルマッピング500は周期的である。すなわち、Vchunk周期504とPchunk周期505の各ペアにおいてパーセルマッピング500は共通である。仮想記憶領域と物理記憶領域との間のパーセルマッピング500が周期的であることで、データを複数の物理記憶領域へ適切に分散できると共に、パーセルマッピング500の効率的な管理が実現される。なお、非周期的、即ち1周期のみのパーセルマッピングが採用されてもよい。
各Vchunk周期504内のVchunk401の識別子をVcycle#で表す。したがって、Vcycle#は、0からc−1までの値を取る。Pchunk周期505内のPchunk501の識別子を、Pcycle#で表す。Pcycle#は、一つのPchunk周期505内のスペア用Pchunk数をmとすると、0からc+m−1までの値を取る。
ストレージコントローラ100は、一つのVchunk周期504に対して、1以上のPPG205に属するPchunk501aを割り当てる。ストレージコントローラ100は、逆に一つのPchunk周期505を、1以上のVPG204に属するVchunk401に割り当てる。一つのVchunk401内の複数の仮想パーセルのデータ実体には、複数のPchunk501aに亘る複数の物理パーセルが割り当てられる。
上述のように、Pchunk周期505はスペア用のPchunk501bを持つため、Pchunk周期505のチャンク数は、Vchunk周期504のチャンク数よりも1以上多い。この図の例では、式Pchunk# mod (c+1)=0が成立する場合、即ち、Pchunk#=k(c+1)(kは0以上の整数)の場合に、そのPchunk#のPchunk501bは、スペア用の領域である。当該スペア領域は、PPG205が属するDG207内のドライブが故障した場合に、リビルド処理の復元先として使用される予約領域である。
なお、この図の例では、一つのドライブ170におけるスペア用のPchunk501bは、一つのPchunk周期505に一つのみ存在しているが、システム全体に占めるスペア領域の割合を増やしたい場合は、当該スペア用のPchunk501bをPchunk周期505あたり2個以上定義してもよい。即ち、Pchunk周期505あたりのスペア用Pchunk501bをm個(mは1以上の整数)とした場合、Pchunk周期505内のチャンク数は、Vchunk周期504内のチャンク数に比べてm個多くなる。また、Pchunk#=k(c+1)〜k(c+1)+m−1の場合に、そのPchunk#のPchunk501bは、スペア用の領域である。
仮想スペアドライブ(VSD:Virtual Spare Drive)502は、故障ドライブと対応する、実体としては存在しないドライブである。仮想スペアドライブ502には、領域として、Pchunk501bの一部であるスペア領域(Pcycle#=0〜m−1)が割り当てられる。当該割り当てをスペアマッピング503と呼ぶ。スペアマッピング503については、後ほど説明する。
次に、VPG204とPPG205のパーセルマッピング500について、c=4、N=4、G=3の例について説明する。cはVchunk周期504内のVchunk数、Nはパリティグループ(VPG204及びPPG205)内のドライブ数、GはDG内のパリティグループ数である。
このように、パーセルマッピングを、Vchunk周期504及びPchunk周期505の組み合わせ毎に、繰り返し配置することで、マッピングパターンの規模を減少させると共にマッピングパターンの生成の負荷やアドレス変換の負荷を抑えることができる。
図7は、ドライブ数がNの整数倍である第1構成ケースのパーセルマッピングの例を示す。図8は、ドライブ数がNの整数倍でない第2構成ケースのパーセルマッピングの例を示す。
VPG204内の仮想記憶ドライブ402内の仮想パーセル400に記されているVchunk識別子“x−y”のうち、xは、VPG#を表し、yはVchunk#を表している。その仮想パーセル400に割り当てられた物理パーセルには、同じVchunk識別子が記している。PPG205内の各ドライブ170には、スペア領域501b(“S”と表記)が定義されている。パーセルマッピングにおいて、一つのVchunk周期504内の複数の仮想パーセル400と、一つのPchunk周期505内の複数の物理パーセルとの間の対応関係を、マッピングパターンと呼ぶ。例えば、マッピングパターンは一つのPchunk周期505内の各物理パーセルに対応するVchunk識別子で表される。各Pchunk周期505のマッピングパターンは、共通である。
第1構成ケース及び第2構成ケースにおいては、2個のVchunk周期504と、2個のPchunk周期505とを示す。各Pchunk周期505(c+1=5個のPchunk)は、3個のPPG205に亘る。一つのPchunk周期505のうち、スペア領域を除く全ての物理パーセルは、一つのVchunk周期504内の仮想パーセルに割り当てられる。第1構成ケースにおいては、全ての仮想パーセルに物理パーセルが割り当てられる。
第2構成ケースのように、ドライブ170の台数がNの整数倍でないケースにおいて、ストレージコントローラ100は、VPG204内の全Vchunkをページに割り当てるのではなく、端数分の仮想ストライプについては、特定のVPG204の一部のVchunkのみ割当を行う。DG内のドライブ数が(G−1)×N+h(hは1〜N−1の整数)である場合、一つのVchunk周期504に割り当て可能なVchunk数は、h×c/N個となる。第2構成ケースでは、c=4、N=4であるため、Vchunk周期504あたり1個のVchunkが割り当て可能となっている。
ここではc=4としているが、ドライブ170の台数がNの整数倍でない任意のケースにおいて、VPG−PPG間のマッピングを適切に設定するために、cはNの整数倍であればよい。増設前において、VPG内のデータDのドライブ数をxとし、VPG内のパリティPのドライブ数をyとすると、冗長度をxD+yPと表すことができる。本実施例によれば、増設後も冗長度は変わらず、xD+yPである。このように、VPG内の仮想記憶ドライブ数Nが、PPG内の物理記憶ドライブ数Nと等しく、Vchunk周期504内のVchunk数がNの整数倍であることにより、DG内の物理記憶ドライブ数がNの整数倍でない場合でも、増設された物理記憶ドライブ内の物理パーセルをVchunkに割り当てることができ、DG内の物理記憶ドライブ数がNの整数倍である場合と同じ冗長度を維持することができる。
図9は、第1構成ケースの1台のドライブの故障時におけるリビルドの動作例を示す。
ここでは、ドライブ170a(PPG#0のPCDEV#0)が故障した場合、リビルド動作を示している。
まず、スペア領域(例えば700a)に、故障したドライブに含まれている物理パーセルに対応する仮想パーセル(例えば仮想パーセル400a)を配置する(管理テーブルの更新)。割り当てたスペア領域700に対して、リビルド処理を実行する。2D+2P構成では、故障ドライブ170a内の仮想パーセル400a、400b、400c、400dのそれぞれに対して、同一仮想チャンクに属する3個の正常仮想パーセルが存在する。ストレージコントローラ100は、このうち2パーセルを、故障ドライブ170a以外の正常ドライブ170bからリードすれば、故障ドライブの喪失データをスペア領域700a、700b、700c、700dへ復元できる。そのため、ストレージコントローラ100は、各仮想パーセル400が存在する3台の正常ドライブ170bの中から、全正常ドライブ170b間の偏りが少なくなるように2台の正常ドライブ170bの仮想パーセルを選択することにより、一つのPchunk周期の一つのドライブ170bからの最大リード量を2パーセル分に制限できる。従来RAID方式では、一つのPchunk周期に対応する一つのドライブからの最大リード量が4パーセル分に相当するため、この図の例では、従来RAID方式と比較し、リビルド時のリード性能を2倍に向上できる。同様に、従来RAID方式では、リビルドされたデータを一つのドライブへライトするのに対し、この図の例では、リビルドされたデータを複数のドライブへ分散してライトするため、リビルド時のライト性能も向上できる。このように、本実施例の計算機システムは、仮想チャンクのストライプデータ要素を分散して複数のドライブ170に配置することにより、リビルド性能を向上させることができる。
この図の例においてストレージコントローラ100は、故障ドライブ170a内の8個の物理パーセルのデータを復元するために、正常ドライブ170bから、点線で囲まれた16個の物理パーセル701をリードする。
図10は、共有メモリの内容を示す。
共有メモリ1000は、例えば、物理記憶ドライブ170、CM131、及びLM122の少なくともいずれか1個の記憶領域を用いて構成される。なお、ストレージコントローラ100は、物理記憶ドライブ170、CM131、及びLM122の内の複数の構成の記憶領域を用いて論理的な共有メモリ1000を構成し、各種情報についてキャッシュ管理を行うようにしてもよい。
共有メモリ1000は、プール管理テーブル1001と、ドライブ状態管理テーブル1002と、ページマッピングテーブル1003と、SWAPポインタテーブル1004と、マッピング補正テーブル1005と、マッピング逆補正テーブル1006と、VCDEVマッピングテーブル(SEEDテーブル)1007と、Vcycleマッピングテーブル(V2Pテーブル)1008と、Pcycleマッピングテーブル(P2Vテーブル)1009と、スペア変換テーブル1010と、スペア逆変換テーブル1011と、仮想スペア管理テーブル1012とを格納する。
VCDEVマッピングテーブル1007と、Vcycleマッピングテーブル1008と、Pcycleマッピングテーブル1009と、スペア変換テーブル1010と、スペア逆変換テーブル1011と、仮想スペア管理テーブル1012は、特許文献1に示されたテーブルと同様である。VCDEVマッピングテーブル1007は、VPG#及びVCDEV#の組み合わせに対応するSEED値を格納する。SEED値は、例えば線形合同法等の疑似乱数生成方式により決定される。Vcycleマッピングテーブル1008は、Vchunkに対応するPchunkを示し、VPG#とVcycle#の組み合わせで表されるVchunkと、PPG#とPcycle#の組み合わせで表されるPchunkとを示す。Pcycleマッピングテーブル1009は、Vcycleマッピングテーブル1008の逆引きテーブルであり、Pchunkに対応するVchunkを示す。スペア変換テーブル1010は、仮想スペアドライブ内の仮想チャンクに割り当てられるドライブを示す。スペア逆変換テーブル1011は、スペア変換テーブル1010の逆引きテーブルであり、ドライブに対応する仮想スペアドライブ内の仮想チャンクを示す。仮想スペア管理テーブル1012は、仮想スペアドライブが使用中であるか否かを示す状態と、仮想スペアドライブのリビルド中にリビルドが完了したLBAを示すコピーポインタとを含む。その他の各テーブルの詳細については後述する。
パーセルマッピングにおいて、DG内のドライブ数がNの整数倍である場合のマッピングパターンを、Goalマッピングパターンと呼ぶ。Goalマッピングパターンは、VCDEVマッピングテーブル1007と、Vcycleマッピングテーブル1008と、Pcycleマッピングテーブル1009とにより表される。DG内のドライブ数がNの整数倍でない場合のマッピングパターンは、GoalマッピングパターンとGoalマッピングパターンに対する補正パターンとで表される。補正パターンは、マッピング補正テーブル1005と、マッピング逆補正テーブル1006とにより表される。
また、ドライブの増設時、増設前のマッピングパターンを現行マッピングパターン(Current)と呼び、増設後のマッピングパターンを目標マッピングパターン(Target)と呼ぶ。即ち、単体増設時、共有メモリ1000は、Currentのマッピング補正テーブル1005及びマッピング逆補正テーブル1006と、Targetのマッピング補正テーブル1005及びマッピング逆補正テーブル1006とを格納する。
スペアマッピングは、スペア変換テーブル1010と、スペア逆変換テーブル1011と、仮想スペア管理テーブル1012とにより管理される。
図11は、ローカルメモリの内容を示す。
ローカルメモリ122は、単体増設処理プログラム1101と、単体増設マッピング生成処理プログラム1102と、完全一致ペアSWAP処理プログラム1103と、部分一致ペアSWAP処理プログラム1104と、不一致ペアSWAP処理プログラム1105と、単体増設パーセルリバランス処理プログラム1106と、ページ割り当て処理プログラム1107と、LP変換処理プログラム1108と、PL変換処理プログラム1109と、マッピング補正処理プログラム1110とを格納する。各処理の具体的な用途については後述する。
図12は、プール管理テーブルを示す。
プール管理テーブル1001は、プール200と、Tier206と、DG207と、VPG204の対応関係を示す情報である。プール管理テーブル1001は、Pool#1200と、Tier#1201と、DG#1202と、VPG#1203と、割当可能Vchunk数1204のフィールドを含む。
本テーブルにより、ストレージコントローラ100は、プール200の各Tier206に属するDG207の識別子と、各DG207に属するVPG204の識別子と、各VPGに204の割当可能Vchunk数を調べることができる。DG207内のVPG204とPPG205の数(識別子)は等しいため、対象DG207に属するPPG#も知ることができる。例えばあるDG207内にVPG#0、1、3が属していた場合、当該DG207内にはPPG#0、1、3が属していることがわかる。
割当可能Vchunk数1203には、対応するPPG205のドライブ数をもとに、Vchunk周期504(c)までの値が格納される。VPG#1203で示されたVPG204においては、各Vchunk周期504あたり、その割当可能Vchunk数1203を超えるVchunk#にページを割り当てることができない。DG1202内のドライブ数をD個とした場合、割当可能Vchunk数1203は、以下の基準で設定される。最後に増設されたVPGの割当可能Vchunk数1203には、DがNの整数倍の場合にはcが設定され、DがNの整数倍でない場合には、式(D mod N)*c/Nで表される値が設定される。ここで、cはNの整数倍であるので、上記式の結果は必ず整数となる。残りのVPGの割当可能Vchunk数1203には、cが設定される。
図13は、ドライブ状態管理テーブルを示す。
ドライブ状態管理テーブル1002は、PPG205を構成する物理記憶ドライブ170の状態を管理するテーブルである。ドライブ状態テーブル1002は、PPG#1205と、PCDEV#1206と、状態1207とのフィールドを含む。PPG#1205には、PPG#が格納される。PCDEV#1206には、PPG#1205のPPG205を構成する物理記憶ドライブ170の番号(物理記憶ドライブ番号)、即ち0〜N−1までの値が格納される。
状態1207には、PPG#1205、PCDEV#1206に対応する物理記憶ドライブ170の状態が格納される。物理記憶ドライブ170の状態としては、物理記憶ドライブ170がリード及びライトアクセスが可能で正常であることを示す「正常」、又は物理記憶ドライブ170の故障等によりリードまたはライトアクセスが不可能なことを示す「アクセス不可」、ドライブが未実装であることを示す「未実装」が設定される。
図14は、ページマッピングテーブルを示す。
ページマッピングテーブル1003は、VVOL201のページと、VPG204のページとの対応関係を示す情報である。ページマッピングテーブル1003は、プール#1300と、VVOL#1301と、VVOLページ#1302と、VPG#1303と、VPGページ#1304とのフィールドを含む。プール#1300と、VVOL#1301と、VVOLページ#1302とは、VVOLページを示す。VPG#1303と、VPGページ#1304とは、当該VVOLページに割り当てられたVPGページを示す。未使用のVVOLページ#1302に対応するVPG#1303及びVPGページ#1304には、「未割当」に相当する値が格納される。
図15は、SWAPポインタテーブルを示す。
SWAPポインタテーブル1004は、Pool#1305と、DG#1306と、PG増設用SWAPポインタ1307と、単体増設用SWAPポインタ1308のフィールドを含む。本テーブルにより、ストレージコントローラ100は、対象のDGが増設中である場合、各SWAPポインタの値を参照することが出来る。
PG増設用SWAPポインタ1307は、特許文献1に示されたSWAPポインタと同様であり、対応するDGのVPG空間内のLBAを表す。PG増設用SWAPポインタ1307は、PG単位で増設する場合に使用され、PG増設用SWAPポインタより前のLBAのデータは、PG増設処理における、データのSWAPが完了していることを表している。ストレージコントローラ100は、PG増設処理中にVPG空間のアドレスにアクセスする場合、指定されたVPG空間のアドレスがPG増設用SWAPポインタより前であれば、増設後のマッピングパターンを用いてアドレス変換を行い、指定されたVPG空間のアドレスがPG増設用SWAPポインタ以降であれば、増設前のマッピングパターンを用いてアドレス変換を行う。
単体増設用SWAPポインタ1308は、対応するDGのVPG空間内のLBAを表す。単体増設用SWAPポインタ1308は、ドライブ単位で増設する場合に使用され、単体増設用SWAPポインタより前のLBAのデータは、単体増設処理における、データのSWAPが完了していることを表している。ストレージコントローラ100は、単体増設処理中にVPG空間のアドレスにアクセスする場合、指定されたVPG空間のアドレスが単体増設用SWAPポインタより前であれば、増設後のマッピングパターンを用いてアドレス変換を行い、指定されたVPG空間のアドレスが単体増設用SWAPポインタ以降であれば、増設前のマッピングパターンを用いてアドレス変換を行う。
各SWAPポインタの値は、無効値である場合、増設が実施されていない又は完了済みの状態を表す。また、各SWAPポインタの値は、増設処理の開始時に0に初期化される。
図16は、マッピング補正テーブルを示す。
マッピング補正テーブル1005は、Index#として、PPG#1400と、PCDEV#1401と、Pcycle#1402とのフィールドを含み、対応するValueとして、PPG#1403と、PCDEV#1404と、Pcycle#1405とのフィールドを含み、SWAPフラグ1406のフィールドを含む。
マッピング補正テーブル1005の各エントリにおいて、Index#は、SWAP元の物理パーセルを示し、Valueは、SWAP先の物理パーセルを示す。Valueに対応するドライブが存在しない場合、Valueに「無効」に相当する値が格納される。
また、SWAPフラグ1406は、増設処理中に値が更新される。具体的には、ストレージコントローラ100は、増設処理の実行中において、Index#に対応する物理パーセルがSWAP対象であると判定した場合にそのSWAPフラグ1406をONに設定し、その物理パーセルのデータSWAP処理が終了した時点でそのSWAPフラグ1406をOFFに設定する。
図17は、マッピング逆補正テーブルを示す。
マッピング逆補正テーブル1006は、Indexとして、PPG#1407と、PCDEV#1408と、Pcycle#1409とのフィールドを含み、対応するValueとして、PPG#1410と、PCDEV#1411と、Pcycle#1412とのフィールドを含む。
マッピング逆補正テーブル1006の各エントリにおいて、Index#は、マッピング補正テーブル1005に示されたSWAP先の物理パーセルを示し、Valueは、マッピング補正テーブル1005に示されたSWAP元の物理パーセルを示す。Index#に対応するドライブが存在しない場合は、当該ドライブに対応する物理パーセルのIndex#に「無効」に相当する値が格納される。
ストレージコントローラ100は、マッピング補正テーブル1005のエントリを設定すると、その情報を、マッピング逆補正テーブル1006の対応するエントリに設定する。
図18は、単体増設処理の第1増設ケースを示す。
ドライブ単位の増設処理を単体増設処理と呼ぶ。第1増設ケースは、c=4、N=4の構成において、PG=1、ドライブ数=4の状態から、1台のドライブを増設し、PG=2、ドライブ数=5に変更する例を示す。
P1は、ドライブ増設前の初期のマッピングパターンである現行マッピングパターンを示す。なお、この図の例は、簡単のため、一つのPchunk周期505のみを記す。この状態においては、1台のドライブが閉塞した場合に、そのドライブのデータを復旧するためのPPG内の正常ドライブ内のスペア領域の数3が、閉塞したドライブ内のデータ領域の数4より少なくなる。そのため、P1の段階において、ストレージコントローラ100は、まだデータを格納することができない。
P2は、ドライブ増設直後の現行マッピングパターンを示す。この状態において現行マッピングパターンには、新規追加ドライブ170b内の4個の物理パーセルと、Vchunk識別子“1−0”で示される1個の仮想チャンクが現行マッピングパターンに追加される。また、現行マッピングパターンは、追加された4個の物理パーセルを、追加された仮想チャンクに割り当てることを示す。当該仮想チャンクをVVOLページへ割り当てることを許可した場合、新規追加ドライブ170bが閉塞した時点で当該仮想チャンクに割り当てられたデータがロストしてしまう。そのため、P2の段階において、ストレージコントローラ100は、新規追加ドライブ170bに対応する仮想チャンクをVVOLページへ割り当てることができない。
なお、この図の例は、c=Nの場合であるため、ドライブ増設直後のP2において、増設対象ドライブ170bには一つのVchunkしか割り当てられていないが、c=kN(kは1以上の任意の整数)の場合、初期状態における増設対象ドライブ170bには、k個のVchunkが割り当てられる。
P2aは、後述するパーセルリバランス処理を行う際の目標となるマッピングパターンである。以降当該マッピングパターンを「Goalマッピングパターン(或いは単にGoalマッピング、Goalとも呼称する)」と呼称する。当該Goalマッピングパターンは、ドライブ数=N×{増設後のPG数}の条件で生成されたマッピングパターンである。この図の例は、PG=2、ドライブ数=8の場合のGoalマッピングパターンを示す。Goalマッピングパターンの作成方法は、特許文献1に示された方法であってもよいし、その他のPG単位で増設を行う分散RAID方式のマッピング方式であっても良い。例えば、ストレージコントローラ100は、疑似乱数の生成や予め設定された乱数テーブルに基づいて、仮想パーセルに割り当てる物理パーセルを決定することで、Goalマッピングパターンを生成してもよい。Goalマッピングパターンは、ストレージコントローラ100に予め設定されていてもよい。Goalマッピングパターンによる、複数のドライブ170への仮想チャンクの配置は、I/Oの負荷を複数のドライブ170に最適に分散させる。また、リビルド処理を高速化するために適した配置となっている。
その後、ストレージコントローラ100は、Goalマッピングパターンのうち、増設後のドライブ台数に相当する範囲のマッピング情報1500をもとに、後述の増設後マッピングパターン生成方法を用いて、P3のマッピングパターンを生成する。ストレージコントローラ100は、このマッピングパターン生成後、マッピングパターンに従ってデータを移動させるデータSWAP処理を行い、増設処理を完了する。但し、P3の状態では、まだデータが格納されていないので、実際のデータの移動は行われない。この状態は、PG単位で増設した場合と同じ冗長度を確保でき、どのドライブが故障してもそのドライブのデータをリビルドできる。ストレージコントローラ100は、データSWAP処理の完了後、増設対象DG207に対応する仮想チャンク内の全VPGページを、VVOLページへ割り当てることを許可する。
従来の分散RAID方式における最小構成は、P1で述べた理由により、1個のPGでは運用できず、2個のPGになる。一方、本実施例の計算機システムの最小構成は、P2及びP3で示したように、1個のPGと1個のドライブになる。これにより、初期コストを低減できる。
図19は、第1増設ケースにおけるマッピングパターン生成方法の概念を示す。
P2−0は初期の現行マッピングパターンを示す。P2aはGoalマッピングパターンを示す。
まず、ストレージコントローラ100は、二つの物理パーセルである物理パーセルペアを選択し、現行マッピングパターンから二つの物理パーセルにそれぞれ対応付けられた二つのVchunk識別子を取得し、二つのVchunk識別子をSWAPした場合の両方のVchunk識別子がGoalマッピングパターンと一致する物理パーセルペアを検索し、そのような物理パーセルペアが存在した場合、その物理パーセルペアをSWAPする。
P2−1において、物理パーセル1600aは現行マッピングパターンではVchunk識別子“1−0”に対応付けられており、GoalマッピングパターンではVchunk識別子“0−0”に対応付けられている。一方、物理パーセル1600bは、現行マッピングパターンではVchunk識別子“0−0”に対応付けられており、GoalマッピングパターンではVchunk識別子“1−1”に対応付けられている。従って、ストレージコントローラ100は、当該物理パーセルペア(1600a、1600b)をSWAPすることで、その両方に対応するVchunk識別子をGoalマッピングパターンと一致させることが可能となるため、これをSWAPする。
全物理パーセルに対してP2−1の条件を満たす物理パーセルペアをSWAPしても、2個以上の物理パーセルが同一のVchunk識別子に対応するドライブ170が1つ以上存在する場合、ストレージコントローラ100は、SWAP後の一方のVchunk識別子だけがGoalマッピングパターンと一致する物理パーセルペアを検索し、そのような物理パーセルペアが存在した場合、その物理パーセルペアをSWAPする。
P2−2の1回目において、物理パーセル1601aは、現行マッピングパターンではVchunk識別子“1−0”に対応付けられており、GoalマッピングパターンではVchunk識別子“1−1”に対応付けられている。一方、物理パーセル1600bは、現行マッピングパターンではVchunk識別子“0−1”に対応付けられており、GoalマッピングパターンではVchunk識別子“1−0”に対応付けられている。従って、ストレージコントローラ100は、当該物理パーセルペア(1601a、1601b)をSWAPすることで、物理パーセル1601bに対応するVchunk識別子をGoalマッピングパターンと一致させることが可能となるため、これをSWAPする。
同様にP2−2の2回目において、ストレージコントローラ100は、物理パーセルペア(1602a、1602b)をSWAPすることで、物理パーセル1602aに対応するVchunk識別子をGoalマッピングパターンと一致させることが可能となるため、これをSWAPする。
なお、P2−1及びP2−2において、ストレージコントローラ100は、SWAP前の何れかのVchunk識別子がGoalマッピングパターンとしている一致する物理パーセルペアをSWAP対象として選択しない。
この図の例では、ストレージコントローラ100は、P2−2の処理を行うことで増設後のマッピングパターンを生成することが可能となる。もし、全物理パーセルのうちP2−2の条件を満たす物理パーセルペアのSWAPを行っても、2個以上の物理パーセルが同一のVchunk識別子に対応するドライブ170が1つ以上存在する場合、ストレージコントローラ100は、SWAP後の両方のVchunk識別子がGoalマッピングパターンと一致しない物理パーセルペアを検索し、その物理パーセルペアをSWAPする。
なお、本処理においても、P2−2と同様に、ストレージコントローラ100は、SWAP前の何れかのVchunk識別子がGoalマッピングパターンと一致する物理パーセルをSWAP対象として選択しない。ストレージコントローラ100は、以上の処理によってP3の現行マッピングパターンを生成する。
例えば特許文献1のような分散RAIDシステムは、ドライブ数がNの整数倍である場合を前提としているため、ドライブ数がNの整数倍の場合、I/O時の負荷等の分散が最適化されるように設計されている。一方、本実施例の分散RAIDシステムにおいて、ドライブ数がNの整数倍でない場合は、I/O時の負荷等の分散がわずかながら最適化されない。
しかし、本実施例のように、ストレージコントローラ100が、Goalマッピングパターンを設定し、当該Goalマッピングパターンに出来るだけ一致するように現行マッピングパターンを生成することにより、ドライブ数がNの整数倍でない場合の分散の効果を最適に近づけると共に、ドライブ数がNの整数倍になった場合に最小の移動量で上記最適化の効果を得ることができる。
図20は、単体増設処理の第2増設ケースを示す。
前述の第1増設ケースは、ドライブ数がNの整数倍の場合からドライブ単位で増設を行った。この図の第2増設ケースのようにドライブ数がNの整数倍でない場合からも、第1増設ケースと同様の方法によってドライブ単位の増設を実施することが可能である。
P1は、増設前の現行マッピングパターンを示す。増設前のDGのドライブ数は、5であり、Nの整数倍ではない。P2に示すように、3台のドライブ170bを増設することで、増設後のドライブ数がNの整数倍になる場合、前述のマッピング生成処理により、P3に示す増設後のマッピングパターンは、P2aに示すGoalマッピングパターン1700と完全に一致させることが可能となる。
以下、ストレージコントローラ100の動作の詳細について説明する。
図21は、単体増設処理を示す。
単体増設処理プログラム1101は、ドライブ単位でドライブを増設する場合に単体増設処理を行う。管理者は、システムに対して増設用のドライブを追加した後、DGに対するドライブ単位の増設指示を管理サーバ20へ入力する。ストレージコントローラ100は、その増設指示を管理サーバ20から受領した契機で、単体増設処理を実行する。
まず、単体増設処理プログラム1101は、増設ドライブの中から、任意の一台を対象ドライブとして選択する(ステップ1801)。ここで、ステップ1802〜1804をドライブ増設処理と呼ぶ。例えば、単体増設処理プログラム1101は、増設ドライブのうち、ドライブ増設処理を未実施のドライブから、システム内の物理的なドライブ#が若い順に、対象ドライブを選んでもよい。
次に、単体増設処理プログラム1101は、単体増設マッピング生成処理を実施する(ステップ1802)。単体増設マッピング生成処理については後述する。
次に、単体増設処理プログラム1101は、単体増設パーセルリバランス処理を実施する(ステップ1803)。単体増設パーセルリバランス処理については後述する。
次に、単体増設処理プログラム1101は、対象ドライブに対応するVchunkを仮想ボリュームへ割り当てることを許可する(ステップ1804)。
なお、本図の例では、増設ドライブ全体のパーセルリバランス処理が完了した後に、増設ドライブ全体のデータ割当を許可しているが、単体ドライブ内の一定領域のパーセルリバランスが完了する毎に、当該領域のデータ割当を許可するようにしてもよい。
次に、単体増設処理プログラム1101は、システムに対して追加した全増設ドライブに対してドライブ増設処理が完了しているかを判定する(ステップ1805)。全増設ドライブに対してドライブ増設処理が完了していない場合(ステップ1805でNo)、単体増設処理プログラム1101は、ステップ1801に戻り、次の対象ドライブに対して同様の処理を実施し、全増設ドライブに対してドライブ増設処理が完了している場合(ステップ1805でYes)は、処理を終了する。
図22は、単体増設マッピング生成処理を示す。
単体増設マッピング生成処理プログラム1102は、前述の単体増設処理のステップ1802において、増設後のマッピングパターンを生成する単体増設マッピング生成処理を実行する。
まず、単体増設マッピング生成処理プログラム1102は、増設前の現行マッピングパターン(Current)を、マッピングパターン(Target)にコピーした後、Targetにおける増設ドライブ内のマッピングを生成する(ステップ1901)。本実施例において、周期Vchunk数cはNの整数倍であるため、kを整数としてc=kNとした場合、増設ドライブには、スペア用パーセルを除き、Pchunk周期あたりkN個の物理パーセルが作成される。前述の通り、増設ドライブ内のマッピングパターンを生成した時点では、当該増設ドライブが閉塞するとデータロストが発生してしまうため、当該増設ドライブに対応するVchunkを仮想ボリュームへ割り当てることはできない。
次に、単体増設マッピング生成処理プログラム1102は、Goalマッピングパターン(Goal)を生成する(ステップ1902)。Goalマッピングパターンは、目標となるマッピングパターンであり、ドライブ数=N×{増設後のPG数}の条件で生成されたマッピングパターンである。
次に、単体増設マッピング生成処理プログラム1102は、SWAP後の二つのVchunk識別子の両方がGoalと一致する物理パーセルペア(完全一致ペア)のVchunk識別子をSWAPする完全一致ペアSWAP処理を行う(ステップ1903)。完全一致ペアSWAP処理の詳細は後述する。なお、Vchunk識別子のSWAPとは、マッピング補正テーブル及びマッピング逆補正テーブルの更新処理であり、実際の物理パーセルペアのデータのSWAPは、後述する単体増設パーセルリバランス処理で実施する。
次に、単体増設マッピング生成処理プログラム1102は、一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているか否かの判定を行う(ステップ1904)。一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているドライブが存在しない場合(ステップ1904でNo)、単体増設マッピング生成処理プログラム1102は、処理を終了する。
一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているドライブが1つ以上存在する場合(ステップ1904でYes)、単体増設マッピング生成処理プログラム1102は、SWAP後の二つのVchunk識別子の一方がGoalと一致する物理パーセルペア(部分一致ペア)のVchunk識別子をSWAPする部分一致ペアSWAP処理を行う(ステップ1905)。部分一致ペアSWAP処理の詳細は後述する。
次に、単体増設マッピング生成処理プログラム1102は、一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているか否かの判定を行う(ステップ1906)。一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているドライブが存在しない場合(ステップ1906でNo)、単体増設マッピング生成処理プログラム1102は、処理を終了する。
一つのドライブ内の複数の物理パーセルが同一Vchunkに割り当てられているドライブが1つ以上存在する場合(ステップ1906でYes)、単体増設マッピング生成処理プログラム1102は、SWAP後の二つのVchunk識別子の両方がGoalと一致しない物理パーセルペア(不一致ペア)のVchunk識別子をSWAPする不一致ペアSWAP処理を行う(ステップ1907)。不一致ペアSWAP処理の詳細は後述する。
図23は、完全一致ペアSWAP処理を示す。
完全一致ペアSWAP処理プログラム1103は、前述の単体増設マッピング生成処理のステップ1903において、完全一致ペアSWAP処理を行う。
まず、完全一致ペアSWAP処理プログラム1103は、第1物理パーセルを選択する(ステップ2001)。第1物理パーセルを選択する方法は、例えば対象DG内で、PPG#、PCDEV#、Pcycle#の若い物理パーセルから順に選択する。以下では、第1物理パーセルを、(PPG#,PCDEV#,Pcycle#)=(a0,b0,c0)と置く。また、以下では、マッピングパターンXXXのうち(PPG#,PCDEV#,Pcycle#)=(A,B,C)の物理パーセルに対応するVchunk識別子を、XXX(A,B,C)と呼ぶ(例えばTarget(a0,b0,c0))。
次に、完全一致ペアSWAP処理プログラム1103は、ステップ2001で選択した第1物理パーセルと対象ペアを成す物理パーセルである第2物理パーセルを選択する(ステップ2002)。第2物理パーセルを選択する方法は、例えば対象DG内で、ステップ2001で選択した第1物理パーセルを除き、PPG#、PCDEV#、Pcycle#の若い物理パーセルから順に選択する。以下では、第2物理パーセルを、(PPG#,PCDEV#,Pcycle#)=(a1,b1,c1)と置く。
次に、完全一致ペアSWAP処理プログラム1103は、Targetから、Target(a0,b0,c0)であるVt0と、Target(a1,b1,c1)であるVt1とを取得し、Goalから、Goal(a0,b0,c0)であるVg0と、及びGoal(a1,b1,c1)であるVg1とを取得する(ステップ2003)。
次に、完全一致ペアSWAP処理プログラム1103は、Vt0とVt1が一致しているか否かを判定する(ステップ2004)。Vt0とVg1が一致している場合(ステップ2004でNo)、対象ペアをSWAPしてもマッピングパターン上は何も変更がないため、完全一致ペアSWAP処理プログラム1103は、ステップ2002に戻り、第2物理パーセルを再選択する。
次に、完全一致ペアSWAP処理プログラム1103は、Vt0とVg1が一致し、かつVt1とVg0が一致しているか否かを判定する(ステップ2005)。Vt0とVg1が一致することと、Vt1とVg0が一致することとの少なくとも何れかが成立しない場合(ステップ2005でNo)、対象ペアが完全一致ペアでないため、完全一致ペアSWAP処理プログラム1103は、ステップ2002に戻り、第2物理パーセルを再選択する。
Vt0とVg1が一致し、かつVt1とVg0が一致している場合(ステップ2005でYes)、完全一致ペアSWAP処理プログラム1103は、Vchunk重複判定を行う(ステップ2006)。あるドライブ内の複数の物理パーセルが同一Vchunkに対応する場合、当該Vchunkの冗長度が低下してしまうため、ストレージコントローラ100は、Vchunk識別子のSWAPを行う際、SWAP後の一つのドライブに対応するVchunk識別子が重複しないようにする。言い換えれば、Vchunk重複判定において、完全一致ペアSWAP処理プログラム1103は、マッピング条件を満たす場合、あるドライブ内の複数の物理パーセルが同一Vchunkに対応しないと判定する。
具体的には、Targetにて、Target(a0,b0,*)の全てがVg1と不一致であり、かつTarget(a1,b1,*)の全てがVg0と不一致であるか否かを判定する。Target(a0,b0,*)は、PPG#がa0で、PCDEV#がB0である、全Pcycle#に対応するVchunk識別子を示す。Target(a0,b0,*)の何れかがVg1と一致することと、かつTarget(a1,b1,*)の何れかがVg0と一致することとの何れかが成立した場合(ステップ2006でNo)、完全一致ペアSWAP処理プログラム1103は、ステップ2002に戻り、第2物理パーセルを再選択する。
Target(a0,b0,*)の全てがVg1と不一致であり、かつTarget(a1,b1,*)の全てがVg0と不一致である場合、完全一致ペアSWAP処理プログラム1103は、Target(a0,b0,c0)とTarget(a1,b1,c1)をSWAPする(ステップ2007)。具体的には、完全一致ペアSWAP処理プログラム1103は、マッピング補正テーブル1005及びマッピング逆補正テーブル1006において、Index#が(a0,b0,c0)であるエントリにおけるValueを(a1,b1,c1)に設定し、Index#が(a1,b1,c1)であるエントリにおけるValueを(a0,b0,c0)に設定する。更に、完全一致ペアSWAP処理プログラム1103は、マッピング補正テーブル1005において、第1物理パーセルのエントリのSWAPフラグをONに設定する。
次に、完全一致ペアSWAP処理プログラム1103は、対象DG内の全物理パーセルに対してステップ2001〜ステップ2007の処理を実施済みかの判定を行う(ステップ2008)。当該処理を未実施の物理パーセルが存在する場合(ステップ2008でNo)、完全一致ペアSWAP処理プログラム1103は、ステップ2001に戻り、次の第1物理パーセルを選択し、処理を継続する。未実施の物理パーセルが存在しない場合(ステップ2008でYes)、完全一致ペアSWAP処理プログラム1103は、処理を終了する。
図24は、部分一致ペアSWAP処理を示す。
部分一致ペアSWAP処理プログラム1104は、前述の単体増設マッピング生成処理のステップ1905において、部分一致ペアSWAP処理を行う。
部分一致ペアSWAP処理におけるステップ2101〜ステップ2104は、完全一致ペアSWAP処理におけるステップ2001〜ステップ2004とそれぞれ同様であるため、説明を省略する。
ステップ2104でYESと判定された場合、部分一致ペアSWAP処理プログラム1104は、Vt0とVg0が不一致であり、かつVt1とVg1が不一致であるかを判定する(ステップ2105)。Vt0とVg0が一致していることと、Vt1とVg1が一致していることとの少なくとも何れかが成立する場合(ステップ2105でNo)、少なくとも一方の物理パーセルのTargetとGoalが一致していることになるため、対象ペアは、SWAP不要であり、部分一致ペアSWAP処理プログラム1104は、ステップ2102に戻り、第2物理パーセルを再選択する。
Vt0とVg0が不一致であり、かつVt1とVg1が不一致である場合(ステップ2105でYes)、部分一致ペアSWAP処理プログラム1104は、Vt0とVg1が一致している、またはVt1とVg0が一致しているかを判定する(ステップ2106)。なお、Vt0とVg1が一致している、かつVt1とVg0が一致しているペアは、すでに完全一致ペアSWAP処理にてSWAP済みであるため、ステップ2106の時点では存在しない。
Vt0とVg1が不一致で、かつVt1とVg0が不一致である場合(ステップ2106でNo)、対象ペアが部分一致ペアでないため、部分一致ペアSWAP処理プログラム1104は、ステップ2102に戻り、SWAPペアパーセルを再選択する。
Vt0とVg1が一致する、またはVt1とVg0が一致する場合(ステップ2106でYes)、部分一致ペアSWAP処理プログラム1104は、以降のステップ2107〜ステップ2109の処理を実施する。これらの処理は、完全一致ペアSWAP処理におけるステップ2006〜ステップ2008とそれぞれ同様であるため、説明を省略する。
図25は、不一致ペアSWAP処理を示す。
不一致ペアSWAP処理プログラム1105は、前述の単体増設マッピング生成処理のステップ1907において、不一致ペアSWAP処理を行う。
不一致ペアSWAP処理におけるステップ2201〜ステップ2208は、完全一致ペアSWAP処理におけるステップ2001〜ステップ2005及びステップ2006、ステップ2007とそれぞれ同様であるため、説明を省略する。
次に、不一致ペアSWAP処理プログラム1105は、一つのドライブ内の複数の物理パーセルに同一Vchunk識別子が割り当てられているか否かの判定を行う(ステップ2208)。一つのドライブ内の複数の物理パーセルに同一Vchunk識別子が割り当てられているドライブが1つ以上存在する場合(ステップ2208でYes)、不一致ペアSWAP処理プログラム1105は、ステップ2201に戻り、この状態がなくなるまで繰り返す。一つのドライブ内の複数の物理パーセルに同一Vchunk識別子が割り当てられているドライブが存在しない場合(ステップ2208でNo)、不一致ペアSWAP処理プログラム1105は、処理を終了する。
以上の単体増設マッピング生成処理によれば、ストレージコントローラ100は、完全一致ペアSWAP処理、部分一致ペアSWAP処理、不一致ペアSWAP処理を行うことにより、マッピング条件を満たし、且つGoalマッピングパターンに近いTargetを作成することができ、GoalマッピングパターンとTargetの間の差分を表すマッピング補正テーブル1005及びマッピング逆補正テーブル1006を作成することができる。
なお、完全一致ペアSWAP処理、部分一致ペアSWAP処理、不一致ペアSWAP処理において、ストレージコントローラ100は、物理パーセルを順次選択する代わりに、仮想チャンクや仮想パーセルを順次選択してもよい。
図26は、単体増設パーセルリバランス処理を示す。
単体増設パーセルリバランス処理プログラム1106は、前述の単位増設処理のS1805において、単体増設パーセルリバランス処理を行う。単体増設パーセルリバランス処理は、後述のデータSWAP処理を実行することで、現行マッピングパターン(Current)で示されたデータの配置を、目標マッピングパターン(Target)で示されたデータの配置に変更する。
まず、単体増設パーセルリバランス処理プログラム1106は、増設対象のDG内の一つの物理パーセルを対象物理パーセルとして順次選択する(ステップ2301)。例えば、単体増設パーセルリバランス処理プログラム1106は、DG内の全ドライブ内の物理パーセルのうち、システム内の物理ドライブ#、Pcycle#が若いものから順に、データSWAP処理が未実施である物理パーセルを、対象物理パーセルとして選べばよい。
次に、単体増設パーセルリバランス処理プログラム1106は、対象物理パーセルがSWAP対象であるかを判定する(ステップ2302)。具体的には、マッピング補正テーブル1005を参照し、Index#が対象物理パーセルであるエントリのSWAPフラグを参照し、これがONであるかを判定する。対象物理パーセルのSWAPフラグがONである場合、対象物理パーセルがSWAP対象であることを意味する。この場合、対象物理パーセルと、そのエントリのValueに示されたSWAP先物理パーセルとのペアをSWAP対象ペアとする。対象物理パーセルがSWAP対象であると判定された場合(ステップ2302でYes)、単体増設パーセルリバランス処理プログラム1106は、SWAP対象ペアが割り当てられている二つのVchunkを対象Vchunkペアとして選択し、対象Vchunkペア内の仮想ストライプを対象ストライプペアとして順に選択する(ステップ2303)。
次に、単体増設パーセルリバランス処理プログラム1106は、対象ストライプペアに対するデータSWAP処理を実施する(ステップ2304)。データSWAP処理は、特許文献1に示されている処理と同様である。データSWAP処理は、対象ストライプペアの少なくとも一つが有効データを格納している場合、対象ストライプペアの間でデータを入れ替える。例えば、データSWAP処理は、対象ストライプペアの少なくとも一つの仮想ストライプがVVOLページに割り当てられている場合、Currentにおいて当該仮想ストライプに対応する物理ストライプから、当該VVOLページに対応する対象キャッシュスロットへデータをステージングし、対象キャッシュスロットのデステージ(CM131からドライブ170への書き込み)を抑止し、対象キャッシュスロットをダーティに設定する。データSWAP処理後にデステージ抑止を解除されると、対象キャッシュスロットに格納されたデータは、非同期で、Targetにおいて当該仮想ストライプに対応する物理ストライプへデステージされる。
次に、単体増設パーセルリバランス処理プログラム1106は、対象物理パーセル内に、データSWAP処理が行われていないストライプ(未SWAP領域)が存在するかを判定する(ステップ2305)。未SWAP領域が存在する場合(ステップ2305でNo)、単体増設パーセルリバランス処理プログラム1106は、ステップ2303に戻り、対象物理パーセル内の次の物理ストライプに対して同様の処理を実施する。
未SWAP領域が存在しないと判定された場合(ステップ2305でYes)、または対象物理パーセルがSWAP対象でないと判定された場合(ステップ2302でNo)、単体増設パーセルリバランス処理プログラム1106は、SWAPポインタテーブル1004内の対象DGの単体増設用SWAPポインタ1308を次の物理パーセルに更新する(ステップ2306)。
なお、当該SWAPポインタは、対象物理パーセルのSWAPが完了した段階で更新されてもよいし、一定領域のSWAPが完了した段階で更新されてもよい。
次に単体増設パーセルリバランス処理プログラム1106は、マッピング補正テーブル1005においてIndex#が対象物理パーセルであるエントリのSWAPフラグをOFFに設定する(2307)。
次に、単体増設パーセルリバランス処理プログラム1106は、ステップ2304でデステージ抑止を施されていた対象キャッシュスロットのデステージ抑止を解除する(ステップ2308)。
次に、単体増設パーセルリバランス処理プログラム1106は、増設対象のDG内の全物理パーセルを対象物理パーセルとして選択したか否かを判定する(ステップ2309)。未選択である物理パーセルが存在する場合(ステップ2309でNo)、単体増設パーセルリバランス処理プログラム1106は、ステップ2301に戻って、次の対象物理パーセルを選択する。
なお、SWAP対象物理パーセルは、I/O処理等に応じて任意に決定してもよい。データSWAP処理を実施していない領域に対しては、通常、データ割当を行うことはできないが、例えばホストからWrite要求を受けた領域に対応する物理パーセルのデータSWAP処理を優先的に行うことで増設領域に対して即時データ割当可能としてもよい。
この場合、対象領域のデータSWAP処理中は、キャッシュメモリ上にダーティデータとして当該Writeデータを保持しておき、対象領域のデータSWAP処理が完了した時点でドライブに対するデステージを許可すればよい。
未選択である物理パーセルが存在しない場合(ステップ2309でYes)、単体増設パーセルリバランス処理プログラム1106は、CurrentをTargetに置き換え(ステップ2310)、処理を終了する。
以上の単体増設パーセルリバランス処理によれば、ストレージコントローラ100は、SWAP対象の物理パーセルに対応するVchunkに有効データが格納されている場合、Currentに基づいて、当該Vchunkに対応する物理パーセルから有効データを読み出し、Targetに基づいて、当該Vchunkに対応する物理パーセルへ有効データを書き込む。これにより、ストレージコントローラ100は、CurrentからTargetへのマッピングパターンの変更に合わせて、データを移動させることができる。
図27は、ページ割当処理の概念を示す。
この図は、VVOL数=4、c=4、N=4、PG=3、ドライブ数=9の例を示している。即ち、ドライブ数は、Nの倍数ではない。VVOL201内のVVOLページ202には、VPG204のVPGページ203が割り当てられる。この図の例では、Vchunkあたり2個のVVOLページ202を割り当てているが、一つのVchunkあたりのVVOLページ割当数は、システムで定義されているページサイズと、パーセルのサイズによって可変である。
この図の例において、VPG#2は、PPG内ドライブ数がNではないPPGに対応するため、ページ割当が不可能なVchunkを含む。この図の例では、VPG#2のVchunk#1〜#3、及び#5〜#7内のVPGページをVVOLページに割り当てることはできない。一方、VPG#2のVchunk#0、#4内のVPGページはVVOLページに割り当てることができる。
図28は、ページ割当処理を示す。
ページ割当処理プログラム1107は、ホスト10からのライト処理の一環として、ライトの対象VVOLページにVPGページが未割当であった場合に、ページ割当処理を実行する。
ページ割当処理プログラム1107は、ページマッピングテーブル1003に基づいて、対象VVOLページにVPGページが割当済か未割当かの判定を行う。対象VVOLページにVPGページが未割当である場合、ページマッピングテーブル1003のVPG#1303フィールドに、“未割当”、または“Not−Allocate”などの情報が格納されているため、ページ割当処理プログラム1107は、対象ページが未割当かどうかを判定できる。システムの初期状態(仮想ボリューム201に対して一度もホストI/Oが実行されていない状態)では、その仮想ボリューム201内の全てのページが“未割当(Not−Allocate)”である。
まず、ページ割当処理プログラム1107は、対象DG#を取得する(ステップ2501)。対象DGを選ぶ方法は、例えば、対象プール200の高Tier(性能が高い)順に、空きページがあるかを判定し、空きページのあるTier206について、最もページの使用率が少ないDG207を、対象DGとして選択する、又は、単位時間あたりで最もI/O負荷の低いDG207や、利用率の最も低いDG207や、空き容量の最も多いDG207を、対象DGとして選択する。
DG207を選択した後、ページ割当処理プログラム1107は、対象VPG#を取得する(ステップ2502)。対象VPGを選ぶ方法は、例えば利用率の最も低いVPGを、対象VPGとして選択する、又は、VVOL毎に、割当優先度をVPGに設定し、割当優先度が最も高いVPGを、対象VPGとして選択する。
次に、ページ割当処理プログラム1107は、プール管理テーブル1001を参照することにより、対象VPGが対象DG内に実装されているか否かを判定する(ステップ2503)。
対象VPGが対象DG内に実装されていない場合(ステップ2503でNO)、ページ割当処理プログラム1107は、ステップ2502に戻り、異なる対象VPG#を選択して、再度ステップ2503の判定を実施する。
対象VPGが対象DG内に実装されている場合(ステップ2503でYES)、ページ割当処理プログラム1107は、対象VPGに空きページが存在するかどうかの判定を行う(ステップ2504)。ここでページ割当処理プログラム1107は、ページマッピングテーブル1003を参照し、対象VPGに未割当のVPGページ1304が存在するかを判定する。
空きページが存在しない場合(ステップ2504でNO)、ページ割当処理プログラム1107は、ステップ2502に戻り、異なる対象VPG#を選択して、再度ステップ2503、及びステップ2504の判定を実施する。空きページが存在する場合(ステップ2504でYES)、ページ割当処理プログラム1107は、対象VPG内から対象VPGページを選択する(ステップ2505)。対象VPGページを選ぶ方法は、例えば対象VPG内の空きページのうち、最もVPGページ#の若いページを、対象VPGページとして選択する。
ページ割当処理プログラム1107は、以上の処理を対象DG内の全VPGに対して実行しても対象VPGページを選択できなかった場合(ステップ2506でNO)、ページ割当処理の指示元に割当不可を応答(ステップ2508)し、処理を終了する。
対象VPGページを選択できた場合(ステップ2506でYES)、対象VPGページをVVOLページに割り当てるために、ページ割当処理プログラム1107は、ページマッピングテーブル内の対象VVOLページのエントリに対象VPGページを登録し(ステップ2507)処理を終了する。
以上のページ割当処理によれば、ストレージコントローラ100は、必要なVPGページをVVOLページへ割り当てることで、VPG空間を効率的に利用することができる。また、ホストアクセスのデータの単位と、分散RAIDの単位とを一致させる必要がないため、ホストアクセスと分散RAIDのそれぞれを効率よく行うことができる。
なお、ストレージコントローラ100は、VVOL空間の代わりにVPG空間をホスト10へ提供してもよい。この場合、ストレージコントローラ100は、ページマッピングテーブルを用いなくてもよい。
図29は、LP変換処理を示す。
LP(Logical−Physical)変換処理は、LP変換処理プログラム1108により実行される。LP変換は、論理記憶領域のアドレスから物理記憶領域のアドレスへの変換処理である。LP変換処理は、ホスト10からI/O要求を受領した場合のページ変換処理などから呼び出される。ページ変換処理は、I/O要求により指定された仮想ボリューム内のアドレスを、VPG空間のアドレスに変換する。LP変換処理は、指定された仮想的なアドレスであるVPG空間のアドレス(VPG#、VCDEV#、Vchunk#)を、物理的なデータの格納先であるPPG空間のアドレス(PPG#、PCDEV#、Pchunk#)に変換する。ここでは、指定されたVPG空間のアドレスで示される領域を対象論理記憶領域と呼び、変換後のPPG空間のアドレスで示される領域を対象物理記憶領域と呼ぶ。
まず、LP変換処理プログラム1108は、Vchunk#から、Vcycle#を算出する(ステップ2601)。Vcycle#は、Vcycle# = Vchunk# mod cで算出できる。
次に、LP変換処理プログラム1108は、VP(Virtual−Physical)変換処理を実行する(ステップ2602)。VP変換処理は、例えば特許文献1に示された方法を用いる。例えばVP変換処理において、LP変換処理プログラム1108は、Goalマッピングパターン(VCDEVマッピングテーブル1007、及びVcycleマッピングテーブル1008)を参照することにより、当該VPG#、VCDEV#、Vcycle#に対応するレギュラーPPG空間アドレスを算出する。レギュラーPPG空間アドレスは、DG内のドライブ数がNの整数倍であり、かつ何れのドライブも故障していない場合の、VPG#、VCDEV#、Vcycle#に対応するPPG#、PCDEV#、Pcycle#であり、マッピング補正テーブル1005による補正前のPPG空間アドレスである。
次に、LP変換処理プログラム1108は、マッピング補正テーブル1005を参照し、ステップ2602で算出したPPG#、PCDEV#、Pcycle#を補正する(ステップ2603)。マッピング補正処理の詳細については後述する。
次に、LP変換処理プログラム1108は、ドライブ状態管理テーブル1002を参照し、対象ドライブ、即ちステップ2603で算出したPPG#及びPCDEV#に対応するドライブの状態1207を取得する(ステップ2604)。LP変換処理プログラム1108は、対象ドライブの状態1207が“アクセス不可“となっているかどうかを判定する(ステップ2605)。
対象ドライブの状態1207が“アクセス不可“となっている場合(ステップ2605でYES)、当該データはスペア領域に退避されている。したがって、LP変換処理プログラム1108は、スペア先のアドレスを算出する。この場合、LP変換処理プログラム1108は、仮想スペア管理テーブル1012から、当該PPG#及びPCDEV#に対応するVSD#(仮想スペアドライブ502の識別子)を取得する(ステップ2606)。
次に、LP変換処理プログラム1108は、スペア変換処理を実行する(ステップ2607)。ここでLP変換処理プログラム1108は、スペア変換テーブル1010を参照し、当該Pcycle#及びステップ2606で算出したVSD#から、対応するスペア領域のPPG#、PCDEV#、Pcycle#を取得する。その後、LP変換処理プログラム1108は、当該算出したPPG#、PCDEV#、Pcycle#について、再度ステップ2604を行う。スペア先が更にスペア領域に退避されている場合、LP変換処理プログラム1108は、ステップ2606、2607を繰り返す。
対象ドライブの状態1207が“正常”、即ちアクセス可能である場合(ステップ2605でNO)、レギュラー物理アドレスのPPG#、PCDEV#、Pcycle#はデータの格納先として使用されている。したがって、LP変換処理プログラム1108は、レギュラー物理アドレスからPchunk#を算出(ステップ2608)して処理を終了する。当該Pchunk#は、Pchunk# = Floor(Vchunk#/c)*(c+1)+Pcycle#で算出できる。
なお、スペア用Pchunkがm個(mは1以上の整数)の場合、当該Pchunk#は、Pchunk# = Floor(Vchunk#/c)*(c+m)+Pcycle#で算出できる。
図30は、PL変換処理を示す。
PL(Physical−Logical)変換処理は、PL変換処理プログラム1109により実行される。PL変換は、物理記憶領域から、論理記憶領域への変換処理である。PL変換は、例えば、リビルド処理で故障した物理記憶領域に対応するデータを特定するためなどに用いられる処理である。PL変換は、指定された物理的なデータの格納先であるPPG空間のアドレス(PPG#、PCDEV#、Pchunk#)を、仮想的なアドレスであるVPG空間のアドレス(VPG#、VCDEV#、Vchunk#)に変換する。PL変換は、LP変換の逆変換に相当する。つまり、LP変換を実施した後に、その結果でPL変換を実施すると、同じアドレスが返却されることになる。また、逆も同じである。ここでは、指定されたPPG空間のアドレスで示される領域を対象物理記憶領域と呼び、変換後のVPG空間のアドレスで示される領域を対象論理記憶領域と呼ぶ。
以下では、Pchunk周期505あたりのスペア用Pchunk501b数mを1とした場合の例を示す。
まず、PL変換処理プログラム1109は、Pchunk#から、Pcycle#を算出する(ステップ2701)。Pcycle#は、Pcycle# = Pchunk# mod (c+1)で算出できる。
なお、スペア用Pchunkがm個(mは1以上の整数)の場合、当該Pcycle#は、Pcycle# = Pchunk# mod (c+m)で算出できる。
次に、PL変換処理プログラム1109は、PV(Physical−Virtual)変換処理を実行する(ステップ2702)。PV変換処理は、例えば特許文献1にも示された方法を用いる。例えばPV変換処理においてPL変換処理プログラム1109は、Goalマッピングパターン(Pcycleマッピングテーブル1009、及びVCDEVマッピングテーブル1007)を参照し、当該PPG#、PCDEV#、Pcycle#に対応するレギュラーVPG空間アドレスを算出する。レギュラーVPG空間アドレスは、DG内のドライブ数がNの整数倍であり、かつ何れのドライブも故障していない場合の、PPG#、PCDEV#、Pcycle#に対応するVPG#、VCDEV#、Vcycle#であり、マッピング補正テーブル1005による補正前のVPG空間アドレスである。
次に、PL変換処理プログラム1109は、マッピング逆補正テーブル1006を参照し、入力であるPPG#、PCDEV#、及びステップ2701で算出したPcycle#を補正する(ステップ2703)。マッピング補正処理の詳細については後述する。
次に、PL変換処理プログラム1109は、対象物理記憶領域がスペア領域であるかを判定する(ステップ2705)。ここでPcycle#がゼロである場合、PL変換処理プログラム1109は、対象領域がスペア領域と判定する。
対象物理記憶領域がスペア領域である場合(ステップ2705でYES)、PL変換処理プログラム1109は、スペア逆変換処理を実行する(ステップ2706)。PL変換処理プログラム1109は、スペア逆変換テーブル1011を参照し、当該PPG#、PCDEV#、Pcycle#から、VSD#、及びPcycle#を取得する。
その後、PL変換処理プログラム1109は、仮想スペア管理テーブル1012から、当該VSD#に対応するPPG#、及びPCDEV#を取得する(ステップ2708)。PL変換処理プログラム1109は、当該算出したPPG#、PCDEV#、及びPcycle#について、再度ステップ2702のPV変換処理の判定を行う。当該処理はスペア領域以外の領域が算出されるまで繰り返される。
対象領域がスペア領域ではない場合(ステップ2705でNO)、PL変換処理プログラム1109は、Vchunk#を算出(ステップ2709)して処理を終了する。Vchunk#は、Vchunk#=Floor(Pchunk#/(c+1))*c+Vcycle#−1で算出される。
なお、スペア用Pchunkがm個(mは1以上の整数)の場合、当該Vchunk#は、Vchunk#=Floor(Pchunk#/(c+m))*c+Vcycle#−1で算出される。
図31は、マッピング補正処理を示す。
マッピング補正処理プログラム1110は、前述のLP変換処理のステップ2603においてマッピング補正処理を実行する。マッピング補正処理は、SWAP元である物理記憶領域のアドレスを、SWAP先となる物理記憶領域のアドレスに変換する。
まず、マッピング補正処理プログラム1110は、DG内のドライブ台数を参照し、ドライブ台数がNの整数倍であるかを判定する(ステップ2801)。ドライブ台数がNの整数倍である場合(ステップ2801でYes)、マッピング補正処理は不要であるため、マッピング補正処理プログラム1110は、処理を終了する(入力値をそのまま出力する)。
ドライブ数がNの整数倍ではない場合(ステップ2801でNo)、マッピング補正処理プログラム1110は、マッピング補正テーブル1005を参照し、入力値であるPPG#1400、PCDEV#1401、Pcycle#1402に対応するPPG#1403、PCDEV#1404、Pcycle#1405を算出し、これを出力値とする(ステップ2802)。
以上のマッピング補正処理及びLP変換処理によれば、ストレージコントローラ100は、I/O要求に基づくVPG空間のアドレスを、PPG空間のアドレスへ変換し、PPG空間にアクセスすることができる。また、ストレージコントローラ100は、ドライブ数がNの整数倍である場合、Goalマッピングパターンを用いてアドレス変換を行うことで、最適な負荷分散を行うことができ、ドライブ数がNの整数倍ではない場合、Goalマッピングパターンを、マッピング補正テーブルを用いて補正することで、わずかな補正でアドレス変換を行うことができる。
図32は、マッピング逆補正処理を示す。
マッピング補正処理プログラム1110は、前述のPL変換処理のステップ2703においてマッピング逆補正処理を実行する。マッピング逆補正処理は、SWAP先となる物理記憶領域のアドレスを、SWAP元である物理記憶領域のアドレスに変換する。
まず、マッピング補正処理プログラム1110は、DG内のドライブ台数を参照し、ドライブ台数がNの整数倍であるかを判定する(ステップ2803)。ドライブ台数がNの整数倍である場合(ステップ2803でYes)、マッピング逆補正処理は不要であるため、マッピング補正処理プログラム1110は、処理を終了する(入力値をそのまま出力する)。
ドライブ数がNの整数倍ではない場合(ステップ2803でNo)、マッピング補正処理プログラム1110は、マッピング逆補正テーブル1006を参照し、入力値であるPPG#1407、PCDEV#1408、Pcycle#1409に対応するPPG#1410、PCDEV#1411、Pcycle#1412を算出し、これを出力値とする(ステップ2804)。
以上のマッピング逆補正処理及びPL変換処理によれば、ストレージコントローラ100は、リビルド処理において、障害があるドライブ170のPPG空間のアドレスを、VPG空間のアドレスへ変換し、リビルドに必要なデータを特定することができる。また、ストレージコントローラ100は、ドライブ数がNの整数倍である場合、Goalマッピングパターンを用いてアドレス変換を行うことで、最適な負荷分散を行うことができ、ドライブ数がNの整数倍ではない場合、Goalマッピングパターンを、マッピング補正テーブルを用いて補正することで、わずかな補正でアドレス変換を行うことができる。
なお、本実施例ではドライブ単体の増設方法について説明したが、同様の考え方を用いることにより、ドライブ単体での減設処理を行うこともできる。
減設時には、まず減設対象ドライブに対する新規Writeを禁止した後、減設対象ドライブに格納されているデータを、減設対象以外のドライブに移行する。その後、図19または図20に示す方法を逆に実行することで減設後のマッピングパターンを生成する。減設時のGoalマッピングパターンは、ドライブ数=N×{減設後のPG数}の条件で生成されたマッピングパターンである。
減設後のマッピングパターン生成後は、図26のパーセルリバランス処理を実施し、パーセルリバランス完了後に減設対象ドライブをシステムから抜去する。
本実施例の計算機システムは、分散RAID方式において、ドライブ単位での増設を可能にする。一つのVPGの一つのVchunk周期に含まれるVchunk数cが、一つのPPGに含まれるドライブ数Nの整数倍であることにより、ドライブ単位で増設した場合においても、追加容量分の冗長性を確保することができる。特許文献1には、PG単位で構成されたストレージシステムにおける、VPG−PPG間のマッピング方法が開示されている。本実施例では、PG単位の構成のマッピングパターンを目標マッピングパターンと定義し、目標マッピングパターンに出来るだけ近づくように二つの物理パーセルに関連付けられた仮想パーセルをSWAPする。これにより、Vchunkのデータを複数のドライブにできるだけ分散させることができ、I/O処理やリビルド処理の性能をPG単位の構成の性能に近づけることができる。また、PGより小さい単位でドライブを増設することで、一回の増設のコストを抑えることができる。
用語について説明する。物理記憶デバイスは、物理記憶ドライブ170等に対応する。計算機は、ストレージコントローラ100、ストレージコントローラの機能を有する計算機等に対応する。論理記憶領域は、仮想パーセル、仮想ストライプ等に対応する。物理記憶領域は、物理パーセル、物理ストライプ等に対応する。論理パリティグループは、仮想パリティグループ等に対応する。マッピング情報は、マッピングパターン等に対応する。基準マッピング情報は、Goalマッピングパターン等に対応する。補正マッピング情報は、マッピング補正テーブル及びマッピング逆補正テーブル等に対応する。スペア物理記憶領域は、スペア領域等に対応する。
dは、DG内の物理記憶ドライブ数D等に対応する。nは、仮想パリティグループ内の仮想記憶ドライブ数N、物理パリティグループ内の物理記憶ドライブ数N等に対応する。mは、Pchunk周期内のスペア用Pchunk数m等に対応する。vは、c/N等に対応する。n×vは、Vchunk周期内のVchunk数(周期Vchunk数)c等に対応する。wは、DG内のVchunk周期数、DG内のPchunk周期数等に対応する。rは、増設される物理記憶ドライブ数等に対応する。eは、増設後の仮想記憶デバイス数等に対応する。
以上、本発明の実施例を説明したが、以上の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備えるものに限定されるものではない。ある例の構成の一部を他の例の構成に置き換えることが可能であり、ある例の構成に他の例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。図の構成は説明上必要と考えられるものを示しており、製品上必ずしも全ての構成を示しているとは限らない。