(57)【要約】  パリティの更新を伴うライト処理を高速化することを目的とする。  情報処理システムは、RAIDグループを構成し、1つのバスに接続され、相互に通信を行う複数の記憶デバイスを備える。複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有する。複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含む。第一記憶デバイスの第一デバイスコントローラは、旧データと、旧データを更新する新データと、に基づいて中間パリティを生成し、旧データに対応する旧パリティを格納している第二記憶デバイスを指定して、第二記憶デバイスに中間パリティを送信し、第二記憶デバイスの第二デバイスコントローラは、中間パリティと旧パリティに基づいて新パリティを生成する。
2016194095.tif 000002
【特許請求の範囲】
【請求項１】
RAIDグループを構成し、1つのバスに接続され、相互に通信を行う複数の記憶デバイスを備え、
前記複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有し、
前記複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含み、
前記第一記憶デバイスの第一デバイスコントローラは、
前記旧データと、前記旧データを更新する新データと、に基づいて中間パリティを生成し、前記旧データに対応する前記旧パリティを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記中間パリティを送信し、
前記第二記憶デバイスの第二デバイスコントローラは、前記中間パリティと前記旧パリティに基づいて新パリティを生成する
ことを特徴とする情報処理システム。
【請求項２】
前記複数の記憶デバイスそれぞれのデバイスコントローラは、
RAID管理情報を受信し、
前記RAID管理情報は、前記RAIDグループのRAIDレベル、複数のデータ及び前記複数のデータから生成されるパリティを含むストライプに含まれるデータの数及びパリティの数、前記ストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含む
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記第一デバイスコントローラは、
前記RAID管理情報に基づいて前記旧パリティを格納している前記第二記憶デバイスを特定し、前記第二記憶デバイスの前記旧パリティに対応するデバイスLBAを指定して、前記中間パリティと前記旧パリティに基づく前記新パリティの生成指示を送信する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記第一デバイスコントローラは、
前記新データを受信した後、前記旧データ及び前記新データを読み出し可能な状態に維持する
ことを特徴とする請求項３に記載の情報処理システム。
【請求項５】
前記第一デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧データを破棄する
ことを特徴とする請求項４に記載の情報処理システム。
【請求項６】
前記第二デバイスコントローラは、
前記新パリティを生成した後、前記旧パリティ及び前記新パリティを読み出し可能な状態に維持する
ことを特徴とする請求項３に記載の情報処理システム。
【請求項７】
前記第二デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧パリティを破棄する
ことを特徴とする請求項４に記載の情報処理システム。
【請求項８】
前記第二のデバイスコントローラは、
複数の旧データをそれぞれ更新する複数の新データを受信すると、前記複数のデータに基づいて新パリティを生成し、
前記複数の新データのそれぞれを前記RAIDグループに含まれる他の複数の記憶デバイスのそれぞれに転送する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項９】
それぞれがデバイスコントローラと、データを格納する記憶媒体と、を有し、相互に通信を行う複数の記憶デバイスと、
前記複数の記憶デバイスとバスで接続され、前記複数の記憶デバイスをRAIDグループとして制御するストレージコントローラと、
を備え、
前記複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含み、
前記ストレージコントローラは、前記旧データを更新する新データを前記第一記憶デバイスに送信し、
前記第一記憶デバイスの第一デバイスコントローラは、
前記旧データと、前記新データと、に基づいて中間パリティを生成し、前記旧データに対応する前記旧パリティを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記中間パリティを送信し、
前記第二記憶デバイスの第二デバイスコントローラは、前記中間パリティと前記旧パリティに基づいて新パリティを生成する
ことを特徴とするストレージ装置。
【請求項１０】
前記ストレージコントローラは、前記新データに対応する新パリティの更新を指示するパリティライトコマンドを前記第一の記憶デバイスに送信する
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１１】
前記第一記憶デバイスは、
前記第一コマンドを受信すると、前記第二記憶デバイスに前記中間パリティと前記旧パリティに基づく前記新パリティの生成を指示する第二パリティ更新を送信し、
前記第二記憶デバイスから前記パリティ更新コマンドに対する完了応答を受信すると、前記ストレージコントローラに前記パリティライトコマンドに対する完了応答を送信する
ことを特徴とする請求項１０に記載のストレージ装置。
【請求項１２】
前記ストレージコントローラは、
前記第一記憶デバイスから前記パリティライトコマンドに対する完了応答を受信すると、
前記第一記憶デバイス及び前記第二記憶デバイスに前記新パリティの更新完了を通知するコミットコマンドを送信する
ことを特徴とする請求項１１に記載のストレージ装置。
【請求項１３】
前記第一デバイスコントローラは、前記第二記憶デバイスに前記パリティ更新コマンドを送信した後、所定時間を経過しても前記第二記憶デバイスからの完了応答を受信しない場合、前記ストレージコントローラにタイムアウトの発生を通知する
ことを特徴とする請求項１２に記載のストレージ装置。
【請求項１４】
前記ストレージコントローラは、出力画面を有する管理計算機に接続されており、前記タイムアウトの発生の通知を受信した場合、前記管理計算機の出力画面に前記第一記憶デバイスと前記第二記憶デバイス間の前記タイムアウトの発生状況を表示させる
ことを特徴とする請求項１３に記載のストレージ装置。
【請求項１５】
デバイスコントローラと、旧データを格納する記憶媒体と、を有する記憶デバイスであって、
前記デバイスコントローラは、
複数の他の記憶デバイスと通信を行うように接続され、前記記憶デバイス及び前記複数の他の記憶デバイスがRAIDグループとして制御されている場合に、
前記旧データと、前記旧データを更新する新データと、に基づいて中間パリティを生成し、前記複数の他の記憶デバイスのうち前記旧データに対応する旧パリティを格納している特定記憶デバイスを指定して前記中間パリティを転送し、前記特定記憶デバイスに前記中間パリティと前記旧データに基づく新パリティの生成指示を送信する
ことを特徴とする記憶デバイス。
【請求項１６】
前記デバイスコントローラは、
RAID管理情報を受信し、
前記RAID管理情報は、前記RAIDグループのRAIDレベル、複数のデータ及び前記複数のデータから生成されるパリティを含むストライプに含まれるデータの数及びパリティの数、前記ストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含む
ことを特徴とする請求項１５に記載の記憶デバイス。
【請求項１７】
前記デバイスコントローラは、
前記RAID管理情報に基づいて前記旧パリティを格納している前記特定記憶デバイスを特定し、前記特定記憶デバイスの前記旧パリティに対応するデバイスLBAを指定して、前記中間パリティと前記旧パリティに基づく前記新パリティの生成指示を送信する
ことを特徴とする請求項１６に記載の記憶デバイス。
【請求項１８】
前記デバイスコントローラは、
前記新データを受信した後、前記旧データ及び前記新データを読み出し可能な状態に維持する
ことを特徴とする請求項１７に記載の記憶デバイス。
【請求項１９】
前記デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧データを破棄する
ことを特徴とする請求項１８に記載の記憶デバイス。
【請求項２０】
RAIDグループを構成し、1つのバスに接続され、相互に通信を行う複数の記憶デバイスを備え、
前記複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有し、
前記複数の記憶デバイスは、第一旧データを格納する第一記憶デバイスと、前記第一旧データに対応する、前記第一旧データと同一のデータである第二旧データを格納する第二記憶デバイスと、を含み、
前記第一記憶デバイスの第一デバイスコントローラは、
前記第一旧データが第一新データに更新された場合、前記データに対応する前記第二旧データを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記第一新データを送信する
ことを特徴とする情報処理システム。
【請求項２１】
前記複数の記憶デバイスそれぞれのデバイスコントローラは、
RAID管理情報を受信し、
前記RAID管理情報は、前記RAIDグループのRAIDレベル、複数のデータを含むストライプに含まれるデータの数、前記ストライプに含まれるデータの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含む
ことを特徴とする請求項２０に記載の情報処理システム。
【請求項２２】
前記第一デバイスコントローラは、
前記RAID管理情報に基づいて前記第二旧データを格納している前記第二記憶デバイスを特定し、前記第二記憶デバイスの前記第二旧データに対応するデバイスLBAを指定して、前記第一新データ送信する
ことを特徴とする請求項２１に記載の情報処理システム。
【請求項２３】
前記第一デバイスコントローラは、
前記第一新データを受信した後、前記第一旧データ及び前記第一新データを読み出し可能な状態に維持する
ことを特徴とする請求項２２に記載の情報処理システム。
【請求項２４】
前記第一デバイスコントローラは、
前記第一新データの前記第二記憶デバイスへの格納完了を通知するコミットコマンドを受信した後に、前記第一旧データを破棄する
ことを特徴とする請求項２３に記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
情報処理システム、ストレージ装置、記憶デバイスに関する。
【背景技術】
【０００２】
NAND型フラッシュメモリを記憶媒体として用いたSSD (Solid State Drive)の普及に伴い、ストレージシステム内の記憶デバイスとしてHDD (Hard Disk Drive)に代わりSSDの利用が進んでいる。SSDはHDDと比較して高速にアクセスすることができ、ストレージ装置の記憶デバイスとして搭載することで、ストレージ装置を高速化できる。高速化が。さらに、ReRAM(Resistance Random Access Memory)やPRAM(Phase Change Random Access Memory)等の、フラッシュメモリよりも高速にアクセス可能な不揮発半導体メモリを備えた記憶デバイスの実用化に向けた開発が行われている。しかし、記憶デバイスの高速化に対し、ストレージシステム内ストレージコントローラの性能は追従しておらず、高速な記憶デバイスの性能を十分に活かすことができない。【０００３】
一方で、ストレージ装置は、システムの高信頼化のためにRAID (Redundant Array of Independent (or Inexpensive) Disks)という技術を用いる。RAIDは、複数台の記憶デバイスをグループ（以下RAIDグループと記す）として管理し、データからパリティと呼ばれる冗長データを作成する。そして、データとパリティをそれぞれプ内の異なる記憶デバイスに格納し、記憶デバイス故障時に、他の記憶デバイスに格納したデータとパリティから、故障した記憶デバイス内に格納されていたデータを復元可能とする。【０００４】
しかし、パリティを用いる構成では、記憶デバイスへデータをライトするたびにパリティの更新が必要となり、パリティの更新に伴うデータ転送が発生し、ストレージコントローラのライト処理を高速化できない要因となっている。またRAIDにはデータを二重化することで高信頼化を図る方式もある。つまり、あるデータと同一のデータを冗長データとしてそれぞれを異なる二つの記憶デバイスに格納する。こちらも記憶デバイスへデータの書き込みを行うたびに、二重化された2つのデータを更新する必要があるため、ストレージコントローラの処理性能低下要因となる。近年ではビッグデータと呼ばれる大量のデータを解析したいというニーズが大きく、データ転送を実施するストレージコントローラのデータ転送の負荷が増大している。【０００５】
特許文献１では、次に述べる技術によりストレージコントローラの負荷を軽減している。まず、ストレージコントローラがホスト計算機から受信した新データを旧データが格納されている第一の記憶デバイスに転送し、第一の記憶デバイスが旧データと新データに基づいて中間パリティを生成する。ストレージコントローラは、第一の記憶デバイスから中間パリティを読み出し、中間パリティを旧パリティが格納されている第二の記憶デバイスへ転送する。そして、第二の記憶デバイスが旧データと中間パリティに基づいて新パリティを生成する。これにより、データの更新にともなうパリティの更新が行われる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】US6,098,191
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述の特許文献1の技術では、ストレージコントローラがパリティの更新に伴う記憶デバイスとの間のデータ転送を制御するため、ストレージコントローラの負荷が十分に軽減されない。より具体的には、特許文献1の技術では、1回のデータのライトに伴うパリティの更新のために、ストレージコントローラと記憶デバイスの間で3回のデータ転送が発生する。つまり、(1)ストレージコントローラから第一の記憶デバイスへの新データの転送、(2)第一の記憶デバイスからストレージコントローラへの中間パリティの転送、(3)ストレージコントローラから第二の記憶デバイスへの中間パリティの転送の3回である。
また、RAIDグループを構成する全デバイスのデータがストレージコントローラ経由で転送されるため、データ転送負荷がストレージコントローラ内のバスに集中する。このため、記憶デバイスの数を増やしてもバスがネックになり、性能向上が果たされない。【０００８】
このため、多数の記憶デバイスとの間でデータ転送を実施するストレージコントローラのデータ転送の負荷は依然として大きく、ライト処理を高速化できなかった。
【課題を解決するための手段】
【０００９】
情報処理システムは、RAIDグループを構成し、1つのバスに接続され、相互に通信を行う複数の記憶デバイスを備える。複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有する。複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含む。第一記憶デバイスの第一デバイスコントローラは、旧データと、旧データを更新する新データと、に基づいて中間パリティを生成し、旧データに対応する旧パリティを格納している第二記憶デバイスを指定して、第二記憶デバイスに中間パリティを送信し、第二記憶デバイスの第二デバイスコントローラは、中間パリティと旧パリティに基づいて新パリティを生成する。
【発明の効果】
【００１０】
データのライトに伴うパリティの更新処理において、ストレージコントローラと記憶デバイス間のデータ転送回数が削減されることでストレージコントローラの負荷が低減されるため、ライト処理が高速化する。
【図面の簡単な説明】
【００１１】
【図１】実施形態の概要の図
【図２】ストレージ装置の物理構成の図
【図３】サーバの物理構成の図
【図４】記憶デバイスの物理構成の図
【図５】NVMチップの物理構成の図
【図６】アドレス変換テーブルの図
【図７】論理ボリュームとRAID5のデータ配置の図
【図８】アドレス空間の図
【図９】RAID管理情報の図
【図１０】ロック管理情報の図
【図１１】実施例1のデータフローの図
【図１２−１】実施例1の動作を示すラダーチャートの図
【図１２−２】実施例1の動作を示すラダーチャートの図
【図１３−１】管理画面の図
【図１３−２】管理画面の図
【図１４】実施例2のデータフローの図
【図１５】実施例2の動作を示すラダーチャートの図
【図１６】RAID1のデータ配置の図
【図１７】実施例3のデータフローの図
【図１８】実施例3の動作を示すラダーチャートの図
【図１９】実施例4のデータフローの図
【図２０−１】実施例4の動作を示すラダーチャートの図
【図２０−２】実施例4の動作を示すラダーチャートの図
【図２１】実施例5のフローチャートの図
【図２２】実施例5のフローチャートの図
【発明を実施するための形態】
【実施例１】
【００１２】
本発明の実施形態を図面に基づいて説明する。尚、本発明は、以下に説明する実施形態に限定されるものではない。【００１３】
図1は本実施形態の概要を示す。ストレージ装置20は、ストレージコントローラ200と、記憶デバイス31〜34を備える。記憶デバイス31〜34はそれぞれが1つのバス270に接続され、相互に通信可能である。また、ストレージコントローラ200は記憶デバイス31〜34のそれぞれと同一のバス270に接続されている。【００１４】
ストレージコントローラ200は、ストレージ装置20の外部のホスト計算機などからリードコマンドやライトコマンドを受信し、ホスト計算機の要求に従って記憶デバイスにアクセスする。【００１５】
記憶デバイス31〜34のそれぞれは、デバイスコントローラ及び記憶媒体（不図示）を備える。デバイスコントローラは、記憶デバイスの外部の装置から受信したデータを記憶媒体に格納し、記憶媒体からデータを読み出して記憶デバイスの外部の装置に転送する。記憶媒体は、本実施形態では不揮発性半導体メモリである。【００１６】
本実施形態では4台の記憶デバイスに基づいてRAID5(3Data+1Parity)のRAIDグループが構成されているものとする。RAID5ではストライプ毎に所定の規則でパリティが生成される。図1では、旧データ(旧D)0と旧データ(旧D)1と旧データ(旧D)2に基づいて旧パリティ(旧P)0が生成されているものとする。例えば、旧データ0と旧データ1と旧データ2の排他的論理和演算（以下、XOR演算）により旧パリティ0が生成されている。旧データ0、旧データ1、旧データ2、旧パリティ0は、記憶デバイス31〜34に1つずつ分散して格納される。記憶デバイスの障害等により旧データ1が読み出せなくなった場合、旧データ0と旧データ2と旧パリティ0のXOR演算により旧データ1が復元される。【００１７】
このように、パリティとはデータが消失した場合に備えて生成されるものである。このため、ストライプ内のデータが更新されると、そのデータが含まれるストライプのパリティも更新されなければならない。【００１８】
次に、データの更新に伴う、パリティの更新処理を説明する。ストレージコントローラ200は、ホスト計算機から新データ0を受信する。次にストレージコントローラ200は、旧データ0を格納している記憶デバイス31に、バス270を介して新データ0を転送する。なお、新データ0は旧データ0を更新するデータである。【００１９】
記憶デバイス31は新データ0を受信する(S1001)。記憶デバイス31のデバイスコントローラは、新データ0と旧データ0のXOR演算を実行し、中間パリティ(中間P)0を生成する(S1002)。次に記憶デバイス31は、旧パリティ0を格納している記憶デバイス34を特定し、バス270を介して中間パリティ0を記憶デバイス34に送信する(S1003)。【００２０】
記憶デバイス34は、中間パリティ0を受信し、中間パリティ0と旧パリティ0のXOR演算を実行し、新パリティ(新P)0を生成する(S1004)。【００２１】
以上がパリティ更新処理の概要である。本処理によれば、記憶デバイス間の中間パリティ転送はストレージコントローラの介在なしに実施され、1回のパリティの更新処理において、ストレージコントローラと記憶デバイスの間でデータ転送は新データ転送の1回である。そのため、パリティの更新に伴うストレージコントローラの転送処理負荷や、ストレージコントローラ内バスへのデータ転送負荷の集中を解消することができる。よって、ストレージシステムのライト処理が高速化する。【００２２】
本実施例は、図2及び図3に示す情報処理システムに適用できる。【００２３】
図2は、本発明の実施例に係るストレージ装置20の物理構成(以下では、システム構成1とする)を示す図である。ストレージ装置20はネットワーク260を介してホスト計算機10と接続される。ネットワーク260は、例えばSAN (Storage Area Network)やLAN (Local Area Network)である。また、ストレージ装置20はホスト計算機と同様に管理計算機15と接続される。【００２４】
ホスト計算機10は、例えばプロセッサ、メモリ、入出力装置、ホストバスアダプタといったハードウェア資源と、デバイスドライバやオペレーティングシステム(OS)、アプリケーションプログラムといったソフトウェア資源を備えている。ホスト計算機10では、プロセッサがメモリ上のプログラムにしたがってコマンド(例えばリードコマンドやライトコマンド)を生成し、ネットワーク260を介してストレージ装置20へ送信する。管理計算機15の構成は、ホスト計算機10と同様である。【００２５】
ストレージ装置20は、ストレージコントローラ200とスイッチ280と複数(例えば、4台)の記憶デバイス31〜34を備える。複数の記憶デバイス31〜34はそれぞれ内部バス(例えば、PCI-Express(PCIe)バス)によってスイッチ280に接続されている。これにより、複数の記憶デバイスは相互に接続され、記憶デバイス間でEnd-to-End通信が可能である。また、ストレージコントローラ200とスイッチ280が接続されており、ストレージコントローラ200は複数の記憶デバイスにアクセスすることができる。【００２６】
ストレージコントローラ200は、プロセッサ210、メモリ220、スイッチ230、ホストインタフェース240、I/Oインタフェース250、管理インタフェース290を備える。ストレージコントローラ200は、ホスト計算機10からのコマンド受領、ストレージ装置全体の制御、また図17のような管理画面1800の提供を行う。【００２７】
プロセッサ210は、プログラムに基づいて、ホスト計算機10から受領したコマンドを解析し、演算処理を行い、ストレージコントローラ200の各部位に指示を出すことでストレージ装置20全体の制御を行う。
メモリ220はストレージ装置20全体の管理情報(例えば、RAID管理情報810、ロック管理情報910)の記憶、ホスト計算機10からのリードコマンドやライトコマンド及びコマンドの対象データの一時的な記憶を行う。【００２８】
スイッチ230はストレージコントローラ20内のプロセッサ210、メモリ220、ホストインタフェース240、I/Oインタフェース250を接続し、各部位間で交換されるデータをアドレスやIDにしたがってルーティングする。【００２９】
ホストインタフェース240はネットワーク260を介してホスト計算機10と接続される。ホストインタフェース240は、プロセッサ210の指示またはホスト計算機10からの要求に従って、ホスト計算機10とデータ送受信を行う。ホストインタフェース240によって送受信されるデータは、メモリ220へ格納される。管理インタフェース290は、ホストインタフェース240と同様の構成であり、管理計算機15と接続される。【００３０】
I/Oインタフェース250はバス270を介して記憶デバイス31〜34と接続される。I/Oインタフェース250は、プロセッサ210の指示または記憶デバイス31〜34からの要求に従って、記憶デバイス31〜34とのデータの送受信を行う。I/Oインタフェース250によって送受信されるデータは、メモリ220へ格納される。バス270は、例えばPCIeバスである。【００３１】
図3は、本発明の実施例に係るサーバの物理構成(以下では、システム構成2とする)を示す。本システムはネットワーク86に接続されたデータベースサーバ(以下、サーバと記す)80を備える。ネットワーク86としては、例えばLANがある。ネットワーク86には複数のクライアント端末が接続され、サーバ80はクライアント端末やサーバ80内で生じるデータベース処理リクエストを受領し、解析結果を返す。尚、本構成ではサーバ80がデータベースサーバである例を示すが、例えばファイルサーバなど、データベース以外のサービスを提供するサーバでもかまわない。またサーバ80はサーバ内の記憶デバイス31〜34から情報を取得し、図17に示すとような管理画面1800をユーザへ提供する。【００３２】
サーバ80は、プロセッサ81、メモリ82、ネットワークインタフェース83、チップセット84、エクスパンダ85を備える。【００３３】
プロセッサ81は、プログラムに基づいて、クライアント端末やサーバ80内で生じたリクエストを解析し、サーバ80全体の制御と各種演算処理を実施する。【００３４】
メモリ82は、プロセッサ81が実行するプログラムの格納、サーバ80全体の管理情報(例えば、RAID管理情報810、ロック管理情報910)の記憶、リクエストや解析対象データの一時的な記憶を行う。【００３５】
ネットワークインタフェース83はネットワーク86へ接続される。ネットワークインタフェース83は、プロセッサ81の指示またはネットワーク86に接続されるクライアント端末からの要求に従って、クライアント端末とのデータ送受信を行う。ネットワークインタフェース83によって送受信されるデータは、メモリ82へ格納される。【００３６】
チップセット84はストレージコントローラ20内のプロセッサ210、メモリ220、ホストインタフェース240、I/Oインタフェース250を接続し、各部位間で交換されるデータをアドレスやIDにしたがってルーティングする。【００３７】
エクスパンダ85は、内部に複数(例えば、4台)の記憶デバイス31〜34とスイッチ88を備える。尚、エクスパンダ85なしに、記憶デバイス31〜34がチップセット84に直接接続される構成でもかまわない。エクスパンダ85内部の記憶デバイス31〜34はスイッチ88に接続される。スイッチ88は、チップセット84とバス87を介して接続される。バス87は、例えばPCI ExpressバスやSASである。【００３８】
図4は、記憶媒体としてNVM (Non Volatile Memory)を用いた記憶デバイスの構成例を示す。本実施例では、同一の構成の記憶デバイス31〜34を用いるため、記憶デバイス31を例に説明する。【００３９】
記憶デバイス31はデバイスコントローラ310とNVMアレイ410を備える。デバイスコントローラ310とNVMアレイ410は複数のバス318によって接続される。【００４０】
デバイスコントローラ310はプロセッサ311、メモリ312、データバッファ313、パリティ演算ユニット314、I/Oインタフェース315、NVMインタフェース316、スイッチ317を備える。これらは、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)として1つの半導体素子で構成されてもよいし、複数の個別専用IC(Integrated Circuit)を相互に接続した構成であってもよい。【００４１】
プロセッサ311はプログラムに基づき、ストレージコントローラ10と他の記憶デバイス32〜34からの要求を解析し、演算処理を行うとともに記憶デバイス31全体の制御を行う。【００４２】
メモリ312はプロセッサ311が実行するプログラムや、410に関するデバイス管理情報279、また上位装置から配布されるRAID管理情報が記憶される。尚、RAID構成情報が上位装置から配布されず、メモリ312に記憶されなくてもかまわない。この場合、後述のパリティライト命令のコマンドにRAID構成を示す情報が付与される。【００４３】
データバッファ313はリード/ライトコマンドのデータや処理途中のデータを一時的に格納する。【００４４】
パリティ演算ユニット314はパリティ生成時に必要な処理を実施する演算装置である。パリティ演算ユニット314は、例えば、XOR演算を行うハードウェア回路である。本実施例では、パリティ演算ユニット314をハードウェア回路として説明するが、デバイスコントローラ310がパリティ演算の機能を備えていればよく、プロセッサ311がプログラムを実行することでパリティ演算を実行してもよい。【００４５】
I/Oインタフェース315はバス270を介してストレージコントローラ20と他の記憶デバイス32〜34と接続される。I/Oインタフェース315は、プロセッサ311の指示またはストレージコントローラ20や他の記憶デバイス32〜34からの要求に従って、ストレージコントローラ20または他の記憶デバイス32〜34とのデータ送受信を行う。I/Oインタフェース315によって送受信されるデータは、データバッファ313へ格納される。【００４６】
NVMインタフェース316は、複数のバス318によってNVMアレイ410と接続する。NVMインタフェースはプロセッサ311の指示により、NVMアレイ410とのデータの送受信を行う。送受信されるデータはデータバッファ313へ格納される。【００４７】
スイッチ317はデバイスコントローラ310内の各部位と接続され、各部位間のデータ転送を中継する。【００４８】
図5は、NVMチップの物理構成を示す。NVMアレイ410は複数のNVMチップ411で構成される。NVMチップ411は、例えばNAND型フラッシュメモリチップである。各NVMチップ411は、複数のブロック(物理ブロック)を有し、各ブロックは、複数のページ(物理ページ)を有する。例えば、フラッシュメモリでは、データを上書きすることができず、ブロック単位でデータが消去され、ページ単位でデータがリード／ライトされる。本実施例では、1つのページを16KBとして説明するが、ページは使用するチップの設計により異なるため、そのサイズは限定されない。【００４９】
また、NVMチップは、PRAMやReRAM等のフラッシュメモリより高速にアクセス可能なメモリであっても構わない。【００５０】
次に記憶デバイス31のデバイスコントローラ310が記憶デバイスの外部の装置に提供する論理記憶空間について説明する。本実施例では、記憶デバイスの外部の装置とは、ストレージコントローラ200のプロセッサ210やサーバ80のプロセッサ81である。【００５１】
論理記憶空間は、複数の論理ブロックで構成され、各論理ブロックには論理アドレスが対応付けられている。ストレージコントローラ200のCPU210は、論理アドレスを指定したアクセスコマンドを記憶デバイス31に発行することにより、指定した論理アドレスに対応する論理領域のデータをリード／ライトできる。複数のNVMチップ411により構成される物理記憶空間を構成する複数の物理領域の各々には、記憶デバイス31内部で用いる物理アドレスが対応付けられている。本実施例において、記憶デバイス31内部の物理領域の位置を表す物理アドレスを「PBA(Physical Block Address)」と呼び、記憶デバイス31の論理領域の位置を表す論理アドレスを「デバイスLBA（Logical Block Address）」と呼ぶ。PBAは、NVMのページサイズである16KB単位の位置を表す。本実施例では、NVMのページサイズとPBAの管理単位は同じ例を記載するが、異なっていても良い。【００５２】
フラッシュメモリは、追記型のメモリであり、データを上書きすることができない。このため、デバイスコントローラ310がデータを更新する場合は、旧データが格納されているページ(旧ページと呼ぶ)とは異なるページ(新ページと呼ぶ)に新データを格納し、旧ページのPBAとデバイスLBAの対応関係を、新ページのPBAとデバイスLBAの対応関係に変更する。デバイスLBAとの対応関係がなくなった旧ページは消去処理の対象となる。記憶デバイス31は、PBAとデバイスLBAとの対応付けを例えば次のアドレス変換テーブルで管理する。【００５３】
図6は、アドレス変換テーブル610の構成例を示す。アドレス変換テーブル610は、記憶デバイス31のメモリ312内に格納されており、記憶デバイス31が提供する論理記憶空間の論理ブロック毎に、レコードを有する。各レコードは、デバイスLBA611とPBA612と更新データの有無613の情報を有する。【００５４】
デバイスLBA611は、記憶デバイス31が提供する論理記憶空間を所定サイズの論理ブロックに区切った論理ブロック毎の先頭アドレスを表す。本実施例では、前記論理ブロックサイズを16KBにした例を記載する。これは、NVMへアクセスできる単位であるページ単位（本実施例では16KB）と同じとすることで、1対1で対応させることができるので、NVMチップ411へのアクセス制御が容易になる。なお、この論理ブロックサイズは、記憶デバイス31が提供する論理記憶空間のサイズより小さいサイズであれば任意のサイズで良い。PBA612は、物理領域であるページの位置を示す。【００５５】
更新情報613は、パリティの更新処理中に保持する情報を示す。更新情報613が「有り」は、パリティの更新処理中を意味しており、新データの格納場所を示す情報が格納される。新データの格納場所を示す情報は、例えば記憶デバイス31のデータバッファ313内の新データが格納されている領域を示すアドレス情報や、新データが格納されているPBAである。【００５６】
本実施例で更新情報613が存在する理由は次の通りである。通常は、記憶デバイスが新データを取得すると、旧データを格納しているPBAは新データが格納されるPBAに変更される。そして、旧データは読み出せなくなり、消去の対象となる。詳細は後述するが、本実施例では、記憶デバイスがパリティの更新を指示するパリティライトコマンドを受信した場合、それに伴う新データを取得しても、パリティの更新完了が確定するまでは旧データを読み出し可能な状態に維持する。これは、パリティ更新処理の途中でエラーが発生した場合に、旧データを読み出すところから処理を再開できるようにして信頼性を向上させるためである。このため、パリティ更新処理中は記憶デバイスが旧データと新データ両方の格納場所を管理する必要がある。【００５７】
図6の例を用いて、リードコマンドを受けた場合の動作を説明する。【００５８】
例えば、デバイスLBA「0」には、PBA「0」が対応付けられている。この場合、リードコマンドで指定されたデバイスLBAが「0」であれば、デバイスコントローラ310は、PBA「0」が示すページからデータをリードし、ストレージコントローラ200に応答する。更新情報613の有無によらず、PBA612に格納されているPBAの値からデータを読み出す。【００５９】
なお、デバイスLBAにPBAが対応付けられていない場合、デバイスLBAに対応したPBAのレコードは「未割当」が格納される。これは、そのデバイスLBAに対してデータが格納されていない状態を示す。【００６０】
なお、記憶デバイスが、例えばゼロデータがNVMに書き込まれることによりフォーマットされている場合、その状態を「未割当」として管理してもよい。また、例えばゼロデータがNVMに書き込まれてフォーマットされている場合、デバイスLBAにゼロデータが格納されているPBAが割り当てられることになるため、フォーマット後にデータが書き込まれていない状態を割当済みの状態として管理してもよい。【００６１】
次に図7〜9を用いて、本実施例に係るシステムの論理構成やデータ配置の構成を説明する。本実施例のストレージシステムでは、RAIDが適用される。以下では、システム構成1において3 Data + 1 ParityのRAID5を適用し、記憶デバイス31〜34で1つのRAIDグループを構成場合を例に説明する。尚、本実施例では、3つの異なる記憶デバイスに格納されるデータに対して、1つのパリティを生成する構成について記すが、本発明は、この例に限定されるものではない。5つの異なる記憶デバイスに格納されるデータに対して、1つのパリティを生成するとしてもよい。また、3つの異なる記憶デバイスに格納されるデータに対して3つのパリティを生成し、1つのRAIDグループとしてもよい。また、RAIDグループが2つ以上あってもよい。【００６２】
図7に本実施例における論理ボリューム50とRAIDグループの関係を示す。ストレージコントローラ200は、ホスト計算機10に対して、データ記憶領域として論理ボリューム50を提供する。なお、ストレージコントローラ200がホスト計算機10へ提供する論理ボリュームの数は複数でもよい。【００６３】
論理ボリューム50は複数の論理ブロックという記憶領域に分けられ管理される。各論理ブロックはLBAが割り当てられ識別される。ホスト計算機10は論理ボリュームの識別番号とストレージLBAを指定することで、任意の記憶領域へアクセスできる。同様に記憶デバイス31〜34のそれぞれがストレージコントローラ200に対して提供する論理記憶空間51〜54も、複数の論理ブロックへと分けられる。以降、ストレージコントローラ20が提供する論理ボリューム50のLBAをストレージLBAと呼ぶ。なお、前述の通り、各記憶デバイス31〜34が提供する論理記憶空間51〜54のLBAをデバイスLBAと呼ぶ。論理ボリューム50中の論理ブロックは、論理記憶空間51〜54中の論理ブロックへと対応付けられている。ストレージコントローラ20は、ホスト計算機10に指定されるストレージLBAから、記憶デバイスとデバイスLBAを特定し、記憶デバイスへアクセスする。【００６４】
論理ボリューム50内で連続したLBAを割り当てられた論理ブロックは、論理記憶空間51〜54へ分散して割り当てられている。3 Data + 1 Parity の構成では連続する3論理ブロックのデータに対して、1論理ブロックのパリティが生成され、あわせて4論理ブロックのストライプが構成される。例えばストライプ0はData0〜2とData0〜2の16KBをビット毎にXOR演算したパリティ0から構成される。【００６５】
本実施例では、ストレージLBAは、16KB単位に管理するため、Data0、Data1、・・・は全て16KBのデータである。また、RAIDグループ内での記憶デバイスの識別のために、記憶デバイス31〜34の4台のデバイス#をそれぞれ#0、1、2、3とする。ストレージLBAに対応するRAIDグループのデバイス#とデバイス内アドレスはストレージLBAの値を用いて以下の計算によって一意に特定することができる。具体的には、デバイス#はストレージLBAの値をRAIDグループのデバイス数4台で割った余りとなる。また、デバイス内アドレスは、ストレージLBAの値をストライプ中のデータの個数3で割った値（端数切捨て）で求めることができる。【００６６】
次に具体例としてホスト計算機10のライトデータを論理ボリューム50のストレージLBA「6」に書き込む例を説明する。この場合、デバイス＃は6÷4の余りで2、デバイス内アドレスは、6÷3で端数を切り捨てて2となり、RAIDグループのデバイス数とストライプ当りのデータ個数が分かれば、計算で一意に求めることが可能となる。【００６７】
また、パリティは同一ストライプに属するデータに基づいて算出されるため、同一ストライプ内のデータのいずれかが更新された場合、パリティも更新される。例えば、パリティ0がデータ0〜2のXOR演算によって算出されている場合、新パリティは旧データ(Data6)、新データ(Write data)、旧パリティ(Parity0)のXOR演算によって算出される。なお、パリティ更新の詳細な処理は後述する。【００６８】
図8は、PCIeバスのアドレス空間の一例を示す。このアドレスマップは、次のように作成される。まず、記憶デバイスの初期化時または、ストレージコントローラ200が新たに記憶デバイスを認識したときに、ストレージコントローラ200は各記憶デバイスにどのようなアドレス空間が設定されているかを問い合わせる。各記憶デバイスは、ストレージコントローラ200に、アドレス空間の範囲（デバイス内アドレス）と論理記憶空間及び通信用空間それぞれのサイズを応答する。ストレージコントローラ200は、その応答結果を用いて論理記憶空間上で記憶デバイスそれぞれを識別できるようにアドレスオフセットを設定してアドレスマップを作成する。そして、ストレージコントローラ200は、アドレスマップをPCIeのルートコンプレックス（I/Oインタフェース250）とスイッチ280に設定する。例えば、スイッチ280内のメモリにアドレスマップが格納される。これにより、複数の記憶デバイスを備えたストレージ装置において各記憶デバイスのアドレスを一意に識別することが可能になり、スイッチ280は対応するアドレスにパケットをルーティングすることが可能となる。【００６９】
図8では、デバイス#0〜3の論理記憶空間のアドレスオフセットはそれぞれ「0」「100000」「200000」「300000」、デバイス#0〜3の通信用空間のアドレスオフセットはそれぞれ「90000」「190000」「290000」「390000」が設定されている。ここで、通信用空間は、各記憶デバイス31〜34のプロセッサ311のレジスタやデータバッファ313の一部または全てにマッピングされている。この通信用空間のアドレスを用いることで、ストレージコントローラ200との制御情報のやり取り、他の記録デバイスからリードしたデータの格納などをすることができる。【００７０】
図9はRAID管理情報810の例である。RAID管理情報810は、ストレージ装置20のメモリ82に格納されている。ストレージコントローラは、RAID管理情報を参照して、各記憶デバイスにアクセスする。【００７１】
RAIDグループ#811は、ストレージ装置20内でRAIDグループを一意に識別するための情報である。RAIDレベル812は、そのRAIDグループのRAID制御の方式を示す。RAIDレベルは、例えば、RAID１、RAID５、RAID６、RAID１０等である。RAID構成813は、そのRAIDグループにおけるストライプ内のデータの数とパリティの数を示す。例えば、１つのRAIDストライプに対して、3つの記憶デバイスがデータを格納し、１つの記憶デバイスがパリティを格納する場合、RAID構成は「3D1P」と表わされる。ストライプサイズ814は、ストライプ内でのデータ及びパリティそれぞれ1つあたりのサイズである。デバイス＃815は、RAIDグループ内でデバイスを一意に識別する情報である。デバイスオフセット816は、複数の記憶デバイスを1つの論理記憶空間として使用する場合において、その論理アドレス空間における各記憶デバイスのアドレスの開始位置を示す。デバイスサイズ817は記憶デバイスの論理記憶空間のサイズを示しており、デバイスオフセット816からデバイスサイズ817分のアドレス空間が、各記憶デバイス内のアクセス可能な論理記憶空間となる。【００７２】
ストレージコントローラ100はデバイスLBAだけでは記憶デバイスを区別できないため、デバイス#毎にアドレスオフセットを設定し、アドレスオフセットにデバイスLBAを足した値を用いることで、PCIeバスにつながった記憶デバイス31〜34の任意の記憶デバイスの記憶領域に一意にアクセスすることが可能となる。【００７３】
本発明では、初期化時、または新たにデバイスを認識したときに、同一RAIDグループにある記憶デバイスの情報を全て含めたRAID構成情報810とリード/ライトコマンドのやり取りをするのに必要な通信用空間情報をそのRAIDグループ内の全ての記憶デバイスに通知する。本実施例では、通信用空間情報とは、各記憶デバイスの通信用空間のアドレスである。これにより、各記憶デバイスは、RAIDグループ内の他の記憶デバイスにアクセスすることが可能となる。【００７４】
本実施例では、RAID構成情報810として、RAIDグループ#811、RAIDレベル812、RAID構成813、ストライプサイズ814、デバイス#、デバイスオフセット816、デバイスサイズ817の例を記載したが、この情報に限定されず、記憶デバイスがパリティ更新の処理をするために、他の記憶デバイスとの間でデータの転送指示ができるような情報であれば良い。例えば、ストレージコントローラ100は、デバイスオフセット816とデバイスサイズ817の代わりに、デバイススタートアドレスとデバイスエンドアドレスを通知しても良いし、後述のバスにSASを利用した例で説明するが、デバイスを識別するデバイスアドレスとデバイスサイズを通知しても良い。本実施例では、デバイスオフセット816とデバイスサイズ817、デバイススタートアドレスとデバイスエンドアドレス、デバイスアドレスとデバイスサイズは、複数の記憶デバイスそれぞれの記憶領域を一意に識別する情報であり、記憶デバイス識別情報と呼ぶ。【００７５】
図10は、ロック管理情報910の例である。ロック管理情報910は、プロセッサ210が実行するプロセスとロック状態の関係の情報を保持している。ロックとは、ロックを確保したプロセス以外のプロセスによるロックの対象となっている領域へのアクセス（例えば、リード及びライト）を禁止することを意味する。ロック管理情報910が保持している具体的な情報は次の通りである。【００７６】
プロセス#911は、プロセッサ210が実行中または今後実行する予定のプロセスの識別番号を示す。プロセッサ210がプロセスを開始する前に、プロセス管理情報910を探索して空きプロセス#を特定し、そのプロセス#に対応する欄にプロセス種別やロック状態等を記録する。プロセスが完了すると、プロセッサ210は、対応するプロセスの内容を削除する。【００７７】
プロセス種別912は、ライトやリード等のプロセスの種別を示す。RAIDグループ#913は、プロセスの対象となるRAIDグループの識別番号を示す。デバイス#914は、プロセスの対象となるRAIDグループ内のデバイスの識別番号を示す。デバイスLBA915は、プロセスの対象となる記憶デバイスのデバイスLBAを示す。【００７８】
ロック状態915は、プロセスがロックを確保しているか、及び、ロックの対象を示す。「ストライプロック」は、対象デバイスLBAに対するプロセスの実行が完了するまで、そのデバイスLBAに対応するストライプに対する他のプロセスによるアクセスを禁止することを意味する。ロックを確保しているプロセスが完了すると、ロックは解放される。本実施例では、ストライプ内のいずれかのデータが更新される場合、そのストライプ全体をロックする。これは、データの更新及びデータの更新に伴うパリティの更新の順序を保証するためである。あるライト処理によるデータ及びパリティの更新処理中に、そのストライプ内にリードやライト処理が発生すると、更新前後いずれのデータに対して処理が実行されるか判断できなくなり、不整合が発生する可能性がある。よって、ロックの確保により、プロセスの順序の保証と不整合の発生を防止することができる。リードの場合は、データの更新が発生しないため、ロックは不要である。【００７９】
次に、システム構成1のランダムライトにおけるパリティ更新処理を示す。本実施例では、1つのストライプ内の連続した複数の論理ブロックに対して、更新される論理ブロック数の割合が所定値未満の場合をランダムライト、所定値以上の場合をシーケンシャルライトと呼ぶ。実施例1では、ランダムライトにおけるパリティ更新処理を説明し、実施例4ではシーケンシャルライトにおけるパリティ更新処理を説明する。【００８０】
ランダムライトとシーケンシャルライトで処理を使い分ける理由を説明する。例えば、ストレージコントローラが、論理ブロック1つ分の新データ0を受信した場合、図1のように旧データ0と旧パリティ0を用いて新パリティ0を生成することができる。ここで、例えばストライプ内の連続する論理ブロックを更新するライトデータ(新データ0〜2の合計48KB)を受信した場合、この3つのデータのXOR演算により、新パリティを生成することができる。この場合、新データ0〜2のそれぞれに図1の処理を適用するよりも、新データ0〜2から新パリティ0を生成した方が効率が良い。よって、パリティ更新の処理を使い分けることとする。【００８１】
例えば、新データ0及び新データ1の合計32KBのデータを受信した場合、新データ0及び新データ1に順次ランダムライトのパリティ更新処理を適用すればよい。また、新データ0、新データ1及び旧データ2の前半分を更新する新データ2‘の合計40KBのデータを受信するようなケースでは、旧データ2の後半分を読み出してシーケンシャルライトとしてパリティ更新の処理する方が効率的な場合もある。ランダムライトとして処理するかシーケンシャルライトとして処理するかは、ストライプのサイズによって適宜設定されてよい。【００８２】
図11にライト処理の各装置間のデータフローを示す。また、図12(図12-1及び図12-2)に、パリティの更新を伴うライト処理のラダーチャートを示す。【００８３】
例としてホスト計算機10が旧データ0を新データ0へ更新するライトコマンドをストレージ装置20に転送した時の動作を説明する。図11が示すように、更新前の旧データ0は記憶デバイス31に格納されており、旧データ0と同一のストライプ0に属する旧パリティ0は記憶デバイス34へ格納されているとする。旧データ0の更新に伴い、旧パリティ0は新パリティ0へ更新されるものとする。【００８４】
処理S701では、ホスト計算機10がストレージ装置20に対してライトコマンドを転送する。具体的には、まずホスト計算機10では、メモリ内に新データ0とライトコマンドを生成する。ライトコマンドには新データ0の書き込み先論理ブロックを示すストレージLBA、ホスト計算機10内のメモリ上にある新データ0の格納場所を示す情報(例えば、ホスト計算機10内のメモリのアドレス)が含まれる。次に、ホスト計算機10は、ストレージ装置20へ新たなライトコマンド生成したことを通知する。例えば、ホスト計算機10はメモリ220上の特定領域の値をインクリメントすることでコマンドの生成を通知する。通知を受けたストレージコントローラ200のプロセッサ210は、ホストインタフェース240へ指示を出し、新たに生成されたライトコマンドをメモリ220へ転送させる。尚、ライトコマンドの転送は、ストレージ装置20に通知せず、ホスト計算機がマスタとなり実施しても良い。【００８５】
処理S702ではストレージコントローラ200がホスト計算機10から新データ511を取得する。具体的には、ストレージコントローラ200内では、プロセッサ210がホストインタフェース240に指示を出し、ライトコマンドで指定されたホスト計算機10のメモリからメモリ220へ新データを転送させる。尚、新データ0の転送は、ホスト計算機10がマスタとなって実施しても良い。ストレージコントローラ200は新データ0を取得したら、ホスト計算機10にライトコマンドに対する完了応答を送信してもよい。この場合、以降の処理はライトコマンドとは非同期に実行される。【００８６】
処理S703ではストレージコントローラ200が新データ0の属するストライプ0のロックを確保する。具体的には、まずプロセッサ210はRAID管理情報810に基づいて、取得したライトコマンドで指定されるストレージLBAから、新データ0の書込み先となる記憶デバイス31とデバイスLBAを特定する。そして、プロセッサ210はメモリ220に格納されているロック管理情報910を参照し、新データ0のデバイスLBAに対応するストライプ0のロック状態を確認する。ストライプ0が既にロック中であった場合は、ロックが解放されるまで処理を中断する。ストライプのロックが解放されている場合、プロセッサ210はメモリ220内のロック管理情報910を更新することで、ストライプ0のロックを確保する。【００８７】
次に、プロセッサ210は、ランダムライトとシーケンシャルライトのどちらとしてパリティ更新を実施するか判断する。本実施例では、論理ブロック1つ分の新データ0を受信しているからランダムライトとしてパリティを更新することを決定する。処理S704ではストレージコントローラ200が記憶デバイス31へパリティライトコマンドを転送する。具体的には、プロセッサ210はメモリ220上にパリティライトコマンドを作成する。パリティライトコマンドは、新データ0の書込み及び新データ0に対応するパリティの更新を指示するコマンドである。また、パリティライトコマンドは、新データ0書き込み先のデバイスLBA、メモリ220内の新データ0の格納位置を示すアドレス情報を含む。本実施例では、RAID管理情報810を予め記憶デバイス31〜34のそれぞれへ配布しているため、パリティライトコマンドにパリティの格納位置情報を含める必要がない。このため、パリティライトコマンドの作成によるプロセッサ210の負荷が軽減されている。なお、RAID管理情報810を予め記憶デバイスに配布しない場合、プロセッサ210はパリティライトコマンドに旧パリティ0が格納されている記憶デバイスのデバイスLBAを含める。これにより、各記憶デバイスはRAID管理情報810をメモリ312に格納する必要がなくなり、メモリ312の容量を削減できる。【００８８】
パリティライトコマンド生成後、プロセッサ210はI/Oインタフェース250に指示して、記憶デバイス31へコマンドの生成を通知する。通知を受けた記憶デバイス31内では、プロセッサ311がI/Oインタフェース315へ指示し、メモリ220上のパリティライトコマンドをデータバッファ313へ転送させる。なおパリティライトコマンドの転送は、記憶デバイス31がマスタとなって実施しても良い。【００８９】
処理S705ではデバイスコントローラ310がストレージコントローラ200から新データ0を取得する。具体的には、デバイスコントローラ310のプロセッサ311は、取得したパリティライトコマンドを解析し、新データ0が格納されているストレージコントローラ200のメモリ210の領域（アドレス）を特定する。次に、デバイスコントローラ310のプロセッサ311は、I/Oインタフェース315へ指示を出し、パリティライトコマンドで指定されたメモリ220の領域から、データバッファ313へ新データ0の転送を実施させる。なお、新データ0の転送はストレージコントローラ200がマスタとなって実施しても良い。【００９０】
処理S706ではデバイスコントローラ310がNVMアレイ410から旧データ0の読み出しをする。具体的には、デバイスコントローラ310のプロセッサ311は、アドレス変換テーブル610を参照し、パリティライトコマンドで指定されているデバイスLBAから旧データ0が格納されている物理領域のPBAを特定する。デバイスコントローラ内ではプロセッサ311がNVMインタフェース316へ指示を出し、特定したPBAに基づきNVMアレイ410内のNVMチップ411のページから旧データ0を読み出させ、データバッファ313へ格納させる。【００９１】
処理S708では、デバイスコントローラ310は、次の2つのうちのいずれかの処理により、アドレス変換テーブル610を更新して新データ0の格納場所を管理し、新データ0と旧データ0の両方を読み出し可能な状態に維持する。デバイスコントローラ310は、新データ0を受信した後も、アドレス変換テーブル610における旧データが格納されているPBAを更新せずに維持する。なお、デバイスコントローラ310は、後述するコミットコマンドを受信すると、旧データを破棄の対象とする。これは、エラーの発生に備えてストレージ装置の信頼性を向上させるための処理である。【００９２】
1つ目は、デバイスコントローラ310のプロセッサ311が、新データ0を格納したデータバッファ313のアドレスをアドレス変換テーブル610のデバイスLBAに対応付けて更新情報613に格納する。これにより、新データ0をNVMアレイに書き込まずに中間パリティを生成できるため、パリティ更新完了までの時間が短縮され、性能が向上する。【００９３】
2つ目は、デバイスコントローラ310がNVMアレイ410へ新データ0の書き込みをする。具体的には、プロセッサ311は、新データ0を書き込む空きページを選択し、その空きページのPBAをアドレス変換テーブル610のデバイスLBAに対応付けて更新情報613に格納する。プロセッサ311は、選択したPBAに基づきNVMインタフェース316へ指示を出し、NVMアレイ410内のNVMチップ411へ新データ0の書き込みを実施させる。これにより、不揮発メモリであるNVMアレイに新データ0を格納するため、パリティ更新処理の途中で突発的な電源障害が発生しても新データ0は消失しないという効果がある。処理S708ではデバイスコントローラ310が旧データ0と新データ0に基づき中間パリティ0を生成する。具体的には、デバイスコントローラ内ではプロセッサ311がパリティ演算ユニット314に指示を出し、データバッファ313上の旧データ0と新データ0を読み出してパリティ演算を実施させ、その結果を中間パリティ0としてデータバッファ313内に格納させる。【００９４】
処理S709ではデバイスコントローラ310がデバイスコントローラ340へとパリティ更新コマンドを転送する。パリティ更新コマンドは、中間パリティと旧パリティに基づいて新パリティの生成を指示するコマンドである。具体的には、まずデバイスコントローラ310のプロセッサ311はデータバッファ313にパリティ更新コマンドを作成する。プロセッサ311は、RAID管理情報810を参照して旧パリティ0が格納されている記憶デバイスのデバイスLBAを特定し、特定したデバイスLBAをパリティ更新コマンドに含める。また、プロセッサ311は、パリティ更新コマンドに、処理S708で生成した中間パリティ0が格納されているデータバッファ313のアドレス及びパリティ更新コマンドが格納されているデータバッファ313のアドレスを含める。そして、プロセッサ311はI/Oインタフェース315へ指示して、パリティ更新コマンドの生成を記憶デバイス34へと通知させる。通知を受けた記憶デバイス34内では、プロセッサ341がI/Oインタフェース345へ指示して、記憶デバイス31のデータバッファ313上のパリティ更新コマンドを記憶デバイス34のデータバッファ343へと転送させる。なお、パリティ更新コマンドの転送は、デバイスコントローラ310がマスタとなり実施しても良い。なお、パリティライトコマンドに旧パリティ0が格納されている記憶デバイスのデバイスLBAが含まれている場合は、プロセッサ311はそのデバイスLBAをパリティ更新コマンドに含めればよい。【００９５】
ここで、デバイスコントローラ310は、パリティ更新コマンドに対する完了応答が所定時間を経過しても受信できない場合、ストレージコントローラ200に対して、Timeoutエラーの発生を通知する。エラーが発生した場合の処理については後述する。【００９６】
処理S710はデバイスコントローラ340がデバイスコントローラ310から中間パリティ0を取得する。具体的には、デバイスコントローラ340では、プロセッサ341がI/Oインタフェース345に対して、パリティ更新コマンドで指定されたデータバッファ313のアドレスからデータバッファ314への中間パリティ0の転送を実施させる。なお、中間パリティ0の転送は記憶デバイス31がマスタとなり実施しても良い。【００９７】
処理S711はデバイスコントローラ340がNVMアレイ440から旧パリティ0の読み出しをする。具体的には、デバイスコントローラ内ではプロセッサ341がアドレス変換テーブル810を参照してパリティ更新コマンドに含まれるデバイスLBAから旧パリティが格納されているPBAを特定し、NVMインタフェース346に指示を出し、旧パリティが格納されているPBAに基づき、NVMアレイ440内のNVMチップ441から旧パリティ0を読み出させ、データバッファ343へ格納させる。【００９８】
処理S712はデバイスコントローラが旧パリティ0と中間パリティ0に基づき新パリティ0を生成する。具体的には、デバイスコントローラ内ではプロセッサ341がパリティ演算ユニット344へ指示を出し、データバッファ343上の旧パリティ0と中間パリティ0を読み出して、パリティ演算を実施させ、その結果を新パリティ0としてデータバッファ343内に格納させる。【００９９】
処理S713では、下記2つの処理のいずれかにより、新パリティ0を生成した後も、デバイスコントローラ340は、新パリティ0と旧パリティ0を読み出し可能な状態に維持する。これは、処理S707においてデバイスコントローラ310が新データ0と旧データ0を管理するのと同様である。【０１００】
1つ目は、デバイスコントローラ340のプロセッサ341が、新パリティ0を格納したデータバッファ343のアドレスをアドレス変換テーブル610のデバイスLBAに対応付けて更新情報613に格納する。これにより、新パリティ0をNVMアレイに書き込まずにS712の完了応答を送信できるため、パリティ更新完了までの時間が短縮され、性能が向上する。【０１０１】
2つ目は、デバイスコントローラ340がNVMアレイ410へ新パリティ0の書き込みをする。具体的には、プロセッサ341は、新データ0を書き込む空きページを選択し、その空きページのPBAをアドレス変換テーブル610のデバイスLBAに対応付けて更新情報613に格納する。プロセッサ341は、選択したPBAに基づきNVMインタフェース346へ指示を出し、NVMアレイ440内のNVMチップ441へ新パリティ0の書き込みを実施させる。【０１０２】
処理S714はデバイスコントローラ340がデバイスコントローラ310に対して、パリティ更新コマンドの完了応答を転送する。具体的には、まずデバイスコントローラ340ではプロセッサ341がデータバッファ343にパリティ更新コマンドへの完了応答を作成する。次に、プロセッサ341はI/Oインタフェース345へ指示を出し、作成した完了応答を記憶デバイス31内のデータバッファ313へ転送させる。尚、完了応答の作成を記憶デバイス31へ通知し、記憶デバイス31をマスタとして完了応答を転送してもかまわない。【０１０３】
なお、デバイスコントローラ340は、中間パリティ0の取得後、旧パリティ0の取得前完了応答をに送信してもよい。この場合、デバイスコントローラ340は、完了応答送信後に、旧パリティ0をNVMアレイから取得して、新パリティ0の生成を行う。これにより、パリティ更新が完了するまでの時間がより短縮される。【０１０４】
旧データ0新データ0処理S715では、デバイスコントローラ340からのパリティ更新コマンドに対する完了応答の受信に応じて、デバイスコントローラ310がストレージコントローラ200に対して、パリティライトコマンドに対する完了応答を転送する。具体的には、まずデバイスコントローラ310内ではプロセッサ311がデータバッファ313にパリティライトコマンドへ完了応答を作成する。次にプロセッサ311はI/Oインタフェース315へ指示を出し、作成した完了応答をストレージコントローラ200内のメモリ220へ転送させる。尚、完了応答の作成をストレージ200へ通知し、ストレージコントローラ200をマスタとして完了応答を転送してもかまわない。【０１０５】
処理S716及びS717では、デバイスコントローラ31からのパリティライトコマンドに対する完了応答の受信に応じて、ストレージコントローラ200が記憶デバイス31、34それぞれへ、データ更新を反映させるためのコミットコマンドを転送する。ここでは記憶デバイス31の新データ0へのコミットコマンドを例に、処理S716、718及び720を説明する。【０１０６】
処理S716では、プロセッサ210は、記憶デバイス31からパリティライトコマンドに対する完了応答を受信すると、メモリ220上に記憶デバイス31へのコミットコマンドを作成する。コミットコマンドは、パリティの更新処理の完了を通知するコマンドである。また、コミットコマンドは、旧データ0を破棄して新データ0に確定させるためのコマンドともいえる。コミットコマンドには、記憶デバイス31内のデータ新データ0の格納先を示すデバイスLBAを含める。コミットコマンド生成後、プロセッサ210はI/Oインタフェース250に指示して、記憶デバイス31へコマンドの作成を通知する。通知を受けた記憶デバイス31はI/Oインタフェース315へ指示し、メモリ220上のコミットコマンドをデータバッファ313へ転送させる。なおコミットコマンドの転送は、ストレージコントローラ200がマスタとなって実施しても良い。処理S718では、デバイスコントローラ310がコミットコマンドを受信すると、アドレス変換テーブル610を更新する。具体的には、デバイスコントローラ310の内部でプロセッサ311が、データバッファ313に格納されている新データ0を格納するページを選択し、そのページのPBAを新データ0のデバイスLBAに対応付けるためにアドレス変換テーブル610のPBA612に格納する。そして、プロセッサ311は、アドレス変換テーブル610の更新情報613の情報を削除する。そして、プロセッサ311は、新データ0を選択したPBAのページにページに格納する。記憶デバイス31は、処理S718実施前のデバイスLBAへのリードに対して、旧データ0を返すが、処理S718を実施以降、同じデバイスLBAへのリードに対し新データ0を返すようになる。、デバイスコントローラ310は、コミットコマンドを受信すると、旧データ0を破棄することができる。実際にデバイスコントローラ310が旧データ0を消去するのは、コミットコマンドの受信とは非同期に行われる。【０１０７】
なお、新データ0がすでにNVMアレイ410に格納されている場合は、更新情報613に格納されているPBAの値をPBA612の欄にコピーし、更新情報613の情報を消去する。【０１０８】
処理S720では、デバイスコントローラ310が、ストレージコントローラ200に対して、コミットコマンドに対する完了応答を返す。具体的には、まずデバイスコントローラ310のプロセッサ311がデータバッファ313にコミットコマンドへの完了応答を作成する。次にプロセッサ311はI/Oインタフェース315へ指示を出し、作成した完了応答をストレージコントローラ200内のメモリ220へ転送させる。尚、完了応答の作成をストレージコントローラ200へ通知し、デバイスコントローラ200をマスタとして完了応答を転送してもかまわない。【０１０９】
新パリティ0を格納している記憶デバイス34に対しても処理S717、S719及びS721が新パリティ0の更新反映のため同様に実施される。これは処理S716、718及び720の記憶デバイス31を記憶デバイス34とし、新データ0を新パリティ0と変えればよいため説明を省略する。【０１１０】
ストレージコントローラ200は、新データを格納した記憶デバイス31と新パリティを格納した記憶デバイス34のそれぞれからコミットコマンドへの完了応答を受信すると、処理S722を実行する。【０１１１】
処理S722では、ストレージコントローラ200がストライプ510に対するロックを解放する。ストレージコントローラ200内ではプロセッサ210がメモリ220内のロック管理情報910の情報を削除することで、ストライプ0のロックを解放する。【０１１２】
処理S723では、ストレージコントローラ200がホスト計算機10へライトコマンドに対する完了応答を返す。まずストレージコントローラ200ではプロセッサ210がメモリ220にライトコマンドへの完了応答を作成する。次にプロセッサ200はホストインタフェース240へ指示を出し、作成した完了応答をホスト計算機10内のメモリへ転送させる。完了応答の作成をホスト計算機10へ通知し、ホスト計算機10をマスタとして完了応答を転送してもかまわない。【０１１３】
以上の処理により、パリティの更新に伴うストレージコントローラと記憶デバイス間のデータ転送回数は1回となり、ストレージコントローラの転送負荷が低減され、ライト処理が高速化する。【０１１４】
ここで、Timeoutエラーが発生した場合の再開処理について説明する。デバイスコントローラ310は、パリティ更新コマンドに対する完了応答が所定時間を経過しても受信できない場合、ストレージコントローラ200に対して、Timeoutエラーの発生を通知する。この通知を受信したストレージコントローラ200は、管理計算機15に記憶デバイス31を転送元、記憶デバイス34を転送先とする記憶デバイス間でTimeoutが発生したことを管理画面に表示するよう指示する。また、ストレージコントローラ200は、パリティライトコマンドを記憶デバイス31に送信する処理S704から再開する。ストレージコントローラ200は、後述の処理715におけるパリティライトコマンドに対する完了応答を受信するまでは、処理の進捗状況を認識することができないため、Timeoutやその他エラーが発生すると処理S704からの再開となる。【０１１５】
処理S707において説明した通り、記憶デバイス31において、旧データ0は読み出し可能な状態に管理されているため、デバイスコントローラ310がパリティライトコマンドを受信すると、処理S706において旧データ0の取得を実行することができる。もし、旧データ0の格納場所を示すPBAが新データ0の格納場所を示す情報に更新されていた場合、旧データ0は消失したものとなり、このように処理を再開することができない。そして、デバイスコントローラ310は、処理S708で中間パリティを生成して、処理S709でパリティ更新コマンドを記憶デバイス34に送信する。記憶デバイス34においても、旧パリティ0は読み出し可能な状態に管理されているため、処理S711において旧パリティ0を読み出す処理を実行することができる。【０１１６】
このように、ストレージコントローラがパリティの更新完了を認識してコミットコマンドを送信するまではTimeoutエラーやその他の障害に備えて旧データ及び旧パリティを読み出し可能な状態に維持することで、ストレージ装置の信頼性を向上できる。【０１１７】
図13(図13-1及び図13-2)はストレージ装置20やサーバ80の管理計算機15に表示される管理画面1400の構成例を示す。本実施例では、図13(図13-1及び図13-2)に示す管理画面を介して、管理者に各記憶デバイス31〜34のオフロード機能使用状況や、記憶デバイス間通信パスの状態などの情報を提供する。管理画面1400は記憶デバイス間パスステータステーブル1410やオフロード機能ステータステーブル1420を含む。【０１１８】
記憶デバイス間パスステータステーブル1410は各記憶デバイス間の通信状態を示す。図13-1に示す例では、各通信パスについて、使用中と不使用の2つの状態に分けてユーザへ示す。使用中状態は、現在の設定において対象のデータパスが利用されていることを示し、あわせてTimeoutの発生回数を表示する。図13-1の例では、記憶デバ記憶デバイス34が転送先の場合にTimeoutが多数発生しており、記憶デバイス34の何らかの異常が発生している可能性が高いことがわかる。不使用状態は、現在の設定においてそのパスが使用されないことを示す。【０１１９】
記憶デバイス間パスステータステーブルを参照することで、ユーザは各記憶デバイス間パスでの通信の有無、また各パスに異常がないかをを確認できる。頻繁にTimeoutが発生する場合は、通信パスや記憶デバイスに異常が発生している可能性がある。このように、記憶デバイス間通信のTimeoutの発生状況を管理画面に表示させることで、管理者は異常の発生状況を把握することができ、システムの信頼性を保つための保守管理が容易になる。【０１２０】
オフロード機能ステータステーブル1420は各記憶デバイスについて、パリティ更新や二重書きオフロード機能のステータスを示す。例えば、図13-2においてオフロード機能ステータステーブルは各記憶デバイスのパリティ更新と二重書きといったオフロード機能について、使用中、不使用、非対応の3種類の状態をユーザへ示す。使用中状態は記憶デバイスが対象となるオフロード機能に対応しており、また現在RAIDグループに含まれ、処理がオフロードされうる状態にあることを示す。不使用の状態は、記憶デバイスは対象となるオフロード機能に対応しているが、現在RAIDグループに含まれていないなどの理由から処理がオフロードされえない状態であることを示す。非対応状態は記憶デバイスが対象となるオフロード機能に対応していないことを示す。オフロード機能ステータステーブル1420を参照することで、ユーザはオフロード機能の利用状況やオフロード機能非対応記憶デバイスの混在を確認できる。【０１２１】
以上、実施例1の動作を説明した。図11及び図12(図12-1及び図12-2)では、ストレージコントローラが、旧データを格納する記憶デバイスに新データを転送し、旧データを格納するデバイスが中間パリティを生成後、旧パリティを格納するデバイスにパリティ更新を指示する例について記した。しかし、ストレージコントローラが旧パリティを格納する記憶デバイスに新データを転送し、旧パリティを格納する記憶デバイスが、旧データを格納する記憶デバイスから取得し、パリティを更新した後、新データを格納する記憶デバイスに新データを転送するとしてもよい。【０１２２】
また、実施例1はシステム構成1に示すストレージ装置での動作を説明したが、本発明はこれに限定されるものではない。複数の記憶デバイスと、それらの管理を行う上位装置を含む構成であればよい。例えば、システム構成2に本発明を適用することもできる。この場合、ストレージ装置20をサーバ80と読み変えればよい。
以上のように、ランダムライトによるパリティの更新処理において、パリティの更新に伴ってストレージコントローラが記憶デバイスから旧データ、旧パリティ、中間パリティを取得することが不要となる。また、ストレージコントローラによるパリティ生成の処理そのものも不要となる。そのため、ストレージコントローラのI/O処理負荷及びデータ転送負荷が軽減される。また、ストレージコントローラ内バスへのデータ転送負荷の集中を解消する。ストレージコントローラが性能のネックとなることが回避され、また高速な記憶デバイスの性能を活かすことができ、ライト処理が高速化する。
【実施例２】
【０１２３】
前述の実施例１では、ストレージコントローラまたはサーバ等の記憶デバイスにとっての上位装置が、記憶デバイスにデータを転送する際、記憶デバイス間の通信にてパリティ更新を実施する例について記述した。次に述べる実施例２では、上位装置から記憶デバイスへのデータ転送は無いが、記憶デバイス内で新たなデータの生成やデータの更新を伴う指示をする場合の処理について記す。記憶デバイス内にて新たなデータが生じるシステムの一例として、上位装置が記憶デバイスに、記憶デバイス内に格納したデータの検索を指示するシステムが挙げられる。このシステムにおいて、記憶デバイスは上位装置からの指示に基づいて格納しているデータを検索し、検索結果のデータを新規に作成する。この検索結果のデータを、記憶デバイスが提供するデバイスLBAに対応付けて上位装置に提供する。ここで、記憶デバイスが自身の領域に検索結果のデータを記録する際、RAIDグループに属する記憶デバイスは、検索結果データを格納するデバイスLBAに対応するストライプの、別の記憶デバイスのパリティデータまたは二重書きデータを格納している領域を更新する必要が生じる。【０１２４】
実施例2では、記憶デバイスにて発生したデータに対する、システム構成2でのパリティ更新動作について示す。実施例1と同様に、記憶デバイス31〜34で一つの3 Data + 1 ParityのRAID5グループを構成するものとする。【０１２５】
例として、上位装置からの指示により、記憶デバイス31内で旧データ0を新データ0への更新が発生した場合の動作を説明する。旧データ0の更新に伴い、記憶デバイス34の旧パリティ0は新パリティ0へ更新されるものとする。また、記憶デバイス31データの更新は、記憶デバイス31へオフロードされたデータベース処理結果の格納のため発生したものと想定する。尚、本実施例でデータの更新はデータベース処理に起因して発生するが、例えば物理シミュレーションの結果の格納に伴い発生したものなどでもかまわない。なお、以下では実施例1と同様の処理は詳細な説明を省略する。【０１２６】
サーバ80から記憶デバイス31へデータベース処理によるデータの更新が発生する動作をについて、図14に各装置間のデータフローを示す。また、データベース処理に伴うパリティ更新の処理を、図15のラダーチャートに示す。【０１２７】
処理S1101ではサーバ80があらかじめデータベース処理結果のデータ書き込み先となるデバイスLBAの属するストライプ0のロックを確保する。具体的には、まずプロセッサ81は、データベース処理の対象となるデータを格納している記憶デバイスを決定し、その記憶デバイスにおいてデータベース処理の結果のデータを格納するデバイスLBAを決定する。データベース処理の完了後に、サーバはこのデバイスLBAを用いて処理結果にアクセスすることができる。そして、プロセッサ81は、メモリ82に格納されているロック管理情報910を参照し、デバイスLBAに対応するストライプ0のロックの状態を確認する。ストライプ0が既にロック中であった場合は、ロックが解放されるまで処理を中断する。ストライプ0のロックが解放されている場合、プロセッサ81はメモリ82内のロック管理情報を更新することで、ストライプ0のロックを確保する。【０１２８】
処理S1102では、プロセッサ81がデバイスコントローラ310へデータベース処理オフロードコマンドの転送を行う。具体的には、まずサーバ80では、プロセッサ81がメモリ82内にデータベース処理オフロードコマンドを生成する。データベース処理オフロードコマンドには、例えば処理対象データのデバイスLBAや処理結果格納先デバイスLBA、要求するデータベース処理の内容といった情報が含まれる。次にサーバ80内では、プロセッサ82がチップセット84へ指示し、例えばメモリ312の特定領域の値をインクリメントすることで、記憶デバイス31へ新たなコマンド生成を通知する。通知を受けた記憶デバイス内では、プロセッサ311がI/Oインタフェース315へ指示を出し、メモリ82内に生成されたコマンドをデータバッファ313へ転送させる。尚、コマンドの転送はサーバ80をマスタとして実施してもかまわない。【０１２９】
処理S1103では、記憶デバイス31が指示されたデータベース処理を実施する。記憶デバイス31はデータベース処理オフロードコマンドを解析し、要求されたデータベース処理を実施する。例えば、プロセッサ311はコマンドに指定されるデバイスLBAに基づき、NVMアレイ310から読み出した解析対象データをデータバッファ313へ格納、その後データベース処理を実施し、得られた解析結果をメモリバッファ313へ格納する。尚、本実施例ではコマンドによって処理が実施されるが、例えば事前に設定されたバッチ処理として一定期間ごとにデータベース処理が実施されてもかまわない。データベース処理完了後、解析の結果として得られた新データ0をNVMアレイ410へ格納するためのライトが発生する。ここでは、1つの記憶デバイスの内部で新データ0が生成されるため、パリティの更新処理はランダムライトが発生したものと同様の処理となる。【０１３０】
処理S1104〜S1112は、実施例1の処理706〜714と同様のため説明を省略する。また、処理S1113〜S1120は、実施例1の処理S715〜S722におけるストレージコントローラ200をサーバ80と読み変えれば同様の内容のため説明を省略する。【０１３１】
記憶デバイスに、データベースの検索や解析処理のようなデータの更新を伴うがデータを転送しない指示を送った場合にも、記憶デバイス間の通信によりパリティを更新することができる。また、サーバがデータベースの検索や解析を実行しないため、サーバの負荷はより低減され、データベースの検索や解析処理が高速化する。【０１３２】
以上、実施例2について説明した。尚、実施例2はシステム構成2に示すサーバでの動作を説明したが、本発明はこれに限定されるものではない。複数の記憶デバイスと、記憶デバイスに対してデータを転送することなくデータの更新を伴う指示を出せる上位装置を含む構成であればよい。
【実施例３】
【０１３３】
実施例1では、パリティを用いたRAID構成の例において、複数の記憶デバイスがストレージコントローラまたはサーバを介さずに相互に通信することでパリティを更新する例について示した。しかし、パリティ生成によるレスポンス性能の低下等を抑制する場合、同一のデータを複数の記憶デバイスに格納することでデータの冗長性を保つ構成が考えられる実施例3では、複数の記憶デバイスが同一のデータを保持する例について記す。つまり、ライト要求の対象データと同一のデータを冗長データとして、ライト要求の対象データを格納する記憶デバイスとは異なる記憶デバイスに、同一のデータ（冗長データ）が格納される。【０１３４】
実施例3としてRAID1適用時のデータ記憶構成における、ライト要求発生時の動作を示す。実施例3ではシステム構成1に対して、記憶デバイス31、32でRAIDグループ600を組み、データを二重化した記憶構成を想定する。【０１３５】
まず、実施例3に係るデータ記録構成を説明する。RAID5適用した図7の例と同様に、RAIDグループ600に属する記憶デバイス31、32のそれぞれが提供する論理記憶空間61、62は、1つの論理ボリューム60としてホスト計算機10へ提供される。尚、RAIDグループ600で構成される記憶領域を、ホスト計算機10へ複数の論理ボリュームとして提供してもかまわない。【０１３６】
図16はRAIDグループ600における、論理記憶空間61、62へのデータ配置を示す。RAID1適用時には論理ボリューム60内の各論理ブロックは、論理記憶空間61、62両方の論理ブロック1つずつと対応付けられる。例えば、ストレージLBAが2の論理ブロックのデータは、論理記憶空間61のデバイスLBA 2の論理ブロックと論理記憶空間62のデバイスLBA 2の論理ブロックの両方に格納される。同一のデータが格納される2つの論理ブロックでストライプが構成される。【０１３７】
RAID1では、同一データが2つの論理ブロックへと格納されるため、1つのデータへの書き込み要求に対して、2つの論理ブロックに更新を行う必要がある。例えば、ストレージLBA 2の論理ブロックへの書き込み要求に対して、論理記憶空間61デバイスLBA 2と論理記憶空間62デバイスLBA 2の更新が必要になる。【０１３８】
次に、ホスト計算機10のライトコマンドに対する、RAID1適用したシステム構成1での二重化されたデータの更新動作を示す
例として、記憶デバイス31内で旧データ0を新データ0へ更新するライトコマンドを、ストレージ装置20へ転送したときの動作を説明する。図17に示すように、更新前の旧データ0は記憶デバイス31、32の論理記憶領域61、62のそれぞれに格納され、書き込みに伴い記憶デバイス31、32の双方のデータが更新されるものとする。【０１３９】
図17にライト実施時の各装置間のデータフローを示す。また、ライト実施時の処理を、図18のラダーチャートに示す。処理S1201〜S1203は、実施例1の処理S701〜703と同様のため説明を省略する。【０１４０】
処理S1204ではストレージコントローラ200が記憶デバイス31へ二重書きライトコマンドを転送する。まずプロセッサ210は処理S1201で取得したライトコマンドで指定されるストレージLBAから、新データ0の格納先記憶デバイス31、32と、それぞれの格納先デバイスLBAの特定を行う。次にプロセッサ210はメモリ220上に二重書きライトコマンドを作成する。二重書きライトコマンドには新データ0のメモリ220上での格納位置、記憶デバイス31での書き込み先のデバイスLBAに加え、二重化するデータの格納先情報として、記憶デバイス32の情報と記憶デバイス32での書き込み先デバイスLBAを含む。尚、二重化するデータ格納先情報について、二重書きライトコマンドに含めず、あらかじめ記憶デバイス31、32へRAID管理情報として配布する構成としても良い。最後にプロセッサ210はI/Oインタフェース250に指示をして、二重書きライトコマンド作成を記憶デバイス31へ通知させる。通知を受けた記憶デバイス31内のプロセッサ311は、I/Oインタフェース315へ指示して、メモリ220上の二重書きライトコマンドをデータバッファ31へと転送する。【０１４１】
処理S1205ではデバイスコントローラ310がストレージコントローラ200から新データ0を取得する。デバイスコントローラ310内ではプロセッサ311がI/Oインタフェース315へ指示を出し、二重書きライトコマンドで指定されたメモリ220の領域から、データバッファ313へ新データ0の転送を実施させる。【０１４２】
処理S1206ではデバイスコントローラ310がNVMアレイ410へ新データ0の書き込みをする。プロセッサ311は、二重書きライトコマンドに含まれるデバイスLBA に基づきNVMインタフェース316へ指示を出し、NVMアレイ410内のNVMチップ411へ新データ0の書き込みを実施させる。処理S1205の実施タイミングに関して制約はなく、以降の処理を先に実施しても良い。【０１４３】
処理S1207ではデバイスコントローラ310がデバイスコントローラ320へとライトコマンドを転送する。まずデバイスコントローラ310にてプロセッサ311はデータバッファ313にライトコマンドを作成する。ライトコマンドには、処理S1203で取得した二重書きライトコマンドに基づいた、二重化したデータの格納先のデバイスLBA、またデータバッファ313内の新データ0のアドレスを含める。そして、作成したライトコマンドをデバイスコントローラ320へと転送する。【０１４４】
処理S1208ではデバイスコントローラ320がデバイスコントローラ310から新データ0を取得する。デバイスコントローラ320では、プロセッサ321がI/Oインタフェース325に対して、ライトコマンドで指定されたデータバッファ313のアドレスからデータバッファ323への新データ0の転送を実施させる。【０１４５】
処理S1209ではデバイスコントローラ320がNVMアレイ420へ新データ0の書き込みをする。プロセッサ321は、ライトコマンドに含まれるデバイスLBAに基づき、NVMインタフェース326へ指示を出し、NVMアレイ420内のNVMチップ421へ新パリティ519の書き込みを実施する。尚、処理S1208よりも、以降の処理を先に実施しても良い。【０１４６】
処理S1210〜1219は実施例1の処理S714〜S723と同様のため説明を省略する。  以上、実施例3について説明した。尚、実施例3はシステム構成1に示すストレージ装置での動作を説明したが、本発明はこれに限定されるものではない。複数の記憶デバイスと、それらの管理を行う上位装置を含む構成であればよい。また、ホスト計算機においてライト要求が発生した例を用いて動作を説明したが、例えばストレージコントローラや記憶デバイスにおいて、ライト要求が発生してもかまわない。【０１４７】
実施例3において、RAIDグループを管理し、利用するストレージコントローラまたはサーバでは、記憶デバイス内データの更新発生時に、1つの記憶デバイスへのデータ書き込み指示のみで、2つのデバイスへのデータの二重書きが実施できる。このため、ストレージコントローラのIO処理負荷及びデータ転送負荷が軽減され、ライト処理が高速化する。
【実施例４】
【０１４８】
前述の実施例1では、ランダムライトに伴い発生するパリティ更新処理を示したが、次に述べる実施例4では、シーケンシャルライトに伴い発生するパリティ更新処理を示す。ここでは、新パリティの生成のために必要なストライプ内のデータがすべてそろっている場合を例に説明する。シーケンシャルライトのパリティ演算は、パリティの演算に必要なストライプ内のデータを一度保持する上位装置(ストレージコントローラまたはサーバ)が実施するのが効率的である。しかし、上位装置がパリティ演算機能を備えていない場合、パリティを演算することができない。また、上位装置がパリティ演算機能を備えていても、上位装置が高負荷であれば性能が低下する場合がある。このような場合に、実施例4のパリティ更新処理が実施される。なお、コマンドの転送処理はこれまでの実施例と同様のため、詳細な説明は適宜省略する。【０１４９】
実施例4では、実施例1と同様に、記憶デバイス31〜34で1つの3 Data+1 ParityのRAIDグループを構成するものとする。【０１５０】
例として、ホスト計算機10が記憶デバイス31〜33のそれぞれに格納されている旧データ0〜2を新データ0〜2へ更新するライトコマンドを、ストレージ装置20へ転送したときの動作を説明する。旧データ0〜2の更新に伴い、記憶デバイス34内の旧パリティ0は新パリティ0へ更新されるものとする。【０１５１】
図19に、ライト実施時の各装置間のデータフローを示す。また、ライトの処理を図20(図20-1及び図20-2)のラダーチャートへ示す。【０１５２】
処理S1301〜S1303は、実施例1の処理S701〜703と同様のため説明を省略する。ストレージコントローラ200がホスト計算機10から取得するデータは新データ0〜2とする。【０１５３】
次に、プロセッサ210は、ランダムライトとシーケンシャルライトのどちらとしてパリティ更新を実施するか判断する。本実施例では、ストライプ内の論理ブロック3つ分の新データ0〜2を受信しているため、シーケンシャルライトとしてパリティを更新することを決定する。【０１５４】
処理S1304ではストレージコントローラ200が記憶デバイス34へパリティライトコマンドを転送する。具体的には、まずプロセッサ210は、RAID管理情報810を参照し、処理S1301で取得したライトコマンドで指定されるストレージLBAから、新データ0〜2の格納先となる記憶デバイス31〜33とそれぞれのデバイスLBAの特定を行う。また、更新対象論理ブロックの属するストライプ0のパリティ514の格納先となる記憶デバイス34とデバイスLBAの特定も行う。次に、プロセッサ210はメモリ220上にパリティライトコマンドを作成する。ここでのパリティライトコマンドは、転送する新データ0〜2から新パリティを演算することを指示するコマンドである。パリティライトコマンドには、新パリティ0の書き込み先のデバイスLBA、メモリ220内の新データ0〜2の格納位置情報、新データ0〜2それぞれの格納先となる記憶デバイスを特定する情報を含める。【０１５５】
処理S1305ではデバイスコントローラ340がストレージコントローラ200から新データ0〜2を取得する。【０１５６】
処理S1306ではデバイスコントローラ340が新データ0〜2に基づき新パリティ0を生成する。具体的には、デバイスコントローラ340内ではプロセッサ341がパリティ演算ユニット344に指示を出し、データバッファ343に格納されている新データ0〜2を読み出しパリティ演算を実施させ、その結果を新パリティ0としてデータバッファ343に格納させる。【０１５７】
処理1307では、プロセッサ341は、アドレス変換テーブル610の更新情報613に新パリティ0の格納場所を記録し、新パリティ0と旧パリティ0の両方を管理するが、実施例1と同様のため説明を省略する。【０１５８】
処理S1308では、デバイスコントローラ340が記憶デバイス31〜33のそれぞれへ転送するライトコマンドを作成し、作成したライトコマンドを転送する。処理S1308のライトコマンド転送から処理1311のライトコマンドに対する完了応答までは、記憶デバイス31〜33それぞれの新データ0〜2の書き込みについて同様に実施される。ここでは記憶デバイス31への新データ0の書き込みを例に、処理S1308〜処理S1311を説明する。まずデバイスコントローラ340のプロセッサ341はデータバッファ343にライトコマンドを作成する。プロセッサ341は、RAID管理情報810及びライトパリティライトコマンドに含まれる新データ0の格納先の記憶デバイスの情報に基づいて特定した新データ0の格納先のデバイスLBA、データバッファ343上の新データ0の位置情報を含める。そして、プロセッサ341はI/Oインタフェース345へ指示して、ライトコマンドの生成を記憶デバイス31へと通知させる。通知を受けた記憶デバイス31内では、プロセッサ311がI/Oインタフェース315へ指示して、それぞれにメモリバッファ313上のライトコマンドを1つずつメモリバッファ313へと転送させる。【０１５９】
処理S1309はデバイスコントローラ310がデバイスコントローラ340から新データ0を取得する。【０１６０】
処理S1310では、プロセッサ311は、アドレス変換テーブル610の更新情報613に新データ0の格納場所を記録し、新データ0と旧データ0の両方を管理するが、実施例1と同様のため説明を省略する。【０１６１】
処理S1311では、デバイスコントローラ310がデバイスコントローラ340に対して、ライトコマンドの完了応答を返す。処理S1312では、デバイスコントローラ340が、記憶デバイス31〜34のそれぞれからライトコマンドに対する完了応答を受信すると、ストレージコントローラ200に対して、パリティライトコマンドに対する完了応答を返す。【０１６２】
処理S1313〜1318は、実施例1の処理S716〜723と同様のため説明を省略する。実施例4はシーケンシャルライトを対象としているため、ストレージコントローラ200が、S1313でRAIDグループ内の記憶デバイス31〜34それぞれにコミットコマンドを送り、S1316で記憶デバイス31〜34のそれぞれから完了応答を受信した後に、S1315でロックを解放する。【０１６３】
以上の処理により、シーケンシャルライトの場合であっても、ストレージコントローラがパリティ生成をする必要がなくなり、ストレージコントローラの負荷が低減される。また、ストレージコントローラがパリティ生成機能を備えていなくても、効率のよいパリティ生成をすることができ、ライト処理が高速化する。以上、実施例4の動作を説明した。図19及び図20(図20-1及び図20-2)では、ストレージコントローラが、旧パリティを格納するデバイスに新データを転送し、旧パリティを格納するデバイスが新パリティを生成後、同一のRAIDストライプに属する他の記憶デバイスへデータの書き込みを指示する例について記した。しかし、ストレージコントローラが旧データを格納するディスクに新データを転送し、旧データを格納するデバイスが、同一のRAIDストライプに属する他の記憶デバイスへデータの書き込みを指示してもよい。【０１６４】
また、実施例4はホスト計算機で発生したシーケンシャルライトを対象としているが、実施例2のように記憶デバイス内で発生したシーケンシャルライトを対象としてもかまわない。その場合、シーケンシャルライトが発生した記憶デバイスはパリティ演算を行い、書き込み対象の論理ブロックを持つ各記憶デバイスへデータの更新を指示することでパリティ更新を実施する。また、実施例4はシステム構成1に示すストレージ装置での動作を説明したが、本発明はこれに限定されるものではない。複数の記憶デバイスと、それらの管理を行う上位装置を含む構成であればよい。例えば、システム構成2において本発明を適用してもかまわない。
【実施例５】
【０１６５】
実施例5では、記憶デバイスのリビルド中のパリティ更新処理を示す。【０１６６】
まず、リビルドについて、図7のデータ配置に基づいて説明する。デバイスコントローラ310は、XOR演算の機能を備えており、データの復元処理を実行することができる。記憶デバイス32が故障して、新しい記憶デバイス35に交換されたものとする。まずストレージコントローラ200は、記憶デバイス35にリビルドの実行を指示する。指示を受けた記憶デバイス35のデバイスコントローラ310は、デバイスLBAの先頭から順にデータを復元する。まず、ストライプ0に属するData1を復元する場合、記憶デバイス35のデバイスコントローラ310は、RAIDグループ内の他の記憶デバイス31、33、34に対して、ストライプ0に属するデータ及びパリティの転送を指示する。そして、記憶デバイス35のデバイスコントローラ310は、転送されたData0とData1とParity0のXOR演算を実行し、Data1を復元する。さらに、Data5、Parity2と順次復元することで、記憶デバイス32に格納されていた全てのデータが復元される。全てのデータが復元された後に、記憶デバイス35のデバイスコントローラ310はリビルドが完了したことを示す応答をストレージコントローラ200に送信する。【０１６７】
ストレージコントローラ200がリビルド中の記憶デバイス35に対してデータ更新を指示するライトコマンドを受信した場合に、ライトコマンドで指定される領域がデータ復元される前である場合、そのままライトデータを書き込んでパリティを更新すると、不整合が発生する。このため、以下の2つのいずれかの処理により、データの整合性を保つことができる。【０１６８】
1つ目の処理を図21と図22を用いて説明する。図21はストレージコントローラによるリビルド中の記憶デバイスへのデータ更新処理のフローチャートを示す。図22はリビルド中の記憶デバイスのフローチャートを示す。【０１６９】
処理S2101では、ストレージコントローラ200がホスト計算機10からライトコマンドを受信する。【０１７０】
処理S2102では、ライトコマンドを受信したストレージコントローラ200が、データ更新の対象となる記憶デバイスを特定し、その記憶デバイスがリビルド中かを判断する。ここでは記憶デバイス35とする。記憶デバイス35がリビルド中の場合(処理S2102:Yes)、処理S2103に進む。【０１７１】
処理S2103では、ストレージコントローラ200が、記憶デバイス35に対してデータ更新の対象となるデバイスLBAのロック確保を指示する。【０１７２】
ここで、図22を用いてロック確保の指示を受けた記憶デバイスのフローチャートを説明する。【０１７３】
処理S2201では、記憶デバイス35のデバイスコントローラ310がロック確保の指示を受信する。【０１７４】
処理S2202では、ロック確保の指示を受けたデバイスコントローラ310が、指示されたデバイスLBAのデータ復元が完了しているかを判断する。【０１７５】
データ復元が完了している場合(処理S2203:Yes)、処理S2203において、デバイスコントローラ310は、ストレージコントローラ200に「データ復元済み」と応答する。データ復元済みであれば、通常のライト処理を実行することができるためである。データ復元が完了していない場合(処理S2203:No)、処理S2204において、デバイスコントローラ310は、指示されたデバイスLBAがデータ復元の処理中かを判断する。【０１７６】
データ復元の処理中の場合(S2204:Yes)、処理S2205において、デバイスコントローラ310は、ストレージコントローラ200に「ロック不可」と応答する。データ復元処理中にデータが更新されると不整合が発生する。これを回避するために、ロック不可と応答する。【０１７７】
データ復元処理中ではない場合(S2204No)、処理S206において、デバイスコントローラ310は、指定されたデバイスLBAのロックを確保する。デバイスコントローラ310は、ロックを確保している間は、そのデバイスLBAについてデータ復元を実行しない。【０１７８】
処理S2207では、デバイスコントローラ310は、ストレージコントローラ200に「ロック確保」と応答する。【０１７９】
図21のストレージコントローラ200の処理に戻る。【０１８０】
処理S2104では、ストレージコントローラ200は、記憶デバイス35からロック確保の指示に対する応答を受信する。処理S2105では、応答を受信したストレージコントローラ200は、応答の内容を確認し、それに応じて次に実行するの処理を決定する。【０１８１】
応答の内容が「ロック不可」の場合、ストレージコントローラ200は再度処理S2103を実行する。これにより、データ復元処理中のデータ更新による不整合を回避できる。【０１８２】
応答の内容が、「ロック確保」の場合、処理S2106において、記憶デバイス35に対して、実施例1で説明したライト処理を実行する。ロック確保している間は、記憶デバイス35がデータ復元処理を実行することがないため、ライト処理を実行してもデータの不整合が発生することはない。ライト処理が完了すると、処理S2107において、ストレージコントローラ200は、記憶デバイス35にロック解放を指示する。ロック解放の指示を受信した、記憶デバイス35は、ロックしていたデバイスLBAのロックを解放する。【０１８３】
応答の内容が、「データ復元済み」の場合、処理S2108において、実施例1で説明したライト処理を実行する。【０１８４】
以上の処理により、リビルド中にライト処理が発生してもデータの整合性を保ってデータ及びパリティの更新を行うことができる。【０１８５】
次にリビルド中にライト処理を実行するための2つ目の処理を説明する。ここでは、ストレージコントローラ200が記憶デバイス35にロック確保を指示する代わりに、ライト処理の対象となるデバイスLBAのデータを優先的に復元するように指示する。この指示を受けた記憶デバイス35のデバイスコントローラ310は、指示されたデバイスLBAについてデータ復元処理を実行する。データ復元が完了すると、デバイスコントローラ310は、データ復元完了したデバイスLBAをメモリ312に記録し、完了したことをストレージコントローラ200に通知する。この完了通知を受信したストレージコントローラは、実施例1で説明したライト処理を実行する。この処理でもリビルド中にデータの整合性を保ってデータ及びパリティを更新することができる。
【符号の説明】
【０１８６】
10: ホスト計算機
20: ストレージ装置
200: ストレージコントローラ
31〜34: 記憶デバイス
80: サーバ
【図１】
2016194095.tif 000003
【図２】
2016194095.tif 000004
【図３】
2016194095.tif 000005
【図４】
2016194095.tif 000006
【図５】
2016194095.tif 000007
【図６】
2016194095.tif 000008
【図７】
2016194095.tif 000009
【図８】
2016194095.tif 000010
【図９】
2016194095.tif 000011
【図１０】
2016194095.tif 000012
【図１１】
2016194095.tif 000013
【図１２−１】
2016194095.tif 000014
【図１２−２】
2016194095.tif 000015
【図１３−１】
2016194095.tif 000016
【図１３−２】
2016194095.tif 000017
【図１４】
2016194095.tif 000018
【図１５】
2016194095.tif 000019
【図１６】
2016194095.tif 000020
【図１７】
2016194095.tif 000021
【図１８】
2016194095.tif 000022
【図１９】
2016194095.tif 000023
【図２０−１】
2016194095.tif 000024
【図２０−２】
2016194095.tif 000025
【図２１】
2016194095.tif 000026
【図２２】
2016194095.tif 000027
【手続補正書】
【提出日】平成29年3月14日(2017.3.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＲＡＩＤグループを構成し、１つのバスに接続され、相互に通信を行う複数の記憶デバイスを備え、
前記複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有し、
前記複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含み、
前記第一記憶デバイスの第一デバイスコントローラは、
前記旧データと、前記旧データを更新する新データと、に基づいて中間パリティを生成し、前記旧データに対応する前記旧パリティを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記中間パリティを送信し、
前記第二記憶デバイスの第二デバイスコントローラは、前記中間パリティと前記旧パリティに基づいて新パリティを生成し、
前記複数の記憶デバイスそれぞれのデバイスコントローラは、
ＲＡＩＤ管理情報を受信し、
前記ＲＡＩＤ管理情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、複数のデータ及び前記複数のデータから生成されるパリティを含むストライプに含まれるデータの数及びパリティの数、前記ストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含み、
前記第一デバイスコントローラは、
前記ＲＡＩＤ管理情報に基づいて前記旧パリティを格納している前記第二記憶デバイスを特定し、前記第二記憶デバイスの前記旧パリティに対応するデバイスＬＢＡを指定して、前記中間パリティと前記旧パリティに基づく前記新パリティの生成指示を送信する
ことを特徴とする情報処理システム。
【請求項２】
前記第一デバイスコントローラは、
前記新データを受信した後、前記旧データ及び前記新データを読み出し可能な状態に維持する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記第一デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧データを破棄する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記第二デバイスコントローラは、
前記新パリティを生成した後、前記旧パリティ及び前記新パリティを読み出し可能な状態に維持する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項５】
前記第二デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧パリティを破棄する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項６】
前記第二デバイスコントローラは、
複数の旧データをそれぞれ更新する複数の新データを受信すると、前記複数のデータに基づいて新パリティを生成し、
前記複数の新データのそれぞれを前記ＲＡＩＤグループに含まれる他の複数の記憶デバイスのそれぞれに転送する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項７】
それぞれがデバイスコントローラと、データを格納する記憶媒体と、を有し、相互に通信を行う複数の記憶デバイスと、
前記複数の記憶デバイスとバスで接続され、前記複数の記憶デバイスをＲＡＩＤグループとして制御するストレージコントローラと、
を備え、
前記複数の記憶デバイスは、旧データを格納する第一記憶デバイスと、前記旧データに対応する旧パリティを格納する第二記憶デバイスと、を含み、
前記ストレージコントローラは、前記旧データを更新する新データを前記第一記憶デバイスに送信し、
前記第一記憶デバイスの第一デバイスコントローラは、
前記旧データと、前記新データと、に基づいて中間パリティを生成し、前記旧データに対応する前記旧パリティを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記中間パリティを送信し、
前記第二記憶デバイスの第二デバイスコントローラは、前記中間パリティと前記旧パリティに基づいて新パリティを生成し、
記複数の記憶デバイスそれぞれのデバイスコントローラは、
ＲＡＩＤ管理情報を受信し、
前記ＲＡＩＤ管理情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、複数のデータ及び前記複数のデータから生成されるパリティを含むストライプに含まれるデータの数及びパリティの数、前記ストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含み、
前記第一デバイスコントローラは、
前記ＲＡＩＤ管理情報に基づいて前記旧パリティを格納している前記第二記憶デバイスを特定し、前記第二記憶デバイスの前記旧パリティに対応するデバイスＬＢＡを指定して、前記中間パリティと前記旧パリティに基づく前記新パリティの生成を指示するパリティ更新コマンドを送信する
ことを特徴とするストレージ装置。
【請求項８】
前記ストレージコントローラは、前記新データに対応する新パリティの更新を指示するパリティライトコマンドを前記第一記憶デバイスに送信する
ことを特徴とする請求項７に記載のストレージ装置。
【請求項９】
前記第一記憶デバイスは、
前記パリティライトコマンドを受信すると、前記第二記憶デバイスに前記パリティ更新コマンドを送信し、
前記第二記憶デバイスから前記パリティ更新コマンドに対する完了応答を受信すると、前記ストレージコントローラに前記パリティライトコマンドに対する完了応答を送信する
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージコントローラは、
前記第一記憶デバイスから前記パリティライトコマンドに対する完了応答を受信すると、
前記第一記憶デバイス及び前記第二記憶デバイスに前記新パリティの更新完了を通知するコミットコマンドを送信する
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１１】
前記第一デバイスコントローラは、前記第二記憶デバイスに前記パリティ更新コマンドを送信した後、所定時間を経過しても前記第二記憶デバイスからの完了応答を受信しない場合、前記ストレージコントローラにタイムアウトの発生を通知する
ことを特徴とする請求項１０に記載のストレージ装置。
【請求項１２】
前記ストレージコントローラは、出力画面を有する管理計算機に接続されており、前記タイムアウトの発生の通知を受信した場合、前記管理計算機の出力画面に前記第一記憶デバイスと前記第二記憶デバイス間の前記タイムアウトの発生状況を表示させる
ことを特徴とする請求項１１に記載のストレージ装置。
【請求項１３】
デバイスコントローラと、旧データを格納する記憶媒体と、を有する記憶デバイスであって、
前記デバイスコントローラは、
複数の他の記憶デバイスと通信を行うように接続され、前記記憶デバイス及び前記複数の他の記憶デバイスがＲＡＩＤグループとして制御されている場合に、
前記旧データと、前記旧データを更新する新データと、に基づいて中間パリティを生成し、前記複数の他の記憶デバイスのうち前記旧データに対応する旧パリティを格納している特定記憶デバイスを指定して前記中間パリティを転送し、前記特定記憶デバイスに前記中間パリティと前記旧データに基づく新パリティの生成指示を送信し、
前記デバイスコントローラは、
ＲＡＩＤ管理情報を受信し、
前記ＲＡＩＤ管理情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、複数のデータ及び前記複数のデータから生成されるパリティを含むストライプに含まれるデータの数及びパリティの数、前記ストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含み、
前記デバイスコントローラは、
前記ＲＡＩＤ管理情報に基づいて前記旧パリティを格納している前記特定記憶デバイスを特定し、前記特定記憶デバイスの前記旧パリティに対応するデバイスＬＢＡを指定して、前記中間パリティと前記旧パリティに基づく前記新パリティの生成指示を送信する
ことを特徴とする記憶デバイス。
【請求項１４】
前記デバイスコントローラは、
前記新データを受信した後、前記旧データ及び前記新データを読み出し可能な状態に維持する
ことを特徴とする請求項１３に記載の記憶デバイス。
【請求項１５】
前記デバイスコントローラは、
前記新パリティの更新完了を通知するコミットコマンドを受信した後に、前記旧データを破棄する
ことを特徴とする請求項１４に記載の記憶デバイス。
【請求項１６】
ＲＡＩＤグループを構成し、１つのバスに接続され、相互に通信を行う複数の記憶デバイスを備え、
前記複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有し、
前記複数の記憶デバイスは、第一旧データを格納する第一記憶デバイスと、前記第一旧データに対応する、前記第一旧データと同一のデータである第二旧データを格納する第二記憶デバイスと、を含み、
前記第一記憶デバイスの第一デバイスコントローラは、
前記第一旧データが第一新データに更新された場合、前記データに対応する前記第二旧データを格納している前記第二記憶デバイスを指定して、前記第二記憶デバイスに前記第一新データを送信し、
前記複数の記憶デバイスそれぞれのデバイスコントローラは、
ＲＡＩＤ管理情報を受信し、
前記ＲＡＩＤ管理情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、複数のデータを含むストライプに含まれるデータの数、前記ストライプに含まれるデータの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別するデバイスＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の情報を含み、
前記第一デバイスコントローラは、
前記ＲＡＩＤ管理情報に基づいて前記第二旧データを格納している前記第二記憶デバイスを特定し、前記第二記憶デバイスの前記第二旧データに対応するデバイスＬＢＡを指定して、前記第一新データを送信する
ことを特徴とする情報処理システム。
【請求項１７】
前記第一デバイスコントローラは、
前記第一新データを受信した後、前記第一旧データ及び前記第一新データを読み出し可能な状態に維持する
ことを特徴とする請求項１６に記載の情報処理システム。
【請求項１８】
前記第一デバイスコントローラは、
前記第一新データの前記第二記憶デバイスへの格納完了を通知するコミットコマンドを受信した後に、前記第一旧データを破棄する
ことを特徴とする請求項１７に記載の情報処理システム。
【国際調査報告】
2016194095.tif 000028
2016194095.tif 000029
2016194095.tif 000030
2016194095.tif 000031
2016194095.tif 000032
2016194095.tif 000033