説明

複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法

【課題】処理性能を低下させずに複数の不揮発性メモリの同時不良の発生を抑制する。
【解決手段】実施形態によれば、ストレージ装置は、書き換え可能な第1の数の不揮発性メモリと、プール生成手段及び論理ディスク生成手段を含むストレージコントローラとを具備する。プール生成手段は、グループ化手段とブロック分割手段とチャンク生成手段とを具備する。グループ化手段は第1の数の不揮発性メモリのうちの第2の数の不揮発性メモリから構成されるプールを生成し、ブロック分割手段は第2の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割する。チャンク生成手段は第2の数の不揮発性メモリを対象に、第2の数未満の第3の数のブロックであって、第2の数の不揮発性メモリのうちの異なる不揮発性メモリのブロックを単位に複数のチャンクを生成する。論理ディスク生成手段は、第2の数の不揮発性メモリのチャンクを用いて論理ディスクを生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法に関する。
【背景技術】
【0002】
従来から、データの読み出し/書き込みの性能を向上させるため、或いは耐障害性を向上させるために、RAID(Redundant Arrays of Independent Disks)構成のストレージ装置が開発されている。RAIDは複数のHDD(Hard Disk Drive)を用いて構成されるのが一般的である。つまりRAIDは、HDDに最適化した技術である。このため、HDDに代えて、SSD(Solid State Drive)やフラッシュメモリモジュールのような、書き換え可能な不揮発性記憶素子から構成される記憶媒体(以下、不揮発性メモリと称する)をRAIDに適用する場合には工夫が必要となる。
【0003】
例えば、上述の記憶素子のデータ保持力は書き込み回数の増加に伴って低下する。このため、上述の記憶素子の書き込み可能回数は決まっているのが一般的である。もし、書き込み可能回数を超える書き込みが行われるならば、データ保持力の低下のために、記憶素子はデータを正常に保持できなくなる。このような状態に陥ると、データの読み出し/書き込み不良が発生するおそれがある。
【0004】
一方、複数のHDDを用いて構成されるRAIDでは、当該複数のHDDへの書き込みの回数は均一化される傾向にあることが知られている。このため、複数のHDDに代えて複数の不揮発性メモリを用いてRAIDを構成する場合、当該複数の不揮発性メモリへの書き込みの回数もほぼ均一化される。つまり、RAIDを構成する全ての不揮発性メモリへの書き込みの回数がほぼ同一となる。このようなRAIDでは、上記全ての不揮発性メモリの書き込み回数が同時に上限を越える可能性が高くなり、当該全ての不揮発性メモリの同時故障の確率が高くなる。
【0005】
そこで従来技術では、RAIDを構成する全ての不揮発性メモリのストライプブロック毎に書き込み回数をカウントし、ストライプブロック毎の書き込み回数に基づいて、ストライプグループ内でストライプブロックが入れ替えられる。この入れ替えにより、全ての不揮発性メモリの同時故障の確率を低減できる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2010−015516号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上述したように、従来技術では、RAIDを構成する複数の不揮発性メモリの同時故障の確率を低減するために、ストライプブロック毎の書き込み回数に基づいて、ストライプグループ内でストライプブロックが入れ替えられる。つまり、不揮発性メモリ間でデータが移動される。このデータの移動は、ストレージ装置の処理性能の低下を招く。
【0008】
本発明が解決しようとする課題は、処理性能を低下させることなく、複数の不揮発性メモリの同時不良の発生を抑制することができる、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法を提供することにある。
【課題を解決するための手段】
【0009】
実施形態によれば、ストレージ装置は、書き換え可能な第1の数の不揮発性メモリと、ホスト計算機からのアクセス要求に基づいて、前記第1の数の不揮発性メモリのうち対応する論理ディスクを構成する不揮発性メモリへのアクセスを制御するストレージコントローラとを具備する。前記ストレージコントローラは、前記論理ディスクの生成に用いられるプールを生成するプール生成手段と、前記論理ディスクを生成する論理ディスク生成手段とを具備する。前記プール生成手段は、グループ化手段と、ブロック分割手段と、チャンク生成手段とを具備する。前記グループ化手段は、前記第1の数の不揮発性メモリのうちの第2の数の不揮発性メモリをグループ化して、前記第2の数の不揮発性メモリから構成されるプールを生成する。前記ブロック分割手段は、前記プールを構成する前記第2の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割する。前記チャンク生成手段は、前記ブロックに分割された前記第2の数の不揮発性メモリを対象に、前記第2の数未満の第3の数のブロックであって、前記第2の数の不揮発性メモリのうちの異なる不揮発性メモリのブロックを単位に、当該第3の数のブロックを結合することにより、前記第3の数のブロックから構成される複数のチャンクを生成する。前記論理ディスク生成手段は、前記複数のチャンクが生成された前記第2の数の不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成する。
【図面の簡単な説明】
【0010】
【図1】実施形態に係るストレージシステムの構成を示すブロック図。
【図2】同実施形態で適用されるフラッシュメモリプールの構成の一例を示す図。
【図3】同実施形態で適用されるタイプ1の論理ディスクの例を2つの論理ディスクについて示す図。
【図4】同実施形態で適用されるタイプ2の論理ディスクの例を2つの論理ディスクについて示す図。
【図5】図1に示されるストレージ装置の主としてコントローラの構成を示すブロック図。
【図6】図5に示されるディスク管理部の構成を示すブロック図。
【図7】図5に示される初期化処理部の構成を示すブロック図。
【図8】同実施形態で適用されるフラッシュメモリプールテーブルの例を示す図。
【図9】同実施形態で適用されるブロック割り当てテーブルの例を示す図。
【図10】同実施形態で適用される、タイプ1の論理ディスクに対応するマッピングテーブルの例を示す図。
【図11】同実施形態で適用される、タイプ2の論理ディスクに対応するマッピングテーブルの例を示す図。
【図12】同実施形態で適用される、フラッシュメモリプールの生成を含む初期化処理の手順を示すフローチャート。
【図13】同実施形態で適用される、論理ディスク生成処理の手順を示すフローチャート。
【図14】同実施形態で適用される、論理ディスク(タイプ1)マッピングテーブル生成処理の手順を示すフローチャート。
【図15】同実施形態で適用される、論理ディスク(タイプ2)マッピングテーブル生成処理の手順を示すフローチャート。
【発明を実施するための形態】
【0011】
以下、実施の形態につき図面を参照して説明する。
図1は実施形態に係るストレージシステムの構成を示すブロック図である。
【0012】
図1に示すストレージシステムは、ホスト計算機100及びストレージ装置200から構成される。ホスト計算機100及びストレージ装置200は、例えば、FC(Fibre Channel)等によりSCSI(Small Computer System Interface)規格に準拠して接続されている。
【0013】
ホスト計算機100は、設定ツール101及びホストI/F(インターフェイス)102を備えている。設定ツール101は、論理ディスク(つまり論理的なボリューム)の生成等のためにユーザが入力した情報を、ホストI/F102を介してストレージ装置200に伝える。そのため設定ツール101は、例えば論理ディスクのサイズやタイプなどのパラメータをユーザがホスト計算機100の入力装置(図示せず)を用いて入力するためのインターフェイスを備える。ホストI/F102は、ストレージ装置200に実装されたコントローラ(ストレージコントローラ)210と通信する。ホストI/F102は、例えば設定ツール101を用いてユーザによって入力された情報をストレージ装置200のコントローラ210に伝える。コントローラ210は、このユーザによって入力された情報が、論理ディスクのサイズやタイプなどのパラメータである場合、当該パラメータに基づいて論理ディスクを生成する。
【0014】
ホスト計算機100は、ストレージ装置200に構築された論理ディスクに対して読み出し/書き込みが可能である。これはストレージ装置200が生成する論理ディスクをホスト計算機100のオペレーティングシステム(OS)がSCSI規格に準拠したディスクとして検出し、ホスト計算機100で動作するプログラムが当該ディスクに対して読み出し/書き込みできることを指す。
【0015】
ストレージ装置200は、コントローラ210と、複数のフラッシュメモリ、例えば5つのフラッシュメモリ220-0〜220-4とを備えている。コントローラ210はホスト計算機100からの読み出し/書き込み要求に基づいて、対応する論理ディスクを構成するフラッシュメモリ220-i(i=0〜4)に対してデータの読み出し/書き込みを行う。コントローラ210はまた、ホスト計算機100(設定ツール101)からの要求に応じて論理ディスクを生成し、且つ生成された論理ディスクを管理する。
【0016】
フラッシュメモリ220-iは、SSDやフラッシュメモリモジュール(例えばNAND型フラッシュメモリモジュール)のような、書き換え可能な不揮発性記憶素子から構成される記憶媒体(不揮発性記憶媒体)、つまり書き換え可能な不揮発性メモリである。フラッシュメモリ220-iは、書き換え可能な不揮発性半導体記憶素子と当該半導体記憶素子を制御するFW(Firmware)とを含む。このFWは、半導体記憶素子への書き込みの回数を平準化する周知のウェアレベリング処理を行う。また、フラッシュメモリ220-iは、外部インターフェイスを含む。フラッシュメモリ220-iが例えばSSDである場合、外部インターフェイスとしてSAS(Serial Attached SCSI)を適用するのが一般的である。なお、SSDは一例であり、フラッシュメモリ220-iがSSDである必要はない。また、ストレージ装置200が備える記憶媒体(不揮発性メモリ)がフラッシュメモリである必要もなく、書き換えが可能な不揮発性記憶素子から構成される記憶媒体(不揮発性メモリ)であればよい。
【0017】
ストレージ装置200が備える全てのフラッシュメモリ220-iには、例えば0番からの通し番号(以下、メディア番号と称する)が付与されているものとする。このメディア番号は、フラッシュメモリ220-iがストレージ装置200に初めて実装されたときに、コントローラ210によって付与される。メディア番号は、管理情報の一部として管理情報記憶部230に記憶され、一度番号が付与されると変更できないものとする。また、以降の説明を簡単にするために全てのフラッシュメモリ220-iのサイズ(メモリ容量)は同一であるものとする。
【0018】
次に、ストレージ装置200のコントローラ210によって生成・管理される、フラッシュメモリプールについて説明する。フラッシュメモリプールは、複数のフラッシュメモリ220-iをグループ化することにより構成される。つまり、フラッシュメモリプールをフラッシュメモリ220-iの集合と見なすこともできる。
【0019】
図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が配置(論理的に配置)されている。
【0020】
フラッシュメモリプール内の各フラッシュメモリ220-iの記憶領域は一定サイズのブロック(物理ブロック)0,1,2,…に分割して管理される。ブロック0,1,2,…には、それぞれ、ブロック番号0,1,2,…が付与される。
【0021】
ここで、フラッシュメモリプール内で隣接するフラッシュメモリ220-iのブロックをある一定の個数でグループ化した集合をチャンク(chunk)と定義する。フラッシュメモリ220-4及び220-0も互いに隣接しているものとする。図2の例では、チャンクを構成するブロックの数(以下、チャンク数と称する)は4であり、A0,B0,C0,D0,E0,A1…のようにチャンク(チャンク領域)が構成されている。
【0022】
本実施形態において、チャンク数は、フラッシュメモリプールを構成するフラッシュメモリの数より小さく且つフラッシュメモリの数と互いに素な数であるとする。本実施形態のように、フラッシュメモリプールを構成するフラッシュメモリの数が5の場合、適用可能なチャンク数は、2、3または4のいずれかである。図2に示すフラッシュメモリプールにおいて、チャンクをメディア番号が0のフラッシュメモリ220-0から順に割り当てるものとする。この場合、全フラッシュメモリ220-0〜220-4がチャンク数に一致する数のブロックを消費すると、次のチャンクが再びメディア番号が0のフラッシュメモリ220-0から割り当てられることになる。
【0023】
図2の例ではフラッシュメモリの数がフラッシュメモリ220-0〜220-4の5で、チャンク数が4である。この場合、先頭ブロック0から4ブロック単位でチャンクA0〜E0が割り当てられ、後続の4ブロック単位でチャンクA1〜E1が割り当てられるというように、先頭のフラッシュメモリ220-0の先頭ブロック0から順に4ブロック単位でチャンクが割り当てられる。
【0024】
つまり、フラッシュメモリ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が割り当てられる。
【0025】
ここで、フラッシュメモリ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…)の組み合わせ、というように全てのフラッシュメモリでチャンクの組み合わせが異なる。
【0026】
この特徴は、それぞれのチャンクへの書き込み回数が異なれば、全てのフラッシュメモリ220-0〜220-4への書き込み回数が異なる可能性が高いということを表す。本実施形態では、この特徴を利用して論理ディスクが生成(構成)される。本実施形態で適用される論理ディスクは、タイプ1の論理ディスクとタイプ2の論理ディスクとに分類される。
【0027】
図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…(のブロック)を論理ブロックに割り当てることにより構成される。
【0028】
このように、タイプ1の論理ディスクは、フラッシュメモリプール内のフラッシュメモリ220-0〜220-4のうち、チャンク数に一致する数の予め定められたフラッシュメモリのチャンクを割り当てることによって構成される。このタイプ1の論理ディスクは、同一論理ディスクの記憶領域内で書き込み回数の偏りが少ないが、論理ディスク毎に書き込み回数が異なる場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ1の論理ディスクは、論理ディスク毎に用途が異なるようなシステムへの適用が想定される。例えば、データベース用、バックアップ用、或いはファイルサーバ用等の論理ディスクを混在させる場合のように、各論理ディスクの書き込み回数が異なることが想定される場合に効果が高い。
【0029】
図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…(のブロック)を論理ブロックに割り当てることにより構成される。
【0030】
このように、タイプ2の論理ディスクは、フラッシュメモリプール内の全フラッシュメモリ220-0〜220-4にまたがってチャンクを割り当てることによって構成される。このタイプ2の論理ディスクは、各論理ディスクの書き込み回数は殆ど同じであるが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ2の論理ディスクは、例えば、ランダムアクセスが多くデータ書き込みが局所化しているようなデータベースに適用される論理ディスクを複数生成する場合に効果が高い。
【0031】
以上、各フラッシュメモリの書き込み回数が均一化するのを抑制するための論理ディスクの構成について説明した。
【0032】
次に、図1に示されるストレージ装置200のコントローラ210の構成について説明する。
図5は、ストレージ装置200の主としてコントローラ210の構成を示すブロック図である。コントローラ210は、ホストI/F処理部211、コマンド処理部212、I/O処理部213、アドレス処理部214、フラッシュメモリI/F処理部215、ディスク管理部216、初期化処理部217及び管理情報記憶部230を備えている。
【0033】
ホストI/F処理部211は、ホスト計算機100のホストI/F102と通信するためのインターフェイスである。本実施形態では、このインターフェイスとしてSCSIインターフェイスを想定している。
【0034】
コマンド処理部212は、ホスト計算機100のホストI/F102によって転送されるコマンをホストI/F処理部211を介して受信する。本実施形態において、このコマンドはSCSIコマンドである。SCSI規格では、SCSIコマンドを用いてホスト計算機とストレージ装置間でデータ転送が行われる。SCSIコマンドはI/O系のSCSIコマンド(I/O系コマンド)と制御系のSCSIコマンド(制御系コマンド)に分類される。
【0035】
I/O系コマンドは、ホスト計算機上で動作するプログラムがストレージ装置の論理ディスクに対して読み出し/書き込みを要求した場合に、ホスト計算機のオペレーティングシステムによって当該読み出し/書き込み要求から変換されてストレージ装置に発行されるSCSIコマンドである。制御系コマンドは、ストレージ装置に関する情報を取得し、或いはストレージ装置に当該ストレージ装置に関する情報を設定するためのSCSIコマンドである。ストレージ装置ベンダーは当該ストレージ装置ベンダー固有のSCSI拡張コマンドを定義することができる。そこでホスト計算機100上で動作する設定ツール101は、ユーザが入力した情報(パラメータ)に応じてSCSI拡張コマンドを生成し、当該生成したSCSI拡張コマンドをコントローラ210に発行することで、ストレージ装置200に対する情報の参照或いは情報の設定を行う。
【0036】
コマンド処理部212は受信したSCSIコマンドがI/O系コマンドであるか、或いは制御系コマンドであるかを判別する。I/O系コマンドの場合、コマンド処理部212は受信したSCSIコマンドをI/O処理部213に渡す。I/O処理部213は、アドレス処理部214を用いて論理ディスクに対する読み出し/書き込み処理を行う。一方、制御系コマンドの場合、コマンド処理部212は受信したSCSIコマンドをディスク管理部216または初期化処理部217に渡してユーザの要求に応じた処理を行わせる。
【0037】
管理情報記憶部230は不揮発記憶領域を備えており、当該不揮発性記憶領域に各種の管理情報を格納する。本実施形態において管理情報記憶部230は、フラッシュメモリプールテーブル231(図8参照)とブロック割り当てテーブル232(図9参照)を含むブロック割り当てテーブル群とを、管理情報として格納する。管理情報記憶部230はまた、生成された論理ディスクの数に対応するマッピングテーブル群、例えばマッピングテーブル233(図10参照)を含むマッピングテーブル群を管理情報として格納する。
【0038】
ディスク管理部216は、論理ディスクの生成、生成された論理ディスクの管理など、ユーザの要求に応じた処理を、管理情報記憶部230を用いて行う。そのためディスク管理部216は、管理情報記憶部230に対する情報の参照及び情報の書き換えが可能なように構成されている。より詳細に述べるならば、ディスク管理部216は、論理ディスクの生成のために、フラッシュメモリプールテーブルの参照、ブロック割り当てテーブルの更新、マッピングテーブルの生成等を行う。初期化処理部217は、フラッシュメモリプールテーブルの生成、及びブロック割り当てテーブルの生成等の初期化処理を行う。
【0039】
図6はディスク管理部216の構成を示すブロック図である。
ディスク管理部216は、論理ディスク生成部2160を含む。論理ディスク生成部2160は、論理ディスクの生成のために、フラッシュメモリプールからチャンク(チャンク領域)の群を選択する。論理ディスク生成部2160は、選択されたチャンク領域の群を結合することにより、選択されたチャンク領域の群から構成される論理ディスクを生成する。この論理ディスクの生成は、後述するように、当該論理ディスクに対応するマッピングテーブルを生成することにより実現される。
【0040】
図7は初期化処理部217の構成を示すブロック図である。
初期化処理部217は、フラッシュメモリプールを生成するためのフラッシュメモリプール生成部2170を含む。フラッシュメモリプール生成部2170は、グループ化部2171、ブロック分割部2172、チャンク生成部2173及び論理ディスクタイプ設定部2174から構成される。初期化処理部217は更に、ブロック割り当てテーブルを生成するためのブロック割り当てテーブル生成部2175を含む。
【0041】
グループ化部2171は、複数のフラッシュメモリをグループ化することにより。当該グループ化されたフラッシュメモリの集合からなるフラッシュメモリプールを生成する。ブロック分割部2172は、グループ化されたフラッシュメモリの各々の記憶領域を一定サイズのブロックに分割する。
【0042】
チャンク生成部2173は、グループ化されたフラッシュメモリの集合に基づき、グループ化されたフラッシュメモリの個数未満のブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク(チャンク領域)を生成する。論理ディスクタイプ設定部2174は、フラッシュメモリプールを用いて生成することが可能な論理ディスクのタイプを設定する。
【0043】
次に、本実施形態で適用される論理ディスクを生成するための処理について説明する。本実施形態において論理ディスクを生成するためには、論理ディスク生成処理300(図13参照)に加えて、論理ディスクの生成に用いられるフラッシュメモリの集合から構成されるフラッシュメモリプールを生成するための初期化処理120(図12参照)が必要となる。
【0044】
まず、初期化処理120について説明する。
ユーザは、ホスト計算機100の設定ツール101を用いて、フラッシュメモリプールを生成するための入力操作を行う。フラッシュメモリプールの生成のためにユーザが最低限入力する必要があるパラメータは、フラッシュメモリプールのサイズとフラッシュメモリ群から生成される論理ディスクのタイプである。論理ディスクのタイプは、2つのタイプ(タイプ1またはタイプ2)の中からユーザによって選択される。設定ツール101は、ユーザによる上記サイズ及びタイプの入力操作に従い、フラッシュメモリプールの生成を要求するための第1のSCSI拡張コマンド(制御系コマンド)を生成する。第1のSCSI拡張コマンドは、ユーザが入力したパラメータ、つまりサイズ(フラッシュメモリプールサイズ)及びタイプ(論理ディスクタイプ)を含む。設定ツール101は、第1のSCSI拡張コマンドを、ホストI/F102を介してストレージ装置200のコントローラ210に転送することで、当該コントローラ210に対してフラッシュメモリプールの生成を要求する。
【0045】
コントローラ210に転送された第1のSCSI拡張コマンドは、ホストI/F処理部211を介してコマンド処理部212で受信される。コマンド処理部212は、第1のSCSI拡張コマンド(つまりフラッシュメモリプールの生成を要求するSCSI拡張コマンド)を受信した場合、当該第1のSCSI拡張コマンドを初期化処理部217に渡す。すると初期化処理部217は、図12のフローチャートに従って、フラッシュメモリプールの生成を含む初期化処理120を実行する。
【0046】
以下、初期化処理120の手順について、図12のフローチャートを参照して説明する。
初期化処理120において、初期化処理部217のフラッシュメモリプール生成部2170は、第1のSCSI拡張コマンドに含まれているパラメータ(フラッシュメモリプールサイズ及び論理ディスクタイプ)とコントローラ210に接続されているフラッシュメモリ(ここではフラッシュメモリ220-0〜220-4)に関する情報とに基づき、図8に示すフラッシュメモリプールテーブル231を生成する。
【0047】
フラッシュメモリプールテーブル231は、フラッシュメモリプールを管理するためのフラッシュメモリプール管理情報を保持する。このフラッシュメモリプール管理情報は、図8に示すように、開始メディア番号、メディア数、ブロックサイズ、チャンク数及び論理ディスクタイプから構成される。
【0048】
フラッシュメモリプール生成部2170は、フラッシュメモリプールテーブル231を次のように生成する。まずフラッシュメモリプール生成部2170のグループ化部2171は、コントローラ210に接続されているフラッシュメモリを検索する(ステップ121)。ここでは、5つのフラッシュメモリ220-0〜220-4が検索される。
【0049】
グループ化部2171はまた、管理情報記憶部230からブロック割り当てテーブル(検索されたフラッシュメモリ220-0〜220-4にそれぞれ対応するブロック割り当てテーブル)を検索する(ステップ122)。本実施形態において、図9に示すブロック割り当てテーブル232のようなブロック割り当てテーブルは、フラッシュメモリプールに所属する全てのフラッシュメモリにそれぞれ対応付けて生成されて、管理情報記憶部230に格納される。フラッシュメモリプールに所属しないフラッシュメモリ対応するブロック割り当てテーブルは存在しない。
【0050】
図9に示すブロック割り当てテーブル232は、対応するフラッシュメモリのブロック(物理ブロック)毎に、当該ブロックが論理ディスクのブロック(論理ブロック)に割り当てられているか、つまり使用されているか、或いは割り当てられていないか、つまり使用されていないかを示す情報を保持する。本実施形態において、この情報はフラグであり、“0”で対応するブロックが使用されていないことを、“1”で対応するブロックが使用されていることを示す。
【0051】
本実施形態では、グループ化部2171がブロック割り当てテーブルを検索した時点では、管理情報記憶部230にブロック割り当てテーブルはひとつも格納されていないものとする。グループ化部2171は、ブロック割り当てテーブル検索の結果に基づき、対応するブロック割り当てテーブルが存在しないフラッシュメモリのメディア番号のうち、最も小さいメディア番号を、図8に示すフラッシュメモリプールテーブル231に開始メディア番号として登録する(ステップ123)。ここでは、フラッシュメモリ220-0〜220-4のメディア番号0〜4のうちのメディア番号0が、図8に示すように開始メディア番号として登録される。
【0052】
次にグループ化部2171は、フラッシュメモリサイズと第1のSCSI拡張コマンドに含まれているフラッシュメモリプールサイズとに基づき、フラッシュメモリプールを構成するのに必要なフラッシュメモリの数を求め、この数をフラッシュメモリプールテーブル231にメディア数として登録する(ステップ124)。このメディア数は、フラッシュメモリプールサイズをフラッシュメモリサイズで除することにより求められる。ここでは図8に示すように、メディア数として5が登録されたものとする。この場合、コントローラ210に接続されている全てのフラッシュメモリ220-0〜220-4がフラッシュメモリプールを構成することになる。つまりグループ化部2171は、フラッシュメモリ220-0〜220-4をグループ化し、当該グループ化されたフラッシュメモリ220-0〜220-4によりフラッシュメモリプールを構成する。
【0053】
すると、フラッシュメモリプール生成部2170のブロック分割部2172が起動される。ブロック分割部2172は、フラッシュメモリプールテーブル231に、ブロックサイズとして、デフォルトの値、例えば1MB(メガバイト)を登録する(ステップ125)。このブロックサイズの登録により、ブロック分割部2172は等価的に、グループ化部2171によってグループ化されたフラッシュメモリの各々の記憶領域を当該ブロックサイズのブロックに分割したことになる。なお、ブロックサイズの登録のために、設定ツール101のオプションとしてユーザが別の値を指定することも可能とする。
【0054】
次にフラッシュメモリプール生成部2170のチャンク生成部2173が起動される。チャンク生成部2173は、グループ化部2171によってステップ124で求められたメディア数より小さな数で且つ当該メディア数と互いに素な数を求め、この数をフラッシュメモリプールテーブル231にチャンク数として登録する(ステップ126)。このような条件を満たす数(チャンク数)を取得するためには、メディア数が3以上であればよい。つまりフラッシュメモリプールを構成するフラッシュメモリの数が3以上であればよい。
【0055】
チャンク数の登録により、チャンク生成部2173は等価的に、チャンク数に一致するブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク(チャンク領域)を生成したことになる。チャンク数は、上述の説明から明らかなように、メディア数(グループ化されたフラッシュメモリの個数)未満の数であり、より詳細には、メディア数より小さな数で且つ当該メディア数と互いに素な数である。
【0056】
チャンク数として複数の候補がある場合、初期化処理部217は、例えば最大の数を選択する。本実施形態のようにメディア数が5の場合、2、3または4が候補となるので、最大値4が選択される。なお、複数の候補のうちの最大の数以外(例えば中間の数)が選択される構成であっても構わない。また、設定ツール101のオプションとして複数の候補からユーザにチャンク数を選択させることも可能である。
【0057】
次にグループ化部2171の論理ディスクタイプ設定部2174が起動される。論理ディスクタイプ設定部2174は、第1のSCSI拡張コマンドに含まれている論理ディスクタイプを、フラッシュメモリプールテーブル231に登録する(ステップ127)。次に初期化処理部217のブロック割り当てテーブル生成部2175が起動される。ブロック割り当てテーブル生成部2175は、フラッシュメモリプールテーブル231によって示されるフラッシュメモリプールに所属するフラッシュメモリ(ここではフラッシュメモリ220-0〜220-4)にそれぞれ対応付けられるブロック割り当てテーブル(初期ブロック割り当てテーブル)を生成する(ステップ128)。このブロック割り当てテーブルのエントリ数は、対応するフラッシュメモリのブロック数に一致し、各エントリには、対応するブロックが未使用であることを示すフラグ(0)が登録される。
【0058】
フラッシュメモリプール生成部2170及びブロック割り当てテーブル生成部2175は、それぞれ、生成されたフラッシュメモリプールテーブル231及びブロック割り当てテーブルの群を管理情報記憶部230に格納する(ステップ129)。これにより、論理ディスク生成のための初期化処理120は終了し、フラッシュメモリプールテーブル231によって示されるフラッシュメモリプールが生成されたことになる。なお、コントローラ210に接続されるフラッシュメモリの数が本実施形態と異なって5を超えている場合、例えば8の場合、フラッシュメモリ220-0〜220-4から構成されるフラッシュメモリプール以外に、残りの3つのフラッシュメモリから構成されるフラッシュメモリプールを生成することも可能である。
【0059】
フラッシュメモリテーブルが生成されると、ユーザは当該フラッシュメモリテーブルによって示されるフラッシュメモリプールから領域を切り出して論理ディスクを生成することを、設定ツール101を操作することによってコントローラ210に要求することができる。具体的には、ユーザは設定ツール101を操作することによって、生成されるべき論理ディスクのサイズと、論理ディスクの生成の要求とを入力する。また、フラッシュメモリプールが複数存在する場合、ユーザは、例えば生成されるべき論理ディスクのサイズを入力する前に、論理ディスク生成の対象となるフラッシュメモリプールを選択する。
【0060】
設定ツール101は、上述したユーザの入力操作に従い、論理ディスクの生成を要求するための第2のSCSI拡張コマンド(制御系コマンド)を生成する。第2のSCSI拡張コマンドは、ユーザが入力した論理ディスクのサイズ、更にはユーザが選択したフラッシュメモリプールを示すパラメータを含む。設定ツール101は、第2のSCSI拡張コマンドを、ホストI/F102を介してストレージ装置200のコントローラ210に転送することで、当該コントローラ210に対して論理ディスクの生成を要求する。
【0061】
コントローラ210に転送された第2のSCSI拡張コマンドは、ホストI/F処理部211を介してコマンド処理部212で受信される。コマンド処理部212は、第2のSCSI拡張コマンド(つまり論理ディスクの生成を要求するSCSI拡張コマンド)を受信した場合、当該第2のSCSI拡張コマンドをディスク管理部216に渡す。するとディスク管理部216の論理ディスク生成部2160は、図13のフローチャートに従って、第2のSCSI拡張コマンドによって要求された論理ディスクを生成するための論理ディスク生成処理300を実行する。
【0062】
以下、論理ディスク生成処理300の手順について、図13のフローチャートを参照して説明する。
まず論理ディスク生成部2160は、第2のSCSI拡張コマンドに基づき、生成すべき論理ディスク及び対象となるフラッシュメモリプール(対象フラッシュメモリプール)に関する情報を取得する(ステップ310)。ステップ310において論理ディスク生成部2160は、取得した情報に基づいて、変数SIZE、CHUNK、BLK_SIZE及びN_MEDIAの値を設定する。
【0063】
具体的には、論理ディスク生成部2160は、生成すべき論理ディスクに関する情報として、当該論理ディスクのサイズを、第2のSCSI拡張コマンドから取得する。論理ディスク生成部2160は、取得した論理ディスクのサイズを変数SIZEとして設定する。また論理ディスク生成部2160は、対象フラッシュメモリプールに関する情報(管理情報)を、第2のSCSI拡張コマンドに含まれているフラッシュメモリプールを示すパラメータに基づいて、管理情報記憶部230に格納されている対応するフラッシュメモリプールテーブルを参照することにより取得する。ここでは、フラッシュメモリプールテーブル231が参照されたものとする。この場合、論理ディスク生成部2160は、フラッシュメモリプールテーブル231から、対象フラッシュメモリプールに関する情報として、当該フラッシュメモリプールのチャンク数、ブロックサイズ及びメディア数(図8参照)を取得する。論理ディスク生成部2160は、取得したチャンク数、ブロックサイズ及びメディア数を、それぞれ変数CHUNK、BLK_SIZE及びN_MEDIAとして設定する。
【0064】
次に論理ディスク生成部2160は、対象フラッシュメモリプールに所属する全てのフラッシュメモリ(メディア)にそれぞれ対応するブロック割り当てテーブルを参照することにより、未使用ブロックのブロック番号のうちの最小のブロック番号(最小未使用ブロック番号)と、当該最小のブロック番号のブロックを含むフラッシュメモリのメディア番号とを取得する(ステップ320)。具体的には、論理ディスク生成部2160は上記対応するブロック割り当てテーブル毎に、未使用ブロックのブロック番号のうちの最小のブロック番号を取得し、それらの最小のブロック番号の中で最も小さなブロック番号を目的のブロック番号とする。もし、該当する未使用ブロックが複数ある場合、論理ディスク生成部2160は、該当する未使用ブロックを含む同数のフラッシュメモリのうち、最もメディア番号の小さなフラッシュメモリの当該メディア番号を目的のメディア番号とする。
【0065】
ステップ320において論理ディスク生成部2160は、取得したメディア番号及びブロック番号を、それぞれ最初のメディア番号を表す変数NM_FIRST及び最初のブロック番号を表す変数NB_FIRSTとして設定する。論理ディスク生成部2160はまた、変数NM_FIRST及びNB_FIRSTを、それぞれメディア番号を表す変数NM及びブロック番号を表す変数NBとして設定する。
【0066】
次に論理ディスク生成部2160は、フラッシュメモリプールテーブル231に保持されている論理ディスクタイプを判別する(ステップ330)。もし、論理ディスクタイプがタイプ1であるならば、論理ディスク生成部2160は、当該タイプ1の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク(タイプ1)マッピングテーブル生成処理を行う(ステップ340)。これに対し、論理ディスクタイプがタイプ2であるならば、論理ディスク生成部2160は、当該タイプ2の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク(タイプ2)マッピングテーブル生成処理を行う(ステップ340)。
【0067】
マッピングテーブルは、対応する論理ディスクの構成を管理(定義)するためのテーブルである。そのためマッピングテーブルは、対応する論理ディスクのそれぞれの論理アドレスのデータ領域(論理ブロック)に、いずれのフラッシュメモリ(メディア)のいずれのブロックがマッピングされているかを登録したエントリ群を有する。図10は、図3(a)に示されるタイプ1の論理ディスク221aに対応するマッピングテーブル233の例を示し、図11は、図4(a)に示されるタイプ2の論理ディスク222aに対応するマッピングテーブル234の例を示す。マッピングテーブル233及び234の各エントリは、論理アドレス、メディア番号及びブロック番号がそれぞれ登録されるフィールドを有する。
【0068】
次に、論理ディスク生成部2160によって実行される論理ディスク(タイプ1)マッピングテーブル生成処理(ステップ340)の詳細な手順について、図14のフローチャートを参照して説明する。
【0069】
まず論理ディスク生成部2160は、論理アドレスを示す変数ADDRを0(より詳細には00000000H)に、ブロック数(より詳細にはブロック数のカウント値)を示す変数COUNTを0に、それぞれ初期設定する(ステップ3401)。末尾のHは、周知のように16進表現であることを示す。このステップ3401において、ADDR=0(00000000H)は、マッピングテーブルの先頭エントリの論理アドレスフィールドに登録される。次に論理ディスク生成部2160は、所定のループA(ステップ3402)を、終了条件が成立するまで繰り返す。この終了条件は、ADDR≧SIZEを満足することである。
【0070】
論理ディスク生成部2160はループAにおいて、まず、ADDR(=0)が登録されたマッピングテーブルのエントリ(ADDRエントリ)のメディア番号フィールド及びブロック番号フィールドに、それぞれNM及びNBを登録する(ステップ3403)。ステップ3403において論理ディスク生成部2160は更に、メディア番号がNMのフラッシュメモリに対応するブロック割り当てテーブル232のブロック番号がNBのエントリに“1”(“1”のフラグ)を登録する。
【0071】
次に論理ディスク生成部2160は、COUNTがCHUNK未満であるかを判定する(ステップ3404)。もし、COUNTがCHUNK未満であるならば(ステップ3404のYes)、つまりカウントしたブロック数がチャンク数未満であるならば、論理ディスク生成部2160は、1つのチャンク(チャンク領域)についての処理(論理ディスクの対応する領域への割り当て)が終了していないものと判断する。この場合、論理ディスク生成部2160は、現在処理中のチャンクにおける次のブロックについての処理(対応する論理ブロックへの割り当て)のためにCOUNTを1インクリメントする(ステップ3405)。
【0072】
これに対し、COUNTがCHUNK未満でないならば(ステップ3404のNo)、つまりカウントしたブロック数がチャンク数未満でないならば、論理ディスク生成部2160は、1つのチャンクについての処理が終了したものと判断する。この場合、論理ディスク生成部2160は、次のチャンク(チャンク領域)の先頭のブロックについての処理のために、NMをNM_FIRSTに、NBをNB+CHUNKに、そしてCOUNTを0に、それぞれ更新する(ステップ3406)。
【0073】
ここで、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のチャンクを割り当てることになる。
【0074】
論理ディスク生成部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となる。
【0075】
そこで、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のブロック)が存在するフラッシュメモリのメディア番号を示す。
【0076】
論理ディスク生成部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が行われる。
【0077】
ADDR=00100000Hは、SIZE(つまり、生成されるべき論理ディスクのサイズ)未満であり、ループA(ステップ3402)の終了条件を満たさない。この場合、当該ループAが再び実行される。明らかなように、ループAがCHUNK(チャンク数)で示される回数繰り返されることにより、1つのチャンク(チャンク領域)を構成する、チャンク数に一致する数のブロックの対応する論理ブロックへの割り当てが完了する。
【0078】
やがて、ADDRがBLK_SIZE以上となったならば、論理ディスク生成部2160はループAから抜けて、論理ディスク(タイプ1)マッピングテーブル生成処理を終了する。これにより、例えば図10に示すタイプ1の論理ディスクのマッピングテーブル233が生成される。
【0079】
本実施形態において、マッピングテーブルの生成は、論理ディスク生成部2160の作業領域(図示せず)用いて行われる。この作業領域上で生成されたマッピングテーブル、つまりタイプ1の論理ディスクに対応するマッピングテーブルは、マッピングテーブル生成処理の終了時に、管理情報記憶部230に格納される。マッピングテーブルの生成が、管理情報記憶部230内で行われても構わない。
【0080】
次に、論理ディスク生成部2160によって実行される論理ディスク(タイプ2)マッピングテーブル生成処理(ステップ350)の詳細な手順について、図15のフローチャートを参照して説明する。
【0081】
まず論理ディスク生成部2160は、論理ディスク(タイプ1)マッピングテーブル生成処理におけるステップ3401と同様のステップ3501を実行する。次に論理ディスク生成部2160は、所定のループB(ステップ3502)を、終了条件が成立するまで繰り返す。この終了条件は、ADDR≧SIZEを満足することである。
【0082】
論理ディスク生成部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に戻されることはない。
【0083】
ここで、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)のチャンクを割り当てることになる。
【0084】
論理ディスク生成部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)。
【0085】
論理ディスク生成部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に格納される。
【0086】
マッピングテーブルが生成されたことは、当該マッピングテーブルによって管理(定義)される論理ディスクが生成されたことと等価である。コントローラ210が論理ディスクを生成した後、ユーザがホスト計算機100を再起動する。するとホスト計算機100のオペレーティングシステムは、ストレージ装置200に構築されている論理ディスクに関する情報等、ストレージ装置200に関する情報を検出(取得)するために、例えば、SCSI規格に準拠した問い合わせ(INQUIRY)コマンドをホストI/F102を介してコントローラ210に発行する。
【0087】
コントローラ210は、ホスト計算機100からのINQUIRYコマンドに応答することで、論理ディスクがストレージ装置200内に生成されたことを当該ホスト計算機100通知する。ホスト計算機100のオペレーティングシステムは、この通知に基づき、生成された論理ディスクを読み出し/書き込みが可能なディスクとして検出する。これによりホスト計算機100上のプログラムは、検出された論理ディスクに対して読み出し/書き込みできるようになる。
【0088】
次に、ストレージ装置200のコントローラ210におけるアドレス処理部214の動作について説明する。前述したようにコントローラ210のコマンド処理部212がホスト計算機100によって発行されるI/O系のSCSIコマンドを受信した場合、I/O処理部213は、アドレス処理部214を用いて論理ディスクに対する読み出し/書き込み処理を行う。
【0089】
ホスト計算機100によって発行されるI/O系のSCSIコマンド、例えばホスト計算機100のオペレーティングシステムによって発行される読み出し/書き込み要求は、読み出し/書き込みデータの位置を示すセクタアドレスを含む。本実施形態において、セクタアドレスで指定されるセクタは、512バイトで構成されるものとする。この場合、アドレス処理部214は、セクタアドレスに512を乗ずることにより、セクタアドレスをバイトアドレスに変換する。
【0090】
アドレス処理部214は、変換されたバイトアドレスからブロックサイズ−1に対応するビット部分を切り捨てる(補数の論理積)ことで、読み出し/書き込みされるべき論理ディスク(目的論理ディスク)内のブロックの論理アドレスを取得する。アドレス処理部214は、取得した論理アドレスが登録された、目的論理ディスクに対応するマッピングテーブルのエントリを検索する。アドレス処理部214は、検索されたマッピングテーブルのエントリに登録されているメディア番号及びブロック番号に基づき、読み出し/書き込みされるべき論理ディスク内のブロックを特定する。アドレス処理部214は更に、切り捨て前のバイトアドレスにブロックサイズ−1でマスク(論理積)することにより、読み出し/書き込みが開始されるべきブロック内の位置(オフセット)を取得する。
【0091】
アドレス処理部214は、読み出し/書き込みが開始されるべきブロック内の位置を特定したならば、フラッシュメモリI/F処理部215に対して、該当するフラッシュメモリを対象にデータを読み出し/書き込みするための読み出し/書き込み要求を発行することにより、データの読み出し/書き込みを行う。
【0092】
アドレス処理部214によるデータの読み出し/書き込みが完了すると、ホストI/F処理部211は、その旨を、ホスト計算機100に対して例えば割り込みにより通知する。ホスト計算機100のオペレーティングシステムはコントローラ210からの割り込みを検出すると、その旨を対応するプログラムに返して終了する。
【0093】
以上に述べた論理ディスクの構成(図3及び図4参照)はRAID0(RAIDレベル0のRAID)に相当する。このような構成の論理ディスクでは、フラッシュメモリへの並列な読み書きが行われるので、RAID0と同様の高速化が見込める。
【0094】
次に、本実施形態で適用されるRAID1相当の冗長化について説明する。
RAID1と同様のミラーは、フラッシュメモリプールの複製を生成することで構成できる。例えば論理ディスク生成部2160は、全く同一サイズの2つのフラッシュメモリプールの一方をマスター、他方をスレーブとして、マスターのフラッシュメモリプールを用いて前述したような論理ディスクを生成する。アドレス処理部214は、論理ディスクへの書き込み時に、マスター側のフラッシュメモリにデータを書き込んだ後、スレーブ側のフラッシュメモリプールの同一位置にもデータを書き込む。またアドレス処理部214は、データの読み込みはマスター側のみから行う。マスター側に対する読み出し/書き込みでエラーが発生した場合、アドレス処理部214は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ(例えば値が2のフラグ)を書き込む。この場合、アドレス処理部214は、スレーブ側のフラッシュメモリを対象に読み出し/書き込みを行う。
【0095】
次に、本実施形態で適用されるRAID5相当の冗長化について説明する。
論理ディスク生成部2160は、チャンクの中の1つのブロックをパリティ専用のブロック、つまり当該チャンクの他のブロックに格納されるデータの冗長データとしてのパリティデータを保持するパリティブロック(冗長ブロック)に割り当てる。これにより、RAID5と同等の冗長化を実現することができる。例えば、チャンクを構成する複数のブロックのうち最後の1個のブロックをパリティブロックとすることで、RAID5と同様の冗長化を実現できる。但し、パリティブロックを導入する場合、マッピングテーブルの生成アルゴリズム及び読み出し/書き込み処理は次のように変更される必要がある。
【0096】
チャンクの最後のブロックの場合、論理ディスク生成部2160は、当該ブロックをマッピングテーブルに登録せず、論理アドレスの加算(ステップ3410または3510)も抑止する。一方、アドレス処理部214は、書き込み処理においてチャンクの最後のブロックにパリティを書き込み、読み出し処理においてパリティチェックする。読み出し/書き込みでエラーが発生した場合、アドレス処理部214は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ(例えば値が2のフラグ)を書き込む。また、エラーが発生したブロックからデータを読むことができない場合、アドレス処理部214はパリティを利用してデータを復元する。
【0097】
また、論理ディスクを構成するフラッシュメモリに不良が発生した場合、論理ディスク生成部2160は当該不良が発生したフラッシュメモリのブロック割り当てテーブルを参照して、ホスト計算機100の設定ツール101を通して、フラッシュメモリが故障したことをユーザに通知する。
【0098】
以上、フラッシュメモリプールの生成、論理ディスクの生成及び論理ディスクに対する読み出し/書き込みについて説明した。
本実施形態によれば、論理ディスクを構成するフラッシュメモリ群に書き込みを分散させることが、ブロックの入れ替えを行うことなくできる。つまりフラッシュメモリ群への書き込みの回数が均一になるのを、ブロックの入れ替えを行うことなく抑制できる。このため、フラッシュメモリ群への書き込みの回数の上限値を同時に越えることが、簡単に回避できる。つまり、フラッシュメモリが同時に故障することによる障害を、処理性能を低下させることなく減らすことができる。特に本実施形態においては、チャンクを構成するブロック数を、フラッシュメモリプールを構成するフラッシュメモリの数と「互いに素」にすることにより、フラッシュメモリ群への書き込みの回数が均一になることを、より効果的に抑制できる。
【0099】
また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ1の論理ディスクを生成することにより、論理ディスク毎に書き込み回数(頻度)が異なる場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ2の論理ディスクを生成することにより、各論理ディスクの書き込み回数(頻度)は同程度だが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。
【0100】
以上説明した少なくとも1つの実施形態によれば、処理性能を低下させることなく、複数の不揮発性メモリの同時不良の発生を抑制することができる、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法を提供することができる。
【0101】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0102】
100…ホスト計算機、101…設定ツール、102…ホストI/F、200…ストレージ装置、210…コントローラ(ストレージコントローラ)、211…ホストI/F処理部、212…コマンド処理部、213…I/O処理部、214…アドレス処理部、215…フラッシュメモリI/F処理部、216…ディスク管理部、217…初期化処理部、220-0〜220-4…フラッシュメモリ(不揮発性メモリ)、221a,221b…論理ディスク(タイプ1の論理ディスク)、222a,222b…論理ディスク(タイプ2の論理ディスク)、230…管理情報記憶部、231…フラッシュメモリプールテーブル、232…ブロック割り当てテーブル、233,234…マッピングテーブル、2160…論理ディスク生成部、2170…フラッシュメモリプール生成部、2171…グループ化部、2172…ブロック分割部、2173…チャンク生成部、2174…論理ディスクタイプ設定部、2175…ブロック割り当てテーブル生成部。

