(57)【特許請求の範囲】
【請求項１】
それぞれが、複数のフラッシュメモリと、前記複数のフラッシュメモリに対するデータの読み出し／書き込み処理を制御するメモリコントローラとを備える、複数の記憶装置と、
ホスト計算機とネットワークを介して情報の授受を行う第一インターフェース部と、
前記複数の記憶装置との間でデータの入出力処理を行う第二インターフェース部と、
旧データを格納する第一記憶装置及び旧データに対応する旧パリティを格納する第二記憶装置を含む前記複数の記憶装置をＲＡＩＤグループとして制御し、前記複数の記憶装置の記憶領域に割り当てられた複数の論理デバイスに対する入出力処理を、前記第二インターフェース部を介して制御する制御部と、
前記制御部の制御対象として、前記制御部の処理に伴うデータを一時的に記憶するキャッシュメモリを備え、
前記複数のフラッシュメモリのそれぞれは複数のページを有し、前記複数のページのそれぞれはデータの読み出し／書き込みの単位であり、
前記制御部は、
前記旧データを更新する新データを受信し、前記第二記憶装置に対してXORライトの実行を指示するためのXORライトコマンドを生成し、前記生成したXORライトコマンドを前記第二インターフェース部を介して前記第二記憶装置のメモリコントローラに転送し、
前記第二記憶装置のメモリコントローラは、
前記XORライトコマンドを受信し、前記XORライトコマンドで指定された旧パリティを前記旧パリティが格納されている第一ページから読み出し、前記読み出した旧パリティと前記旧データと前記新データを基に排他的論理和演算を行って新パリティを生成し、前記生成した新パリティを前記第一ページとは異なる第二ページに書き込み、
前記新パリティの書き込み時に、前記第二記憶装置においてエラーが発生し、前記第二記憶装置のメモリコントローラが異常であるとき、または、第二記憶装置のメモリコントローラが正常であり、前記第二ページに書き込まれた新パリティの付加情報が異常であるとき、
前記制御部は、新たにXORライトコマンドを生成して、前記第二記憶装置のメモリコントローラに送信し、
前記第二記憶装置のメモリコントローラは、
前記新たに生成されたXORライトコマンドの受信に応じて、前記第一ページに格納された旧パリティを読み出し、前記読み出した旧パリティと前記旧データと前記新データを基に排他的論理和演算を行って新パリティを生成するストレージサブシステム。
【請求項２】
前記制御部は、前記XORライトコマンドに前記旧パリティを格納する前記第一ページの物理アドレスと前記新パリティを格納する前記第二ページの物理アドレスを付加するとともに、前記旧データと前記新データを付加し、
前記第二記憶装置のメモリコントローラは、XORライトコマンドに付加された、前記第一ページの物理アドレスに従って、前記第一ページから前記旧パリティを読み出し、前記読み出した旧パリティと前記XORライトコマンドに付加された旧データおよび新データを用いて排他的論理和演算を行って新パリティを生成し、生成した新パリティを、前記XORライトコマンドに付加された、前記第二ページの物理アドレスに従って、前記第二ページに格納する、請求項１に記載のストレージサブシステム。
【請求項３】
前記第二記憶装置のメモリコントローラは、前記XORライトコマンドに対する応答として、前記XORライトコマンドで指定された処理の成否を示すステータスを前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから前記ステータスとして完了ステータスを受信したときには、前記XORライトコマンドの生成に伴う処理を完了し、前記第二記憶装置のメモリコントローラから前記ステータスとしてエラーステータスを受信したときには、前記第一ページ及び前記第二ページとは異なる第三ページに新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記新たに生成したXORライトコマンドに従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項４】
前記第二記憶装置のメモリコントローラは、前記XORライトコマンドに対する応答として、前記XORライトコマンドで指定された処理の成否を示すステータスを前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから前記ステータスが設定時間内に戻ってこなかったときには、前記第二記憶装置のメモリコントローラの異常の有無を判定し、前記第二記憶装置のメモリコントローラが異常であるときには、複数のデータから旧パリティを生成し、前記生成した旧パリティをスペア用フラッシュメモリにコピーするためのコレクションコピーを実行し、前記スペア用フラッシュメモリのうち新たな更新領域である第三ページに新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記新たに生成したXORライトコマンドに従った処理を指示し、前記第二記憶装置のメモリコントローラが正常であるときには、前記第二ページに書き込まれた新パリティの付加情報が正常であることを条件に、前記第二ページに前記新パリティが正常に書き込まれたとして、前記XORライトコマンドの生成に伴う処理を完了する、請求項１に記載のストレージサブシステム。
【請求項５】
前記第二記憶装置のメモリコントローラは、前記XORライトコマンドに対する応答として、前記XORライトコマンドで指定された処理の成否を示すステータスを前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから前記ステータスが設定時間内に戻ってこなかったときには、前記第二記憶装置のメモリコントローラの異常の有無を判定し、前記第二記憶装置のメモリコントローラが異常であるときには、複数のデータからパリティを生成し、前記生成したパリティをスペア用フラッシュメモリにコピーするためのコレクションコピーを実行し、前記スペア用フラッシュメモリのうち新たな更新領域である第三ページに新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記新たに生成したXORライトコマンドに従った処理を指示し、前記第二記憶装置のメモリコントローラが正常であるときには、前記第二ページに書き込まれた新パリティの付加情報が正常であるか否かを判定し、前記新パリティの付加情報が正常であるときには、前記第二ページに前記新パリティが正常に書き込まれたとして、前記XORライトコマンドの生成に伴う処理を完了し、前記新パリティの付加情報が異常であるときには、前記新パリティを格納すべき第二ページは消去済みか否かを判定し、前記新パリティを格納すべき第二ページが消去済みのときには、前記新パリティを格納すべき第二ページに前記新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記新たに生成したXORライトコマンドに従った処理を指示し、前記新パリティを格納すべき前記第二ページが消去済みでないときには、前記新パリティを格納すべき前記第二ページとは異なる第三ページに前記新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記新たに生成したXORライトコマンドに従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項６】
前記第二記憶装置のメモリコントローラが前記フラッシュメモリに対して、データの入出力処理を行うときの状態を順次記録する状態記録メモリを備え、前記第二記憶装置のメモリコントローラは、前記状態記憶メモリに記録された内容を前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから、前記状態記憶メモリに記録された内容を受信したときには、前記受信した内容を基に指示情報を生成するとともに、前記生成した指示情報を前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記指示情報に従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項７】
前記第二記憶装置のメモリコントローラが前記フラッシュメモリに対して、データの入出力処理を行うときの状態を順次記録する状態記録メモリを備え、前記第二記憶装置のメモリコントローラは、前記状態記憶メモリに記録された内容を前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから、前記状態記憶メモリに記録された内容として、前記新パリティの書き込み開始以前で処理が中断したことを示す情報を受信したときには、前記受信した内容を基に前記フラッシュメモリの同じページに新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを含む指示情報を生成するとともに、前記生成した指示情報を前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記指示情報に従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項８】
前記第二記憶装置のメモリコントローラが前記フラッシュメモリに対して、データの入出力処理を行うときの状態を順次記録する状態記録メモリを備え、前記第二記憶装置のメモリコントローラは、前記状態記憶メモリに記録された内容を前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから、前記状態記憶メモリに記録された内容として、前記新パリティの書き込み終了以前で処理が中断したことを示す情報を受信したときには、前記受信した内容を基に前記フラッシュメモリのうち新たな更新領域である第三ページに新パリティを書き込むためのXORライトコマンドを新たに生成し、前記新たに生成したXORライトコマンドを含む指示情報を生成するとともに、前記生成した指示情報を前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記指示情報に従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項９】
前記第二記憶装置のメモリコントローラが前記フラッシュメモリに対して、データの入出力処理を行うときの状態を順次記録する状態記録メモリを備え、前記第二記憶装置のメモリコントローラは、前記状態記憶メモリに記録された内容を前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから、前記状態記憶メモリに記録された内容として、ポインタ更新以前で処理が中断したことを示す情報を受信したときには、前記受信した内容を基に前記ポインタ更新するための指示情報を生成するとともに、前記生成した指示情報を前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記指示情報に従った処理を指示する、請求項１に記載のストレージサブシステム。
【請求項１０】
前記第二記憶装置のメモリコントローラが前記フラッシュメモリに対して、データの入出力処理を行うときの状態を順次記録する状態記録メモリを備え、前記第二記憶装置のメモリコントローラは、前記状態記憶メモリに記録された内容を前記制御部に転送し、前記制御部は、前記第二記憶装置のメモリコントローラから、前記状態記憶メモリに記録された内容として、ステータス報告以前で処理が中断したことを示す情報を受信したときには、前記受信した内容を基に前記新パリティを書き込むための処理は正常に終了した旨の指示情報を生成するとともに、前記生成した指示情報を前記第二記憶装置のメモリコントローラに転送し、前記第二記憶装置のメモリコントローラに対して、前記指示情報に従った処理を指示する、請求項１に記載のストレージサブシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置にフラッシュメモリなどの不揮発性半導体メモリが搭載されたストレージサブシステムに関する。
【背景技術】
【０００２】
近年、記憶デバイスとしてフラッシュメモリに代表される不揮発性半導体メモリが注目されている。フラッシュメモリはHDD（Hard Disk Drive）に代表される磁気記憶装置のような駆動部分を持たないため、HDDよりも低消費電力である。このため、外部記憶装置として、HDDの代わりに、フラッシュメモリを複数枚搭載したメモリドライブを用いたものが提案されている（特許文献１参照）。
【０００３】
一方、ストレージサブシステムは、安定性が要求されるところから、構成要素を２重化し、構成要素の一部に障害が発生したときでも処理を可能とする構成が採用されている。例えば、データの信頼性と処理性能を高めるために、RAID（Redundant Array of Inexpensive Disks）技術によって、複数の記憶デバイスを１つのRAIDグループとして管理し、データを冗長化して格納するものがある。この際、RAIDグループは、１つ以上の論理的な記憶領域を形成する。この記憶領域にデータを記憶するときに、RAIDグループを構成する記憶デバイスに冗長データを記憶する。記憶デバイスに冗長データを記憶することで、記憶デバイスの１つが故障した場合であってもデータを復元することができる。
【０００４】
例えば、フラッシュメモリで構成されたメモリドライブをRAID５として構成した場合、複数のデータによって計算されるECC（Error Correct Code）をECC用メモリドライブに記録し、１台のメモリドライブに障害が発生しても、障害の生じたメモリドライブに格納されたデータを、残りのデータとECCを用いて復元することができる。
【０００５】
しかし、RAIDを構成したサブストレージシステムにおいても、所定の台数以上のメモリドライブに障害が発生すると、データを復元することができなくなる。そこで、ストレージサブシステムでは、一般的に、スペアドライブと呼ばれる、データを保存していない予備ドライブを用意している。
【０００６】
そして、ストレージサブシステムにおいては、RAIDを構成しているメモリドライブの１台に障害が発生した場合に、RAIDを構成している残りのメモリドライブのデータを用いて、障害が発生したメモリドライブのデータを復元してスペアドライブに格納する構成が採用されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２０４０４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
RAID５を構成するストレージサブシステムにおいて、最初のデータ書き込み時に、例えば、データa、b、cを記憶デバイスに書き込む場合、データa、b、cをそれぞれ３台のHDDまたはメモリドライブに格納するとともに、データa、b、cを用いて排他的論理和演算を行ってパリティを生成し、生成したパリティをパリティ格納用HDDまたはメモリドライブに格納することが行われる。
【０００９】
この際、記憶デバイスに対するデータの入出力を制御するためのプロセッサは、キャッシュメモリ上のデータa、b、cを用いて排他的論理和演算を行ってパリティを生成し、生成したパリティをパリティ格納用HDDまたはメモリドライブに格納するようになっている。
【００１０】
また、プロセッサは、データの更新に伴うランダムライト時には、更新対象となる旧データと新データおよび旧パリティ（旧データに対応したパリティ）を基に新パリティを排他的論理和演算によって生成し、生成した新パリティをパリティ格納用HDDまたはメモリドライブに格納する。
【００１１】
ところで、HDDのデータを更新する場合、HDDのデータは上書きされることがある。このため、HDDに格納されている旧パリティは、上書き処理によって消失する可能性がる。この場合、HDDのデータを更新するときに、旧パリティを利用して新パリティを生成することができなくなる。
【００１２】
これに対して、フラッシュメモリのデータを更新する場合、新たなデータは、新データとして更新領域に書き込まれ、更新の対象となる旧データは、ブロック全体が消去されるまで残っている。このため、メモリドライブに格納された新パリティも、ブロック全体が消去されるまではそのまま残っている。この場合、フラッシュメモリのデータを更新するときに、旧パリティを利用して新パリティを生成することができる。
【００１３】
しかし、プロセッサがキャッシュメモリを用いて新パリティを生成するための演算を行う構成では、プロセッサのキャッシュメモリに対するアクセスが多くなり、プロセッサの負荷を軽減することができない。
【００１４】
本発明の目的は、データの更新に伴う処理を、キャッシュメモリを制御対象とする制御部と不揮発性半導体メモリを制御対象とするメモリコントローラで分散して行うことができるストレージサブシステムを提供することにある。
【課題を解決するための手段】
【００１５】
前記目的を達成するために、本発明は、不揮発性半導体メモリのデータを更新する際に、キャッシュメモリを制御対象とする制御部でデータ更新に関するコマンドを生成し、生成したコマンドを、制御部から、不揮発性半導体メモリを制御対象とするメモリコントローラに転送し、メモリコントローラでコマンドを基に排他的論理和演算を行って新パリティを生成し、生成した新パリティをパリティ格納用不揮発性半導体メモリに格納することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、不揮発性半導体メモリのデータを更新するときに、キャッシュメモリを制御対象とする制御部の負荷を低減することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１実施例を示すストレージシステムのブロック構成図である。
【図２】フラッシュモジュールのブロック構成図である。
【図３】フラッシュメモリコントローラのブロック構成図である。
【図４】フラッシュメモリのブロック構成図である。
【図５】ブロックの構成図である。
【図６】（A）メモリセルの回路構成図、（B）メモリセルのセル構造を説明するための回路構成図である。
【図７】シーケンシャルライト処理を説明するための構成図である。
【図８】（A）HDDに対するXORライトコマンドの構成図、（B）フラッシュメモリに対するXORライトコマンドの構成図である。
【図９】HDDに対するランダムライト時の動作を説明するための構成図である。
【図１０】フラッシュモジュールに対するランダムライト時の動作を説明するための構成図である。
【図１１】パリティをページの１セクター分の更新領域に格納する方法を説明するための模式図である。
【図１２】本発明の第１実施例の作用を説明するためのフローチャートである。
【図１３】リクラメーション処理を説明するための構成図である。
【図１４】本発明の第２実施例に用いられるフラッシュメモリコントローラのブロック構成図である。
【図１５】本発明の第２実施例の作用を説明するためのフローチャートである。
【発明を実施するための形態】
【実施例１】
【００１８】
本実施例は、ランダムライト時に、フラッシュモジュールに対して更新データを書き込むに際して、キャッシュを制御対象とする主プロセッサは、XORライトコマンドを生成し、生成したXORライトコマンドを、フラッシュメモリを制御対象とするフラッシュメモリコントローラに転送し、フラッシュメモリコントローラは、XORライトコマンドを解析して、パリティ格納用フラッシュメモリから旧パリティを読み出し、読み出した旧パリティとXORライトコマンドに付加された旧データおよび新データを用いて排他的論理和演算を行って新パリティを生成し、生成した新パリティをパリティ格納用フラッシュメモリに格納することとしている。
【００１９】
以下、本発明の第１実施例を図面に基づいて説明する。図１は、本発明の第１実施例を示すストレージシステムのブロック構成図である。
【００２０】
図１において、ストレージシステムは、複数の上位ホストシステム１０と、ストレージサブシステム１２を備え、各上位ホストシステム１０はネットワーク１４を介してストレージサブシステム１２に接続されている。
【００２１】
ネットワーク１４としては、例えば、SAN（Storage  Area  Network）、LAN(Local  Area  Network)、インターネット、専用回線、公衆回線などを用いることができ、データ通信を行うことのできるネットワークであれがよい。また、ネットワーク１４におけるプロトコルとしては、ファイバチャネルプロトコルや、TCP/IPプロトコルを用いることができ、上位ホストシステム１０とストレージサブシステム１２との間でデータのやりとりが可能なプロトコルであれば、任意のプロトコルであってもよい。
【００２２】
上位ホストシステム１０は、ホスト計算機（図示せず）を備えて構成されている。ホスト計算機は、例えば、CPU（Central  Processing  Unit）、メモリ、入力装置、出力装置、ホストアダプタを備えている。CPUは、メモリに格納されたアプリケーションプログラムに従ってリード要求（リードコマンド）やライト要求（ライトコマンド）を生成して、ホストアダプラから送信する。この際、上位ホストシステム１０から送信されるリード要求には、例えば、リード対象のデータが管理されているLUN（Logical  Unit  Number）およびLBA（Logical  Block  Address）が含まれる。また、上位ホストシステム１０から送信されるライト要求には、例えば、ライト対象のデータを書き込むLUNおよびLBAと、ライト対象のデータが含まれる。
【００２３】
ストレージサブシステム１２は、複数の上位ホストシステムインターフェースユニット１６と、複数の主プロセッサ１８と、スイッチ２０と、複数のキャッシュメモリ（以下、キャッシュと称する。）２２と、複数のディスクドライブコントロールユニット２４と、複数の記憶装置２６を備え、各記憶装置２６によって構築される論理ボリュームを、ネットワーク１４を介して各上位ホストシステム１０に提供することができる。
【００２４】
各上位ホストシステムインターフェースユニット１６は、内部ネットワーク２８を介してスイッチ２０に接続され、各主プロセッサ１８は、内部ネットワーク３０を介してスイッチ２０に接続され、各キャッシュ２２は、内部ネットワーク３２を介してスイッチ２０に接続されている。スイッチ２０は、内部ネットワーク３４を介して各ディスクドライブコントロールユニット２４に接続され、各ディスクドライブコントロールユニット２４は、内部ネットワーク３６を介してそれぞれ記憶装置２６に接続されている。
【００２５】
各上位ホストシステムインターフェースユニット１６は、ネットワーク１４を介して、各上位ホストシステム１０と情報の授受を行い、各上位ホストシステム１０に対するデータの入出力処理を行う第一インターフェース部として構成されている。
【００２６】
各主プロセッサ１８は、記憶装置２６とキャッシュ２２を制御対象とする制御部として、プログラムや各上位ホストシステム１０からのコマンドに従って各種の演算、例えば、キャッシュ２２や記憶装置２６を制御対象とした制御演算やランダムライトに伴う処理などを実行する。この際、各主プロセッサ１８は、処理に伴うデータを一時的にキャッシュ２２に格納し、キャッシャ２２に格納されたデータを利用してデータの入出力処理などを実行する。
【００２７】
各ディスクドライブコントロールユニット２４は、スイッチ２０を介して各主プロセッサ１８を情報の授受を行うとともに、内部ネットワーク３６を介して各記憶装置２６と情報の授受を行い、記憶装置２６内の記憶デバイス群に対するデータの入出力処理を行う第二インターフェース部として構成されている。
【００２８】
記憶装置２６は、複数のHDD３８を備えているとともに複数のフラッシュモジュール４０を備え、複数のHDD３８はディスクアレーとして構成され、複数のフラッシュモジュール４０はフラッシュモジュールアレーとして構成されている。
【００２９】
この際、各HDD３８または各フラッシュモジュール４０の記憶領域には、上位ホストシステム１０から参照できる論理的な記憶デバイスである論理デバイス（VDEV：Virtual  Device）または論理ボリュームが割り当てることができる。この場合、複数のHDD３８や複数のフラッシュモジュール４０でRAID（Redundant  Array  of Inexpensive Disks）グループを構成した場合、RAIDグループの記憶領域を論理デバイスまたは論理ボリュームの記憶領域として用いることもできる。
【００３０】
各フラッシュモジュール４０は、図２に示すように、フラッシュメモリコントローラ４２と、複数のフラッシュメモリ４４を備えて構成されている。各フラッシュメモリ４４は、バス４６を介してフラッシュメモリコントローラ４２に接続され、フラッシュメモリコントローラ４２は、内部ネットワーク３６を介してディスクドライブコントロールユニット２４に接続されている。
【００３１】
フラッシュメモリコントローラ４２は、図３に示すように、マイクロプロセッサ（MPU;Microprocessing Unit）４８と、RAM（Random Access Memory）５０と、ROM（Read Only Memory）５２と、ホストインターフェース５４と、フラッシュメモリインターフェース５６を備えている。マイクロプロセッサ４８と、RAM５０およびROM５２は、それぞれバス５８に接続され、ホストインターフェース５４およびフラッシュメモリインターフェース５６は、バス６０に接続されている。ホストインターフェース５４は、内部ネットワーク３６を介してディスクドライブコントロールユニット２４に接続されているとともに、バス５８を介してマイクロプロセッサ４８とRAM５０およびROM５２に接続されている。ホストインターフェース５４は、バス６０を介してフラッシュメモリインターフェース５６に接続され、フラッシュメモリインターフェース５６は、バス４６を介して各フラッシュメモリ４４に接続されている。
【００３２】
ホストインターフェース５４は、マイクロプロセッサ４８の管理の下で、内部ネットワーク３６を介してディスクドライブコントロールユニット２４に対するデータの入出力処理を実行する。フラッシュメモリインターフェース５６は、マイクロプロセッサ４８の管理の下で、バス４６を介して各フラッシュメモリ４４に対するデータの入出力処理などを実行する。この際、ホストインターフェース５４に内蔵されたダイレクトメモリアクセスコントローラ６２は、マイクロプロセッサ４８の管理によらず、フラッシュメモリ４４に関するデータの入出力処理を外部に対して実行する。
【００３３】
マイクロプロセッサ４８は、補助プロセッサとして、ROM５２に格納されたプログラムにしたがって各種演算処理を実行するとともに、ホストインターフェース５４から入力されたコマンドを解析し、この解析結果をRAM５０に格納するとともに、解析結果にしたがった演算処理を実行し、フラッシュメモリインターフェース５６を介して各フラッシュメモリ４４に対するデータの入出力処理を制御する。
【００３４】
各フラッシュメモリ４４は、図４に示すように、フラッシュメモリチップ６４を備え、フラッシュメモリチップ６４にはメモリセルアレー６６と内部バッファ６８が形成されている。メモリセルアレー６６には、データの消去単位となるブロック７０が数１０００〜数１０万個形成されており、各ブロック７０には、データの読み出しまたは書き込み単位となるページ７２が複数ページ分形成されている。
【００３５】
このフラッシュメモリチップ６４には、バス４６に属する信号線として、チップセレクト線４６１、制御線４６２、レディ／ビジー線４６３が接続されている。さらにバス４６に属する信号線として、８ビットのI/O線４６４が内部バッファ４８に接続されている。
【００３６】
各ブロック７０は、図５に示すように、ユーザ領域７４と更新領域７６を備えている。ユーザ領域７４は、＃０のページ７２〜＃９５のページ７２に分割され、更新領域７６は、＃９６のページ７２〜＃１２７のページ７２に分割されている。＃０〜＃１２７のページ７２はそれぞれ物理アドレスが＃０〜＃１２７に設定されている。
【００３７】
＃０〜＃９５のページ７２には、＃０〜＃９５のデータ７８が格納されているとともに、各データ７８を管理するための管理情報としてのメタデータ８０が格納されるようになっている。
【００３８】
一方、更新領域７６は、更新時のデータを格納するための記憶領域である。このため、データ更新前には、更新領域７６の＃９６〜＃１２７のページ７２は空き領域となっている。
【００３９】
各ブロック７０は、図６（A）および図６（B）に示すように、複数のメモリセル８２を備えており、各メモリセル８２は格子状に配列されている。これらメモリセル８２のうち横１列のメモリセル８２によってページ７２が構成されている。各メモリセル８２はフローティングゲート８４を有する電界効果トランジスタ８８で構成されている。各メモリセル８２には、ビット線８８が接続されているとともに、ワード線９０が接続されている。各ビット線８８と各ワード線９０は互いに直交する方向に配置されている。
【００４０】
上記構成において、主プロセッサ１８は、上位ホストシステム１０からのコマンドを解析し、この解析結果を基に、コマンドに付加された論理アドレスを変換テーブルに従って物理アドレスに変換するための処理を行うとともに、記憶装置２６に対する入出力処理を行う。この際、データを最初に書き込むとのシーケンシャルライト時には、例えば、図７に示すように、「a」、「b」、「c」のデータ７８を書き込むときには、「a」のデータ７８を＃１のHDD３８に、「b」のデータ７８を＃２のHDD３８に、「c」のデータ７８を＃３のHDD３８にそれぞれ書き込むための処理を行う。さらに、主プロセッサ１８は、「a」〜「c」のデータ７８を基にパリティ９２を生成し、パリティ９２を＃４のHDD３８に書き込むための処理を行う。
【００４１】
すなわち、主プロセッサ１８は、パリティ９２を生成するための演算を行うとともに、生成したパリティ９２を「a」、「b」、「c」のデータ７８とともにディスクドライブコントロールユニット２４に転送し、ディスクドライブコントロールユニット２４に対して、「a」、「b」、「c」のデータ７８とパリティ９２を指定のHDD３８に格納するための指示を行う。
【００４２】
この場合、主プロセッサ１８は、フラッシュモジュール４０に対して「a」、「b」、「c」のデータ７８とパリティ９２をそれぞれ分散して格納するときにも、パリティ９２を生成するための演算を行い、その後、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に対して、「a」、「b」「c」のデータ７８とパリティ９２を＃１〜＃４のフラッシュモジュール４０にそれぞれ分散して格納するための指示を行う。
【００４３】
一方、ランダムライト時には、主プロセッサ１８は、図８（A）に示すように、XORライトコマンド９４にしたがってXORライトを実行する。XORライトコマンド９４は、論理ブロックアドレス（LBA）９４１、サイズ９４２、データ９４３、チェックコード９４４から構成される。
【００４４】
ランダムライト時にデータを更新するに際して、例えば、図９に示すように、「b」のデータ７８を旧データとし、「d」のデータ７８を新データとして、旧データを新データに更新するときには、主プロセッサ１８は、＃４のHDD３８からパリティ９２を旧パリティ９６として取り込むとともに、＃２のHDD３８から、旧データとして「b」のデータ７８を取り込み、「b」のデータ７８と「d」のデータ７８および旧パリティ９６を基に排他的論理和演算を行って新パリティ９８を生成し、新パリティ９８を＃４のHDD３８に書き込むためのXOR（Exclusive  ＯＲ）ライト処理を実行する。
【００４５】
一方、ランダムライト時に、フラッシュモジュール４０に対して更新データを書き込むに際して、主プロセッサ１８は、新パリティ９８を生成するための演算などを行うことなく、図８（B）に示すように、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送する。
【００４６】
この際、XORライトコマンド１００は、旧パリティ９６の物理アドレスとなるフラッシュメモリアドレス１００１、新パリティ９８の物理アドレスとなるフラッシュメモリアドレス１００２、サイズ/番号１００３、データ１００４、データ１００５、チェックコード１００６から構成される。
【００４７】
フラッシュメモリコントローラ４２は、図１０に示すように、＃２のフラッシュモジュール４０に格納された「b」のデータ７８を旧データとし、「d」のデータ７８を新データとして更新する場合、＃４のフラッシュモジュール（パリティ格納用フラッシュモジュール）４０に格納された旧パリティ９６を読み出し、読み出した旧パリティ９６と「b」のデータ７８および「d」のデータ７８を用いて排他的論理和演算を行って新パリティ９８を生成し、生成した新パリティ９８を、図５の更新領域７６のページ、例えば、＃９６のページ７２に対してXORライト処理を実行する。
【００４８】
すなわち、旧パリティ９６が存在するブロック７０に対して消去動作が行われない限りは、＃４のフラッシュモジュール４０には、旧パリティ９６が存在しているため、フラッシュメモリコントローラ４２は、旧パリティ９６を利用して新パリティ９８を生成するための排他的論理和演算を行うこととしている。
【００４９】
この場合、主プロセッサ１８は、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送するだけでよく、キャッシュ２２を利用してパリティ生成の演算を行う必要がないため、フラッシュモジュール４０に対するランダムライト時の処理（負荷）を軽減することができる。
【００５０】
また、XORライトコマンド１００のうちフラッシュメモリアドレス１００１には旧パリティ９６の物理アドレスが格納され、フラッシュメモリアドレス１００２には新パリティ９８の物理アドレスが格納され、データ１０４には旧データである「b」データ７８が格納され、データ１００５には新データである「d」のデータ７８が格納される。
【００５１】
フラッシュメモリコントローラ４２のマイクロプロセッサ４８は、XORライトコマンド１００を解析し、図１１に示すように、フラッシュメモリアドレス１００１に付加された物理アドレスに従って、＃４のフラッシュモジュール４０に属するフラッシュメモリ４４のユーザ領域７４のページ７２から旧パリティ９６を読み出し、読み出した旧パリティ９６と、データ１０４に付加された旧データである「b」のデータ７８およびデータ１００５に付加された新データである「d」のデータ７８を用いて排他的論理和演算を行って新パリティ９８を生成し、生成した新パリティ９８を、フラッシュメモリアドレス１００２に付加された物理アドレスに従って、更新領域７６に属する、＃９６〜＃１２７のページ７２の中の指定のページ７２の微小領域７６１に格納する。
【００５２】
上述したように、ランダムライト時に、フラッシュモジュール４０に対して更新データを書き込むに際して、主プロセッサ１８は、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送するだけでよいことなる。
【００５３】
一方、フラッシュメモリコントローラ４２のマイクロプロセッサ４８は、XORライトコマンド１００を解析して、フラッシュメモリ４４のユーザ領域７４のページ７２から旧パリティ９６を読み出し、読み出した旧パリティ９６と、XORライトコマンド１００に付加された旧データである「b」のデータ７８およびXORライトコマンド１００に付加された新データである「d」のデータ７８を用いて排他的論理和演算を行って新パリティ９８を生成し、生成した新パリティ９８を、XORライトコマンド１００に付加された物理アドレスに従って、更新領域７６の指定のページ７２に格納することができる。
【００５４】
次に、ランダムライト時における主プロセッサ１８の処理を図１２のフローチャートにしたがって説明する。まず、主プロセッサ１８は、フラッシュモジュール４０に対するXORライト処理として、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送し（S１）、フラッシュモジュール４０においてエラーが生じたか否かを判定し（S２）、エラーが生じないときにはフラッシュモジュール４０においてXORライト処理が正常に終了したとして、このルーチンでの処理を終了し、エラーが発生したときには、エラーの内容に応じた処理を行う。
【００５５】
具体的には、主プロセッサ１８は、設定時間内にフラッシュメモリコントローラ４２からエラーステータスが送信されたときには（S３）、更新領域７６に新パリティ９８を書き込むことができなかったとして、リクラメーション処理を実行する（S４）。
【００５６】
リクラメーション処理を行うに際して、主プロセッサ１８は、図１３に示すように、ブロック７０の中から最新のデータ７８を収集し、収集した最新のデータ７８を主プロセッサ１８内のバッファ１８Aに取り込み、バッファ１８Aに取り込んだ最新のデータ７８を消去済みブロック７０Aに書き込むための処理を行う。この際、最新のデータ７８に関する論理アドレスと物理アドレスが変更されるため、論理アドレスを物理アドレスに変換するための変換テーブルを更新するための処理を行う。
【００５７】
この後、主プロセッサ１８は、再度、更新領域７６に新パリティ９８を書き込むための処理として、新たにXORライトコマンド１００を生成し、生成したXORライトコマンド１００をフラッシュメモリコントローラ４２に転送し、再度フラッシュメモリコントローラ４２に対して、XORライト処理を実行させる（S５）。この後、主プロセッサ１８は、再度ステップS２の処理に戻り、フラッシュモジュール４０においてエラーが発生したか否かを判定する。
【００５８】
一方、ステップS２において、エラーが発生したと判定したときに、一定時間経過してもエラーステータスが戻ってこなかったときには、主プロセッサ１８は、処理が中断されたとして、タイムアウトとしての処理を実行し（S６）、フラッシュモジュール４０をチェックするための処理を行う（S７）。
【００５９】
フラッシュモジュール４０をチェックするに際して、主プロセッサ１８は、フラッシュメモリコントローラ４２にエラーが発生したか否かを判定し（S８）、エラーが発生したと判定したときには、コレクションコピーを実行する（S９）。
【００６０】
すなわち、フラッシュメモリコントローラ４２にエラーが発生したことが原因で、一定時間経過してもエラーステータスが戻ってこなかったときには、パリティを格納するためのフラッシュメモリ４４自体が故障であると判定し、３つのデータ、例えば、「a」、「b」、「c」のデータ７８からパリティ９２を生成し、生成したパリティ９２をパリティ格納用フラッシュメモリ４４にコピーするための処理を行う。
【００６１】
この後、主プロセッサ１８は、ステップS１と同様のXORライトするための処理を再度行い（S１０）、ステップS２の処理に戻る。
【００６２】
一方、ステップS８で、フラッシュメモリコントローラ４２のエラーでないと、すなわち正常と判定したときには、主プロセッサ１８は、パリティ格納用フラッシュメモリ４４の更新領域７６に書き込まれた新パリティ９８をチェックするための処理を行い（S１１）、新パリティ９８に付加されたECCにエラーがあるか否かを判定する（S１２）。このとき、ECCにエラーがないと判定したとき、すなわち正常なときには、主プロセッサ１８は、フラッシュメモリコントローラ４２からステータスが戻らなかっただけで、XORライト処理は正常に終了したとして、XORライト処理が正常に終了した旨の処理を行い（S１３）、このルーチンでの処理を終了する。
【００６３】
一方、ステップS１２において、ECCにエラーが生じたと判定したときには、主プロセッサ１８は、ECCにエラーがあったとして、パリティ格納用フラッシュメモリ４４の更新領域７６は消去済みか否かを判定する（S１４）。ここで、消去済みであると判定したときには、主プロセッサ１８は、XORライトそのものができなかったとして、パリティ格納用フラッシュメモリ４４の更新領域７６の同じページ７２に再度XORライトを行うための処理を実行し（S１５）、再びステップS２の処理に戻る。
【００６４】
また、ステップS１４において、消去済みでないと判定したときには、主プロセッサ１８は、処理の途中でパリティの書き込みが終了したとして、パリティ格納用フラッシュメモリ４４の更新領域７６の新たなページに、再度XORライトを行うための処理を行い（S１６）、ステップS２の処理に戻る。
【００６５】
このように、主プロセッサ１８は、XORライトの完了を示すステータスがフラッシュメモリコントローラ４２から戻ってこなかったときには、XORライト対象のフラッシュモジュール４０をチェックし、フラッシュモジュール４０に障害が発生し、電源投入状態でも正常にフラッシュモジュール４０をアクセスできないときには、スペアのフラッシュモジュール４０へコレクションコピーを行ってパリティを復元する。
【００６６】
また、フラッシュモジュール４０の電源遮断などが原因で、途中で処理が終了した場合、主プロセッサ１８は、新パリティ９８を呼び出して、データおよびECCをチェックし、新パリティ９８が未書き込みか、または新パリティ９８の書き込み途中でエラーが生じたか、あるいは新パリティ９８の書き込みが完了しているかを判定することとしている。
【００６７】
そして、主プロセッサ１８は、新パリティ９８が未書き込みのときには同じページに対してリトライ（再度のXORライト処理）を行い、新パリティ９８の書き込み途中であるときには、新しい更新領域７６に対してリトライを行い、新パリティ９８の書き込みが完了しているときには、完了ステータスを主プロセッサ１８へ回答する直前で電源が遮断したと判断し、XORライトの正常完了としている。
【００６８】
本実施例においては、ランダムライト時に、フラッシュモジュール４０に対して更新データを書き込むに際して、主プロセッサ１８は、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送し、フラッシュメモリコントローラ４２のマイクロプロセッサ４８は、XORライトコマンド１００を解析して、フラッシュメモリ４４のユーザ領域７４のページ７２から旧パリティ９６を読み出し、読み出した旧パリティ９６と、XORライトコマンド１００に付加された旧データである「b」のデータ７８およびXORライトコマンド１００に付加された新データである「d」のデータ７８を用いて排他的論理和演算を行って新パリティ９８を生成し、生成した新パリティ９８を更新領域７６の指定のページ７２に格納することとしている。
【００６９】
本実施例によれば、ランダムライト時に、フラッシュモジュール４０に対して更新データを書き込むに際して、主プロセッサ１８は、XORライトコマンド１００を生成し、生成したXORライトコマンド１００を、ディスクドライブコントロールユニット２４を介してフラッシュメモリコントローラ４２に転送するだけでよいので、主プロセッサ１８の処理（負荷）を軽減することができる。
【実施例２】
【００７０】
次に、本発明の第２実施例を図１３にしたがって説明する。本実施例は、フラッシュメモリコントローラ４２に、状態記録メモリとしてのNV-RAM（Non Volatile Random Access Memory）１１０を設けるとともに、RAM５０に、論理アドレスを物理アドレスに変換するための変換テーブルを格納し、マイクロプロセッサ４８が各フラッシュモジュール４０に対する入出力処理を行う過程で、変換テーブルの内容を更新するとともに、処理過程の状態を順次NV-RAM１１０に記録し、記録した内容をホストインターフェース５４を介して主プロセッサ１８に転送し、処理の途中で異常が生じたときでも、主プロセッサ１８からの指示情報で指示されたところから処理が開始できるようにしたものであり、他の構成は第１実施例と同様である。
【００７１】
次に、マイクロプロセッサ４８の処理を図１４のフローチャートにしたがって説明する。まず、フラッシュメモリコントローラ４２のマイクロプロセッサ４８は、XORライト処理を開始するに先立って、旧パリティ９６を読み出すための処理を行い（S２１）、新パリティ９８を生成するための処理を開始する（S２２）。この後、マイクロプロセッサ４８は、２つのデータ、例えば「b」、「d」のデータ７８と旧パリティ９６から新パリティ９８を生成し、生成した新パリティ９８を、パリティ格納用フラッシュメモリ４４の更新領域７６のページ７２に格納するための処理を行い、各処理結果をNV-RAM１１０に記録する。
【００７２】
次に、マイクロプロセッサ４８は、パリティ格納用フラッシュメモリ４４の更新領域７６の指定のページ７２に新パリティ９８を書き込んだときには、新パリティ９８の書き込みが終了した旨をNV-RAM１１０に記録し（S２４）、RAM５０に格納された変換テーブルのマッピングを更新するための処理を開始し（S２５）、変換テーブル上のポインタを移動するための処理を行う。
【００７３】
この後、マイクロプロセッサ４８は、変換テーブル上のポインタの移動が完了したときには、その旨をNV-RAM１１０に記録し（S２６）、XORライト処理が完了した旨のステータスを主プロセッサ１８へ応答する旨の処理を行い（S２７）、このルーチンでの処理を終了する。
【００７４】
上述したように、マイクロプロセッサ４８は、XORライト処理に関して、新パリティ９８の書き込み開始、新パリティ９８の書き込み終了、ポインタの更新、XORライト処理の完了を示すステータスの報告の少なくとも４つの状態をNV-RAM１１０に記録し、記録した内容を主プロセッサ１８に転送するようにしているので、主プロセッサ１８は、XORライト処理の対象となるフラッシュモジュール４０において、どの状態まで処理が遷移したかを判別することができる。
【００７５】
この場合、主プロセッサ１８は、マイクロプロセッサ４８から転送された報告を基に、マイクロプロセッサ４８の処理内容に応じた指示情報を作成し、作成した指示情報をマイクロプロセッサ４８に送信することができる。これにより、マイクロプロセッサ４８は、処理が途中で中断した場合でも、主プロセッサ１８からの指示情報に従って処理を継続することができる。
【００７６】
例えば、新パリティ９８の書き込み開始以前で処理が中断したときには、主プロセッサ１８は、パリティ格納用フラッシュメモリ４４の更新領域７６の同じページ７２に対して、再度XORライトを行うための指示情報を生成してマイクロプロセッサ４８に転送する。これにより、マイクロプロセッサ４８は、主プロセッサ１８からの指示情報に従って、パリティ格納用フラッシュメモリ４４の更新領域７６の同じページ７２に対して、再度XORライトを行うことができる。
【００７７】
新パリティ９８の書き込み終了以前で処理が中断したときには、主プロセッサ１８は、パリティ格納用フラッシュメモリ４４の更新領域７６の新たなページ７２に対して、再度XORライトを行うための指示情報を生成してマイクロプロセッサ４８に転送する。これにより、マイクロプロセッサ４８は、主プロセッサ１８からの指示情報に従って、パリティ格納用フラッシュメモリ４４の更新領域７６の新たなページ７２に対して、再度XORライトを行う。
【００７８】
ポインタ更新以前で処理が中断したときには、主プロセッサ１８は、ポインタ更新するための指示情報を生成してマイクロプロセッサ４８に転送する。これにより、マイクロプロセッサ４８は、主プロセッサ１８からの指示情報に従って、ポインタ更新処理を行う。
【００７９】
ステータス報告以前で処理が中断したときには、主プロセッサ１８は、XORライト処理は正常に終了した旨の指示情報を生成してマイクロプロセッサ４８に転送する。これにより、マイクロプロセッサ４８は、XORライト処理は正常に終了したと判断する。
【００８０】
本実施例においては、マイクロプロセッサ４８は、主プロセッサ１８からのXORライトコマンド１００を基にパリティ格納用フラッシュメモリ４４の更新領域７６のページ７２に新パリティ９８を書き込むことができるとともに、各フラッシュモジュール４０に対する入出力処理を行う過程で、処理過程の状態を順次NV-RAM１１０に記録し、記録した内容を主プロセッサ１８に転送することで、主プロセッサ１８からの指示情報を基に処理を再開することができる。
【００８１】
本実施例によれば、主プロセッサ１８の処理（負荷）を軽減することができるとともに、主プロセッサ１８からの指示情報を基に処理を再開することができる。
【符号の説明】
【００８２】
１０  上位ホストシステム、１２  ストレージサブシステム、１４  ネットワーク、１６  上位ホストシステムインターフェースユニット、１８  主プロセッサ、２０  スイッチ、２２  キャッシュ、２４  ディスクドライブコントロールユニット、２６  記憶装置、３８  HDD、４０  フラッシュモジュール、４２  フラッシュメモリコントローラ、４４  フラッシュメモリ、４８  マイクロプロセッサ、５０  RAM、５２  ROM、６４  フラッシュメモリチップ、７０  ブロック、７２  ページ、７４  ユーザ領域、７６  更新領域  
【図１】
0005404804.tif 000002
【図２】
0005404804.tif 000003
【図３】
0005404804.tif 000004
【図４】
0005404804.tif 000005
【図５】
0005404804.tif 000006
【図６】
0005404804.tif 000007
【図７】
0005404804.tif 000008
【図８】
0005404804.tif 000009
【図９】
0005404804.tif 000010
【図１０】
0005404804.tif 000011
【図１１】
0005404804.tif 000012
【図１２】
0005404804.tif 000013
【図１３】
0005404804.tif 000014
【図１４】
0005404804.tif 000015
【図１５】
0005404804.tif 000016