(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
以下、書換回数の上限を有する記憶媒体として、FMPK(Flash Memory Package)を例に取り、図面を参照しながら、一実施例について説明する。
【0011】
なお、以後の説明では、「aaaテーブル」等の表現にて情報を説明することがあるが、これら情報はテーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」等について「aaa情報」と呼ぶことがある。
【0012】
また、各情報の内容を説明する際に、「番号」、「名称」という表現の識別情報が採用されるが、他種の識別情報が使用されて良い。
【0013】
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムは、プロセッサによって実行されることで定められた処理をメモリ及び通信ポート(ネットワークI/F)を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は、監視システム等の計算機が行う処理としてもよい。また、プログラムの一部または全ては、専用ハードウェアによって実現されてもよい。また、各種プログラムは、プログラム配布サーバや、計算機が読み取り可能な記憶媒体によって各計算機にインストールされてもよい。
【0014】
<ストレージシステム>
図1は、ストレージシステムの構成例を示す。
ストレージシステムは、ホスト計算機11と、管理計算機12と、ストレージ装置10とを備える。ホスト計算機11とストレージ装置10とは、例えば、SAN(Storage Area Network)13等の通信ネットワークを通じて接続されている。管理計算機12とストレージ装置10とは、例えば、所定の通信線15を通じて接続されている。
【0015】
ホスト計算機11は、ストレージ装置10に対してライト要求を送信することで、ストレージ装置10にデータをライトする。ホスト計算機11は、ストレージ装置10に対してリード要求を送信することで、ストレージ装置10からデータをリードする。
【0016】
管理計算機12は、ユーザがストレージ装置10を管理及び制御ための装置である。管理計算機12は、キーボード及びマウス等の入力デバイスと、ディスプレイ等の出力デバイスを備えてもよい。
【0017】
ストレージ装置10は、ストレージコントローラ20と、ドライブボックス21とを備える。ドライブボックス21は、複数のFMPK40を備える。ドライブボックス21は、さらに、HDD(Hard Disk Drive)41を備えてもよい。
【0018】
ストレージコントローラ20は、ホストI/F33と、プロセッサ31と、メモリ32と、ドライブI/F34、管理I/F35とを備え、それら要素31〜35は、データ送受信が可能な内部バス36で接続されている。
【0019】
ホストI/F33は、ストレージコントローラ20をSAN13に接続するためのI/Fである。管理I/F35は、ストレージコントローラ20と管理計算機12とを接続するためのI/Fである。
【0020】
プロセッサ31は、コンピュータプログラム(以下「プログラム」という)等を実行する。プロセッサがプログラムを実行することにより、ストレージ装置10の備える様々な機能が実現される。
【0021】
メモリ32は、データを記憶する。メモリ32は、例えば、DRAM(Dynamic Random Access Memory)等で構成される揮発性半導体メモリであってもよいし、フラッシュメモリ等で構成される不揮発性半導体メモリであってもよい。メモリ32に記憶されたプログラム及びデータは、プロセッサ31、ホストI/F33及びドライブI/F34等からアクセスされる。
【0022】
ドライブI/F34は、ストレージコントローラ20と、FMPK40およびHDD41を接続するためのI/Fである。
【0023】
図2は、FMPK40の構成例を示す。
FMPK40は、FMPKコントローラ50と、複数のFMチップ51とを備える。
【0024】
FMPKコントローラ50は、プロセッサ61と、メモリ62と、FMPK I/F63と、FMチップI/F64とを有する。これらの要素61〜64は、データ送受信可能な内部バス65で接続されており、双方向にデータを送受信できる。
【0025】
プロセッサ61は、プログラム等を実行する。プロセッサ61がプログラムを実行することにより、FMPK40の備える様々な機能が実現される。
【0026】
メモリ62は、データを記憶する。メモリは、例えば、DRAM等で構成される揮発性半導体メモリであってもよいし、フラッシュメモリ等で構成される不揮発性半導体メモリであってもよい。メモリ62に記憶されたプログラム及びデータは、プロセッサ61、FMPK I/F63及びFMチップI/F64等からアクセスされる。
【0027】
FMPK I/F63は、FMPK40とストレージコントローラ20とを接続するためのI/Fである。FMチップI/F64は、FMPKコントローラ50(プロセッサ)と、FMチップ51とを接続するためのI/Fである。
【0028】
図3は、FMチップ51の構成例を示す。
FMチップ51は、例えばNAND型のFMチップであり、FMコントローラ70と、複数のブロック71とを有する。そして、ブロック71は、複数のページ72で構成されている。FMチップ51は、その特性上、ページ単位でデータのリードおよびライトを行う必要がある。そして、FMチップ51は、その特性上、ブロック単位でデータの消去を行う必要がある。
【0029】
また、FMチップ51は、ライト済みのページに対してデータをオーバーライトすることができない。したがって、FMPKコントローラ50は、ライト済みのページにオーバーライトする場合には、オーバーライトのデータを未使用のページにライトし、元のライト済みのページへのアクセスを不能とする。アクセス不能となったデータは、そのページの属するブロックが消去処理されるタイミングで消去される。
【0030】
所定の回数ライト及び消去(つまり、書き換え)が実行されたページ(ブロック)には、データを新たにライトすることができなくなる。これは、ページ(ブロック)が寿命に達したことを意味する。したがって、書き換え頻度の高いページ(ブロック)は寿命が短い。そこで、FMPK40全体で、各ページ(ブロック)の書き換え頻度を平準化することにより、特定のページ(ブロック)だけが早く寿命に達することを防ぐことができる。
【0031】
そしてさらに、本実施例に示すように、不使用容量として確保する余剰容量を大きくすれば、各ページ(ブロック)の書き換え頻度はさらに低くなる。つまり、FMPK40全体の寿命を長くすることができるのである。
【0032】
<概要>
次に、本実施例で示す3つのパターンの概要を述べる。
【0033】
図4は、RAIDグループに対して余剰容量を設定した場合の概要図である。
RAIDグループ101は、複数のFMPK40によって構成される。例えば、4つのFMPK40を用いて「3D+1P」のRAID5のRAIDグループ101を構成した場合、そのRAIDグループ101は、3つのFMPK40を合計した記憶容量を提供する(1つのFMPK40の記憶容量はパリティ分となる)。
【0034】
ストレージコントローラ20は、「RAIDグループの総記憶容量=使用可能容量+余剰容量」とし、RAIDグループ101の総記憶容量に対する使用可能容量と余剰容量との割合を設定する。このRAIDグループ101には、この使用可能容量までデータを格納できる。言い換えると、このRAIDグループ101には、この使用可能容量よりも多くのデータを格納することはできない。
【0035】
ここで、余剰容量を大きくすると使用可能容量は小さくなるが、その分、RAIDグループ101を構成するFMPK40の寿命は長くなる。なぜなら、余剰容量を多くすることにより、RAIDグループ101に対して所定回数のライトが実行された場合におけるFMチップ51の1ブロック当たりの書換回数が平均的に減少するからである。
【0036】
反対に、余剰容量を小さくすると使用可能容量は大きくなるが、その分、RAIDグループ101を構成するFMPK40の寿命は短くなる。なぜなら、余剰容量を小さくすることにより、RAIDグループに対して所定回数のライトが実行され場合におけるFMチップ51の1ブロック当たりの書換回数が平均的に増加するからである。
【0037】
したがって、書換頻度が高くなることが想定される場合、余剰容量を大きく設定したRAIDグループ101を構成することにより、FMPK40の寿命を長くすることができる。書換頻度が低いことが想定される場合、余剰容量を小さく設定したRAIDグループ101を構成することにより、大きな使用可能容量を確保することができる。
【0038】
つまり、ストレージコントローラ20は、RAIDグループに基づくボリュームに対する書換回数の総数を増加させる場合(寿命を長くする場合)、使用可能容量と余剰容量との差分が小さくなるように使用可能容量および余剰容量を設定してRAIDグループを構築する。すなわち、ボリューム(使用可能容量)が小さければ、そのボリュームの書換可能回数は増加し、反対に、ボリューム(使用可能容量)が大きければ、そのボリュームの書換可能回数は減少する。
【0039】
ユーザは、RAIDグループ101を構成する際に余剰容量を設定することができる。余剰容量の設定方法は、使用可能容量または余剰容量のサイズを入力させてもよいし、RAIDグループの総記憶容量に対する使用可能容量及び余剰容量の割合(例えば「80%:20%」等)を入力させてもよい。
【0040】
もしくは、ストレージコントローラ20は、ユーザに、このRAIDグループ101の使用目的から書換頻度が「高」または「低」の何れであるかを選択させ、書換頻度「高」が選択された場合は、所定の大きい方の余剰容量が設定され、書換頻度「低」を選択された場合は、所定の小さい方の余剰容量が設定されてもよい。例えば、ストレージコントローラ20は、次に示すようなGUIを表示してもよい。
【0041】
図5は、RAIDグループ101の使用可能容量を設定するGUIの構成例を示す。
ストレージコントローラ20は、RAIDグループ101を構成する際、管理計算機12に
図5に示すようなGUI900を表示する。GUI900は、RAIDグループ101の使用可能容量を入力する入力領域901と、書換回数の増加率を表示する表示領域902とを有する。
【0042】
ストレージコントローラ20は、その入力領域901に入力された使用可能容量に基づいて、書換回数の増加率を算出し、その算出結果を表示領域902に表示する。入力される使用可能容量が小さくなると、書換回数の増加率は大きくなる。反対に、入力される使用可能容量が大きくなると、書換回数の増加率は小さくなる。
【0043】
書換回数の増加率は、例えば、「((RAIDグループの使用可能容量の最大値/入力されたRAIDグループの使用可能容量)−1)×100%」として算出されてもよい。例えば、入力領域901にRAIDグループの使用可能容量の最大値が入力されると、書換回数の増加率の表示領域902に「0%増加」と表示される。例えば、入力領域921にRAIDグループの使用可能容量の最大値の半分の値が入力されると、書換回数の増加率の表示領域902に「100%増加」(つまり、寿命が従来の2倍に延びる)と表示される。なお、上述のGUI900の生成および書換回数の増加率の算出等を、管理計算機12が実行するとしてもよい。
【0044】
これにより、ユーザは、FMPK40の寿命と使用可能容量とのバランスを見ながら、適切なRAIDグループの使用可能容量を設定することができる。
【0045】
図6は、LDEVに対して余剰容量を設定した場合の概要図を示す。
ストレージコントローラ20は、RAIDグループ101によって構成された記憶領域を分割し、複数のLDEV110を構成することができる。例えば、ストレージコントローラ20は、
図6に示すように、「3D+1P」のRAID5のRAIDグループ101によって構成された記憶領域を分割し、2つのLDEV(第1LDEV110、第2LDEV110)を構成する。ストレージコントローラ20は、LDEV110を構成する際、LDEV110の総記憶容量を指定することができる。ストレージコントローラ20は、LDEV110の「使用可能容量」をホスト計算機11に提供する。つまり、ホスト計算機11からは、LDEV110の「使用可能容量」が、LDEVの容量として見える。
【0046】
ストレージコントローラ20は、「LDEVの総記憶容量=使用可能容量+余剰容量」として、LDEV110の総記憶容量に対する使用可能容量と余剰容量との割合を設定する。このLDEV110には、この使用可能容量までデータを格納できる。言い換えると、このLDEV110には、この使用可能容量よりも多くのデータを格納することはできない。
【0047】
ここで、余剰容量を大きくするとLDEV110の使用可能容量は小さくなるが、その分、LDEV110を構成するFMPK40の寿命は長くなる。なぜなら、余剰容量を多くすることにより、LDEV110に対して所定回数のライトが実行された場合におけるFMチップ51の1ブロック当たりの書換回数が減少するからである。
【0048】
反対に、余剰容量を小さくするとLDEV110の使用可能容量は大きくなるが、その分、LDEV110を構成するFMPK40の寿命は短くなる。なぜなら、余剰容量を小さくすることにより、LDEV110に対して所定回数のライトが実行され場合におけるFMチップ51の1ブロック当たりの書換回数が増加するからである。
【0049】
したがって、書換頻度が高くなることが想定されるLDEV110については、余剰容量を大きく設定することにより、FMPK40の寿命を長くすることができる。書換頻度が低いことが想定されるLDEV110については、余剰容量を小さく設定することにより、大きな使用可能容量を確保することができる。ここで、LDEVの書換頻度は、そのLDEVを指定したライト要求の受信頻度(例えば、単位時間当たりのライト要求の受信回数)としてもよい。
【0050】
つまり、ストレージコントローラ20は、LDEV110全体に対する書換回数の総数を増加させる場合(寿命を長くする場合)、そのLDEV110に対する使用可能容量と余剰容量との差分が小さくなるように使用可能容量および余剰容量を設定してLDEVを構築する。
【0051】
ユーザは、LDEV110を構成する際に余剰容量を設定することができる。余剰容量の設定方法は、使用可能容量または余剰容量のサイズを入力させてもよいし、LDEV110の総記憶容量に対する使用可能容量及び余剰容量の割合(例えば「50%:50%」等)を入力させてもよい。
【0052】
もしくは、ユーザに、このLDEV110の使用目的から書換頻度が「高」または「低」の何れであるかを選択させ、書換頻度「高」が選択された場合は、所定の大きい方の余剰容量が設定され、書換頻度「低」が選択された場合は、所定の小さい方の余剰容量が設定されてもよい。
【0053】
また、
図5と同様に、ストレージコントローラ20は、LDEV110の使用可能容量を設定するGUIを管理計算機12に表示させてもよい。
【0054】
図7は、仮想ボリュームに対するライト要求に基づいて余剰容量を設定する場合の概要図である。
仮想ボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、複数の仮想的な記憶領域(仮想チャンク)151で構成されている。ストレージコントローラ20は、
図7に示すように、複数のRAIDグループ(第1RAIDグループ101及び第2RAIDグループ101)の記憶領域をまとめてプール100を構成する。プール100は、複数のチャンクから構成される。チャンクは、プール100に属するRAIDグループの記憶領域の内の使用可能容量の或る部分の領域と対応付けられている。つまり、チャンクは、余剰容量として確保された記憶領域には対応付けられない。
【0055】
ストレージコントローラ20は、例えば、複数の仮想ボリューム(第1仮想ボリューム120a及び第2仮想ボリューム120b)を構成する。ストレージコントローラ20は、仮想ボリューム120に対するライト要求が発生した時に、その仮想ボリューム120におけるライト先の仮想チャンク151に対してプール100からチャンク152を割り当てる。これにより、効率的にRAIDグループの記憶領域を使用することができる。
【0056】
本実施例に係るストレージコントローラ20は、仮想ボリューム120を生成する際に、仮想ボリュームのサイズに加えて、書換頻度を設定することができる。例えば、第1仮想ボリューム120aに対する書換頻度は低いと想定される場合、ストレージコントローラ20は、第1仮想ボリューム120aに対する書換頻度を「低」と設定する。例えば、第2仮想ボリューム120bに対する書換頻度は高いと想定される場合、ストレージコントローラ20は、第2仮想ボリューム120bに対する書換頻度を「高」と設定する。ここで、仮想ボリュームの書換頻度は、その仮想ボリュームを指定したライト要求の受信頻度(例えば、単位時間当たりのライト要求の受信回数)としてもよい。
【0057】
書換頻度「低」の設定された第1仮想ボリューム120aに対するライト要求があった場合、ストレージコントローラ20は、プール100から、そのライト要求に係るライトデータのサイズに基づいて、チャンク1、2、4、5を、第1仮想ボリューム120aの仮想チャンク1、2、4、5に割り当てる。
【0058】
書換頻度「高」の設定された第2仮想ボリューム120bに対するライト要求があった場合、ストレージコントローラ20は、プール100から、そのライト要求に係るライトデータのサイズに基づいて、チャンク3を、第2仮想ボリューム120bの仮想チャンク3に割り当てると共に、そのチャンク3の属する第1RAIDグループ101の余剰容量を増加させる(符号161)。この余剰容量の増加量は、例えば、チャンクのサイズの所定の割合(例えば30%)としてもよい。書換頻度「高」の設定された仮想ボリューム120にチャンクを割り当てた場合の余剰容量の増加量の割合は、RAIDグループ101の構築時、プール100の構築時又は仮想ボリューム120の構築時に、ユーザが設定および変更可能であってもよい。
【0059】
これにより、書換頻度「高」のチャンクが多く属するRAIDグループ101は、その分、余剰容量が大きくなるので、上記
図4の場合と同様、FMPK40の寿命を長くすることができる。
【0060】
<ストレージコントローラの機能>
図8は、ストレージコントローラ20の有する機能およびデータの例を示す。
ストレージコントローラ20は、機能として、ライトI/Oプログラム211と、リードI/Oプログラム212とを有する。これらプログラムは、メモリ32上の所定のプログラム領域201に格納され、プロセッサ31により実行される。
【0061】
ライトI/Oプログラム211は、ホスト計算機11からのライト要求を処理するプログラムである。ライトI/Oプログラム211は、ホスト計算機11からのライト要求に従って、FMPK40又はHDD41にデータをライトする処理を実行する。ライト要求されたデータを「ライトデータ」ということがある。
【0062】
リードI/Oプログラム212は、ホスト計算機11からのリード要求を処理するプログラムである。リードI/Oプログラム212は、ホスト計算機11からのリード要求に従って、FMPK40又はHDD41からデータをリードして、ホスト計算機11に返す処理を実行する。リード要求されたデータを「リードデータ」ということがある。
【0063】
ストレージコントローラ20は、ユーザデータ340を管理する。ユーザデータ340は、メモリ32上の所定のデータキャッシュ領域203に格納される。ユーザデータ340は、ホスト計算機11に使用されるデータであり、具体的には、ライトデータ又はリードデータである。
【0064】
ストレージコントローラ20は、ドライブ管理テーブル220と、プール管理テーブル240と、仮想ボリューム管理テーブル260と、RAIDグループ管理テーブル280と、チャンク管理テーブル300と、ドライブ個別管理テーブル320とを管理する。これらテーブルは、メモリ32上の所定のテーブル領域202に格納される。以下、各テーブルの詳細について説明する。
【0065】
図9は、ドライブ管理テーブル220の構成例を示す。
ドライブ管理テーブル220は、ストレージ装置10の備える各ドライブの情報を有する。ドライブ管理テーブル220は、データ項目として、ドライブ番号221と、ドライブ種別222と、最大容量223と、使用可能容量224とを有する。
【0066】
ドライブ番号221は、ストレージ装置10の備えるドライブを一意に識別可能な情報である。
ドライブ種別222は、ドライブ番号221に対応するドライブの種別を示す情報である。
最大容量223は、ドライブ番号221に対応するドライブが提供可能な最大の論理容量を示す情報である。最大容量223は、基本的に、ドライブの有する記憶媒体の物理的な記憶容量に基づいて、不変的に決定される情報である。
使用可能容量224は、ドライブ番号221に対応するドライブにおいて使用可能な論理容量を示す情報である。使用可能容量は、後述する余剰容量の設定に基づいて変化し得る情報である。
【0067】
例えば、
図9において、ドライブ番号221「3」に対応するドライブは、ドライブ種別222が「FMPK」であり、最大容量223が「1.6TB」であり、使用可能容量224が「1TB」である。
【0068】
図10は、プール管理テーブル240の構成例を示す。
プール管理テーブル240は、プール100の情報を有する。プール100は、RAIDグループ101によって構成される論理的な記憶領域(以下「RAID領域」という)の1以上の集合体として構成される。プール100は、後述する仮想ボリューム120を生成する場合に使用される。したがって、仮想ボリューム120を生成しない場合、プール管理テーブル240は、プール番号241を管理しなくてもよい。
【0069】
プール管理テーブル240は、データ項目として、プール番号241と、RAIDグループ番号242と、RAIDレベル243と、RAID構成244と、ドライブ番号245と、最大容量246と、使用可能容量247とを有する。
【0070】
プール番241号は、プール100を一意に識別可能な情報である。
RAIDグループ番号242は、RAIDグループ101を一意に識別可能な情報である。
RAIDレベル243は、RAIDグループ番号242に対応するRAIDグループのレベルを示す情報である。
RAID構成244は、RAIDグループ番号242に対応するRAIDグループの構成を示す情報である。
ドライブ番号245、最大容量246および使用可能容量247は、上記で説明したとおりの情報である。
【0071】
例えば、
図10において、プール番号241「1」のブール100は、RAIDグループ番号242「1」、「2」、「N」に対応する3つのRAIDグループによって構成されている。そして、RAIDグループ番号242「1」に対応するRAIDグループのRAIDレベル243は「5」であり、RAID構成244は「3D+1P」である。「3D+1P」とは、RAIDグループが、3つのデータ用のドライブの容量と1つのパリティ用のドライブの容量とから構成されていることを示す。また、RAIDグループ番号242「1」に対応するRAIDグループは、ドライブ番号245「1」、「2」、「14」、「15」の4つのドライブから構成されている。
【0072】
図11は、チャンク管理テーブル300の構成例を示す。
チャンク管理テーブル300は、チャンクの情報を有する。チャンクとは、RAID領域の一部の領域を示す。チャンクは、仮想ボリューム120を生成する場合に使用される。
【0073】
チャンク管理テーブル300は、データ項目として、RAIDグループ番号301と、チャンク番号302と、サイズ303と、ステータス304と、書換頻度305とを有する。
【0074】
RAIDグループ番号301は、上記で説明したとおりの情報である。
チャンク番号302は、RAID領域内でチャンクを一意に識別可能な情報である。
サイズ303は、チャンク番号302に対応するチャンクのサイズを示す情報である。
【0075】
ステータス304は、チャンク番号302に対応するチャンクが、仮想ボリューム120に割当済みであるか否かを示す情報である。例えば、仮想ボリューム120に割当済みのチャンクのステータスは「割当済」、仮想ボリューム120に未割当のチャンクのステータスは「未割当」とする。
【0076】
書換頻度305は、チャンク番号302に対応するチャンクが、書換頻度「高」であるか、それとも書換頻度「低」であるかを示す情報である。例えば、書換頻度「高」の仮想ボリューム120に割り当てられたチャンクの書換頻度は「高」、書換頻度「低」の仮想ボリュームに割り当てられたチャンクの書換頻度は「低」とする。
【0077】
例えば、
図11において、RAIDグループ番号301「1」に対応するRAID領域は、チャンク番号302「1」〜「N」のチャンクで構成されている。そして、RAIDグループ番号301「1」のチャンク番号302「1」に対応するチャンクは、サイズ303が「1GB」であり、書換頻度305「高」の仮想ボリューム120に「割当済」(ステータス304)である。また、RAIDグループ番号301「1」のチャンク番号302「2」に対応するチャンクは、書換頻度305「低」の仮想ボリューム120に「割当済」(ステータス304)である。また、RAIDグループ番号301「2」のチャンク番号302「N」に対応するチャンクは、何れの仮想ボリューム120にも「未割当」(ステータス304)である。
【0078】
図12は、仮想ボリューム管理テーブル260の構成例を示す。
仮想ボリューム管理テーブル260は、仮想ボリューム120の情報を有する。仮想ボリューム管理テーブル260は、データ項目として、仮想ボリューム番号261と、プール番号262と、最大仮想容量263と、仮想チャンク番号264と、RAIDグループ番号265と、チャンク番号266と、書換頻度267とを有する。
【0079】
仮想ボリューム番号261は、仮想ボリューム120を一意に識別可能な情報である。
プール番号262は、上記で説明したとおりの情報である。
最大仮想容量263は、仮想ボリューム番号261に対応する仮想ボリューム120に設定された最大容量を示す情報である。
仮想チャンク番号264は、仮想ボリューム番号261に対応する仮想ボリューム120を構成するチャンクを一意に識別可能な情報である。
RAIDグループ番号265、チャンク番号266および書換頻度267は、上記で説明したとおりの情報である。
【0080】
例えば、
図13において、仮想ボリューム番号261「1」に対応する仮想ボリューム120は、プール番号262「1」に対応するプール100に属し、最大仮想容量263が「800GB」であり、仮想チャンク番号264「1」〜「N」のチャンクによって構成されており、書換頻度267「高」が設定されている。そして、仮想ボリューム番号261「1」に対応する仮想ボリューム120を構成する仮想チャンク番号264「1」には、RAIDグループ番号265「1」に対応するRAID領域のチャンク番号266「1」のチャンクが割り当てられている。
【0081】
図13は、ドライブ個別管理テーブル320の構成例を示す。
ドライブ個別管理テーブル320は、ドライブ(例えば、FMPK40)の情報を有する。つまり、ドライブ個別管理テーブル320は、ドライブ毎に構成される。ドライブ個別管理テーブル320は、データ項目として、ドライブ番号321と、最大容量322と、使用可能容量323と、LBA(Logial Block Address)324と、LBA長325と、チャンク番号326とを有する。
【0082】
ドライブ番号321、最大容量322および使用可能容量323は、上記で説明したとおりである。
LBA324は、ドライブ番号321に対応するドライブの記憶領域を構成する論理ブロックの先頭アドレスを示す情報である。
LBA長325は、LBA324に対応する論理ブロックのサイズ(長さ)を示す情報である。
チャンク番号326は、上記で説明したとおりの情報である。
【0083】
例えば、
図13において、ドライブ番号321「3」に対応するドライブは、最大容量322が「1.6TB」であり、使用可能容量323が「1TB」であることを示す。そして、ドライブ番号321「3」に対応するドライブのLBA324「0」から「1GB」分(LBA長325)の領域は、チャンク番号326「1」に対応付けられている。
【0084】
<FMPKの機能>
図14は、FMPK40の有する機能およびデータの例を示す。
【0085】
FMPKコントローラ50は、機能として、ライトI/Oプログラム511と、リードI/Oプログラム512とを有する。これらプログラムは、メモリ62上の所定のプログラム領域501に格納され、プロセッサ61により実行される。
【0086】
ライトI/Oプログラム511は、ストレージコントローラ20から送信されたライトコマンドを処理する。ライトI/Oプログラム511は、ライトコマンドを受信すると、論理物理変換テーブル520を参照して、ライト先のページを特定する。そして、ライトI/Oプログラム511は、ライト先のページを有するFMチップ51にデータをライトする。
【0087】
リードI/Oプログラム512は、ストレージコントローラ20から送信されたリードコマンドを処理する。リードI/Oプログラム512は、リードコマンドを受信すると、論理物理変換テーブル520を参照して、リード先のページを特定する。そして、リードI/Oプログラム512は、リード先のページを有するFMチップ51からデータをリードする。
【0088】
ストレージコントローラ20は、ユーザデータ580を管理する。ユーザデータ580は、メモリ62上の所定のデータキャッシュ領域503に格納される。ユーザデータは、例えば、ライトデータがFMチップ51にライトされる前のキャッシュデータである。ユーザデータは、例えば、FMチップ51からリードされたデータがストレージコントローラ20へ送信される前のキャッシュデータである。
【0089】
FMPKコントローラ50は、論理物理変換テーブル520を管理する、論理物理変換テーブル520は、論理ページと物理的なページとの対応関係の情報を有する。以下、論理物理変換テーブル520についてさらに説明する。
【0090】
図15は、論理物理変換テーブル520の構成例を示す。
論理物理変換テーブル520は、データ項目として、LBA561と、論理ページ番号562と、論理ページサイズ563と、ステータス564と、ブロック番号565と、ページ番号566とを有する。
【0091】
LBA561は、FMPK40の論理ページ562の先頭アドレスを示す情報である。
論理ページ番号562は、LBA561に対応する論理ページを一意に識別可能な情報である。
論理ページサイズ563は、論理ページ番号562に対応する論理ページのサイズを示す情報である。
【0092】
ステータス564は、論理ページ番号562に対応する論理ページのステータスを示す情報である。例えば、RAIDグループ101、LDEV110又はプール100に割り当てられている論理ページのステータス564は「有効」、何れにも割り当てられていない論理ページのステータス564は「無効」となる。また、余剰容量として確保された論理ページのステータス564は「使用不可」となる。
【0093】
ブロック番号565は、論理ページ番号562に対応する物理的なページの属する物理的なブロックを一意に識別可能な情報である。
ページ番号566は、論理ページ番号561に対応する物理的なページを一意に識別可能な情報である。
【0094】
例えば、
図15において、LBA561「8192」〜「16383」に対応する論理ページの論理ページ番号562は「2」であり、その論理ページのサイズ563は「16KB」であり、その論理ページは「有効」(ステータス564)である。そして、その論理ページはページ番号566「2」の物理的なページと対応付けられており、その物理的なページはブロック番号565「2」のブロックに属する。
【0095】
<RAIDグループに余剰容量を設定する処理>
本処理は、
図4に示すRAIDグループに余剰容量を設定した場合に対応する。
図16は、RAIDグループ作成処理の一例を示すフローチャートである。
【0096】
ストレージコントローラ20は、管理計算機12から、RAIDグループ作成要求を受信する(S101)。
【0097】
ストレージコントローラ20は、FMPK40の最大容量を用いて、RAIDグループの最大容量(以下「RAID最大容量」という)を算出する(S102)。
【0098】
ストレージコントローラ20は、管理計算機12に対して、RAID最大容量を提示する(S103)。ストレージコントローラ20は、RAID最大容量を含むGUIを生成し、管理計算機12に提示してもよい。
【0099】
ストレージコントローラ20は、管理計算機12から、ユーザの入力したRAIDグループの使用可能容量(以下「RAID使用可能容量」という)を受信する(S104)。
【0100】
ストレージコントローラ20は、その入力されたRAID使用可能容量(V)と、RAID最大容量(Vmax)とを比較する(S105)。
【0101】
「RAID使用可能容量(V)>RAID最大容量(Vmax)」の場合(S105:V>Vmax)、ストレージコントローラ20は、管理計算機12に対してエラーを通知し(S120)、当該処理を終了する(END)。
【0102】
「RAID使用可能容量(V)=RAID最大容量(Vmax)」の場合(S105:V=Vmax)、ストレージコントローラ20は、後述のステップS110へ進む。
【0103】
「RAID使用可能容量(V)<RAID最大容量(Vmax)」の場合(S105:V<Vmax)、ストレージコントローラ20は、「書換回数の増加率」を含むGUIを生成し、管理計算機12に通知する(S106)。
【0104】
ストレージコントローラ20は、RAID使用可能容量から、各FMPK40の使用可能容量を算出する。そして、ストレージコントローラ20は、各FMPK40に対して使用可能容量を設定する設定コマンドを送信する(S107)。例えば、RAID使用可能容量がRAID最大容量の80%に設定された場合、ストレージコントローラ20は、FMPK40の最大容量の80%を使用可能容量と設定する旨を含む設定コマンドを生成し、その設定コマンドを各FMPK40に送信する。
【0105】
FMPKコントローラ50は、その設定コマンドに含まれる使用可能容量に対応する論理物理変換テーブル520を生成する(S108)。つまり、FMPKコントローラ50は、論理物理変換テーブル520の使用可能容量に対応するLBAのステータスを「無効」から「有効」に設定する。さらに、FMPKコントローラ50は、論理物理変換テーブル520の余剰容量に対するLBAのステータスを「使用不可」に設定する。ここで、FMPKコントローラ50は、LBAの大きい方から小さい方へステータスを「使用不可」に設定してもよい。
【0106】
FMPK40は、ストレージコントローラ20に対して、使用可能容量の設定完了を通知する(S109)。
【0107】
ストレージコントローラ20は、各FMPK40からの設定完了の通知を受けて、RAID使用可能容量を設定し(S110)、当該処理を終了する(END)。
【0108】
上記の処理において、FMPK40に送信される設定コマンドには、使用可能容量と余剰容量との割合が含まれてもよいし、FMPK40に確保する使用可能容量のサイズが含まれてもよいし、FMPK40に設定する余剰容量のサイズが含まれてもよい。
【0109】
<LDEVに余剰容量を設定する処理>
本処理は、
図6に示すLDEVに余剰容量を設定した場合に対応する。
図17は、LDEVの作成に関する処理例を示すフローチャートである。
【0110】
ストレージコントローラ20は、管理計算機12から、LDEV作成要求を受信する(S201)。
【0111】
ストレージコントローラ20は、管理計算機12から、LDEVの容量および書換頻度の設定情報を受信する(S202)。書換頻度には、「高」又は「低」の何れかが設定される。
【0112】
ストレージコントローラ20は、各FMPK40に対して、先頭LBA、LBA長および書換頻度を含む設定コマンドを送信する(S203)。
【0113】
その設定コマンドを受信したFMPK40は、先頭LBAおよびLBA長から、使用容量を算出し、使用容量に対応する論理物理変換テーブル520を生成する(S204)。つまり、FMPK40は、論理物理変換テーブル520の使用可能容量に対応するLBAのステータスを「無効」から「有効」にする。
【0114】
FMPK40は、書換頻度が「高」又は「低」の何れであるかを判断する(S205)。
【0115】
書換頻度が「高」の場合(S205:書換頻度「低」)、FMPK40は、後述する第1余剰設定処理を実行し(S220)、ステップS208へ進む。
【0116】
書換頻度が「低」の場合(S205:書換頻度「高」)、FMPK40は、使用可能容量を算出および設定する(S206)。
【0117】
FMPK40は、ストレージコントローラ20に対して、使用可能容量に設定した領域の先頭LBA及びLBA長を通知する(S207)。
【0118】
ストレージコントローラ20は、FMPK40に対応するドライブ個別管理テーブル320の使用可能容量と、FMPK40から通知された使用可能容量との差分を算出する(S208)。
【0119】
差分がない場合(S209:なし)、ストレージコントローラ20は、当該処理を終了する(END)。
【0120】
差分がある場合(S209:あり)、ストレージコントローラ20は、そのドライブ個別管理テーブル320の使用可能容量を、FMPK40から通知された使用可能容量に修正する(S210)。
【0121】
ストレージコントローラ20は、FMPK40から通知された先頭LBAおよびLBA長に従って、ドライブ個別管理テーブル320のチャンク番号の一部を「使用不可」に更新し(S211)、当該処理を終了する(END)。
【0122】
上記の処理において、FMPK40に送信される設定コマンドには、使用可能容量と余剰容量との割合が含まれてもよいし、FMPK40に確保する使用可能容量のサイズが含まれてもよいし、FMPK40に設定する余剰容量のサイズが含まれてもよい。
【0123】
図18は、
図17の第1余剰容量設定処理の詳細を示すフローチャートである。
FMPKコントローラ50は、必要な余剰容量を確保可能であるか否かを判定する(S231)。書換頻度「高」の場合に必要な余剰容量は、FMPK40に確保する使用可能容量の所定の割合(例えば30%)としてもよいし、ストレージコントローラ20から指定されてもよい。
【0124】
必要な余剰容量を確保不可能な場合(S231:NO)、FMPKコントローラ50は、ストレージコントローラ20に対して、余剰容量を確保できないため、LDEV作成が不可能である旨のエラーを通知する(S241)。そのエラー通知を受けたストレージコントローラ20は、管理計算機12に対して、LDEV作成が失敗した旨のエラーを通知し(S242)、当該処理を終了する(END)。
【0125】
必要な余剰容量を確保可能な場合(S231:YES)、FMPKコントローラ50は、論理物理変換テーブル520において、余剰容量として確保するLBAのステータスを「使用不可」に設定する(S232)。ここで、FMPKコントローラ50は、LBAの大きい方から小さい方へステータスを「使用不可」に設定してもよい。
【0126】
FMPKコントローラ50は、使用可能容量を算出する(S233)。そして、FMPKコントローラ50は、ストレージコントローラ20に対して、使用可能容量に設定した領域の先頭LBA及びLBA長と、余剰容量に設定した領域の先頭LBA及びLBA長とを通知し(S234)、
図17のステップS208へ進む(戻る)。
【0127】
<仮想ボリュームに対するライト時に余剰容量を設定する処理>
本処理は、
図7に示す仮想ボリュームに対するライト要求に基づいて余剰容量を設定する場合に対応する。
図19は、仮想ボリューム作成処理の一例を示すフローチャートである。
【0128】
ストレージコントローラ20は、管理計算機12から、仮想ボリューム作成要求を受信する(S301)。
ストレージコントローラ20は、仮想ボリュームの容量および書換頻度の設定情報を受信する(S302)。
ストレージコントローラ20は、仮想ボリューム管理テーブル260に、新たに仮想ボリュームを登録し(S303)、当該処理を終了する(END)。
【0129】
図20は、仮想ボリュームライト処理の一例を示すフローチャートである。
ストレージコントローラ20は、ホスト計算機11から仮想ボリュームに対するライト要求を受けると、先頭LBA、LBA長および書換頻度を含むチャンク割当コマンドを生成し、FMPK40へ送信する(S311)。ここで、書換頻度は、ライト要求を受けた仮想ボリュームの設定に対応する。
【0130】
FMPKコントローラ50は、先頭LBAおよびLBA長から、必要なチャンクを算出し、そのチャンクを論理物理変換テーブル520に確保する(S312)。
【0131】
FMPKコントローラ50は、論理物理変換テーブル520において、その確保したLBAのステータスを「無効」から「有効」に変更する(S313)。
【0132】
FMPKコントローラ50は、そのチャンクの書換属性が「高」又は「低」の何れであるかを判定する(S314)。
【0133】
書換頻度が「高」の場合、後述する第2余剰容量設定処理を実行する(S331)。そして、ストレージコントローラ20は、FMPK40からエラーが通知されたか否かを判定する(S332)。成功が通知された場合(S332:NO)、ストレージコントローラ20は、ステップS317へ進む。エラーが通知された場合(S332:YES)、ストレージコントローラ20は、同じプール100内の別のRAIDグループを選択し(S333)、ステップS311へ戻る。別のRAIDグループに余剰容量を確保できる可能性があるからである。
【0134】
書換頻度が「低」の場合、FMPKコントローラ50は、使用可能容量を算出する。そして、FMPKコントローラ50は、ストレージコントローラ20に対して、使用可能容量に設定した領域の先頭LBA及びLBA長を通知する(S316)。
【0135】
ストレージコントローラ20は、対応するドライブ個別管理テーブル320の使用可能容量と、FMPK40から通知された使用可能容量との差分を算出する(S317)。
【0136】
差分がない場合(S318:なし)、ストレージコントローラ20は、当該処理を終了する(END)。
【0137】
差分がある場合(S318:あり)、ストレージコントローラ20は、ドライブ個別管理テーブル320の使用可能容量を修正すると共に、プール100の使用可能容量を修正する(S319)。
【0138】
ストレージコントローラ20は、FMPK40から通知された先頭LBAおよびLBA長に従って、ドライブ個別管理テーブル320のチャンク番号の一部を「使用不可」に変更し(S320)、当該処理を終了する(END)。
【0139】
上記の処理において、FMPK40に送信されるチャンク割当コマンドには、チャンクの大きさに対する余剰容量の割合が含まれてもよいし、FMPK40に設定する余剰容量のサイズが含まれてもよい。
【0140】
図21は、
図20の第2余剰容量設定処理の詳細を示すフローチャートである。
FMPKコントローラ50は、必要な余剰容量を確保可能であるか否かを判定する(S401)。書換頻度「高」の場合に必要な余剰容量は、チャンクのサイズの所定の割合(例えば30%)としてもよいし、ストレージコントローラ20から指定されてもよい。
【0141】
必要な余剰容量を確保不可能な場合(S401:NO)、FMPKコントローラ50は、ストレージコントローラ20に対して、余剰容量を確保できないため、そのRAIDグループにチャンクの割当が不可能である旨のエラーを通知し(S411)、
図20のステップ332へ進む。つまり、
図20のステップS332において「YES」と判定される。
【0142】
必要な余剰容量を確保可能な場合(S401:YES)、FMPKコントローラ50は、論理物理変換テーブル520において、余剰容量として確保するLBAのステータスを「使用不可」に設定する(S402)。ここで、FMPKコントローラ50は、LBAの大きい方から小さい方へステータスを「使用不可」に設定してもよい。つまり、書換頻度「高」のチャンクを割り当てたRAIDグループの余剰容量は増加する。
【0143】
FMPKコントローラ50は、使用可能容量を算出する(S403)。そして、FMPKコントローラ50は、ストレージコントローラ20に対して、使用可能容量に設定した領域の先頭LBA及びLBA長と、余剰容量に設定した領域の先頭LBA及びLBA長とを通知し、
図20のステップS332へ進む。つまり、
図20のステップS332において「NO」と判断される。
【0144】
なお、上述の実施例では、FMPKコントローラ50が、ストレージコントローラ20からの指示に基づいて、自己の管理する論理物理変換テーブル520における使用可能なLBAの範囲(使用不可能なLBAの範囲)を決定および管理している。しかし、ストレージコントローラ20が、各FMPKの使用可能なLBAの範囲(使用不可能なLBAの範囲)を決定および管理し、FMPKの使用可能なLBAの範囲のみをライト先として指定するとしてもよい。これによっても、上述と同様の目的を達成することができる。
【0145】
上述した本発明の実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【0146】
例えば、以下のような実施例であってもよい。
ストレージコントローラ20は、仮想ボリュームを生成する。しかし、ストレージコントローラ20は、その仮想ボリュームに予め書換頻度を設定しない。そして、ストレージコントローラ20は、仮想ボリュームの仮想チャンク151に割り当てられたチャンク152毎に、ライト頻度を測定する。ストレージコントローラ20は、チャンク管理テーブル300において、測定したライト頻度が閾値を超えているチャンク152における書換頻度305を「高」とし、測定したライト頻度が閾値以下のチャンク152における書換頻度305を「低」とする。ストレージコントローラ20は、書換頻度305が「高」のチャンクの増加に従って、余剰容量を増加させる。
【0147】
以上の処理によれば、仮想ボリュームに書換頻度が予め設定されない場合であっても、ストレージコントローラ20が、RAIDグループの書換頻度に応じた適切な余剰容量を確保することができる。