【特許請求の範囲】
【請求項1】
書き換え可能な第1の数の不揮発性メモリと、
ホスト計算機からのアクセス要求に基づいて、前記第1の数の不揮発性メモリのうち対応する論理ディスクを構成する不揮発性メモリへのアクセスを制御するストレージコントローラとを具備し、
前記ストレージコントローラは、
前記論理ディスクの生成に用いられるプールを生成するプール生成手段と、
前記論理ディスクを生成する論理ディスク生成手段とを具備し、
前記プール生成手段は、
前記第1の数の不揮発性メモリのうちの第2の数の不揮発性メモリをグループ化して、前記第2の数の不揮発性メモリから構成されるプールを生成するグループ化手段と、
前記プールを構成する前記第2の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するブロック分割手段と、
前記ブロックに分割された前記第2の数の不揮発性メモリを対象に、前記第2の数未満の第3の数のブロックであって、前記第2の数の不揮発性メモリのうちの異なる不揮発性メモリのブロックを単位に、当該第3の数のブロックを結合することにより、前記第3の数のブロックから構成される複数のチャンクを生成するチャンク生成手段とを具備し、
前記論理ディスク生成手段は、前記複数のチャンクが生成された前記第2の数の不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成する
ストレージ装置。
【請求項2】
前記第3の数が、前記第2の数未満であるだけでなく、前記第1の数と互いに素である請求項1記載のストレージ装置。
【請求項3】
前記論理ディスク生成手段は、前記複数のチャンクが生成された前記第2の数の不揮発性メモリのうちの前記第3の数の不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成する請求項1または2に記載のストレージ装置。
【請求項4】
前記論理ディスク生成手段は、前記複数のチャンクが生成された前記第2の数の不揮発性メモリに均等にまたがるように、前記第3の数に一致する数の異なる組み合わせの不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成する請求項1または2に記載のストレージ装置。
【請求項5】
前記第2の数の不揮発性メモリの配列は前記プールを生成する際に定められており、
前記論理ディスク生成手段は、前記第3の数に一致する数の不揮発性メモリにまたがる第1のチャンクを割り当てた場合、前記第1のチャンクの最終ブロックが存在する不揮発性メモリの次の不揮発性メモリから始まる前記第3の数に一致する数の不揮発性メモリにまたがる第2のチャンクを割り当てる請求項4記載のストレージ装置。
【請求項6】
前記プール生成手段は、同一構成の2つのプールを生成し、
前記ストレージ装置は、データ書き込みが要求された場合、前記2つのプールの一方をマスタープール、前記2つのプールの他方をスレーブプールとして、前記マスタープールへのデータの書き込みの後、前記スレーブプールの対応するブロックへデータを書き込むアドレス処理手段を更に具備する
請求項1または2に記載のストレージ装置。
【請求項7】
前記論理ディスク生成手段は、前記論理ブロックに割り当てられるチャンク毎に、当該チャンクを構成する前記第3の数のブロックの1つを、他のブロックに格納されるデータの冗長データを保持する冗長ブロックに割り当てる請求項1または2に記載のストレージ装置。
【請求項8】
書き換え可能な第1の数の不揮発性メモリと接続され、ホスト計算機からのアクセス要求に基づいて、前記第1の数の不揮発性メモリのうち対応する論理ディスクを構成する不揮発性メモリへのアクセスを制御するストレージコントローラにおいて、
前記論理ディスクの生成に用いられるプールを生成するプール生成手段と、
前記論理ディスクを生成する論理ディスク生成手段とを具備し、
前記プール生成手段は、
前記第1の数の不揮発性メモリのうちの第2の数の不揮発性メモリをグループ化して、前記第2の数の不揮発性メモリから構成されるプールを生成するグループ化手段と、
前記プールを構成する前記第2の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するブロック分割手段と、
前記ブロックに分割された前記第2の数の不揮発性メモリを対象に、前記第2の数未満の第3の数のブロックであって、前記第2の数の不揮発性メモリのうちの異なる不揮発性メモリのブロックを単位に、当該第3の数のブロックを結合することにより、前記第3の数のブロックから構成される複数のチャンクを生成するチャンク生成手段とを具備し、
前記論理ディスク生成手段は、前記複数のチャンクが生成された前記第2の数の不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成する
ストレージコントローラ。
【請求項9】
グループ化手段、ブロック分割手段及びチャンク生成手段を含むプール生成手段と、論理ディスク生成手段とを備え、ホスト計算機からのアクセス要求に基づいて、書き換え可能な第1の数の不揮発性メモリのうち対応する論理ディスクを構成する不揮発性メモリへのアクセスを制御するストレージコントローラに適用される論理ディスク生成方法であって、
前記グループ化手段が、前記第1の数の不揮発性メモリのうちの第2の数の不揮発性メモリをグループ化して、前記第2の数の不揮発性メモリから構成されるプールを生成するステップと、
前記ブロック分割手段が、前記プールを構成する前記第2の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するステップと、
前記チャンク生成手段が、前記ブロックに分割された前記第2の数の不揮発性メモリを対象に、前記第2の数未満の第3の数のブロックであって、前記第2の数の不揮発性メモリのうちの異なる不揮発性メモリのブロックを単位に、当該第3の数のブロックを結合することにより、前記第3の数のブロックから構成される複数のチャンクを生成するステップと、
前記論理ディスク生成手段が、前記複数のチャンクが生成された前記第2の数の不揮発性メモリのチャンクを割り当てることにより前記論理ディスクを生成するステップと
を具備する論理ディスク生成方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate