以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係る情報処理システム1の構成を説明する。
この情報処理システム1は、複数のフラッシュストレージデバイスと、ホスト(ホストデバイス)2とを含む。これらフラッシュストレージデバイスの各々は不揮発性メモリを含んでおり、この不揮発性メモリにデータを書き込み、この不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。図1においては、図示の簡単化のために3台のフラッシュストレージデバイス3−1、3−2、3−3がホスト2に接続されているケースが例示されているが、ホスト2に接続されるフラッシュストレージデバイスの台数は3台に限らず、例えば、5台、10台、または数十台のように幾つであってもよい。
フラッシュストレージデバイス3−1、3−2、3−3の各々は、NANDフラッシュ技術ベースのフラッシュストレージデバイスとして実現されていてもよい。
ホスト2は、フラッシュストレージデバイス3をアクセスする情報処理装置(コンピューティングデバイス)として実現されてもよい。ホスト2は、サーバコンピュータであってもよいし、パーソナルコンピュータであってもよい。フラッシュストレージデバイス3−1、3−2、3−3の各々は、ホスト2として機能する情報処理装置の外部ストレージとして使用され得る。フラッシュストレージデバイス3−1、3−2、3−3の各々は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
フラッシュストレージデバイス3−1、3−2、3−3の各々は、コネクタ51および通信線50を介してホスト2に接続される。これらコネクタ51は、例えば、情報処理装置に内蔵されたプリント回路基板上のソケットによって実現されてもよい。あるいは、これらコネクタ51は、情報処理装置の筐体に設けられたスロットとして実現されてもよい。
通信線50は、ホスト2とフラッシュストレージデバイス3−1、3−2、3−3の各々とを相互接続するためのインタフェースとして使用される。このインタフェース用の規格としては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等を使用し得る。
さらに、ホスト2は、追加のフラッシュストレージデバイス3−4をホスト2に接続するための追加のコネクタ51(ソケット、またはスロット)も含んでいる。
あるフラッシュストレージデバイスが寿命に到達すると、このフラッシュストレージデバイスはもはや正常に動作することができなくなる。
このため、フラッシュストレージデバイス3−1、3−2、3−3内のある一つのフラッシュストレージデバイスが実際に寿命に到達する前に、このフラッシュストレージデバイス内に格納されているデータをバックアップするための仕組みが必要とされる。追加のコネクタ51に接続されるフラッシュストレージデバイス3−4は、例えば、消耗度が大きくなった特定のフラッシュストレージデバイス内に格納されているデータを、このフラッシュストレージデバイスが実際に寿命に到達する前に、効率よくバックアップするために使用される。
フラッシュストレージデバイス3−1、3−2、3−3の各々の消耗度は、時間の経過や、不揮発性メモリ内のブロック(物理ブロック)のプログラム/イレーズサイクルの数の増加に伴って、徐々に増加する可能性がある。あるフラッシュストレージデバイスの消耗度が増加するにつれて、正常に利用できない不良ブロックの数が徐々に増加する。不良ブロックの数がある限界値にまで達すると、このフラッシュストレージデバイスは寿命に達する。
このように、フラッシュストレージデバイスの消耗度は、不良ブロックの数等に基づいて予測することができる。このため、ホスト2は、消耗度が増加したフラッシュストレージデバイスを除去(取り外し)されるべきフラッシュストレージデバイスとして決定でき、この決定されたフラッシュストレージデバイス内に格納されているデータを安全にバックアップするための処理を行うことができる。
ホスト2は、プロセッサ41、メモリ42、ホスト側ストレージコントローラ43、ネットワークインタフェース44等を含む。これらプロセッサ41、メモリ42、ホスト側ストレージコントローラ43、ネットワークインタフェース44は、バス40を介して相互接続されてもよい。
プロセッサ41は、ホスト2内の様々なコンポーネントを制御するように構成されたCPUである。プロセッサ41は、メモリ42上のホストソフトウェアを実行する。ホストソフトウェアには、アプリケーションプログラムレイヤ301、オペレーティングシステム(OS)302、ストレージ管理プログラム303等が含まれる。メモリ42は、DRAMのようなランダムアクセスメモリから構成される。
一般に知られているように、オペレーティングシステム(OS)302は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションプログラムレイヤ301上で走る様々なアプリケーションがハードウェアおよびフラッシュストレージデバイス3−1〜3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)等を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
ストレージ管理プログラム303は、フラッシュストレージデバイス3−1〜3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)を制御するために使用される。ストレージ管理プログラム303は、オペレーティングシステム(OS)302の制御の下、リード/ライト要求それぞれをホスト側ストレージコントローラ43に送信する処理を実行する。
さらに、ストレージ管理プログラム303は、ホスト2から除去すべきフラッシュストレージデバイスを特定する処理、フラッシュストレージデバイスをホスト2に追加すべきことをオペレータに促す処理、等を実行する。ストレージ管理プログラム303は、フラッシュストレージデバイス3−1〜3−3の各々の消耗度を監視し、ある閾値を上回る消耗度を有するフラッシュストレージデバイスをホスト2から除去すべきフラッシュストレージデバイスとして特定する。各フラッシュストレージデバイスの消耗度は、例えば、各フラッシュストレージデバイスに含まれる不良ブロックの数に基づいて判定されてもよい。
ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1〜3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)を制御するように構成されたストレージ制御部である。ホスト側ストレージコントローラ43は、ホスト2(ホストソフトウェア)からのリード/ライト要求それぞれに応じて、フラッシュストレージデバイス3−1〜3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)を制御する。
また、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1〜3−4にそれぞれ対応する複数のLED52の一つを駆動することによって、ホスト2から除去することが可能になったフラッシュストレージデバイスをオペレータに通知する処理を実行する。つまり、これらLED52の各々は、このLEDに対応するフラッシュストレージデバイスが除去可能であることを示すように構成されたインジケータとして機能する。あるフラッシュストレージデバイスが除去可能になった場合、ホスト側ストレージコントローラ43は、このフラッシュストレージデバイスに対応するLED52を駆動してこのLED52を点灯する。
このホスト側ストレージコントローラ43は、RAIDコントローラとして実現されていてもよい。
なお、ホスト2が、ソフトウェアRAID機能を有する情報処理装置として実現されている場合には、ホスト側ストレージコントローラ43の機能はプロセッサ41によって実現されてもよい。
あるいは、フラッシュストレージデバイス3−1、3−2、3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)は、ホスト2として機能する情報処理装置にケーブルまたはネットワークを介して接続されるストレージアレイ内に設けられていてもよい。この場合、ホスト側ストレージコントローラ43は、ホスト2として機能する情報処理装置ないではなく、このストレージアレイ内に設けられていてもよい。
ホスト側ストレージコントローラ43がホスト2内に設けられる構成またはホスト側ストレージコントローラ43がストレージアレイ内に設けられる構成のどちらにおいても、フラッシュストレージデバイス3−1、3−2、3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)の各々は、コネクタ51および通信線50を介してこのホスト側ストレージコントローラ43に接続される。
フラッシュストレージデバイス3−1、3−2、3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)がストレージアレイ内に設けられるケースにおいては、これらコネクタ51は、例えば、ストレージアレイに内蔵されたプリント回路基板上のソケットによって実現されてもよい。あるいは、これらコネクタ51は、ストレージアレイの筐体に設けられたスロットとして実現されてもよい。
以下では、ホスト2がサーバコンピュータのような情報処理装置によって実現されているケースについて主として説明する。
フラッシュストレージデバイス3−1〜3−3がホスト側ストレージコントローラ43に接続されており且つフラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続されていない通常動作状態においては、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1〜3−3をアクセスするための第1の論理アドレス空間に属する論理アドレスそれぞれとこれら論理アドレスそれぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3内の記憶位置を示すアドレスそれぞれとの間のマッピングを、アドレス変換テーブルを使用して管理する。
第1の論理アドレス空間に属する論理アドレスそれぞれは、フラッシュストレージデバイス3−1〜3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)を含むストレージシステムをアクセスするためにホスト2(ホストソフトウェア)によって使用される論理アドレスである。換言すれば、第1の論理アドレス空間に属する論理アドレスそれぞれは、ホスト2(ホストソフトウェア)からホスト側ストレージコントローラ43に送信されるリード/ライト要求によって指定される論理アドレスである。ホスト2(ホストソフトウェア)は、第1の論理アドレス空間に属するある論理アドレスへのデータの書き込み、または第1の論理アドレス空間に属するある論理アドレスからのデータの読み出しをホスト側ストレージコントローラ43に要求する。
通常、ホストソフトウェアによって使用される論理アドレスとしては、論理ブロックアドレス(LBA)が使用される。第1の論理アドレス空間に属する論理アドレスは、グローバルLBAとしても参照される。
第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3内の記憶位置は、これらフラッシュストレージデバイス内の論理記憶位置であってもよいし、あるいは、これらフラッシュストレージデバイス内の物理記憶位置であってもよい。
前者の場合においては、このアドレス変換テーブルは、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとこれら論理アドレス(グローバルLBA)それぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3内の論理記憶位置を示すローカル論理アドレス(ローカルLBA)それぞれとの間のマッピングを管理する。ある一つのフラッシュストレージデバイス内のある一つの論理記憶位置は、このフラッシュストレージデバイスの識別子と、このフラッシュストレージデバイス用の論理アドレス範囲(LBA範囲)内の一つの論理アドレス(LBA)とによって表される。したがって、アドレス変換テーブルによって管理される各ローカル論理アドレス(ローカルLBA)は、フラッシュストレージデバイスの識別子と、このフラッシュストレージデバイス用の論理アドレス範囲(LBA範囲)内の一つの論理アドレス(LBA)とを含む。
後者の場合においては、このアドレス変換テーブルは、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとこれら論理アドレス(グローバルLBA)それぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理する。ある一つのフラッシュストレージデバイス内のある一つの物理記憶位置は、このフラッシュストレージデバイスの識別子と、このフラッシュストレージデバイス内の不揮発性メモリの一つの物理記憶位置を示す物理アドレスとによって表される。したがって、アドレス変換テーブルによって管理される各物理アドレスは、フラッシュストレージデバイスの識別子と、このフラッシュストレージデバイス内の不揮発性メモリの一つの物理記憶位置を示す物理アドレスとを含む。
ホスト側ストレージコントローラ43は、ホスト2(ホストソフトウェア)から受信されるライト要求それぞれに応じて、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−1〜3−3の中から選択される任意のフラッシュストレージデバイスに書き込む。
例えば、ホスト側ストレージコントローラ43が特定のグローバルLBAを指定するライト要求をホストソフトウェアから受信した場合、ホスト側ストレージコントローラ43は、このグローバルLBAに対応するデータ部を書き込むべきフラッシュストレージデバイスをフラッシュストレージデバイス3−1〜3−3内から選択でき、さらに、このデータ部を書き込むべき、この選択されたフラッシュストレージデバイス内の論理記憶位置(または物理記憶位置)も決定できる。
ホスト側ストレージコントローラ43は、決定された論理記憶位置を示すLBA(または決定された物理記憶位置を示す物理アドレス)を指定するライトコマンドを、この決定されたフラッシュストレージデバイスに送出する。そして、ホスト側ストレージコントローラ43は、アドレス変換テーブルを更新して、このデータ部が書き込まれた論理記憶位置を示すローカルLBA(またはこのデータ部が書き込まれた物理記憶位置を示す物理アドレス)を上述の特定のグローバルLBAにマッピングする。
フラッシュストレージデバイス3−1〜3−3内のある特定のフラッシュストレージデバイス(例えばフラッシュストレージデバイス3−1)が除去(交換)されるべきことが決定され、且つ追加のフラッシュストレージデバイス3−4が空きスロット51に取り付けられることによってホスト側ストレージコントローラ43に接続された場合、ホスト側ストレージコントローラ43は、以下の処理を実行する。
すなわち、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1を、データの書き込みが禁止され且つデータの読み出しが許可される第1のモード(ライト禁止モード)で制御する。
この場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1をデータが書き込まれるべきフラッシュストレージデバイスとして選択せず、ライトコマンドをフラッシュストレージデバイス3−1に送出しない。ホスト側ストレージコントローラ43が特定のグローバルLBAを指定するリード要求をホスト2(ホストソフトウェア)から受信した場合には、ホスト側ストレージコントローラ43は、アドレス変換テーブルを参照して、この特定のグローバルLBAに関連付けられているローカル論理アドレス(または物理アドレス)をアドレス変換テーブルから取得する。取得されたローカル論理アドレス(または物理アドレス)がフラッシュストレージデバイス3−1を指しているならば、ホスト側ストレージコントローラ43は、このローカル論理アドレスを指定するリードコマンドをフラッシュストレージデバイス3−1に送信する。
さらに、除去されるべきフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−1)内に格納されている有効データの量を減らすために、ホスト側ストレージコントローラ43は、ホスト2(ホストソフトウェア)から受信される後続のライト要求それぞれに応じて、(i)除去されるべきフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−1)に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれを、除去されるべきフラッシュストレージデバイスを除く複数のフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−1〜3−3)内の残りの一つ以上のフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−2、3−3)と追加のフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−4)との中から選択される任意のフラッシュストレージデバイスに書き込む第1の処理と、(ii)残りの一つ以上のフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−2、3−3)に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれを、残りの一つ以上のフラッシュストレージデバイス(ここではフラッシュストレージデバイス3−2、3−3)と追加のストレージデバイス(ここではフラッシュストレージデバイス3−4)との中から選択される任意のストレージデバイスに書き込む第2の処理とを実行する。
ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−2、3−3、3−4から任意のフラッシュストレージデバイスを選択することができ、この選択されたフラッシュストレージデバイスにこれら更新データ部それぞれを書き込むことができる。
例えば、ある期間においては、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−4を選択してもよく、後続の期間においては、フラッシュストレージデバイス3−3を選択してもよく、さらに後続の期間においては、フラッシュストレージデバイス3−2を選択してもよく、さらに後続の期間においては、フラッシュストレージデバイス3−4を再び選択してもよい。
よって、第1の処理においては、フラッシュストレージデバイス3−1に既に格納されているデータ部それぞれに対応する更新データ部それぞれが、例えば、フラッシュストレージデバイス3−2、フラッシュストレージデバイス3−3、またはフラッシュストレージデバイス3−4に書き込まれる。フラッシュストレージデバイス3−1に既に格納されているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2〜3−4から選択される任意のフラッシュストレージデバイス書き込まれることにより、フラッシュストレージデバイス3−1内に格納されている有効データの量が減少される。
ここで、フラッシュストレージデバイス3−1内に格納されている有効データとは、グローバルLBAに関連付けられている最新のデータを意味する。
また、第2の処理においては、フラッシュストレージデバイス3−3に既に格納されているデータ部それぞれに対応する更新データ部それぞれが、例えば、フラッシュストレージデバイス3−2、またはフラッシュストレージデバイス3−4に書き込まれる。これにより、フラッシュストレージデバイス3−3に既に格納されているデータ部それぞれに対応する更新データ部それぞれを書き込むための空き領域をフラッシュストレージデバイス3−3の不揮発性メモリ内に確保するためのガベージコレクションを行うことなく、これら更新データ部それぞれの書き込みが可能となる。したがって、フラッシュストレージデバイス3−4の空き領域を、フラッシュストレージデバイス3−3用のオーバープロビジョニング領域として利用することが可能となる。換言すれば、フラッシュストレージデバイス3−4の空き領域を、フラッシュストレージデバイス3−3のGCの必要性をなくすための記憶領域として利用することが可能となる。
同様に、フラッシュストレージデバイス3−2に既に格納されているデータ部それぞれに対応する更新データ部それぞれも、例えば、フラッシュストレージデバイス3−3、またはフラッシュストレージデバイス3−4に書き込まれる。これにより、フラッシュストレージデバイス3−2に既に格納されているデータ部それぞれに対応する更新データ部それぞれを書き込むための空き領域をフラッシュストレージデバイス3−2の不揮発性メモリ内に確保するためのガベージコレクションを行うことなく、これら更新データ部それぞれの書き込みが可能となる。したがって、フラッシュストレージデバイス3−4の空き領域を、フラッシュストレージデバイス3−2用のオーバープロビジョニング領域として利用することが可能となる。換言すれば、フラッシュストレージデバイス3−4の空き領域を、フラッシュストレージデバイス3−2のGCの必要性をなくすための記憶領域として利用することが可能となる。
フラッシュストレージデバイス3−4の空き容量はフラッシュストレージデバイス3−1の空き容量よりも遙かに大きい。したがって、フラッシュストレージデバイス3−4が追加されると、フラッシュストレージデバイス3−1〜3−4を含むストレージシステムのオーバープロビジョニング領域の量は増えた状態となる。そして、フラッシュストレージデバイス3−1に既に格納されているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2〜3−4から選択される任意のフラッシュストレージデバイスに書き込まれるにつれて、ストレージシステム全体のオーバープロビジョニング領域の量が徐々に減少される。フラッシュストレージデバイス3−1に格納されている有効データ量がゼロになると、フラッシュストレージデバイス3−1はホスト2から除去可能となる。この時点で、ストレージシステム全体のオーバープロビジョニング領域の量はフラッシュストレージデバイス3−4が追加される直前のストレージシステム全体のオーバープロビジョニング領域の量と同じになる。
このように、本実施形態では、フラッシュストレージデバイス3−4の大きなサイズの空き領域をフラッシュストレージデバイス3−2、3−3のGCの必要性をなくすための記憶領域として利用することができる。したがって、ストレージシステム全体のオーバープロビジョニング領域の量が増やされた状態で、フラッシュストレージデバイス3−2〜3−4へのデータの書き込みを行うことが可能となる。よって、ホスト2から見たストレージシステムの書き込み性能の低下、ひいてはアプリケーション/エンドユーザから見たストレージシステムの書き込み性能の低下を招くことなく、フラッシュストレージデバイス3−1内に格納されている有効データの量を減らすことが可能となり、フラッシュストレージデバイス3−1内に格納されている有効データのバックアップ作業を軽減できる。
もし、第1の論理アドレス空間を分割することによって得られる3つのグローバルLBA範囲がフラッシュストレージデバイス3−1、3−2、3−3にそれぞれ固定的にマップされたならば、例えば、フラッシュストレージデバイス3−3に既に格納されているデータ部それぞれに対応する更新データ部は、常に、フラッシュストレージデバイス3−3に書き込まれなければならない。したがって、新たにホスト2に接続されたフラッシュストレージデバイス3−4内の不揮発性メモリの大きな空き領域(つまり、多数のフリーブロック)を、フラッシュストレージデバイス3−3用のオーバープロビジョニング領域として利用することができなくなる。同様に、フラッシュストレージデバイス3−2に既に格納されているデータ部それぞれに対応する更新データ部も、常に、フラッシュストレージデバイス3−2に書き込まれなければならない。したがって、新たにホスト2に接続されたフラッシュストレージデバイス3−4の不揮発性メモリ内の大きな空き領域(つまり、多数のフリーブロック)を、フラッシュストレージデバイス3−3用のオーバープロビジョニング領域として利用することができなくなる。また、フラッシュストレージデバイス3−4の空き領域は、フラッシュストレージデバイス3−1に格納されているデータの複製を格納するための専用領域として予約された状態となる。つまり、フラッシュストレージデバイス3−4の空き領域は、フラッシュストレージデバイス3−1のデータをコピーするために専有されてしまうので、フラッシュストレージデバイス3−2、3−3のGCの必要性をなくすための記憶領域として利用することができなくなる。
よって、第1の論理アドレス空間を分割することによって得られる3つのグローバルLBA範囲がフラッシュストレージデバイス3−1、3−2、3−3にそれぞれ固定的にマップするという方法が使用されたならば、たとえフラッシュストレージデバイス3−4が追加されても、ストレージシステム全体のオーバープロビジョニング領域の量を増やすという効果は得られない。
図2は、ホスト(情報処理装置)2の構成例を示す。
このホスト2は、ラックに収容可能な薄い箱形の筐体201を備える。例えば、筐体201の前面201A側には、複数のフラッシュストレージデバイス3を収容可能な複数のスロットが設けられている。
これらスロットのうちの一つは、追加のフラッシュストレージデバイス3−4をホスト2に接続するための空きスロットとして利用される。
前面201Aにおいては、これらスロットそれぞれの近くに上述のLED52がそれぞれ配置されていてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、プロセッサ41、メモリ42、ホスト側ストレージコントローラ43等を含む様々な電子部品が実装されている。
図2の筐体201の構造は、フラッシュストレージデバイス3−1、3−2、3−3(あるいは、フラッシュストレージデバイス3−1〜3−4)とホスト側ストレージコントローラ43とを含むストレージアレイに適用することもできる。
図3は、フラッシュストレージデバイス3−1〜3−4のいずれかとして使用されるフラッシュストレージデバイス3の構成例を示す。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0〜BLKm−1を含む。ブロックBLK0〜BLKm−1の各々は複数のページ(ここではページP0〜Pn−1)によって編成される。ブロックBLK0〜BLKm−1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0〜Pn−1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0〜Pn−1は、データ書き込み動作およびデータ読み込み動作の単位である。
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)フラッシュストレージデバイス用の論理アドレス範囲内の論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。フラッシュストレージデバイス3用の論理アドレス範囲内の各論理アドレスは、フラッシュストレージデバイス3の論理アドレス範囲内の位置(論理記憶位置)をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
フラッシュストレージデバイス用の論理アドレス範囲内の論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)31を用いて実行される。フラッシュストレージデバイス用の論理アドレス範囲内の論理アドレスは、上述のデバイスLBAを意味する。コントローラ4は、LUT31を使用して、論理アドレス(デバイスLBA)それぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、例えば、4Kバイトであってもよい。ある論理アドレス(デバイスLBA)に対応する物理アドレスは、この論理アドレス(デバイスLBA)に対応するデータが書き込まれたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。LUT31は、フラッシュストレージデバイス3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレス(デバイスLBA)に対応する更新データを、この論理アドレス(デバイスLBA)に対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、LUT31を更新してこの論理アドレス(デバイスLBA)にこの別の物理記憶位置の物理アドレスを関連付けると共に、以前のデータを無効化する。
ブロック管理には、不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)と、リフレッシュ等が含まれる。
不良ブロックとは、このブロックへのデータの書き込み、このブロックからのデータの読み出し、このブロックに対する消去動作、等が正常に実行できないブロックを意味する。
ウェアレベリングは、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、フラッシュストレージデバイス3においては、有効データとは、ある論理アドレス(デバイスLBA)に関連付けられているデータを意味する。例えば、フラッシュストレージデバイス3のLUT31から参照されているデータ(すなわちデバイスLBAから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どのデバイスLBAにも関連付けられていないデータを意味する。どのデバイスLBAにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、LUT31を更新して、コピーされた有効データのデバイスLBAそれぞれに、コピー先の物理アドレスそれぞれをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
リフレッシュは、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出し、検出された各ブロック内の有効データを別のブロックに書き直す動作である。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、符号化/復号回路15等を含んでもよい。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、符号化/復号回路15は、バス10を介して相互接続されていてもよい。
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、トリムコマンド、他の様々なコマンドが含まれる。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、符号化/復号回路15を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、ライト制御部21、リード制御部22、およびリフレッシュ制御部23として機能することができる。これらライト制御部21、リード制御部22、およびリフレッシュ制御部23の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
ライト制御部21は、ホスト2から受信されるライトコマンドに従って、このライトコマンドに関連付けられたデータ(ライトデータ)をNAND型フラッシュメモリ5内の書き込み先ブロックに書き込む書き込み動作を実行する。ライトコマンドは、論理アドレス(開始論理アドレス)、データ長を含んでいてもよい。論理アドレス(開始論理アドレス)は、ライトデータが書き込まれるべき論理記憶位置(最初の論理記憶位置)を示すアドレスである。フラッシュストレージデバイス用の論理アドレス範囲内のある論理アドレス(デバイスLBA)が、論理アドレス(開始論理アドレス)として使用される。データ長は、書き込まれるべきデータの長さを示す。本実施形態では、ライトコマンドは、さらに、このライトデータに対応する第1の論理アドレス空間内の論理アドレス(グローバルLBA)を含んでいてもよい。
なお、ライトコマンドとしては、ライトデータが書き込まれるべき物理記憶位置を直接指定するタイプのライトコマンドが使用されてもよい。この場合には、このライトコマンドは、ライトデータが書き込まれるべき物理記憶位置を示す物理アドレスと、データ長とを含む。このライトコマンドは、さらに、ライトデータに対応する第1の論理アドレス空間内の論理アドレス(グローバルLBA)を含んでいてもよい。ライトコマンドに含まれる物理アドレスは、書き込み先ブロックを示すブロックアドレスと、この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットとを含んでいてもよい。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表されてもよい。
あるいは、ライトコマンドに含まれる物理アドレスは、書き込み先ブロックを示すブロックアドレスのみを含み、ブロック内オフセットを含まなくてもよい。この場合には、ライト制御部21は、書き込み先ブロック内の書き込み先位置を決定し、ライトコマンドに関連付けられたデータ部を、この書き込み先ブロック内の決定された書き込み先位置に書き込む。そして、ライト制御部21は、書き込み先ブロックを示すブロックアドレスと、この決定された書き込み先位置を示すブロック内オフセットとを含む物理アドレスを、ホスト2に通知する。これにより、ホスト側ストレージコントローラ43は、グローバルLBAそれぞれと物理アドレス(ブロックアドレス、ブロック内オフセット)それぞれとの間のマッピングを管理でき、且つフラッシュストレージデバイス3−1〜3−4内のデータ配置を効率よく管理することができる。つまり、ホスト側ストレージコントローラ43は、あるグローバルLBAへ書き込むべきデータ部を、フラッシュストレージデバイス3−1〜3−4から選択される任意のフラッシュストレージデバイス内の任意の空き領域(任意のフリーブロック)に書き込むことができる。
リード制御部22は、ホスト2から受信されるリードライトコマンドに従って、このリードコマンドによって指定されたデータをNAND型フラッシュメモリ5から読み出す。リードコマンドは、論理アドレス(開始論理アドレス)、データ長を含んでいてもよい。論理アドレス(開始論理アドレス)は、読み出されるべきデータが格納されている論理記憶位置を示すアドレスである。フラッシュストレージデバイス用の論理アドレス範囲内のある論理アドレス(デバイスLBA)が、この論理アドレス(開始論理アドレス)として使用される。データ長は、読み出されるべきデータの長さを示す。あるいは、リードコマンドは、論理アドレス(開始論理アドレス)、物理アドレス(ブロックアドレス、ブロック内オフセット)と、データ長を含んでいてもよい。この場合には、リード制御部22は、物理アドレス(ブロックアドレス、ブロック内オフセット)に基づいて、NAND型フラッシュメモリ5からデータを読み出す。
リフレッシュ制御部23は、誤りビット数が閾値を上回るデータが格納されている各ブロック内の有効データを別のブロックに書き直すリフレッシュ動作を実行する。より詳しくは、リフレッシュ制御部23は、NAND型フラッシュメモリ5に含まれる複数のブロックのうち、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出するパトロールリードを実行する。パトロールリードでは、各ブロックから有効データが所定データ長単位で読み出され、この読み出されたデータの誤りビット数(ECCエラービットの数)が符号化/復号回路15に含まれるECCデコーダによってチェックされる。例えば、読み出されたデータの誤りビット数が所定のビット数を上回り、且つこの誤りビット数が、ECCデコーダによって訂正可能なビット数以下である場合、この読み出されたデータが格納されているブロックは、リフレッシュ対象のブロックとして決定される。有効データを含む全てのブロックに対するパトロールリードは、所定のリフレッシュ期間内に実行される。フラッシュストレージデバイス3がデータの書き込みおよびデータの読み出しの双方が許可される通常動作モードである場合には、リフレッシュ制御部23は、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出する動作(パトロールリード)と、検出された各ブロック内の有効データを、NAND型フラッシュメモリ5内の別のブロックに書き直す動作とを含むリフレッシュ動作を実行する。
一方、フラッシュストレージデバイス3がデータの書き込みが禁止されデータの読み出しが許可されるライト禁止モードである場合には、リフレッシュ制御部23は、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出する動作(パトロールリード)と、検出された各ブロック内の有効データを、他のフラッシュストレージデバイスにコピーするようにホスト2に要求(リフレッシュ要求)する動作とを含むリフレッシュ動作を実行する。このリフレッシュ要求は、リフレッシュのためのコピー要求である。このリフレッシュ要求は、誤りビット数が閾値を上回るデータが格納されている各ブロック内の有効データに対応するグローバルLBAを示す情報を含んでいてもよい。これにより、フラッシュストレージデバイス3は、フラッシュストレージデバイス3から他のフラッシュストレージデバイスにコピー(書き直し)することが必要な有効データのグローバルLBAをホスト2に通知することができる。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、LUT31の格納のために使用される。また、DRAM6の記憶領域の他の一部は、ブロック管理テーブル32、LBA/グローバルLBA管理テーブル33の格納のために使用される。
ブロック管理テーブル32は、有効データ/無効データの管理のために使用される。このブロック管理テーブル32は、例えば、NAND型フラッシュメモリ5内のブロック毎に存在してもよい。あるブロックに対応するブロック管理テーブル32においては、このブロック内のデータ部それぞれの有効/無効を示すビットマップフラグが格納されている。
LBA/グローバルLBA管理テーブル33は、フラッシュストレージデバイス3用のLBAそれぞれとグローバルLBAそれぞれとの間の対応関係を管理する管理テーブルである。
符号化/復号回路15は、エラー訂正コード(ECC)エンコーダおよびECCデコーダとして機能し得る。NAND型フラッシュメモリ5にデータをライトすべき時、符号化/復号回路15は、データ(書き込むべきライトデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、符号化/復号回路15は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
図4は、フラッシュストレージデバイス3によって管理されるLUT31の構成例を示す。
LUT31は、フラッシュストレージデバイス3用のLBA(ここでは、LBA0〜LBAx)にそれぞれ対応する複数のエントリを含む。各エントリは、このエントリに対応するLBAのデータが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(PBA)を格納するために使用される。
図5は、フラッシュストレージデバイス3によって管理されるLBA/グローバルLBA管理テーブル33の構成例を示す。
LBA/グローバルLBA管理テーブル33は、フラッシュストレージデバイス3用のLBA(ここでは、LBA0〜LBAx)にそれぞれ対応する複数のエントリを含んでいてもよい。この場合、各エントリは、このエントリに対応するLBAに対応するグローバルLBAを格納するために使用される。
図6は、フラッシュストレージデバイス3によって実行される、NAND型フラッシュメモリ5の書き込み先ブロックBLKにデータとグローバルLBAの双方を書き込む動作を示す。
上述したように、ホスト2からフラッシュストレージデバイス3に送信される各ライトコマンドは、ライトデータ部が書き込まれるべきフラッシュストレージデバイス3内の論理記憶位置を示すLBA(またはライトデータ部が書き込まれるべきフラッシュストレージデバイス3のNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス)と、このライトデータ部に対応するグローバルLBAとを含む。フラッシュストレージデバイス3のコントローラ4(ライト制御部21)は、図6に示すように、ライトデータ部とこのライトデータ部に対応するグローバルLBAとのペアを、書き込み先ブロックBLKに書き込んでもよい。例えば、各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域(16KB)と管理データを格納するための冗長領域とを含んでもよい。ページサイズは16KB+アルファである。コントローラ4は、LUT31の上述の管理サイズ(例えば4Kバイト)と同じサイズを有するライトデータ部とこのライトデータ部に対応するグローバルLBAとの双方を書き込み先ブロックBLK内のページに書き込んでもよい。
あるいは、コントローラ4は、管理サイズ(例えば4Kバイト)と同じサイズを有するライトデータ部とこのライトデータ部に対応するグローバルLBAとこのライトデータ部に対応するLBA(デバイスLBA)とを、書き込み先ブロックBLK内のページに書き込んでもよい。
図7のフローチャートは、通常動作モードにおいて各フラッシュストレージデバイスによって実行されるリフレッシュ動作の手順と、ライト禁止モードにおいて各フラッシュストレージデバイスによって実行されるリフレッシュ動作の手順とを示す。
ホスト2に接続されている各フラッシュストレージデバイスのコントローラ4(リフレッシュ制御部23)は、このフラッシュストレージデバイスが通常動作モードまたはライト禁止モードのいずれに設定されているかを判定する(ステップS11)。
このフラッシュストレージデバイスが通常動作モードであるならば(ステップS11のNO)、コントローラ4は、有効データを含む全てのブロックに対するパトロールリードを実行する(ステップS12)。このパトロールリードは、有効データを含む全てのブロックに対するパトロールリードがリフレッシュ期間内に実行されるようなスケジュールで実行される。そして、コントローラ4は、パトロールリードによって読み出された有効データの誤りビット数を検出し、検出される誤りビット数が所定の閾値を上回っているか否かを判定する(ステップS13)。検出される誤りビット数が所定の閾値を上回っているならば(ステップS13のYES)、コントローラ4は、この検出される誤りビット数を含む有効データが格納されているブロックを、リフレッシュ対象のブロック(つまり、誤りビット数が閾値を上回るデータが格納されているブロック)として検出する。そして、コントローラ4は、この検出されるリフレッシュ対象のブロック内の有効データを他のブロック(フリーブロック)に書き直す(ステップS14)。ステップS14では、符号化/復号回路15によってエラー訂正された有効データが他のブロックに書き直される。
このフラッシュストレージデバイスがライト禁止モードであるならば(ステップS11のYES)、コントローラ4は、有効データを含む全てのブロックに対するパトロールリードを実行する(ステップS15)。このパトロールリードは、有効データを含む全てのブロックに対するパトロールリードがリフレッシュ期間内に実行されるようなスケジュールで実行される。そして、コントローラ4は、パトロールリードによって読み出された有効データの誤りビット数を検出し、検出される誤りビット数が上述の所定の閾値を上回っているか否かを判定する(ステップS16)。検出される誤りビット数が所定の閾値を上回っているならば(ステップS16のYES)、コントローラ4は、この検出される誤りビット数を含む有効データが格納されているブロックを、リフレッシュ対象のブロック(つまり、誤りビット数が閾値を上回るデータが格納されているブロック)として検出する。そして、コントローラ4は、この検出されるリフレッシュ対象のブロック内の有効データを他のフラッシュストレージデバイスにコピーするようにホスト2(ホスト側ストレージコントローラ43)に要求するリフレッシュ動作を実行する(ステップS17)。ステップS17では、コントローラ4は、この検出されるリフレッシュ対象のブロック内の有効データに対応するグローバルLBAを示す情報を含むリフレッシュ要求を自発的にホスト2(ホスト側ストレージコントローラ43)に送信してもよい。あるいは、ステップS17では、コントローラ4は、リフレッシュ対象のブロックが存在することを示す割り込み信号をホスト2(ホスト側ストレージコントローラ43)に送信してもよい。ホスト側ストレージコントローラ43がこの割り込み信号を受信した場合、ホスト側ストレージコントローラ43は、リフレッシュ対象のブロック内の有効データに対応するグローバルLBAを示す情報をコントローラ4から取得してもよい。
図8は、ホスト側ストレージコントローラ43の構成例を示す。
ホスト側ストレージコントローラ43は、記憶位置管理部431、空き領域管理部432、および除去管理部433を含む。記憶位置管理部431は、ホスト側のアドレス変換テーブルとして機能するルックアップテーブル(LUT)431Aを管理する。ホスト側ストレージコントローラ43は、LUT431Aを使用して、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとグローバルLBAそれぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3(あるいはフラッシュストレージデバイス3−1〜3−4)内の記憶位置それぞれとの間のマッピングを管理する。
この場合、記憶位置管理部431は、LUT431Aを使用して、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとグローバルLBAそれぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3(あるいはフラッシュストレージデバイス3−1〜3−4)内の論理記憶位置を示すローカル論理アドレス(ローカルLBA)それぞれとの間のマッピングを管理してもよい。あるいは、記憶位置管理部431は、LUT431Aを使用して、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとグローバルLBAそれぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3(あるいはフラッシュストレージデバイス3−1〜3−4)内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理してもよい。
図8では、グローバルLBAそれぞれとローカルLBAそれぞれとの間のマッピングがLUT431Aによって管理される場合が想定されている。
すなわち、LUT431Aは、グローバルLBA(グローバルLBA0〜グローバルLBAn)それぞれに対応する複数のエントリを含む。あるグローバルLBAに対応するエントリは、このグローバルLBAに対応するデータ部が格納されているフラッシュストレージデバイス3−1〜3−3(あるいはフラッシュストレージデバイス3−1〜3−4)内の特定の論理記憶位置を示すローカルLBAを格納する。各ローカルLBAは、デバイスIDとデバイスLBAとを含む。デバイスIDは、あるフラッシュストレージデバイスの識別子である。デバイスLBAは、このストレージデバイス用のLBA範囲内の一つのLBAを示す。
ホスト側ストレージコントローラ43にフラッシュストレージデバイス3−1〜3−3が接続されている状態においては、記憶位置管理部431は、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−1〜3−3の中から選択される任意のストレージデバイス内の任意の論理記憶位置(デバイスLBA)に書き込むことができる。より詳しくは、記憶位置管理部431がある特定のグローバルLBAとある特定のデータ長とを含むライト要求をホストソフトウェア(例えばストレージ管理プログラム303)から受信した場合、記憶位置管理部431は、この特定のグローバルLBAに対応するライトデータ部が書き込まれるべきフラッシュストレージデバイスをフラッシュストレージデバイス3−1〜3−3の中から選択でき、且つこの選択されたストレージデバイス用のLBA範囲の中から、この特定のグローバルLBAに対応するライトデータ部が書き込まれるべきLBA(デバイスLBA)を選択することができる。記憶位置管理部431は、このデータ部を書き込むためのライトコマンドを、選択されたフラッシュストレージデバイスに送信する。このライトコマンドは、選択されたデバイスLBAと、この特定のデータ長とを含んでもよい。さらに、このライトコマンドは、この特定のグローバルLBAを含んでいてもよい。そして、記憶位置管理部431は、LUT431Aを更新して、この特定のグローバルLBAに、このデータ部が書き込まれた論理記憶位置を示すローカルLBA(このデータ部が書き込まれたフラッシュストレージデバイスのデバイスID、このデータ部が書き込まれた論理記憶位置を示すデバイスLBA)を関連付ける。
ホスト側ストレージコントローラ43にフラッシュストレージデバイス3−1〜3−3が接続されている状態においては、空き領域管理部432は、共有フリーブロックリストを使用して、フラッシュストレージデバイス3−1〜3−3それぞれの空き領域(フラッシュストレージデバイス3−1〜3−3の各々のNAND型フラッシュメモリに含まれる全てのフリーブロック)を、これらフラッシュストレージデバイス3−1〜3−3によって共有される空き領域(フリーブロック)の集合として管理する。データ部それぞれが書き込まれるべきフラッシュストレージデバイスを選択するためのポリシーとしては、フラッシュストレージデバイス3−1〜3−3の中で最も大きなサイズの空き領域を有するフラッシュストレージデバイスを、データ部が書き込まれるべきフラッシュストレージデバイスとして優先的に選択するというポリシーが使用されてもよい。あるいは、フラッシュストレージデバイス3−1〜3−3それぞれの空き領域が均等に消費されるようにフラッシュストレージデバイス3−1〜3−3をデータ部それぞれが書き込まれるべきフラッシュストレージデバイスとして同じ割合で選択するというポリシーが使用されてもよい。
記憶位置管理部431は、データ部それぞれが書き込まれるべき書き込み先ブロックを共有フリーブロックリスト432Aによって管理される共有フリーブロックの集合から選択することによって、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−1〜3−3の中から選択される任意の一つのストレージデバイスに書き込んでもよい。共有フリーブロックの集合から選択されたフリーブロックは、書き込み先ブロックとして割り当てられる。この書き込み先ブロックを含むフラッシュストレージデバイスが、データ部それぞれが書き込まれるべきフラッシュストレージデバイスとして選択されてもよい。各フラッシュストレージデバイスにおいて、あるブロック内の全てのデータが上書き/アンマップ、GC等によって無効化されると、このブロックは共有フリーブロックリスト432Aに返却される。返却されたブロックは共有フリーブロックとして再利用される。
次に、フラッシュストレージデバイス3−1〜3−3のうち、例えば、フラッシュストレージデバイス3−1の不良ブロック数の増加等によってフラッシュストレージデバイス3−1がホスト側ストレージコントローラ43から除去されるべきことが決定され、且つフラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続された場合を想定する。
記憶位置管理部431は、フラッシュストレージデバイス3−1をデータの書き込みが禁止されデータの読み出しが許可される上述のライト禁止モードで制御する。さらに、記憶位置管理部431は、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つのフラッシュストレージデバイス内の任意の論理記憶位置に書き込むことによって、除去されるべきフラッシュストレージデバイス3−1内に格納されている有効データの量を減らす書き込み処理を実行する。この場合、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部の各々は、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意のフラッシュストレージデバイスに書き込まれる。同様に、フラッシュストレージデバイス3−2に既に書き込まれているデータ部それぞれに対応する更新データ部の各々も、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意のフラッシュストレージデバイスに書き込まれる。同様に、フラッシュストレージデバイス3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々も、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意のフラッシュストレージデバイスに書き込まれる。
フラッシュストレージデバイス3−4がホスト2に接続された時点で、空き領域管理部432は、フラッシュストレージデバイス3−4のNAND型フラッシュメモリに含まれる全てのフリーブロックを共有フリーブロックリスト432Aに追加し、さらに、フラッシュストレージデバイス3−1に含まれる各フリーブロックを共有フリーブロックリスト432Aから削除する。これにより、フラッシュストレージデバイス3−4がホスト2に接続された場合には、空き領域管理部432は、共有フリーブロックリスト432Aを使用して、フラッシュストレージデバイス3−2のNAND型フラッシュメモリに含まれるフリーブロックそれぞれと、フラッシュストレージデバイス3−3のNAND型フラッシュメモリに含まれるフリーブロックそれぞれと、フラッシュストレージデバイス3−4のNAND型フラッシュメモリに含まれるフリーブロックそれぞれとを、これらフラッシュストレージデバイス3−1〜3−4によって共有される共有フリーブロックの集合として管理することができる。
記憶位置管理部431は、最も大きなサイズの空き領域(つまり最も多くのフリーブロック)を有するフラッシュストレージデバイスをデータ部が書き込まれるべきフラッシュストレージデバイスとして優先的に選択するというポリシーを使用してもよい。
この場合、記憶位置管理部431は、(1)ホスト2(ホストソフトウェア)から受信されるライト要求それぞれに応じて、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれと、フラッシュストレージデバイス3−2に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれと、フラッシュストレージデバイス3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれとをフラッシュストレージデバイス3−4に書き込む第1の書き込む処理と、(2)第1の書き込む処理によってフラッシュストレージデバイス3−2または3−3に空き領域が確保された後、ホスト2(ホストソフトウェア)から受信される後続のライト要求それぞれに応じて、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれと、フラッシュストレージデバイス3−2に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれと、フラッシュストレージデバイス3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれとを、フラッシュストレージデバイス3−2または3−3に書き込む第2の書き込み処理とを実行する。
第1の書き込み処理では、フラッシュストレージデバイス3−1に既に格納されているデータ部それぞれに対応する更新データ部の各々だけでなく、フラッシュストレージデバイス3−2または3−3に既に格納されているデータ部それぞれに対応する更新データ部の各々も、フラッシュストレージデバイス3−4の空き領域に書き込まれる。したがって、フラッシュストレージデバイス3−2または3−3に空き領域(フリーブロック)を確保するためのGCを実行することなく、フラッシュストレージデバイス3−2または3−3に既に格納されているデータ部それぞれに対応する更新データ部の各々をフラッシュストレージデバイス3−4の大きなサイズの空き領域に書き込むことができる。したがって、フラッシュストレージデバイス3−4のNAND型フラッシュメモリに含まれる多数のフリーブロックに対応する容量を、フラッシュストレージデバイス3−1〜3−4を含むストレージシステム全体のオーバープロビジョニング領域として有効利用することができる。また、第1の書き込み処理によって、フラッシュストレージデバイス3−2または3−3内の空き領域の量(フリーブロックの数)を増やすことができる。よって、第2の書き込み処理では、第1の書き込み処理によって確保された空き領域を有効利用することが可能となる。
さらに、記憶位置管理部431は、ホスト2から除去されるべきフラッシュストレージデバイス3−1内の有効データの量が許容量にまで減少された場合、フラッシュストレージデバイス3−1内の有効データを、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーしてもよい。
もしフラッシュストレージデバイス3−1内の有効データを他のフラッシュストレージデバイス3−2〜3−4のいずれかにコピーする処理を無条件に開始すると、フラッシュストレージデバイス3−1内に格納されている多くの量の有効データをコピーすることが必要とされ、これによってストレージシステム全体に対するデータの書き込み量が増加する。この結果、ホストソフトウェアから見たストレージシステムの性能が低下される可能性がある。
本実施形態では、フラッシュストレージデバイス3−1内の有効データの量が閾値未満に減少された場合にフラッシュストレージデバイス3−1内の有効データを他のフラッシュストレージデバイス3−2〜3−4のいずれかにコピーする処理が実行される。これにより、ホストソフトウェアから見たストレージシステムの性能低下を効率よく抑制することができる。
また、記憶位置管理部431がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、記憶位置管理部431は、フラッシュストレージデバイス3−1によって実行されるリフレッシュ動作によって検出される各ブロック(誤りビット数が閾値を上回るデータが格納されているブロック)内の有効データを、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする動作を実行してもよい。リフレッシュのためのデータコピー動作は、フラッシュストレージデバイス3−1が除去されるか否かに関係なく、実行されるべきデータ書き込み動作である。したがって、フラッシュストレージデバイス3−1によって実行されるリフレッシュ動作によって検出される各ブロック内の有効データを他のフラッシュストレージデバイス3−2〜3−4にコピーする動作は、フラッシュストレージシステム全体へのデータ書き込み量を増加させることはない。
また、記憶位置管理部431は、フラッシュストレージデバイス3−1に格納されている有効データが無くなったか否かを判定する。グローバルLBAそれぞれとこれらグローバルLBAに対応するデータ部が格納されている最新の論理記憶位置を示すローカルLBAそれぞれとの間のマッピングはLUT431Aによって管理されている。したがって、記憶位置管理部431は、LUT431Aを参照することによって、フラッシュストレージデバイス3−1に格納されている有効データが無くなったか否かを判定することができる。この場合、フラッシュストレージデバイス3−1を指すエントリがLUT431A内に存在しないならば、記憶位置管理部431は、フラッシュストレージデバイス3−1に有効データが存在しなくなったと判定することができる。
フラッシュストレージデバイス3−1に有効データが存在しなくなった場合、記憶位置管理部431は、フラッシュストレージデバイス3−1がホスト2から除去可能であることを除去管理部433に通知してもよい。
フラッシュストレージデバイス3−1に有効データが存在しなくなった場合、除去管理部433は、フラッシュストレージデバイス3−1のNAND型フラッシュメモリ内の各ブロックの消去動作を指示する消去コマンドをフラッシュストレージデバイス3−1に送出してもよい。さらに、除去管理部433は、フラッシュストレージデバイス3−1内の消去動作が実行された各ブロックに予め指定されたデータ(ダミーデータ)を書き込んでもよい。
あるいは、記憶位置管理部431が、LUT431Aを使用して、グローバルLBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理するように構成されているケースにおいては、記憶位置管理部431は、フラッシュストレージデバイス3−1内の個々のブロックが有効データを含まないフリーブロックとなったか否かを容易に判定することができる。したがって、このケースにおいては、除去管理部433は、フラッシュストレージデバイス3−1内のNAND型フラッシュメモリのブロックの一つが上述の更新データの書き込み処理またはコピー処理等によって有効データを含まないブロックとなる度、この有効データを含まないブロックの消去動作を指示する消去コマンドをフラッシュストレージデバイス3−1に送信してもよい。これにより、上述の書き込み処理またはコピー処理等によってフラッシュストレージデバイス3−1の有効データの量を減らす処理と並行して、有効データを含まない各ブロックの消去動作を行うことができる。この結果、フラッシュストレージデバイス3−1に格納されている有効データが無くなった時点からフラッシュストレージデバイス3−1の全てのブロックの消去動作が完了する時点までの期間を最小化することができる。
なお、除去管理部433は、フラッシュストレージデバイス3−1の一つのブロックの消去動作が実行される度に、この消去動作が実行されたブロックに、予め指定されたデータ(ダミーデータ)を書き込んでもよい。
フラッシュストレージデバイス3−1に格納されている有効データが無くなった場合、またはフラッシュストレージデバイス3−1の全てのブロックに対する消去動作が完了した場合、あるいは全てのブロックに対する消去動作とダミーデータ書き込み動作の双方が完了した場合に、除去管理部433は、フラッシュストレージデバイス3−1が除去可能であることをストレージ管理プログラム303に通知してもよい。
そして、例えば、ストレージ管理プログラム303の制御の下、除去管理部433は、フラッシュストレージデバイス3−1に対応するLED52を駆動してもよい。
図9は、グローバルLBAそれぞれに対応するデータ部をフラッシュストレージデバイス3−1〜3−3内の記憶位置に書き込む処理を示す。
図9においては、図示の簡単化のために、フラッシュストレージデバイス3−1〜3−3が同じ容量を有しており、フラッシュストレージデバイス3−1〜3−3の各々にデバイスLBA範囲(LBA0〜LBA999)が割り当てられている場合が例示されている。
上述したように、ホストソフトウェアからホスト側ストレージコントローラ43に送信されるライト要求の各々に関連付けられたデータ部(つまり、各グローバルLBAに対応するデータ部)は、フラッシュストレージデバイス3−1〜3−3を含むストレージシステム内の任意の論理記憶位置に書き込むことができる。図9では、グローバルLBA0に対応するデータ部がフラッシュストレージデバイス3−1内のLBA100に書き込まれ、グローバルLBA1に対応するデータ部がフラッシュストレージデバイス3−1内のLBA110に書き込まれ、グローバルLBA2に対応するデータ部がフラッシュストレージデバイス3−2内のLBA50に書き込まれ、グローバルLBA3に対応するデータ部がフラッシュストレージデバイス3−2内のLBA60に書き込まれ、グローバルLBA4に対応するデータ部がフラッシュストレージデバイス3−1内のLBA200に書き込まれ、グローバルLBA5に対応するデータ部がフラッシュストレージデバイス3−3内のLBA500に書き込まれ、グローバルLBA6に対応するデータ部がフラッシュストレージデバイス3−3内のLBA600に書き込まれ、グローバルLBA7に対応するデータ部がフラッシュストレージデバイス3−2内のLBA100に書き込まれ、グローバルLBA10に対応するデータ部がフラッシュストレージデバイス3−2内のLBA10に書き込まれ、グローバルLBA11に対応するデータ部がフラッシュストレージデバイス3−1内のLBA900に書き込まれ、そして、グローバルLBAnに対応するデータ部がフラッシュストレージデバイス3−3内のLBA70に書き込まれた場合が想定されている。
グローバルLBA0に対応するLUTエントリには、デバイスID=#1、デバイスLBA=100が格納される。グローバルLBA1に対応するLUTエントリには、デバイスID=#1、デバイスLBA=110が格納される。グローバルLBA2に対応するLUTエントリには、デバイスID=#2、デバイスLBA=50が格納される。グローバルLBA3に対応するLUTエントリには、デバイスID=#2、デバイスLBA=60が格納される。グローバルLBA4に対応するLUTエントリには、デバイスID=#1、デバイスLBA=200が格納される。グローバルLBA5に対応するLUTエントリには、デバイスID=#3、デバイスLBA=500が格納される。グローバルLBA6に対応するLUTエントリには、デバイスID=#3、デバイスLBA=600が格納される。グローバルLBA7に対応するLUTエントリには、デバイスID=#2、デバイスLBA=100が格納される。グローバルLBA10に対応するLUTエントリには、デバイスID=#2、デバイスLBA=10が格納される。グローバルLBA11に対応するLUTエントリには、デバイスID=#1、デバイスLBA=900が格納される。グローバルLBAnに対応するLUTエントリには、デバイスID=#3、デバイスLBA=70が格納される。
データ部が書き込まれていないグローバルLBAに対応するLUTエントリにおいては、あらかじめ定められた定数(NULL)が格納されてもよい。
図10は、グローバルLBAそれぞれに対応するデータ部の各々を、除去されるべきことが決定されたフラッシュストレージデバイス3−1以外のフラッシュストレージデバイス3−2、3−3それぞれと追加のフラッシュストレージデバイス3−4の中から選択される任意の一つのフラッシュストレージデバイス内の任意の記憶位置(論理記憶位置)に書き込む処理を示す。
追加のフラッシュストレージデバイス3−4の容量は、除去されるべきことが決定されたフラッシュストレージデバイス3−1の容量未満であってもよいし、フラッシュストレージデバイス3−1の容量と同じであってもよいし、フラッシュストレージデバイス3−1の容量よりも大きくてもよい。図10においては、図示の簡単化のために、フラッシュストレージデバイス3−3がフラッシュストレージデバイス3−1と同じ容量を有しており、フラッシュストレージデバイス3−1〜3−4の各々にデバイスLBA範囲(LBA0〜LBA999)が割り当てられている場合が例示されている。
追加のフラッシュストレージデバイス3−4がホスト2(ホスト側ストレージコントローラ43)に接続されると、フラッシュストレージデバイス3−4に対応するエントリが共有フリーブロックリスト432Aに追加される。そして、このフラッシュストレージデバイス3−4に対応するエントリに、フラッシュストレージデバイス3−4のNAND型フラッシュメモリ内の全てのフリーブロックのリストが追加される。共有フリーブロックリスト432Aは、各フラッシュストレージデバイスに含まれるフリーブロックの数だけを管理してもよいし、各フラッシュストレージデバイスに含まれるフリーブロックそれぞれを識別するブロックアドレスを管理してもよい。
上述したように、各グローバルLBAに対応するデータ部は、フラッシュストレージデバイス3−2〜3−4を含むストレージシステム内の任意の論理記憶位置に書き込むことができる。図10では、追加のフラッシュストレージデバイス3−4がホスト2に接続された後に、ホストソフトウェアからホスト側ストレージコントローラ43に送信される幾つかのライト要求それぞれに関連付けられたデータ部それぞれが、フラッシュストレージデバイス3−4に書き込まれる場合が例示されている。これらライト要求は、既にデータ部が書き込まれているグローバルLBAへの更新データ部の書き込み(上書き)を要求するライト要求と、データ部が書き込まれていないグローバルLBAへの新規データ部の書き込みを要求するライト要求とが含まれ得る。
図10では、既にデータ部それぞれが書き込まれているグローバルLBA0〜グローバルLBA5への更新データ部それぞれの書き込み(上書き)を要求するライト要求それぞれがホストソフトウェアからホスト側ストレージコントローラ43に送信された場合が例示されている。
記憶位置管理部431がグローバルLBA0へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA0に書き込む。このデータ部は、グローバルLBA0へ書き込むべき更新データ部である。グローバルLBA0に対応するローカルLBAはフラッシュストレージデバイス3−1を指しているので、このデータ部は、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4の論理記憶位置(LBA0)に書き込まれる。そして、記憶位置管理部431は、この更新データ部が書き込まれた記憶位置(論理記憶位置)を示すアドレス(ローカルLBA)をこの更新データ部に対応するグローバル論理アドレス(グローバルLBA0)に関連付ける。つまり、記憶位置管理部431は、グローバルLBA0に対応するLUTエントリを更新して、グローバルLBA0にマッピングされているローカルLBAを、(デバイスID=#1、デバイスLBA=100)から、(デバイスID=#4、デバイスLBA=0)に変更する。さらに、記憶位置管理部431は、デバイスLBA=100のデータ部を無効化するためのコマンド(トリムコマンド)をフラッシュストレージデバイス3−1に送信してもよい。
なお、フラッシュストレージデバイス3−1はライト禁止モードであるため、フラッシュストレージデバイス3−1の空き領域を増加させる必要は無い、したがって、フラッシュストレージデバイス3−1に対しては、トリムコマンドは送信されてもよいし、送信されなくてもよい。
記憶位置管理部431がグローバルLBA1へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA5に書き込む。このデータ部は、グローバルLBA1へ書き込むべき更新データ部である。グローバルLBA1に対応するローカルLBAはフラッシュストレージデバイス3−1を指しているので、このデータ部は、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4のLBA5に書き込まれる。そして、記憶位置管理部431は、グローバルLBA1に対応するLUTエントリを更新して、グローバルLBA1にマッピングされているローカルLBAを、(デバイスID=#1、デバイスLBA=110)から、(デバイスID=#4、デバイスLBA=5)に変更する。さらに、記憶位置管理部431は、デバイスLBA=110のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−1に送信してもよい。
記憶位置管理部431がグローバルLBA2へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA10に書き込む。このデータ部は、グローバルLBA2へ書き込むべき更新データ部である。グローバルLBA2に対応するローカルLBAはフラッシュストレージデバイス3−2を指しているので、このデータ部は、フラッシュストレージデバイス3−2に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−2に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4のLBA10に書き込まれる。そして、記憶位置管理部431は、グローバルLBA2に対応するLUTエントリを更新して、グローバルLBA2にマッピングされているローカルLBAを、(デバイスID=#2、デバイスLBA=50)から、(デバイスID=#4、デバイスLBA=10)に変更する。さらに、記憶位置管理部431は、デバイスLBA=50のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−2に送信する。これにより、フラッシュストレージデバイス3−2の空き領域を容易に増加させることができる。
記憶位置管理部431がグローバルLBA3へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA20に書き込む。このデータ部は、グローバルLBA3へ書き込むべき更新データ部である。グローバルLBA3に対応するローカルLBAはフラッシュストレージデバイス3−2を指しているので、このデータ部は、フラッシュストレージデバイス3−2に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−2に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4のLBA20に書き込まれる。そして、記憶位置管理部431は、グローバルLBA3に対応するLUTエントリを更新して、グローバルLBA3にマッピングされているローカルLBAを、(デバイスID=#2、デバイスLBA=60)から、(デバイスID=#4、デバイスLBA=20)に変更する。さらに、記憶位置管理部431は、デバイスLBA=60のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−2に送信する。
記憶位置管理部431がグローバルLBA4へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA30に書き込む。このデータ部は、グローバルLBA4へ書き込むべき更新データ部である。グローバルLBA4に対応するローカルLBAはフラッシュストレージデバイス3−1を指しているので、このデータ部は、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−1に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4のLBA30に書き込まれる。そして、記憶位置管理部431は、グローバルLBA4に対応するLUTエントリを更新して、グローバルLBA4にマッピングされているローカルLBAを、(デバイスID=#1、デバイスLBA=200)から、(デバイスID=#4、デバイスLBA=30)に変更する。さらに、記憶位置管理部431は、デバイスLBA=200のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−1に送信してもよい。
記憶位置管理部431がグローバルLBA5へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部431は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4のLBA40に書き込む。このデータ部は、グローバルLBA5へ書き込むべき更新データ部である。グローバルLBA5に対応するローカルLBAはフラッシュストレージデバイス3−3を指しているので、このデータ部は、フラッシュストレージデバイス3−3に既に書き込まれているデータ部に対応する更新データ部である。したがって、フラッシュストレージデバイス3−3に既に書き込まれているデータ部に対応する更新データ部が、フラッシュストレージデバイス3−4のLBA40に書き込まれる。そして、記憶位置管理部431は、グローバルLBA5に対応するLUTエントリを更新して、グローバルLBA5にマッピングされているローカルLBAを、(デバイスID=#3、デバイスLBA=500)から、(デバイスID=#4、デバイスLBA=40)に変更する。さらに、記憶位置管理部431は、デバイスLBA=500のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−3に送信してもよい。
図11は、フラッシュストレージデバイス3−1〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々を、フラッシュストレージデバイス3−2〜3−4の中から選択される任意のフラッシュストレージデバイスに書き込む処理の例を示す。
ここでは、最も大きなサイズの空き領域を有するフラッシュストレージデバイスにデータ部を優先的に書き込むというポリシーが使用される場合を想定する。
フラッシュストレージデバイス3−4がホスト2に追加接続された直後(Start)においては、例えば、フラッシュストレージデバイス3−1〜3−3の各々のNAND型フラッシュメモリはデータでほぼ満たされている。フラッシュストレージデバイス3−4のNAND型フラッシュメモリは大きなサイズの空き領域(多くのフリーブロック)を含む。
ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定するライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これらライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−4に書き込まれる。さらに、フラッシュストレージデバイス3−2〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−4に書き込まれる。
フラッシュストレージデバイス3−4がデータでほぼ満たされた状態になると(中間状態:Mid(1))、フラッシュストレージデバイス3−1内に格納されている有効データの量が減少される。同様に、フラッシュストレージデバイス3−2、3−3内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−2、3−3の各々に空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−3に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−3に書き込まれる。
フラッシュストレージデバイス3−3がデータでほぼ満たされた状態になると(中間状態:Mid(2))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量もさらに減少される。これにより、フラッシュストレージデバイス3−2に大きなサイズの空き領域が確保される。フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−2に書き込まれる。
フラッシュストレージデバイス3−2がデータでほぼ満たされた状態になると(中間状態:Mid(3))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−3内に格納されている有効データの量も減少される。同様に、フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−4に十分なサイズを有する空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−4に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−4に書き込まれる。
フラッシュストレージデバイス3−4がデータでほぼ満たされた状態になると(中間状態:Mid(4))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量も減少される。同様に、フラッシュストレージデバイス3−3内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−3に十分なサイズを有する空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−3に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−3に書き込まれる。
フラッシュストレージデバイス3−3がデータでほぼ満たされた状態になると(中間状態:Mid(5))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−2に空き領域が確保される。同様に、フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−2に書き込まれる。
このように、フラッシュストレージデバイス3−4へのデータの書き込み、フラッシュストレージデバイス3−3へのデータ書き込み、フラッシュストレージデバイス3−2へのデータ書き込み、フラッシュストレージデバイス3−4へのデータの書き込み、…が繰り返し実行されてもよい。フラッシュストレージデバイス3−1に既に書き込まれている全データが更新されると、フラッシュストレージデバイス3−1に格納されている有効データ量がゼロになり、フラッシュストレージデバイス3−1はホスト2から除去可能となる。
このように、本実施形態では、ホスト側ストレージコントローラ43は、ホスト2(ホストソフトウェア)から受信されるライト要求それぞれに関連付けられたデータ部の各々を、フラッシュストレージデバイス3−2〜3−4内の任意のフラッシュストレージデバイスに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部の各々とフラッシュストレージデバイス3−2、3−3に既に書き込まれているデータ部にそれぞれに対応する更新データ部の各々とをフラッシュストレージデバイス3−4に書き込む処理が実行可能となる。さらに、この書き込み処理により、フラッシュストレージデバイス3−2〜3−3に空き領域を確保することができる。よって、この空き領域を利用することが可能となるので、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する後続の更新データ部の各々とフラッシュストレージデバイス3−2、3−3に既に書き込まれているデータ部にそれぞれに対応する後続の更新データ部の各々とを、フラッシュストレージデバイス3−2、3−3に書き込む処理が実行可能となる。
図12は、フラッシュストレージデバイス3−1〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々を、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つのストレージデバイスに書き込む処理の例と、フラッシュストレージデバイス3−1に格納されている有効データ量が許容量にまで減少された場合に、この有効データをフラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする処理の例を示す。
図12のStartからMid(4)までの期間に実行される動作は、図11で説明したStartからMid(4)までの期間に実行される動作と同じである。図12のMid(1)、Mid(2)、Mid(3)の各時点では、フラッシュストレージデバイス3−1に格納されている有効データ量は許容量よりも多い。Mid(4)の時点で、フラッシュストレージデバイス3−1に格納されている有効データ量は許容量にまで減少される。この場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1に格納されている有効データを、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする。この場合、フラッシュストレージデバイス3−1に格納されている有効データ全体がフラッシュストレージデバイス3−2〜3−4の中から選択される一つのフラッシュストレージデバイスにコピーされてもよいし、有効データの一部がフラッシュストレージデバイス3−2〜3−4の中から選択される一つのフラッシュストレージデバイスにコピーされ、有効データの残り部がフラッシュストレージデバイス3−2〜3−4の中から選択される別のフラッシュストレージデバイスにコピーされてもよい。
このように、フラッシュストレージデバイス3−1に格納されている有効データ量が許容量にまで減少された場合に、この有効データをフラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする処理を実行することにより、ストレージシステムに書き込むことが必要なデータ量の増加は最小限にとどめられる。したがって、ホスト2から見たストレージシステムの性能低下を抑制することができる。
図13は、フラッシュストレージデバイス3−1〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々を、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つのストレージデバイスに書き込む処理の例を示す。
ここでは、フラッシュストレージデバイス3−4がホスト2に追加接続された直後(Start)においては、フラッシュストレージデバイス3−3にあるサイズ以上の空き領域が存在している場合が想定されている。
この場合、ホスト側ストレージコントローラ43は、ホスト2(ホストソフトウェア)から受信されるライト要求それぞれに関連付けられたデータ部それぞれをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込んでもよい。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−3に書き込まれる。さらに、フラッシュストレージデバイス3−2〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−3に書き込まれる。
フラッシュストレージデバイス3−3がデータでほぼ満たされた状態になると(中間状態:Mid(1))、フラッシュストレージデバイス3−1内に格納されている有効データの量が減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−4に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−4に書き込まれる。
フラッシュストレージデバイス3−4がデータでほぼ満たされた状態になると(中間状態:Mid(2))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量もさらに減少される。これにより、フラッシュストレージデバイス3−2に大きなサイズの空き領域が確保される。同様に、フラッシュストレージデバイス3−3内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−2に書き込まれる。
フラッシュストレージデバイス3−2がデータでほぼ満たされた状態になると(中間状態:Mid(3))、フラッシュストレージデバイス3−1に格納されている有効データ量は許容量にまで減少される。この場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1に格納されている有効データを、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする。この場合、フラッシュストレージデバイス3−1に格納されている有効データ全体がフラッシュストレージデバイス3−2〜3−4の中から選択される一つのフラッシュストレージデバイスにコピーされてもよいし、有効データの一部がフラッシュストレージデバイス3−2〜3−4の中から選択される一つのフラッシュストレージデバイスにコピーされ、有効データの残り部がフラッシュストレージデバイス3−2〜3−4の中から選択される別のフラッシュストレージデバイスにコピーされてもよい。
図14は、フラッシュストレージデバイス3−1〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々をフラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つのストレージデバイスに書き込む処理の例と、フラッシュストレージデバイス3−1のリフレッシュ動作によって検出されるリフレッシュ対象の各ブロック内の有効データを他のストレージデバイスにコピーする処理の例を示す。
フラッシュストレージデバイス3−4がホスト2に追加接続された直後(Start)において、ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定するライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これらライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−4に書き込まれる。さらに、フラッシュストレージデバイス3−2〜3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−4に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。
フラッシュストレージデバイス3−4がデータでほぼ満たされた状態になると(中間状態:Mid(1))、フラッシュストレージデバイス3−1内に格納されている有効データの量が減少される。同様に、フラッシュストレージデバイス3−2、3−3内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−2、3−3の各々に空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−3に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−3に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込む。
フラッシュストレージデバイス3−3がデータでほぼ満たされた状態になると(中間状態:Mid(2))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量もさらに減少される。これにより、フラッシュストレージデバイス3−2に大きなサイズの空き領域が確保される。フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−2に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。
フラッシュストレージデバイス3−2がデータでほぼ満たされた状態になると(中間状態:Mid(3))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−3内に格納されている有効データの量も減少される。同様に、フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−4に十分なサイズを有する空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−4に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−4に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−4のNAND型フラッシュメモリに書き込む。
フラッシュストレージデバイス3−4がデータでほぼ満たされた状態になると(中間状態:Mid(4))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量も減少される。同様に、フラッシュストレージデバイス3−3内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−3に十分なサイズを有する空き領域が確保される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−3のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−3に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−3に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。
フラッシュストレージデバイス3−3がデータでほぼ満たされた状態になると(中間状態:Mid(5))、フラッシュストレージデバイス3−1内に格納されている有効データの量がさらに減少される。同様に、フラッシュストレージデバイス3−2内に格納されている有効データの量も減少される。これにより、フラッシュストレージデバイス3−2に空き領域が確保される。同様に、フラッシュストレージデバイス3−4内に格納されている有効データの量も減少される。ホスト側ストレージコントローラ43は、グローバルLBAをそれぞれ指定する後続のライト要求それぞれをホスト2(ホストソフトウェア)から受信し、これら後続のライト要求に関連付けられたデータ部それぞれをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。これにより、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれがフラッシュストレージデバイス3−2に書き込まれる。さらに、フラッシュストレージデバイス3−2、3−3、3−4に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれもフラッシュストレージデバイス3−2に書き込まれる。また、ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信した場合、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1によって検出されるリフレッシュ対象のブロック内の有効データをフラッシュストレージデバイス3−2のNAND型フラッシュメモリに書き込む。
このように、図14では、ライト要求それぞれに関連付けられたデータ部のみならず、フラッシュストレージデバイス3−1に含まれるリフレッシュ対象のブロック内の有効データも、フラッシュストレージデバイス3−2〜3−4に書き込まれる。したがって、フラッシュストレージデバイス3−1が劣化している状況においては、フラッシュストレージデバイス3−1の一つのリフレッシュ期間が終了するタイミング、またはフラッシュストレージデバイス3−1に既に書き込まれている全データの更新が完了されるタイミングのいずれか早い方のタイミングで、フラッシュストレージデバイス3−1に格納されている有効データ量がゼロになり、フラッシュストレージデバイス3−1はホスト2から除去可能となる。
なお、図14の動作に、図12または図13で説明したように、フラッシュストレージデバイス3−1に格納されている有効データ量が許容量にまで減少された場合にこの有効データをフラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つにコピーする処理を適用してもよい。
図15のフローチャートは、ホスト側ストレージコントローラ43によって実行される書き込み/コピー/読み出し処理の手順を示す。
ホスト側ストレージコントローラ43は、例えば、フラッシュストレージデバイス3−1〜3−3の各々に含まれる不良ブロックの数を監視し、不良ブロックの数がある閾値を超えたフラッシュストレージデバイスを除去されるべきフラッシュストレージデバイスとして検出する(ステップS21)。除去されるべきフラッシュストレージデバイスが検出された場合、ホスト側ストレージコントローラ43は、オペレータにフラッシュストレージデバイスの追加を促してもよい(ステップS22)。
フラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続されると(ステップS23のYES)、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−4の全フリーブロックを共有フリーブロックリスト432Aに追加すると共に(ステップS24)、フラッシュストレージデバイス3−1のフリーブロックそれぞれを共有フリーブロックリスト432Aから削除する(ステップS25)。ステップS25では、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1の動作モードをライト禁止モードに設定する処理も実行する。
ホスト側ストレージコントローラ43が特定のグローバルLBAを指定するライト要求をホスト2(ホストソフトウェア)から受信した場合(ステップS26のYES)、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−2〜3−4の中から書き込み先フラッシュストレージデバイスを決定し、さらに書き込み先フラッシュストレージデバイス内の書き込み先デバイスLBAを決定する。ここで、書き込み先フラッシュストレージデバイスは、受信されたライト要求に関連付けられたデータ部が書き込まれるべきフラッシュストレージデバイスである。また、書き込み先フラッシュストレージデバイス内の書き込み先デバイスLBAは、このデータ部が書き込まれるべき論理記憶位置を示す。
そして、ホスト側ストレージコントローラ43は、このデータ部を書き込むためのライトコマンドを書き込み先フラッシュストレージデバイスに送信することによって、このデータ部をフラッシュストレージデバイス3−2〜3−4内の任意のフラッシュストレージデバイスに書き込む(ステップS27)。このライトコマンドは、上述の特定のグローバルLBA、書き込み先デバイスLBA、およびデータ長を含む。
ホスト側ストレージコントローラ43は、LUT431Aを更新し、上述の特定のグローバルLBAに新たなローカルLBA(書き込み先フラッシュストレージデバイスの識別子、書き込み先デバイスLBA)を関連付ける(ステップS28)。さらに、ホスト側ストレージコントローラ43は、上述の特定のグローバルLBAに関連付けられていた旧ローカルLBAによって指されるフラッシュストレージデバイスに対して、この旧ローカルLBAによって示されるデバイスLBAを含むトリムコマンドを送信してもよい。
ホスト側ストレージコントローラ43は、LUT431Aを参照して、フラッシュストレージデバイス3−1に残り有効データが存在するか否かを判定する(ステップS29)。
フラッシュストレージデバイス3−1に残り有効データが存在するならば(ステップS29のYES)、ホスト側ストレージコントローラ43の処理はステップS26に戻る。
ホスト側ストレージコントローラ43がフラッシュストレージデバイス3−1からリフレッシュ要求を受信したならば(ステップS30のYES)、ホスト側ストレージコントローラ43は、リフレッシュ対象のブロック内の有効データを示す情報をフラッシュストレージデバイス3−1から受信する(ステップS31)。このリフレッシュ対象のブロック内の有効データを示す情報は、この有効データに対応するグローバルLBAを含む。
ホスト側ストレージコントローラ43は、このグローバルLBAを使用してLUT431Aを参照して、このグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指しているか否かを判定してもよい。
もしこのグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指していないならば、このグローバルLBAに対応する更新データが既に他のフラッシュストレージデバイスに書き込まれているので、ホスト側ストレージコントローラ43は、この有効データを他のフラッシュストレージデバイスにコピーする処理を実行しない。
もしこのグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指しているならば、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−2〜3−4の中からコピー先フラッシュストレージデバイスを決定し、さらにコピー先フラッシュストレージデバイス内のコピー先デバイスLBAを決定する。
次いで、ホスト側ストレージコントローラ43は、このグローバルLBAに関連付けられている現在のローカルLBA内のデバイスLBAを含むリードコマンドをフラッシュストレージデバイス3−1に送信することによって、この有効データをフラッシュストレージデバイス3−1から読み出す。この有効データはフラッシュストレージデバイス3−1によってエラー訂正された後の有効データである。そして、ホスト側ストレージコントローラ43は、この読み出された有効データを書き込むためのライトコマンドをコピー先フラッシュストレージデバイスに送信する。これにより、ホスト側ストレージコントローラ43は、この有効データをフラッシュストレージデバイス3−2〜3−4内の任意のフラッシュストレージデバイスに書き込む(コピー)することができる(ステップS32)。このライトコマンドは、上述の特定のグローバルLBA、コピー先デバイスLBA、およびデータ長を含む。
ホスト側ストレージコントローラ43は、LUT431Aを更新し、上述の特定のグローバルLBAに新たなローカルLBA(コピー先フラッシュストレージデバイスの識別子、コピー先デバイスLBA)を関連付ける(ステップS33)。
ホスト側ストレージコントローラ43は、LUT431Aを参照して、フラッシュストレージデバイス3−1に残り有効データが存在するか否かを判定する(ステップS29)。
フラッシュストレージデバイス3−1に残り有効データが存在するならば(ステップS29のYES)、ホスト側ストレージコントローラ43の処理はステップS26に戻る。
ホスト側ストレージコントローラ43が特定のグローバルLBAを指定するリード要求をホスト2(ホストソフトウェア)から受信した場合(ステップS34のYES)、ホスト側ストレージコントローラ43は、リードすべきデータが格納されているフラッシュストレージデバイスからこのリードすべきデータを読み出す(ステップS35)。ステップS35では、ホスト側ストレージコントローラ43は、まず、この特定のグローバルLBAに関連付けられているローカルLBA(または物理アドレス)をLUT431Aから取得する。そして、ホスト側ストレージコントローラ43は、取得されたローカルLBAに含まれるデバイスLBAを含むリードコマンドを、取得されたローカルLBAに含まれるデバイスIDによって示されるフラッシュストレージデバイスに送信する。
フラッシュストレージデバイス3−1に残り有効データが存在しないならば(ステップS29のNO)、ホスト側ストレージコントローラ43の処理はステップS36に進む。
ステップS36では、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1のNAND型フラッシュメモリ内の各ブロックの消去動作を指示する消去コマンドをフラッシュストレージデバイス3−1に送出してもよい。さらに、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1内の消去動作が実行された各ブロックに、予め指定されたデータ(ダミーデータ)を書き込んでもよい。
そして、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1が除去可能であることを示すように構成されたインジケータ(フラッシュストレージデバイス3−1が取り付けられているスロットに配置されたLED52)を駆動して、フラッシュストレージデバイス3−1が除去可能であることをオペレータに通知する(ステップS37)。オペレータがフラッシュストレージデバイス3−1をスロット51から除去すると、このスロット51は追加のフラッシュストレージデバイスが接続可能な空きスロットとなる。
図16のフローチャートは、ホスト側ストレージコントローラ43によって実行される書き込み/コピー/読み出し処理の別の手順を示す。
図16のフローチャートによって示される手順は、図15のフローチャートで示される手順に比し、図15のステップS29の処理の代わりにステップS100の処理が実行される点と、ステップS100の処理とステップS36の処理との間にステップS101の処理が実行される点のみが異なっており、他の部分は図15のフローチャートで示される手順と同じである。
ステップS100では、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1の残り有効データ量が上述の許容量に対応する閾値Th1未満であるか否かを判定する。
フラッシュストレージデバイス3−1の残り有効データ量が閾値Th1未満でないならば(ステップS100のNO)、ホスト側ストレージコントローラ43の処理はステップS26に戻る。
フラッシュストレージデバイス3−1の残り有効データ量が閾値Th1未満であるならば(ステップS100のYES)、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−1の残り有効データを、フラッシュストレージデバイス3−2〜3−4の中から選択されるフラッシュストレージデバイスにコピーする(ステップS101)。ステップS101では、ホスト側ストレージコントローラ43は、さらに、LUT431Aを更新して、残り有効データに対応するグローバルLBAにコピー先ローカルLBA(コピー先フラッシュストレージデバイスの識別子、コピー先デバイスLBA)を関連付ける。
なお、ホスト側ストレージコントローラ43は、残り有効データに対応する全てのグローバルLBAを示す情報をフラッシュストレージデバイス3−1から受信してもよい。この場合、ステップS101では、受信されたグローバルLBAの各々について、ホスト側ストレージコントローラ43は、以下の処理を実行してもよい。
ホスト側ストレージコントローラ43は、受信されたグローバルLBAから処理対象のグローバルLBAを選択し、選択したグローバルLBAを使用してLUT431Aを参照し、この選択したグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指しているか否かを判定してもよい。
もしこの選択したグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指していないならば、この選択したグローバルLBAに対応する更新データが既に他のフラッシュストレージデバイスに書き込まれているので、ホスト側ストレージコントローラ43は、この選択したグローバルLBAに対応する有効データを他のフラッシュストレージデバイスにコピーする処理を実行しない。
もしこの選択したグローバルLBAに関連付けられている現在のローカルLBAがフラッシュストレージデバイス3−1を指しているならば、ホスト側ストレージコントローラ43は、フラッシュストレージデバイス3−2〜3−4の中からコピー先フラッシュストレージデバイスを決定し、さらにコピー先フラッシュストレージデバイス内のコピー先デバイスLBAを決定する。
次いで、ホスト側ストレージコントローラ43は、この選択したグローバルLBAに関連付けられている現在のローカルLBA内のデバイスLBAを含むリードコマンドをフラッシュストレージデバイス3−1に送信することによって、この選択したグローバルLBAに対応する有効データをフラッシュストレージデバイス3−1から読み出す。そして、ホスト側ストレージコントローラ43は、この読み出された有効データを書き込むためのライトコマンドをコピー先フラッシュストレージデバイスに送信することによって、この有効データをフラッシュストレージデバイス3−2〜3−4内の任意のフラッシュストレージデバイスにコピーする。このライトコマンドは、上述の特定のグローバルLBA、書き込み先デバイスLBA、およびデータ長を含む。
ホスト側ストレージコントローラ43は、LUT431Aを更新し、上述の選択したグローバルLBAに新たなローカルLBA(コピー先フラッシュストレージデバイスの識別子、コピー先デバイスLBA)を関連付ける。
図17は、ホスト側ストレージコントローラ43の別の構成例を示す。
図17においては、ホスト側ストレージコントローラ43は、図8の記憶位置管理部431の代わりに、記憶位置管理部531を含む。
記憶位置管理部531は、LUT531Aを使用して、第1の論理アドレス空間に属する論理アドレス(グローバルLBA)それぞれとグローバルLBAそれぞれに対応するデータ部それぞれが書き込まれたフラッシュストレージデバイス3−1〜3−3(あるいはフラッシュストレージデバイス3−1〜3−4)内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理する。
すなわち、LUT531Aは、グローバルLBA(グローバルLBA0〜グローバルLBAn)それぞれに対応する複数のエントリを含む。あるグローバルLBAに対応するエントリは、このグローバルLBAに対応するデータ部が格納されている特定のフラッシュストレージデバイス内の特定の物理記憶位置を示す物理アドレス(PBA)を格納する。各PBAは、デバイスIDとデバイス物理アドレス(デバイスPBA)とを含む。デバイスIDは、あるフラッシュストレージデバイスの識別子である。デバイス物理アドレス(デバイスPBA)は、このフラッシュストレージデバイス内のNAND型フラッシュメモリの一つの物理記憶位置を示す物理アドレスである。
ホスト側ストレージコントローラ43にフラッシュストレージデバイス3−1〜3−3が接続されている状態においては、記憶位置管理部531は、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−1〜3−3の中から選択される任意の一つのフラッシュストレージデバイス内の任意の物理記憶位置に書き込む。より詳しくは、記憶位置管理部531がある特定のグローバルLBAとある特定のデータ長とを含むライト要求をホストソフトウェア(例えばストレージ管理プログラム303)から受信した場合、記憶位置管理部531は、この特定のグローバルLBAに対応するライトデータ部が書き込まれるべきフラッシュストレージデバイスをフラッシュストレージデバイス3−1〜3−3の中から選択し、且つこの特定のグローバルLBAに対応するライトデータ部が書き込まれるべき物理記憶位置を決定する。記憶位置管理部531は、このデータ部を書き込むためのライトコマンドを、選択されたフラッシュストレージデバイスに送信する。このライトコマンドは、決定された物理アドレスと、この特定のデータ長とを含んでもよい。さらに、このライトコマンドは、この特定のグローバルLBAを含んでいてもよい。そして、記憶位置管理部531は、LUT431Aを更新して、この特定のグローバルLBAに、このデータ部が書き込まれた物理記憶位置を示す物理アドレス(デバイスID、デバイスPBA)を関連付ける。
記憶位置管理部531は、データ部それぞれが書き込まれるべき書き込み先ブロックを共有フリーブロックリスト432Aによって管理される共有フリーブロックの集合から選択することによって、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−1〜3−3の中から選択される任意の一つのストレージデバイス内の任意の物理記憶位置に書き込んでもよい。共有フリーブロックの集合から選択されたフリーブロックは、書き込み先ブロックとして割り当てられる。この書き込み先ブロックを含むフラッシュストレージデバイスが、データ部それぞれが書き込まれるべきフラッシュストレージデバイスとして選択されてもよい。各フラッシュストレージデバイスにおいて、あるブロック内の全てのデータが上書き/アンマップ、GC等によって無効化されると、このブロックは共有フリーブロックリスト432Aに返却される。返却されたブロックは共有フリーブロックとして再利用される。
次に、フラッシュストレージデバイス3−1〜3−3のうち、例えば、フラッシュストレージデバイス3−1の不良ブロック数の増加等によってフラッシュストレージデバイス3−1が除去されるべきことが決定され、且つフラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続された場合を想定する。
記憶位置管理部531は、フラッシュストレージデバイス3−1をデータの書き込みが禁止されデータの読み出しが許可される上述のライト禁止モードで制御する。さらに、記憶位置管理部531は、グローバルLBAそれぞれに対応するデータ部の各々を、フラッシュストレージデバイス3−2〜3−4の中から選択される任意の一つのフラッシュストレージデバイス内の任意の物理記憶位置に書き込むことによって、除去されるべきフラッシュストレージデバイス3−1内に格納されている有効データの量を減らす書き込み処理を実行する。この場合、フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部の各々は、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意の一つのフラッシュストレージデバイス内の空き領域に書き込まれる。同様に、フラッシュストレージデバイス3−2に既に書き込まれているデータ部それぞれに対応する更新データ部の各々も、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意の一つのフラッシュストレージデバイス内の空き領域に書き込まれる。同様に、フラッシュストレージデバイス3−3に既に書き込まれているデータ部それぞれに対応する更新データ部の各々も、フラッシュストレージデバイス3−2、3−3、3−4の中から選択される任意の一つのフラッシュストレージデバイス内の空き領域に書き込まれる。
図18は、グローバルLBAそれぞれに対応するデータ部をフラッシュストレージデバイス3−1〜3−3内の記憶位置(物理記憶位置)に書き込む処理を示す。
上述したように、ホストソフトウェアからホスト側ストレージコントローラ43に送信されるライト要求の各々に関連付けられたデータ部(つまり、各グローバルLBAに対応するデータ部)は、フラッシュストレージデバイス3−1〜3−3を含むストレージシステム内の任意の物理記憶位置に書き込むことができる。図18では、グローバルLBA0に対応するデータ部がフラッシュストレージデバイス3−1内の物理アドレス(デバイスPBA)100に書き込まれ、グローバルLBA1に対応するデータ部がフラッシュストレージデバイス3−1内の物理アドレス(デバイスPBA)110に書き込まれ、グローバルLBA2に対応するデータ部がフラッシュストレージデバイス3−2内の物理アドレス(デバイスPBA)50に書き込まれ、グローバルLBA3に対応するデータ部がフラッシュストレージデバイス3−2内の物理アドレス(デバイスPBA)60に書き込まれ、グローバルLBA4に対応するデータ部がフラッシュストレージデバイス3−1内の物理アドレス(デバイスPBA)200に書き込まれ、グローバルLBA5に対応するデータ部がフラッシュストレージデバイス3−3内の物理アドレス(デバイスPBA)500に書き込まれ、グローバルLBA6に対応するデータ部がフラッシュストレージデバイス3−3内の物理アドレス(デバイスPBA)600に書き込まれ、グローバルLBA7に対応するデータ部がフラッシュストレージデバイス3−2内の物理アドレス(デバイスPBA)100に書き込まれ、グローバルLBA10に対応するデータ部がフラッシュストレージデバイス3−2内の物理アドレス(デバイスPBA)10に書き込まれ、グローバルLBA11に対応するデータ部がフラッシュストレージデバイス3−1内の物理アドレス(デバイスPBA)900に書き込まれ、そして、グローバルLBAnに対応するデータ部がフラッシュストレージデバイス3−3内の物理アドレス(デバイスPBA)70に書き込まれた場合が想定されている。
図19は、グローバルLBAそれぞれに対応するデータ部の各々を、除去されるべきことが決定されたフラッシュストレージデバイス3−1以外のフラッシュストレージデバイス3−2、3−3それぞれと追加のフラッシュストレージデバイス3−4の中から選択される任意の一つのフラッシュストレージデバイスの空き領域内の任意の物理記憶位置に書き込む処理を示す。
追加のフラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続されると、フラッシュストレージデバイス3−4に対応するエントリが共有フリーブロックリスト432Aに追加される。そして、このフラッシュストレージデバイス3−4に対応するエントリに、フラッシュストレージデバイス3−4のNAND型フラッシュメモリ内の全てのフリーブロックのリストが追加される。共有フリーブロックリスト432Aは、各フラッシュストレージデバイスに含まれるフリーブロックそれぞれを識別するブロックアドレスを管理してもよい。
図19では、既にデータ部それぞれが書き込まれているグローバルLBA0〜グローバルLBA5への更新データ部それぞれの書き込み(上書き)を要求するライト要求それぞれがホストソフトウェアからホスト側ストレージコントローラ43に送信された場合が例示されている。
記憶位置管理部531がグローバルLBA0へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA0に書き込む。そして、記憶位置管理部531は、グローバルLBA0に対応するLUTエントリを更新して、グローバルLBA0にマッピングされている物理アドレスを、(デバイスID=#1、デバイスPBA=100)から、(デバイスID=#4、デバイスPBA=0)に変更する。さらに、記憶位置管理部531は、デバイスPBA=100のデータ部を無効化するためのコマンド(トリムコマンド)をフラッシュストレージデバイス3−1に送信してもよい。
なお、フラッシュストレージデバイス3−1はライト禁止モードであるため、フラッシュストレージデバイス3−1の空き領域を増加させる必要は無い、したがって、フラッシュストレージデバイス3−1に対しては、トリムコマンドは送信されてもよいし、送信されなくてもよい。
記憶位置管理部531がグローバルLBA1へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA5に書き込む。そして、記憶位置管理部431は、グローバルLBA1に対応するLUTエントリを更新して、グローバルLBA1にマッピングされている物理アドレスを、(デバイスID=#1、デバイスPBA=110)から、(デバイスID=#4、デバイスPBA=5)に変更する。さらに、記憶位置管理部531は、デバイスPBA=110のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−1に送信してもよい。
記憶位置管理部531がグローバルLBA2へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA10に書き込む。そして、記憶位置管理部531は、グローバルLBA2に対応するLUTエントリを更新して、グローバルLBA2にマッピングされている物理アドレスを、(デバイスID=#2、デバイスPBA=50)から、(デバイスID=#4、デバイスPBA=10)に変更する。さらに、記憶位置管理部531は、デバイスPBA=50のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−2に送信する。これにより、フラッシュストレージデバイス3−2の空き領域を容易に増加させることができる。
記憶位置管理部531がグローバルLBA3へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA20に書き込む。そして、記憶位置管理部531は、グローバルLBA3に対応するLUTエントリを更新して、グローバルLBA3にマッピングされている物理アドレスを、(デバイスID=#2、デバイスPBA=60)から、(デバイスID=#4、デバイスPBA=20)に変更する。さらに、記憶位置管理部531は、デバイスPBA=60のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−2に送信する。
記憶位置管理部531がグローバルLBA4へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA30に書き込む。そして、記憶位置管理部531は、グローバルLBA4に対応するLUTエントリを更新して、グローバルLBA4にマッピングされている物理アドレスを、(デバイスID=#1、デバイスPBA=200)から、(デバイスID=#4、デバイスPBA=30)に変更する。さらに、記憶位置管理部531は、デバイスPBA=200のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−1に送信してもよい。
記憶位置管理部531がグローバルLBA5へのデータ部の書き込みを要求するライト要求をホストソフトウェアから受信した場合、記憶位置管理部531は、受信されたライト要求に関連付けられたデータ部を、例えば、フラッシュストレージデバイス3−4の空き領域内のPBA40に書き込む。そして、記憶位置管理部531は、グローバルLBA5に対応するLUTエントリを更新して、グローバルLBA5にマッピングされている物理アドレスを、(デバイスID=#3、デバイスPBA=500)から、(デバイスID=#4、デバイスPBA=40)に変更する。さらに、記憶位置管理部531は、デバイスPBA=500のデータ部を無効化するためのトリムコマンドをフラッシュストレージデバイス3−3に送信してもよい。
以上説明したように、本実施形態によれば、複数のフラッシュストレージデバイス3−1〜3−3内のフラッシュストレージデバイス3−1がホスト2から除去されるべきことが決定され、且つフラッシュストレージデバイス3−4がホスト側ストレージコントローラ43に接続された場合、フラッシュストレージデバイス3−1がデータの書き込みが禁止されデータの読み出しが許可される第1のモードで制御される。さらに、(i)フラッシュストレージデバイス3−1に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれを、フラッシュストレージデバイス3−2、3−3と追加のフラッシュストレージデバイス3−4との中から選択される任意のフラッシュストレージデバイスに書き込む第1の処理と、(ii)フラッシュストレージデバイス3−2、3−3に既に書き込まれているデータ部それぞれに対応する更新データ部それぞれを、フラッシュストレージデバイス3−2、3−3と追加のフラッシュストレージデバイス3−4との中から選択される任意のフラッシュストレージデバイスに書き込む第2の処理とが実行される。このように、特定のグローバルLBA範囲を各フラッシュストレージデバイスに固定的にマッピングするのではなく、任意のグローバルLBAに対応するデータ部(更新テータ部)をフラッシュストレージデバイス3−2、3−3と追加のフラッシュストレージデバイス3−4との中から選択される任意のフラッシュストレージデバイスに書き込むという構成を採用することにより、追加のフラッシュストレージデバイス3−4のNAND型フラッシュメモリに含まれる多数のフリーブロックに対応する容量を、フラッシュストレージデバイス3−1〜3−4を含むストレージシステム全体のオーバープロビジョニング領域として有効利用することができる。このため、ストレージシステム全体のオーバープロビジョニング領域の量が増やされた状態でフラッシュストレージデバイス3−2〜3−4へのデータ書き込み処理を行うことが可能となるので、ホスト2から見たストレージシステム全体の書き込み性能の低下、ひいてはアプリケーション/エンドユーザから見たストレージシステム全体の書き込み性能の低下を招くことなく、フラッシュストレージデバイス3−1内に格納されているデータを他のフラッシュストレージデバイスに移行することができる。この結果、ストレージシステム全体の書き込み性能を改善することが可能となる。
なお、本実施形態では、通常状態で3台のフラッシュストレージデバイス3−1〜3−3が使用される場合を説明したが、通常状態で使用されるフラッシュストレージデバイスの数は3台に限定されず、2台以上の任意の数のフラッシュストレージデバイスが使用されてもよい。
また、本実施形態では、ホスト側ストレージコントローラ43が、コントローラと不揮発性メモリとを各々が含む複数のフラッシュストレージデバイスを制御する場合を説明した。しかし、ホスト側ストレージコントローラ43は、プリント回路基板とこのプリント回路基板上に配置された不揮発性メモリとを各々が含み且つコントローラを各々が含んでいない複数の記憶部を制御するように構成することもできる。この場合、ホスト側ストレージコントローラ43は、グローバルLBAそれぞれとこれらグローバルLBAに対応するデータ部それぞれかせ格納されている複数の記憶部内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理すればよい。
また、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。