以下、実施の形態につき図面を参照して説明する。
図1は実施形態に係るストレージシステムの構成を示すブロック図である。
図1に示すストレージシステムは、ホスト計算機100及びストレージ装置200から構成される。ホスト計算機100及びストレージ装置200は、例えば、FC(Fibre Channel)等によりSCSI(Small Computer System Interface)規格に準拠して接続されている。
ホスト計算機100は、設定ツール101及びホストI/F(インターフェイス)102を備えている。設定ツール101は、論理ディスク(つまり論理的なボリューム)の生成等のためにユーザが入力した情報を、ホストI/F102を介してストレージ装置200に伝える。そのため設定ツール101は、例えば論理ディスクのサイズやタイプなどのパラメータをユーザがホスト計算機100の入力装置(図示せず)を用いて入力するためのインターフェイスを備える。ホストI/F102は、ストレージ装置200に実装されたコントローラ(ストレージコントローラ)210と通信する。ホストI/F102は、例えば設定ツール101を用いてユーザによって入力された情報をストレージ装置200のコントローラ210に伝える。コントローラ210は、このユーザによって入力された情報が、論理ディスクのサイズやタイプなどのパラメータである場合、当該パラメータに基づいて論理ディスクを生成する。
ホスト計算機100は、ストレージ装置200に構築された論理ディスクに対して読み出し/書き込みが可能である。これはストレージ装置200が生成する論理ディスクをホスト計算機100のオペレーティングシステム(OS)がSCSI規格に準拠したディスクとして検出し、ホスト計算機100で動作するプログラムが当該ディスクに対して読み出し/書き込みできることを指す。
ストレージ装置200は、コントローラ210と、複数のフラッシュメモリ、例えば5つのフラッシュメモリ220-0〜220-4とを備えている。コントローラ210はホスト計算機100からの読み出し/書き込み要求に基づいて、対応する論理ディスクを構成するフラッシュメモリ220-i(i=0〜4)に対してデータの読み出し/書き込みを行う。コントローラ210はまた、ホスト計算機100(設定ツール101)からの要求に応じて論理ディスクを生成し、且つ生成された論理ディスクを管理する。
フラッシュメモリ220-iは、SSDやフラッシュメモリモジュール(例えばNAND型フラッシュメモリモジュール)のような、書き換え可能な不揮発性記憶素子から構成される記憶媒体(不揮発性記憶媒体)、つまり書き換え可能な不揮発性メモリである。フラッシュメモリ220-iは、書き換え可能な不揮発性半導体記憶素子と当該半導体記憶素子を制御するFW(Firmware)とを含む。このFWは、半導体記憶素子への書き込みの回数を平準化する周知のウェアレベリング処理を行う。また、フラッシュメモリ220-iは、外部インターフェイスを含む。フラッシュメモリ220-iが例えばSSDである場合、外部インターフェイスとしてSAS(Serial Attached SCSI)を適用するのが一般的である。なお、SSDは一例であり、フラッシュメモリ220-iがSSDである必要はない。また、ストレージ装置200が備える記憶媒体(不揮発性メモリ)がフラッシュメモリである必要もなく、書き換えが可能な不揮発性記憶素子から構成される記憶媒体(不揮発性メモリ)であればよい。
ストレージ装置200が備える全てのフラッシュメモリ220-iには、例えば0番からの通し番号(以下、メディア番号と称する)が付与されているものとする。このメディア番号は、フラッシュメモリ220-iがストレージ装置200に初めて実装されたときに、コントローラ210によって付与される。メディア番号は、管理情報の一部として管理情報記憶部230に記憶され、一度番号が付与されると変更できないものとする。また、以降の説明を簡単にするために全てのフラッシュメモリ220-iのサイズ(メモリ容量)は同一であるものとする。
次に、ストレージ装置200のコントローラ210によって生成・管理される、フラッシュメモリプールについて説明する。フラッシュメモリプールは、複数のフラッシュメモリ220-iをグループ化することにより構成される。つまり、フラッシュメモリプールをフラッシュメモリ220-iの集合と見なすこともできる。
図2は、フラッシュメモリプールの構成の一例を示す。
図2の例では、フラッシュメモリプールは、5つのフラッシュメモリ220-0〜220-4の集合を1グループとして備えている。つまり、図2に示すフラッシュメモリプールは、ストレージ装置200が有する全てのフラッシュメモリ220-0〜220-4から構成されている。しかし、フラッシュメモリプールが、フラッシュメモリ220-0〜220-4のうちの3つ以上のフラッシュメモリから構成されていてもよい。フラッシュメモリ220-0〜220-4には、それぞれメディア番号0〜5が付与されている。フラッシュメモリプールには、メディア番号0〜5の順番でフラッシュメモリ220-0〜220-4が配置(論理的に配置)されている。
フラッシュメモリプール内の各フラッシュメモリ220-iの記憶領域は一定サイズのブロック(物理ブロック)0,1,2,…に分割して管理される。ブロック0,1,2,…には、それぞれ、ブロック番号0,1,2,…が付与される。
ここで、フラッシュメモリプール内で隣接するフラッシュメモリ220-iのブロックをある一定の個数でグループ化した集合をチャンク(chunk)と定義する。フラッシュメモリ220-4及び220-0も互いに隣接しているものとする。図2の例では、チャンクを構成するブロックの数(以下、チャンク数と称する)は4であり、A0,B0,C0,D0,E0,A1…のようにチャンク(チャンク領域)が構成されている。
本実施形態において、チャンク数は、フラッシュメモリプールを構成するフラッシュメモリの数より小さく且つフラッシュメモリの数と互いに素な数であるとする。本実施形態のように、フラッシュメモリプールを構成するフラッシュメモリの数が5の場合、適用可能なチャンク数は、2、3または4のいずれかである。図2に示すフラッシュメモリプールにおいて、チャンクをメディア番号が0のフラッシュメモリ220-0から順に割り当てるものとする。この場合、全フラッシュメモリ220-0〜220-4がチャンク数に一致する数のブロックを消費すると、次のチャンクが再びメディア番号が0のフラッシュメモリ220-0から割り当てられることになる。
図2の例ではフラッシュメモリの数がフラッシュメモリ220-0〜220-4の5で、チャンク数が4である。この場合、先頭ブロック0から4ブロック単位でチャンクA0〜E0が割り当てられ、後続の4ブロック単位でチャンクA1〜E1が割り当てられるというように、先頭のフラッシュメモリ220-0の先頭ブロック0から順に4ブロック単位でチャンクが割り当てられる。
つまり、フラッシュメモリ220-0,220-1,220-2,220-3のそれぞれブロック0にチャンクA0が割り当てられ、フラッシュメモリ220-4のブロック0及びフラッシュメモリ220-0,220-1,220-2のそれぞれブロック1にチャンクB0が割り当てられる。次に、フラッシュメモリ220-3,220-4のそれぞれブロック1及びフラッシュメモリ220-0,220-1のそれぞれブロック2にチャンクC0が割り当てられ、フラッシュメモリ220-2,220-3,220-4のそれぞれブロック2及びフラッシュメモリ220-0のブロック3にチャンクD0が割り当てられる。次に、フラッシュメモリ220-1,220-2,220-3,220-4のそれぞれブロック3にチャンクE0が割り当てられる。以下、同様に、フラッシュメモリ220-0〜220-4のそれぞれブロック4〜7の合計20ブロックに、4ブロック単位で、チャンクA1〜E1が割り当てられる。
ここで、フラッシュメモリ220-0〜220-4の各々に注目すると、当該フラッシュメモリ220-0〜220-4にそれぞれ割り当てられるチャンクの集合におけるチャンクの組み合わせは、フラッシュメモリ毎に全て異なるという特徴があることが分かる。例えば、フラッシュメモリ220-0に割り当てられるチャンクの集合は(A0,B0,C0,D0,A1…)の組み合わせ、フラッシュメモリ220-1に割り当てられるチャンクの集合は(A0,B0,C0,E0,A1…)の組み合わせ、フラッシュメモリ220-2に割り当てられるチャンクの集合は(A0,B0,D0,E0,A1…)の組み合わせ、というように全てのフラッシュメモリでチャンクの組み合わせが異なる。
この特徴は、それぞれのチャンクへの書き込み回数が異なれば、全てのフラッシュメモリ220-0〜220-4への書き込み回数が異なる可能性が高いということを表す。本実施形態では、この特徴を利用して論理ディスクが生成(構成)される。本実施形態で適用される論理ディスクは、タイプ1の論理ディスクとタイプ2の論理ディスクとに分類される。
図3は、タイプ1の論理ディスクの例を2つの論理ディスクについて示す。図3(a)は論理ディスク221aの例を示し、図3(b)は論理ディスク221bの例を示す。
図3(a)に示す論理ディスク221aは、フラッシュメモリプール内のフラッシュメモリ220-0〜220-4のうち、フラッシュメモリ220-0〜220-3のチャンク、つまりチャンクA0,A1,A2…(のブロック)を論理ブロック(論理ディスク221aの論理ブロック)に割り当てることにより構成される。図3(b)に示す論理ディスク221bは、フラッシュメモリプール内のフラッシュメモリ220-0〜220-4のうち、フラッシュメモリ220-4,220-0〜220-2のチャンク、つまりチャンクB0,B1,B2…(のブロック)を論理ブロックに割り当てることにより構成される。
図3(a)に示す論理ディスク221aは、フラッシュメモリプール内のフラッシュメモリ220-0〜220-4のうち、チャンクを構成する先頭のブロックがフラッシュメモリ220-0に存在するブロックであるチャンクだけを割り当てることにより、構成されている。
フラッシュメモリ220-0のブロック番号0に該当するブロックA0と、フラッシュメモリ220-1のブロック番号0に該当するブロックA0と、フラッシュメモリ220-2のブロック番号0に該当するブロックA0と、フラッシュメモリ220-3のブロック番号0に該当するブロックA0との4つのブロックで構成されるチャンクの先頭ブロックは、フラッシュメモリ220-0に存在する。
フラッシュメモリ220-0のブロック番号4に該当するブロックA1と、フラッシュメモリ220-1のブロック番号4に該当するブロックA1と、フラッシュメモリ220-2のブロック番号4に該当するブロックA1と、フラッシュメモリ220-3のブロック番号4に該当するブロックA1との4つのブロックで構成されるチャンクの先頭ブロックは、フラッシュメモリ220-0に存在する。
同様に、詳細な説明は省略するが、図3(b)に示す論理ディスク221bは、フラッシュメモリ220-4に存在するブロックが先頭ブロックとなっているチャンクだけを割り当てることにより、構成されている。
このように、タイプ1の論理ディスクは、フラッシュメモリプール内のフラッシュメモリ220-0〜220-4のうち、チャンク数に一致する数の予め定められたフラッシュメモリのチャンクを割り当てることによって構成される。このタイプ1の論理ディスクは、同一論理ディスクの記憶領域内で書き込み回数の偏りが少ないが、論理ディスク毎に書き込み回数が異なる場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ1の論理ディスクは、論理ディスク毎に用途が異なるようなシステムへの適用が想定される。例えば、データベース用、バックアップ用、或いはファイルサーバ用等の論理ディスクを混在させる場合のように、各論理ディスクの書き込み回数が異なることが想定される場合に効果が高い。
図4は、タイプ2の論理ディスクの例を2つの論理ディスクについて示す。図4(a)は論理ディスク222aの例を示し、図4(b)は論理ディスク222bの例を示す。
図4(a)に示す論理ディスク222aは、フラッシュメモリプール内の全てのフラッシュメモリ220-0〜220-4に均等にまたがるように、チャンクA0,B1,C2…(のブロック)を論理ブロック(論理ディスク222aの論理ブロック)に割り当てることにより構成される。図4(b)に示す論理ディスク222bは、フラッシュメモリプール内の全てのフラッシュメモリ220-0〜220-4に均等にまたがるように、つまりチャンクB0,C1,D2…(のブロック)を論理ブロックに割り当てることにより構成される。
図4(a)に示す論理ディスク222aに対して初めに割り当てられているチャンクは、次のように構成されている。この初めに割り当てられているチャンクは、先頭ブロックとしてのフラッシュメモリ220-0のブロック番号0に該当するブロックA0と、フラッシュメモリ220-1のブロック番号0に該当するブロックA0と、フラッシュメモリ220-2のブロック番号0に該当するブロックA0と、最後のブロックとしてのフラッシュメモリ220-3のブロック番号0に該当するブロックA0とから構成されている。
2番目に割り当てられているチャンクは、次のように構成されている。2番目に割り当てられているチャンクは、初めに割り当てられたチャンクの最後のブロックA0が存在するフラッシュメモリ220-3の次のフラッシュメモリ220-4に存在するブロックが先頭ブロックとして構成されているチャンクが割り当てられている。
この2番目に割り当てられているチャンクの先頭ブロックとしては、フラッシュメモリ220-4のブロック番号4に該当するブロックB1と、フラッシュメモリ220-0のブロック番号5に該当するブロックB1と、フラッシュメモリ220-1のブロック番号5に該当するブロックB1と、最後のブロックとしてのフラッシュメモリ220-2のブロック番号5に該当するブロックB1とから構成されている。
同様に、3番目に割り当てられているチャンクは、2番目に割り当てられたチャンクの最後のブロックB1が存在するフラッシュメモリ220-2の次のフラッシュメモリ220-3に存在するブロックが先頭ブロックとして構成されているチャンクが割り当てられている。つまり、3番目に割り当てられているチャンクの先頭ブロックC2は、図2において図示が省略されているがフラッシュメモリ220-3のブロック番号9に存在する
図4(b)に示す論理ディスク222bでは、フラッシュメモリ220-4のブロック番号0に該当するブロックB0が先頭ブロックとして構成されているチャンクが初めに割り当てられている。
2番目に割り当てられているチャンクは、初めに割り当てられたチャンクの最後のブロックB0が存在するフラッシュメモリ220-2の次のフラッシュメモリ220-3に存在するブロック番号5に該当するブロックC1が先頭ブロックとして構成されている。
同様に、図2において図示が省略されているが、3番目に割り当てられているチャンクは、2番目に割り当てられたチャンクの最後のブロックC1が存在するフラッシュメモリ220-1の次のフラッシュメモリ220-2に存在するブロック番号10に該当するブロックD2が先頭ブロックとして構成されている。
このように、タイプ2の論理ディスクは、フラッシュメモリプール内の全フラッシュメモリ220-0〜220-4にまたがってチャンクを割り当てることによって構成される。このタイプ2の論理ディスクは、各論理ディスクの書き込み回数は殆ど同じであるが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ2の論理ディスクは、例えば、ランダムアクセスが多くデータ書き込みが局所化しているようなデータベースに適用される論理ディスクを複数生成する場合に効果が高い。
以上、各フラッシュメモリの書き込み回数が均一化するのを抑制するための論理ディスクの構成について説明した。
次に、図1に示されるストレージ装置200のコントローラ210の構成について説明する。
図5は、ストレージ装置200の主としてコントローラ210の構成を示すブロック図である。コントローラ210は、ホストI/F処理部211、コマンド処理部212、I/O処理部213、アドレス処理部214、フラッシュメモリI/F処理部215、ディスク管理部216、初期化処理部217及び管理情報記憶部230を備えている。
ホストI/F処理部211は、ホスト計算機100のホストI/F102と通信するためのインターフェイスである。本実施形態では、このインターフェイスとしてSCSIインターフェイスを想定している。
コマンド処理部212は、ホスト計算機100のホストI/F102によって転送されるコマンをホストI/F処理部211を介して受信する。本実施形態において、このコマンドはSCSIコマンドである。SCSI規格では、SCSIコマンドを用いてホスト計算機とストレージ装置間でデータ転送が行われる。SCSIコマンドはI/O系のSCSIコマンド(I/O系コマンド)と制御系のSCSIコマンド(制御系コマンド)に分類される。
I/O系コマンドは、ホスト計算機上で動作するプログラムがストレージ装置の論理ディスクに対して読み出し/書き込みを要求した場合に、ホスト計算機のオペレーティングシステムによって当該読み出し/書き込み要求から変換されてストレージ装置に発行されるSCSIコマンドである。制御系コマンドは、ストレージ装置に関する情報を取得し、或いはストレージ装置に当該ストレージ装置に関する情報を設定するためのSCSIコマンドである。ストレージ装置ベンダーは当該ストレージ装置ベンダー固有のSCSI拡張コマンドを定義することができる。そこでホスト計算機100上で動作する設定ツール101は、ユーザが入力した情報(パラメータ)に応じてSCSI拡張コマンドを生成し、当該生成したSCSI拡張コマンドをコントローラ210に発行することで、ストレージ装置200に対する情報の参照或いは情報の設定を行う。
コマンド処理部212は受信したSCSIコマンドがI/O系コマンドであるか、或いは制御系コマンドであるかを判別する。I/O系コマンドの場合、コマンド処理部212は受信したSCSIコマンドをI/O処理部213に渡す。I/O処理部213は、アドレス処理部214を用いて論理ディスクに対する読み出し/書き込み処理を行う。一方、制御系コマンドの場合、コマンド処理部212は受信したSCSIコマンドをディスク管理部216または初期化処理部217に渡してユーザの要求に応じた処理を行わせる。
管理情報記憶部230は不揮発記憶領域を備えており、当該不揮発性記憶領域に各種の管理情報を格納する。本実施形態において管理情報記憶部230は、フラッシュメモリプールテーブル231(図8参照)とブロック割り当てテーブル232(図9参照)を含むブロック割り当てテーブル群とを、管理情報として格納する。管理情報記憶部230はまた、生成された論理ディスクの数に対応するマッピングテーブル群、例えばマッピングテーブル233(図10参照)を含むマッピングテーブル群を管理情報として格納する。
ディスク管理部216は、論理ディスクの生成、生成された論理ディスクの管理など、ユーザの要求に応じた処理を、管理情報記憶部230を用いて行う。そのためディスク管理部216は、管理情報記憶部230に対する情報の参照及び情報の書き換えが可能なように構成されている。より詳細に述べるならば、ディスク管理部216は、論理ディスクの生成のために、フラッシュメモリプールテーブルの参照、ブロック割り当てテーブルの更新、マッピングテーブルの生成等を行う。初期化処理部217は、フラッシュメモリプールテーブルの生成、及びブロック割り当てテーブルの生成等の初期化処理を行う。
図6はディスク管理部216の構成を示すブロック図である。
ディスク管理部216は、論理ディスク生成部2160を含む。論理ディスク生成部2160は、論理ディスクの生成のために、フラッシュメモリプールからチャンク(チャンク領域)の群を選択する。論理ディスク生成部2160は、選択されたチャンク領域の群を結合することにより、選択されたチャンク領域の群から構成される論理ディスクを生成する。この論理ディスクの生成は、後述するように、当該論理ディスクに対応するマッピングテーブルを生成することにより実現される。
図7は初期化処理部217の構成を示すブロック図である。
初期化処理部217は、フラッシュメモリプールを生成するためのフラッシュメモリプール生成部2170を含む。フラッシュメモリプール生成部2170は、グループ化部2171、ブロック分割部2172、チャンク生成部2173及び論理ディスクタイプ設定部2174から構成される。初期化処理部217は更に、ブロック割り当てテーブルを生成するためのブロック割り当てテーブル生成部2175を含む。
グループ化部2171は、複数のフラッシュメモリをグループ化することにより。当該グループ化されたフラッシュメモリの集合からなるフラッシュメモリプールを生成する。ブロック分割部2172は、グループ化されたフラッシュメモリの各々の記憶領域を一定サイズのブロックに分割する。
チャンク生成部2173は、グループ化されたフラッシュメモリの集合に基づき、グループ化されたフラッシュメモリの個数未満のブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク(チャンク領域)を生成する。論理ディスクタイプ設定部2174は、フラッシュメモリプールを用いて生成することが可能な論理ディスクのタイプを設定する。
次に、本実施形態で適用される論理ディスクを生成するための処理について説明する。本実施形態において論理ディスクを生成するためには、論理ディスク生成処理300(図13参照)に加えて、論理ディスクの生成に用いられるフラッシュメモリの集合から構成されるフラッシュメモリプールを生成するための初期化処理120(図12参照)が必要となる。
まず、初期化処理120について説明する。
ユーザは、ホスト計算機100の設定ツール101を用いて、フラッシュメモリプールを生成するための入力操作を行う。フラッシュメモリプールの生成のためにユーザが最低限入力する必要があるパラメータは、フラッシュメモリプールのサイズとフラッシュメモリ群から生成される論理ディスクのタイプである。論理ディスクのタイプは、2つのタイプ(タイプ1またはタイプ2)の中からユーザによって選択される。設定ツール101は、ユーザによる上記サイズ及びタイプの入力操作に従い、フラッシュメモリプールの生成を要求するための第1のSCSI拡張コマンド(制御系コマンド)を生成する。第1のSCSI拡張コマンドは、ユーザが入力したパラメータ、つまりサイズ(フラッシュメモリプールサイズ)及びタイプ(論理ディスクタイプ)を含む。設定ツール101は、第1のSCSI拡張コマンドを、ホストI/F102を介してストレージ装置200のコントローラ210に転送することで、当該コントローラ210に対してフラッシュメモリプールの生成を要求する。
コントローラ210に転送された第1のSCSI拡張コマンドは、ホストI/F処理部211を介してコマンド処理部212で受信される。コマンド処理部212は、第1のSCSI拡張コマンド(つまりフラッシュメモリプールの生成を要求するSCSI拡張コマンド)を受信した場合、当該第1のSCSI拡張コマンドを初期化処理部217に渡す。すると初期化処理部217は、図12のフローチャートに従って、フラッシュメモリプールの生成を含む初期化処理120を実行する。
以下、初期化処理120の手順について、図12のフローチャートを参照して説明する。
初期化処理120において、初期化処理部217のフラッシュメモリプール生成部2170は、第1のSCSI拡張コマンドに含まれているパラメータ(フラッシュメモリプールサイズ及び論理ディスクタイプ)とコントローラ210に接続されているフラッシュメモリ(ここではフラッシュメモリ220-0〜220-4)に関する情報とに基づき、図8に示すフラッシュメモリプールテーブル231を生成する。
フラッシュメモリプールテーブル231は、フラッシュメモリプールを管理するためのフラッシュメモリプール管理情報を保持する。このフラッシュメモリプール管理情報は、図8に示すように、開始メディア番号、メディア数、ブロックサイズ、チャンク数及び論理ディスクタイプから構成される。
フラッシュメモリプール生成部2170は、フラッシュメモリプールテーブル231を次のように生成する。まずフラッシュメモリプール生成部2170のグループ化部2171は、コントローラ210に接続されているフラッシュメモリを検索する(ステップ121)。ここでは、5つのフラッシュメモリ220-0〜220-4が検索される。
グループ化部2171はまた、管理情報記憶部230からブロック割り当てテーブル(検索されたフラッシュメモリ220-0〜220-4にそれぞれ対応するブロック割り当てテーブル)を検索する(ステップ122)。本実施形態において、図9に示すブロック割り当てテーブル232のようなブロック割り当てテーブルは、フラッシュメモリプールに所属する全てのフラッシュメモリにそれぞれ対応付けて生成されて、管理情報記憶部230に格納される。フラッシュメモリプールに所属しないフラッシュメモリ対応するブロック割り当てテーブルは存在しない。
図9に示すブロック割り当てテーブル232は、対応するフラッシュメモリのブロック(物理ブロック)毎に、当該ブロックが論理ディスクのブロック(論理ブロック)に割り当てられているか、つまり使用されているか、或いは割り当てられていないか、つまり使用されていないかを示す情報を保持する。本実施形態において、この情報はフラグであり、“0”で対応するブロックが使用されていないことを、“1”で対応するブロックが使用されていることを示す。
本実施形態では、グループ化部2171がブロック割り当てテーブルを検索した時点では、管理情報記憶部230にブロック割り当てテーブルはひとつも格納されていないものとする。グループ化部2171は、ブロック割り当てテーブル検索の結果に基づき、対応するブロック割り当てテーブルが存在しないフラッシュメモリのメディア番号のうち、最も小さいメディア番号を、図8に示すフラッシュメモリプールテーブル231に開始メディア番号として登録する(ステップ123)。ここでは、フラッシュメモリ220-0〜220-4のメディア番号0〜4のうちのメディア番号0が、図8に示すように開始メディア番号として登録される。
次にグループ化部2171は、フラッシュメモリサイズと第1のSCSI拡張コマンドに含まれているフラッシュメモリプールサイズとに基づき、フラッシュメモリプールを構成するのに必要なフラッシュメモリの数を求め、この数をフラッシュメモリプールテーブル231にメディア数として登録する(ステップ124)。このメディア数は、フラッシュメモリプールサイズをフラッシュメモリサイズで除することにより求められる。ここでは図8に示すように、メディア数として5が登録されたものとする。この場合、コントローラ210に接続されている全てのフラッシュメモリ220-0〜220-4がフラッシュメモリプールを構成することになる。つまりグループ化部2171は、フラッシュメモリ220-0〜220-4をグループ化し、当該グループ化されたフラッシュメモリ220-0〜220-4によりフラッシュメモリプールを構成する。
すると、フラッシュメモリプール生成部2170のブロック分割部2172が起動される。ブロック分割部2172は、フラッシュメモリプールテーブル231に、ブロックサイズとして、デフォルトの値、例えば1MB(メガバイト)を登録する(ステップ125)。このブロックサイズの登録により、ブロック分割部2172は等価的に、グループ化部2171によってグループ化されたフラッシュメモリの各々の記憶領域を当該ブロックサイズのブロックに分割したことになる。なお、ブロックサイズの登録のために、設定ツール101のオプションとしてユーザが別の値を指定することも可能とする。
次にフラッシュメモリプール生成部2170のチャンク生成部2173が起動される。チャンク生成部2173は、グループ化部2171によってステップ124で求められたメディア数より小さな数で且つ当該メディア数と互いに素な数を求め、この数をフラッシュメモリプールテーブル231にチャンク数として登録する(ステップ126)。このような条件を満たす数(チャンク数)を取得するためには、メディア数が3以上であればよい。つまりフラッシュメモリプールを構成するフラッシュメモリの数が3以上であればよい。
チャンク数の登録により、チャンク生成部2173は等価的に、チャンク数に一致するブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク(チャンク領域)を生成したことになる。チャンク数は、上述の説明から明らかなように、メディア数(グループ化されたフラッシュメモリの個数)未満の数であり、より詳細には、メディア数より小さな数で且つ当該メディア数と互いに素な数である。
チャンク数として複数の候補がある場合、初期化処理部217は、例えば最大の数を選択する。本実施形態のようにメディア数が5の場合、2、3または4が候補となるので、最大値4が選択される。なお、複数の候補のうちの最大の数以外(例えば中間の数)が選択される構成であっても構わない。また、設定ツール101のオプションとして複数の候補からユーザにチャンク数を選択させることも可能である。
次にグループ化部2171の論理ディスクタイプ設定部2174が起動される。論理ディスクタイプ設定部2174は、第1のSCSI拡張コマンドに含まれている論理ディスクタイプを、フラッシュメモリプールテーブル231に登録する(ステップ127)。次に初期化処理部217のブロック割り当てテーブル生成部2175が起動される。ブロック割り当てテーブル生成部2175は、フラッシュメモリプールテーブル231によって示されるフラッシュメモリプールに所属するフラッシュメモリ(ここではフラッシュメモリ220-0〜220-4)にそれぞれ対応付けられるブロック割り当てテーブル(初期ブロック割り当てテーブル)を生成する(ステップ128)。このブロック割り当てテーブルのエントリ数は、対応するフラッシュメモリのブロック数に一致し、各エントリには、対応するブロックが未使用であることを示すフラグ(0)が登録される。
フラッシュメモリプール生成部2170及びブロック割り当てテーブル生成部2175は、それぞれ、生成されたフラッシュメモリプールテーブル231及びブロック割り当てテーブルの群を管理情報記憶部230に格納する(ステップ129)。これにより、論理ディスク生成のための初期化処理120は終了し、フラッシュメモリプールテーブル231によって示されるフラッシュメモリプールが生成されたことになる。なお、コントローラ210に接続されるフラッシュメモリの数が本実施形態と異なって5を超えている場合、例えば8の場合、フラッシュメモリ220-0〜220-4から構成されるフラッシュメモリプール以外に、残りの3つのフラッシュメモリから構成されるフラッシュメモリプールを生成することも可能である。
フラッシュメモリテーブルが生成されると、ユーザは当該フラッシュメモリテーブルによって示されるフラッシュメモリプールから領域を切り出して論理ディスクを生成することを、設定ツール101を操作することによってコントローラ210に要求することができる。具体的には、ユーザは設定ツール101を操作することによって、生成されるべき論理ディスクのサイズと、論理ディスクの生成の要求とを入力する。また、フラッシュメモリプールが複数存在する場合、ユーザは、例えば生成されるべき論理ディスクのサイズを入力する前に、論理ディスク生成の対象となるフラッシュメモリプールを選択する。
設定ツール101は、上述したユーザの入力操作に従い、論理ディスクの生成を要求するための第2のSCSI拡張コマンド(制御系コマンド)を生成する。第2のSCSI拡張コマンドは、ユーザが入力した論理ディスクのサイズ、更にはユーザが選択したフラッシュメモリプールを示すパラメータを含む。設定ツール101は、第2のSCSI拡張コマンドを、ホストI/F102を介してストレージ装置200のコントローラ210に転送することで、当該コントローラ210に対して論理ディスクの生成を要求する。
コントローラ210に転送された第2のSCSI拡張コマンドは、ホストI/F処理部211を介してコマンド処理部212で受信される。コマンド処理部212は、第2のSCSI拡張コマンド(つまり論理ディスクの生成を要求するSCSI拡張コマンド)を受信した場合、当該第2のSCSI拡張コマンドをディスク管理部216に渡す。するとディスク管理部216の論理ディスク生成部2160は、図13のフローチャートに従って、第2のSCSI拡張コマンドによって要求された論理ディスクを生成するための論理ディスク生成処理300を実行する。
以下、論理ディスク生成処理300の手順について、図13のフローチャートを参照して説明する。
まず論理ディスク生成部2160は、第2のSCSI拡張コマンドに基づき、生成すべき論理ディスク及び対象となるフラッシュメモリプール(対象フラッシュメモリプール)に関する情報を取得する(ステップ310)。ステップ310において論理ディスク生成部2160は、取得した情報に基づいて、変数SIZE、CHUNK、BLK_SIZE及びN_MEDIAの値を設定する。
具体的には、論理ディスク生成部2160は、生成すべき論理ディスクに関する情報として、当該論理ディスクのサイズを、第2のSCSI拡張コマンドから取得する。論理ディスク生成部2160は、取得した論理ディスクのサイズを変数SIZEとして設定する。また論理ディスク生成部2160は、対象フラッシュメモリプールに関する情報(管理情報)を、第2のSCSI拡張コマンドに含まれているフラッシュメモリプールを示すパラメータに基づいて、管理情報記憶部230に格納されている対応するフラッシュメモリプールテーブルを参照することにより取得する。ここでは、フラッシュメモリプールテーブル231が参照されたものとする。この場合、論理ディスク生成部2160は、フラッシュメモリプールテーブル231から、対象フラッシュメモリプールに関する情報として、当該フラッシュメモリプールのチャンク数、ブロックサイズ及びメディア数(図8参照)を取得する。論理ディスク生成部2160は、取得したチャンク数、ブロックサイズ及びメディア数を、それぞれ変数CHUNK、BLK_SIZE及びN_MEDIAとして設定する。
次に論理ディスク生成部2160は、対象フラッシュメモリプールに所属する全てのフラッシュメモリ(メディア)にそれぞれ対応するブロック割り当てテーブルを参照することにより、未使用ブロックのブロック番号のうちの最小のブロック番号(最小未使用ブロック番号)と、当該最小のブロック番号のブロックを含むフラッシュメモリのメディア番号とを取得する(ステップ320)。具体的には、論理ディスク生成部2160は上記対応するブロック割り当てテーブル毎に、未使用ブロックのブロック番号のうちの最小のブロック番号を取得し、それらの最小のブロック番号の中で最も小さなブロック番号を目的のブロック番号とする。もし、該当する未使用ブロックが複数ある場合、論理ディスク生成部2160は、該当する未使用ブロックを含む同数のフラッシュメモリのうち、最もメディア番号の小さなフラッシュメモリの当該メディア番号を目的のメディア番号とする。
ステップ320において論理ディスク生成部2160は、取得したメディア番号及びブロック番号を、それぞれ最初のメディア番号を表す変数NM_FIRST及び最初のブロック番号を表す変数NB_FIRSTとして設定する。論理ディスク生成部2160はまた、変数NM_FIRST及びNB_FIRSTを、それぞれメディア番号を表す変数NM及びブロック番号を表す変数NBとして設定する。
次に論理ディスク生成部2160は、フラッシュメモリプールテーブル231に保持されている論理ディスクタイプを判別する(ステップ330)。もし、論理ディスクタイプがタイプ1であるならば、論理ディスク生成部2160は、当該タイプ1の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク(タイプ1)マッピングテーブル生成処理を行う(ステップ340)。これに対し、論理ディスクタイプがタイプ2であるならば、論理ディスク生成部2160は、当該タイプ2の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク(タイプ2)マッピングテーブル生成処理を行う(ステップ340)。
マッピングテーブルは、対応する論理ディスクの構成を管理(定義)するためのテーブルである。そのためマッピングテーブルは、対応する論理ディスクのそれぞれの論理アドレスのデータ領域(論理ブロック)に、いずれのフラッシュメモリ(メディア)のいずれのブロックがマッピングされているかを登録したエントリ群を有する。図10は、図3(a)に示されるタイプ1の論理ディスク221aに対応するマッピングテーブル233の例を示し、図11は、図4(a)に示されるタイプ2の論理ディスク222aに対応するマッピングテーブル234の例を示す。マッピングテーブル233及び234の各エントリは、論理アドレス、メディア番号及びブロック番号がそれぞれ登録されるフィールドを有する。
次に、論理ディスク生成部2160によって実行される論理ディスク(タイプ1)マッピングテーブル生成処理(ステップ340)の詳細な手順について、図14のフローチャートを参照して説明する。
まず論理ディスク生成部2160は、論理アドレスを示す変数ADDRを0(より詳細には00000000H)に、ブロック数(より詳細にはブロック数のカウント値)を示す変数COUNTを0に、それぞれ初期設定する(ステップ3401)。末尾のHは、周知のように16進表現であることを示す。このステップ3401において、ADDR=0(00000000H)は、マッピングテーブルの先頭エントリの論理アドレスフィールドに登録される。次に論理ディスク生成部2160は、所定のループA(ステップ3402)を、終了条件が成立するまで繰り返す。この終了条件は、ADDR≧SIZEを満足することである。
論理ディスク生成部2160はループAにおいて、まず、ADDR(=0)が登録されたマッピングテーブルのエントリ(ADDRエントリ)のメディア番号フィールド及びブロック番号フィールドに、それぞれNM及びNBを登録する(ステップ3403)。ステップ3403において論理ディスク生成部2160は更に、メディア番号がNMのフラッシュメモリに対応するブロック割り当てテーブル232のブロック番号がNBのエントリに“1”(“1”のフラグ)を登録する。
次に論理ディスク生成部2160は、COUNTがCHUNK未満であるかを判定する(ステップ3404)。もし、COUNTがCHUNK未満であるならば(ステップ3404のYes)、つまりカウントしたブロック数がチャンク数未満であるならば、論理ディスク生成部2160は、1つのチャンク(チャンク領域)についての処理(論理ディスクの対応する領域への割り当て)が終了していないものと判断する。この場合、論理ディスク生成部2160は、現在処理中のチャンクにおける次のブロックについての処理(対応する論理ブロックへの割り当て)のためにCOUNTを1インクリメントする(ステップ3405)。
これに対し、COUNTがCHUNK未満でないならば(ステップ3404のNo)、つまりカウントしたブロック数がチャンク数未満でないならば、論理ディスク生成部2160は、1つのチャンクについての処理が終了したものと判断する。この場合、論理ディスク生成部2160は、次のチャンク(チャンク領域)の先頭のブロックについての処理のために、NMをNM_FIRSTに、NBをNB+CHUNKに、そしてCOUNTを0に、それぞれ更新する(ステップ3406)。
ここで、NM_FIRSTが0、CHUNKが4、対象フラッシュメモリプールがフラッシュメモリ220-0〜220-4から構成される図2に示すフラッシュメモリプールであるものとする。この場合、上述のように1つのチャンクについての処理が終了する毎に、NMをNM_FIRSTに戻すことにより(ステップ3406)、論理ディスク生成部2160は、フラッシュメモリ220-0〜220-4のうちのCHUNKに一致する数のフラッシュメモリ220-0〜220-3のチャンクを割り当てることになる。
論理ディスク生成部2160はステップ3405または3406のいずれかを実行すると、NM+1がN_MEDIA+NM_FIRSTに一致するかを判定する(ステップ3407)。N_MEDIA+NM_FIRSTは、対応するフラッシュメモリプールを構成するフラッシュメモリ群のメモリ番号のうちの最大メモリ番号+1を示す。最大メモリ番号+1のフラッシュメモリは、対応するフラッシュメモリプールに存在しない。したがって、NM+1がN_MEDIA+NM_FIRSTに一致する場合、NMの次のメディア番号をNM_FIRST(最小メディア番号)とする必要がある。一方、NM+1がN_MEDIA+NM_FIRSTに一致しない場合、NMの次のメディア番号はNM+1となる。
そこで、NM+1がN_MEDIAに一致しないならば(ステップ3407のNo)、論理ディスク生成部2160はNMを1インクリメントする(ステップ3408)。このインクリメント後のNMは、次に処理されるべきブロック(ブロック番号がNBのブロック)が存在するフラッシュメモリのメディア番号を示す。これに対し、NM+1がN_MEDIAに一致するならば(ステップ3407のYes)、論理ディスク生成部2160はNMをNM_FIRSTに戻す(ステップ3409)。このNM_FIRSTに戻された後のNMは、次に処理されるべきブロック(ブロック番号がNBのブロック)が存在するフラッシュメモリのメディア番号を示す。
論理ディスク生成部2160はステップ3408または3409のいずれかを実行すると、ADDRをBLK_SIZEだけインクリメントする(ステップ3410)。このとき、ADDR=00000000H、BLK_SIZE=1MB(=00100000H)であるとするならば、ADDRは00000000Hから00100000Hに更新される。このステップ3410において、ADDR=00100000Hは、マッピングテーブルの次のエントリ(ここでは2番目のエントリ)の論理アドレスフィールドに登録される。これにより、1回のループAが完了し、1つのチャンク(チャンク領域)を構成する、チャンク数(=CHUNK)に一致する数のブロックのうち、COUNT番目のブロックの対応する論理ブロックへの割り当てが完了する。このとき、COUNT<CHUNKでなければ(ステップ3404のNo)、1つのチャンクを構成する全ブロックの割り当てが完了したことになり、次のチャンクの処理のために、上述のようにステップ3406が行われる。
ADDR=00100000Hは、SIZE(つまり、生成されるべき論理ディスクのサイズ)未満であり、ループA(ステップ3402)の終了条件を満たさない。この場合、当該ループAが再び実行される。明らかなように、ループAがCHUNK(チャンク数)で示される回数繰り返されることにより、1つのチャンク(チャンク領域)を構成する、チャンク数に一致する数のブロックの対応する論理ブロックへの割り当てが完了する。
やがて、ADDRがBLK_SIZE以上となったならば、論理ディスク生成部2160はループAから抜けて、論理ディスク(タイプ1)マッピングテーブル生成処理を終了する。これにより、例えば図10に示すタイプ1の論理ディスクのマッピングテーブル233が生成される。
本実施形態において、マッピングテーブルの生成は、論理ディスク生成部2160の作業領域(図示せず)用いて行われる。この作業領域上で生成されたマッピングテーブル、つまりタイプ1の論理ディスクに対応するマッピングテーブルは、マッピングテーブル生成処理の終了時に、管理情報記憶部230に格納される。マッピングテーブルの生成が、管理情報記憶部230内で行われても構わない。
次に、論理ディスク生成部2160によって実行される論理ディスク(タイプ2)マッピングテーブル生成処理(ステップ350)の詳細な手順について、図15のフローチャートを参照して説明する。
まず論理ディスク生成部2160は、論理ディスク(タイプ1)マッピングテーブル生成処理におけるステップ3401と同様のステップ3501を実行する。次に論理ディスク生成部2160は、所定のループB(ステップ3502)を、終了条件が成立するまで繰り返す。この終了条件は、ADDR≧SIZEを満足することである。
論理ディスク生成部2160はループBにおいて、まず上記ステップ3403と同様のステップ3503を実行し、しかる後に上記ステップ3404と同様に、COUNTがCHUNK未満であるかを判定する(ステップ3504)。もし、COUNTがCHUNK未満であるならば(ステップ3504のYes)、論理ディスク生成部2160は、現在処理中のチャンクにおける次のブロックについての処理(対応する論理ブロックへの割り当て)のためにCOUNTを1インクリメントする(ステップ3505)。これに対し、COUNTがCHUNK未満でないならば(ステップ3504のNo)、論理ディスク生成部2160は、次のチャンク(チャンク領域)の先頭のブロックについての処理のために、NBをNB+CHUNKに、そしてCOUNTを0に、それぞれ更新する(ステップ3506)。このステップ3506では、前述したタイプ1の論理ディスクを作成する場合のステップ3406と異なり、NMがNM_FIRSTに戻されることはない。
ここで、NM_FIRSTが0、CHUNKが4、対象フラッシュメモリプールがフラッシュメモリ220-0〜220-4から構成される図2に示すフラッシュメモリプールであるものとする。この場合、上述のように1つのチャンクについての処理が終了しても、NMをNM_FIRSTに戻さないことにより(ステップ3506)、論理ディスク生成部2160は、フラッシュメモリ220-0〜220-4に均等にまたがるように、CHUNKに一致する数の異なる組み合わせのフラッシュメモリ(つまりフラッシュメモリ220-0,220-1,220-2,220-3、フラッシュメモリ220-4,220-0,220-1,220-2、フラッシュメモリ220-3,220-4,220-0,220-1、フラッシュメモリ220-2,220-3,220-4,220-0、フラッシュメモリ220-1,220-2,220-3,220-4)のチャンクを割り当てることになる。
論理ディスク生成部2160はステップ3505または3506のいずれかを実行すると、上記ステップ3407と同様に、NM+1がN_MEDIA+NM_FIRSTに一致するかを判定する(ステップ3507)。もし、NM+1がN_MEDIA+NM_FIRSTに一致しないならば(ステップ3507のNo)、論理ディスク生成部2160はNMを1インクリメントする(ステップ3508)。これに対し、NM+1がN_MEDIA+NM_FIRSTに一致するならば(ステップ3507のYes)、論理ディスク生成部2160はNMをNM_FIRSTに戻す(ステップ3509)。
論理ディスク生成部2160はステップ3508または3509のいずれかを実行すると、ステップ3410と同様に、ADDRをBLK_SIZEだけインクリメントする(ステップ3510)。このステップ3510において論理ディスク生成部2160は、インクリメント後のADDRをマッピングテーブルの次のエントリの論理アドレスフィールドに登録する。これにより、1回のループBが完了する。論理ディスク生成部2160は、終了条件(ADDR≧BLK_SIZE)が成立するまでループBを繰り返す。やがて、終了条件が成立したならば、論理ディスク生成部2160はループBから抜けて、論理ディスク(タイプ2)マッピングテーブル生成処理を終了する。これにより、例えば図11に示すタイプ2の論理ディスクのマッピングテーブル234が生成される。生成されたタイプ2の論理ディスクに対応するマッピングテーブルは、タイプ1の論理ディスクに対応するマッピングテーブルと同様に、管理情報記憶部230に格納される。
マッピングテーブルが生成されたことは、当該マッピングテーブルによって管理(定義)される論理ディスクが生成されたことと等価である。コントローラ210が論理ディスクを生成した後、ユーザがホスト計算機100を再起動する。するとホスト計算機100のオペレーティングシステムは、ストレージ装置200に構築されている論理ディスクに関する情報等、ストレージ装置200に関する情報を検出(取得)するために、例えば、SCSI規格に準拠した問い合わせ(INQUIRY)コマンドをホストI/F102を介してコントローラ210に発行する。
コントローラ210は、ホスト計算機100からのINQUIRYコマンドに応答することで、論理ディスクがストレージ装置200内に生成されたことを当該ホスト計算機100通知する。ホスト計算機100のオペレーティングシステムは、この通知に基づき、生成された論理ディスクを読み出し/書き込みが可能なディスクとして検出する。これによりホスト計算機100上のプログラムは、検出された論理ディスクに対して読み出し/書き込みできるようになる。
次に、ストレージ装置200のコントローラ210におけるアドレス処理部214の動作について説明する。前述したようにコントローラ210のコマンド処理部212がホスト計算機100によって発行されるI/O系のSCSIコマンドを受信した場合、I/O処理部213は、アドレス処理部214を用いて論理ディスクに対する読み出し/書き込み処理を行う。
ホスト計算機100によって発行されるI/O系のSCSIコマンド、例えばホスト計算機100のオペレーティングシステムによって発行される読み出し/書き込み要求は、読み出し/書き込みデータの位置を示すセクタアドレスを含む。本実施形態において、セクタアドレスで指定されるセクタは、512バイトで構成されるものとする。この場合、アドレス処理部214は、セクタアドレスに512を乗ずることにより、セクタアドレスをバイトアドレスに変換する。
アドレス処理部214は、変換されたバイトアドレスからブロックサイズ−1に対応するビット部分を切り捨てる(補数の論理積)ことで、読み出し/書き込みされるべき論理ディスク(目的論理ディスク)内のブロックの論理アドレスを取得する。アドレス処理部214は、取得した論理アドレスが登録された、目的論理ディスクに対応するマッピングテーブルのエントリを検索する。アドレス処理部214は、検索されたマッピングテーブルのエントリに登録されているメディア番号及びブロック番号に基づき、読み出し/書き込みされるべき論理ディスク内のブロックを特定する。アドレス処理部214は更に、切り捨て前のバイトアドレスにブロックサイズ−1でマスク(論理積)することにより、読み出し/書き込みが開始されるべきブロック内の位置(オフセット)を取得する。
アドレス処理部214は、読み出し/書き込みが開始されるべきブロック内の位置を特定したならば、フラッシュメモリI/F処理部215に対して、該当するフラッシュメモリを対象にデータを読み出し/書き込みするための読み出し/書き込み要求を発行することにより、データの読み出し/書き込みを行う。
アドレス処理部214によるデータの読み出し/書き込みが完了すると、ホストI/F処理部211は、その旨を、ホスト計算機100に対して例えば割り込みにより通知する。ホスト計算機100のオペレーティングシステムはコントローラ210からの割り込みを検出すると、その旨を対応するプログラムに返して終了する。
以上に述べた論理ディスクの構成(図3及び図4参照)はRAID0(RAIDレベル0のRAID)に相当する。このような構成の論理ディスクでは、フラッシュメモリへの並列な読み書きが行われるので、RAID0と同様の高速化が見込める。
次に、本実施形態で適用されるRAID1相当の冗長化について説明する。
RAID1と同様のミラーは、フラッシュメモリプールの複製を生成することで構成できる。例えば論理ディスク生成部2160は、全く同一サイズの2つのフラッシュメモリプールの一方をマスター、他方をスレーブとして、マスターのフラッシュメモリプールを用いて前述したような論理ディスクを生成する。アドレス処理部214は、論理ディスクへの書き込み時に、マスター側のフラッシュメモリにデータを書き込んだ後、スレーブ側のフラッシュメモリプールの同一位置にもデータを書き込む。またアドレス処理部214は、データの読み込みはマスター側のみから行う。マスター側に対する読み出し/書き込みでエラーが発生した場合、アドレス処理部214は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ(例えば値が2のフラグ)を書き込む。この場合、アドレス処理部214は、スレーブ側のフラッシュメモリを対象に読み出し/書き込みを行う。
次に、本実施形態で適用されるRAID5相当の冗長化について説明する。
論理ディスク生成部2160は、チャンクの中の1つのブロックをパリティ専用のブロック、つまり当該チャンクの他のブロックに格納されるデータの冗長データとしてのパリティデータを保持するパリティブロック(冗長ブロック)に割り当てる。これにより、RAID5と同等の冗長化を実現することができる。例えば、チャンクを構成する複数のブロックのうち最後の1個のブロックをパリティブロックとすることで、RAID5と同様の冗長化を実現できる。但し、パリティブロックを導入する場合、マッピングテーブルの生成アルゴリズム及び読み出し/書き込み処理は次のように変更される必要がある。
チャンクの最後のブロックの場合、論理ディスク生成部2160は、当該ブロックをマッピングテーブルに登録せず、論理アドレスの加算(ステップ3410または3510)も抑止する。一方、アドレス処理部214は、書き込み処理においてチャンクの最後のブロックにパリティを書き込み、読み出し処理においてパリティチェックする。読み出し/書き込みでエラーが発生した場合、アドレス処理部214は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ(例えば値が2のフラグ)を書き込む。また、エラーが発生したブロックからデータを読むことができない場合、アドレス処理部214はパリティを利用してデータを復元する。
また、論理ディスクを構成するフラッシュメモリに不良が発生した場合、論理ディスク生成部2160は当該不良が発生したフラッシュメモリのブロック割り当てテーブルを参照して、ホスト計算機100の設定ツール101を通して、フラッシュメモリが故障したことをユーザに通知する。
以上、フラッシュメモリプールの生成、論理ディスクの生成及び論理ディスクに対する読み出し/書き込みについて説明した。
本実施形態によれば、論理ディスクを構成するフラッシュメモリ群に書き込みを分散させることが、ブロックの入れ替えを行うことなくできる。つまりフラッシュメモリ群への書き込みの回数が均一になるのを、ブロックの入れ替えを行うことなく抑制できる。このため、フラッシュメモリ群への書き込みの回数の上限値を同時に越えることが、簡単に回避できる。つまり、フラッシュメモリが同時に故障することによる障害を、処理性能を低下させることなく減らすことができる。特に本実施形態においては、チャンクを構成するブロック数を、フラッシュメモリプールを構成するフラッシュメモリの数と「互いに素」にすることにより、フラッシュメモリ群への書き込みの回数が均一になることを、より効果的に抑制できる。
また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ1の論理ディスクを生成することにより、論理ディスク毎に書き込み回数(頻度)が異なる場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ2の論理ディスクを生成することにより、各論理ディスクの書き込み回数(頻度)は同程度だが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。
以上説明した少なくとも1つの実施形態によれば、処理性能を低下させることなく、複数の不揮発性メモリの同時不良の発生を抑制することができる、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法を提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。