(57)【特許請求の範囲】
【請求項１】
第１データコントローラと第２データコントローラとを有するストレージ装置であって、
前記第１データコントローラは、
外部から入力されたデータ及び前記第２データコントローラから送信されたデータを記憶する第１記憶部と、
前記第１データコントローラのデータの伝送経路と前記第２データコントローラのデータの伝送経路とを接続する第１バス接続部と、
前記第１バス接続部を介して前記第１記憶部に記憶された外部から入力されたデータを前記第２データコントローラへ送信するデータ送信部と、
前記第１バス接続部のデータの送信における障害を検出し、送信時に障害を発生させたデータを前記データ送信部に再送信させる第１障害検出部とを備え、
前記第２データコントローラは、
外部から入力されたデータ及び前記第１データコントローラから送信されたデータを記憶する第２記憶部と、
前記第１データコントローラのデータの伝送経路と前記第２データコントローラのデータの伝送経路とを接続する第２バス接続部と、
前記第２バス接続部を介して前記第２記憶部に記憶された外部から入力されたデータを前記第１データコントローラへ送信する第２データ送信部と、
前記第２バス接続部を介して前記データ送信部により送信されたデータを取得し、前記第２記憶部に書き込むデータ書込部と、
前記第２バス接続部及び前記データ書込部における障害を検出し、検出した前記障害を発生させたデータの送信元を特定し、特定した前記送信元が前記第１データコントローラか否かを判定する第２障害検出部と、
前記送信元が前記第１データコントローラの場合、前記第２データ送信部から前記第１データコントローラへのデータ送信を停止させ、データが前記データ送信部から再送信されるまで待機させ、再送信されてくるデータを受信して書き込むように前記第２バス接続部及び前記データ書込部を制御する制御部とを備えた
ことを特徴とするストレージ装置。
【請求項２】
前記ストレージ装置はディスク装置をさらに備え、
前記第１データコントローラは、前記ディスク装置にデータを書き込む書込部と、
前記データ送信部によるデータの再送信においても前記第１障害検出部により障害の発生が検出された場合、送信時に障害を発生させたデータを前記ディスク装置に書き込ませるよう前記書込部を制御する書込制御部をさらに備え、
前記第２データコントローラは、前記ディスク装置に記憶されているデータを読み出し前記第２記憶部に記憶させる読出部をさらに備え、
前記制御部は、前記データ送信部からデータが再送信されたときに、前記第２バス接続部及び前記データ書込部において前記第１データコントローラを送信元とするデータによる障害が発生したか否かを判定し、障害が発生している場合には、前記ディスク装置に記憶されている前記書込部が書き込んだデータを読み出し前記第２記憶部に書き込むよう前記読出部を制御する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第１データコントローラは、前記第１バス接続部と前記第２バス接続部との間の伝送経路よりも転送速度の遅い低速伝送経路を用いて前記第２データコントローラにデータを送信する低速送信部をさらに備え、
前記第２データコントローラは、前記低速伝送経路を介して前記低速送信部により送信されたデータを受信する低速受信部をさらに備え、
前記第１障害検出部は、前記第１バス接続部のデータの送信における障害の発生を検出すると、送信時に障害を発生させたデータのサイズが所定値以下か否かを判定し、前記所定値以下の場合には前記低速送信部にデータを送信させ、前記所定値より大きい場合には送信時に障害を発生させたデータを前記データ送信部に再送信させ、
前記制御部は、送信時に障害を発生させたデータを前記低速受信部が受信している場合には該データを前記第２記憶部に記憶させる
ことを特徴とする請求項１又は請求項２に記載のストレージ装置。 
【請求項４】
前記第２データコントローラは、第２バス接続部を介して前記第２記憶部に記憶されている外部から入力されたデータを前記第１データコントローラへ送信する送信部をさらに備え、
前記制御部は、前記第２バス接続部及び前記データ書込部において発生した障害が前記第１データコントローラによるものの場合、前記送信部のデータ送信を禁止する
ことを特徴とする請求項１〜請求項３のいずれか一つに記載のストレージ装置。
【請求項５】
第１データコントローラと第２データコントローラとを有するストレージ装置の制御方法であって、
前記第１データコントローラは、外部から入力されたデータ及び前記第２データコントローラから送信されたデータを前記第１データコントローラのメモリに記憶し、
前記第１データコントローラは、前記第１データコントローラのメモリに記憶された外部から入力されたデータを読み出し、前記第１データコントローラのＰＣＩｅブリッジを介して前記第２データコントローラに送信し、
前記第１データコントローラは、前記データの送信における前記第１データコントローラのＰＣＩｅブリッジの障害を検出し、
前記第２データコントローラは、前記第２データコントローラのＰＣＩｅブリッジを介して前記第１データコントローラから送信されたデータを受信し、
前記第２データコントローラは、受信したデータ及び外部から入力されたデータを前記第２データコントローラのメモリに書き込み、
前記第２データコントローラは、  前記第２データコントローラのメモリに記憶された外部から入力されたデータを読み出し、前記第２データコントローラのＰＣＩｅブリッジを介して前記第１データコントローラに送信し、
前記第２データコントローラは、受信したデータをメモリに書き込むときに、前記第２データコントローラのメモリコントローラ及びＰＣＩｅブリッジで障害が発生した場合、検出した前記障害を発生させたデータの送信元を特定し、特定した前記送信元が前記第１データコントローラか否かを判定し、
前記第１データコントローラ及び前記第２データコントローラにおいて障害が検出され、且つ前記送信元が前記第１データコントローラの場合、前記第２データコントローラは、前記第１データコントローラへのデータ送信を停止し、前記第１データコントローラは、送信時に障害を発生させたデータを前記第１データコントローラのＰＣＩｅブリッジを介して再送信し、前記第２データコントローラは、データが前記第１データコントローラから再送信されるまで待機し、前記第１データコントローラのＰＣＩｅブリッジから再送信されてくるデータを前記第２データコントローラのＰＣＩｅブリッジを介して受信する
ことを特徴とするストレージ装置の制御方法。   
【請求項６】
前記制御部は、前記送信元が前記第１データコントローラ以外の場合又は所定の障害以外の場合、前記第２データコントローラの動作を停止することを特徴とする請求項１〜４のいずれか一つに記載のストレージ装置。
【請求項７】
前記第１データコントローラは、
不揮発性の第３記憶部と、
前記第１記憶部のデータを第３記憶に移動させるデータ移動部とをさらに備え、
前記制御部は、前記データ送信部からデータが再送信されたときに、前記第２バス接続部及び前記データ書込部において前記第１データコントローラを送信元とするデータによる障害が発生したか否かを判定し、障害が発生している場合、前記データ移動部に前記第１記憶部のデータを前記第３記憶部に移動させ、前記第１データコントローラ及び前記第２データコントローラを再起動させ、再起動した前記第１データコントローラの前記書込部に前記第３記憶部が格納するデータを前記ディスク装置へ書き込ませ、再起動した前記第２データコントローラの前記読出部に前記ディスク装置が格納するデータを読み出させて前記第２記憶部に書き込ませる
ことを特徴とする請求項２に記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置の制御方法に関する。
【背景技術】
【０００２】
ホストから送信されたデータを記憶するストレージ装置は、受信したデータをハードディスクに書き込むためのコントローラモジュール（ＣＭ：Controller  Module、以下では「ＣＭ」と呼ぶこともある。）を有している。このＣＭは、揮発性のメモリを有している。そして、ＣＭは、処理の高速化のため、受信データを書き込む際に、一旦自己のメモリにデータを蓄積した後、メモリ上のデータをハードディスクに書き込むことを行っている。
【０００３】
近年、信頼性の向上の要求を受けて、ストレージ装置では、ＣＭが故障した場合にも処理を継続できるように、ＣＭを複数設け、それぞれのＣＭを相互に接続し、各ＣＭのメモリ上のデータの二重化を行っている。
【０００４】
この二重化において、一方のＣＭで発生した異常は二重化されている他方のＣＭ内部までは波及しないと考えられていた。そこで、ＣＭに設けられているデバイスの異常情報から故障が発生しているＣＭを特定し、そのＣＭをダウンさせるなどの切り離し処理を行っていた。
【０００５】
しかし、発生した異常の種類によってはＣＭの内部まで異常が波及する場合があることが明らかになってきた。この場合、故障が発生しているＣＭだけでなく、故障が発生していない側のＣＭにおいても異常が発生していると判定されることになり、両方のＣＭ共にダウンさせてしまう問題があった。このような問題が発生する異常の種類としては、ＰＣＩｅ（Peripheral  Component  Interconnect  express）ブリッジの故障などがある。
【０００６】
そこで、ＰＣＩｅブリッジが故障した場合のストレージの動作を具体的に説明する。ここでは、ストレージ装置がＣＭ＃０及びＣＭ＃１という２つのＣＭを有している場合で説明する。
【０００７】
ＣＭ＃１のＰＣＩｅブリッジにて異常が発生する。この異常が発生する原因としては、例えばデータパリティエラーなどがある。そこで、ＣＭ＃１は、この異常情報から自己が故障していると判定し、自己をダウンする。
【０００８】
これに対して、ＣＭ＃０のＰＣＩｅブリッジにおいても異常が検出される。そして、ＣＭ＃０は、この異常情報からＣＭ＃１が異常と判定する。
【０００９】
ここで、ＣＭ＃０のＰＣＩｅブリッジを通過した異常データはメモリコントローラまで到達し、パリティエラーとなる。そして、ＣＭ＃０は、メモリコントローラにおけるパリティエラーによる異常を検出する。この場合、ＣＭ＃０は、メモリコントローラの故障と判定し、自己をダウンする。
【００１０】
さらに、ＣＭ＃０がダウンする前に、異常データを受けたメモリコントローラも異常データを止めることなくメモリに異常データを書き込んでしまう。このとき、メモリはＥＣＣ（Error  Check  and  Correct）保護されているが、メモリコントローラは異常データを基にＥＣＣを生成するため、書き込んだデータが異常であることの検出ができない状態となる。
【００１１】
この点、ストレージの耐障害性向上のために様々な技術が提案されている。例えば、ＣＭからディスクへの書き込みで異常が発生した場合に、故障ＣＭからディスクへのパスを再構築してデータの書き込みを完了させる従来技術がある。また、障害が発生した場合に故障箇所を判定する従来技術が提案されている。さらに、障害が発生した部位を特定し再起動させる従来技術が提案されている。また、アクセス性能を向上させるため、最適な経路を選択する従来技術が提案されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００６−１０７０５３号公報
【特許文献２】特開２０００−１８１８８７号公報
【特許文献３】特開２００９−２６６１１９号公報
【特許文献４】特開２００７−２９３４４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、従来の技術では、パリティエラーなどによる故障発生の場合には、故障が発生していない側のＣＭにも異常が波及してしまうため、実際には故障が発生していないＣＭでも故障が発生していると判定されてしまう。例えば、ディスクへのパスを再構築する従来技術では、ディスクへのアクセスは確保されるが、メモリへの書き込み時にエラーが発生し、正常なＣＭのメモリにエラーが書き込まれてしまった場合には、対処することは困難である。また、障害箇所の特定や障害部位の再起動の従来技術でも、書き込み先のＣＭへの異常の波及の影響を抑えることは困難である。さらに、アクセス性能の向上のために最適な経路を選択する技術でも、エラー発生時の動作は考慮されておらず、書き込み先のＣＭへの異常の波及の影響を抑えることは困難である。
【００１４】
開示の技術は、上記に鑑みてなされたものであって、データ受信側のＣＭに波及する異常が発生しても、データ受信側のＣＭの動作を継続させるとともに、メモリに異常データが書き込まれたままになる状態を回避するストレージ装置及びストレージ装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本願の開示するストレージ装置及びストレージ装置の制御方法は、一つの態様において、第１データコントローラと第２データコントローラとを有する。そして、前記第１データコントローラは、外部から入力されたデータ及び前記第２データコントローラから送信されたデータを記憶する第１記憶部と、前記第１データコントローラのデータの伝送経路と前記第２データコントローラのデータの伝送経路とを接続する第１バス接続部と、前記第１バス接続部を介して前記第１記憶部に記憶された外部から入力されたデータを前記第２データコントローラへ送信するデータ送信部と、前記第１バス接続部のデータの送信における障害を検出し、送信時に障害を発生させたデータを前記データ送信部に再送信させる第１障害検出部とを備える。そして、前記第２データコントローラは、外部から入力されたデータ及び前記第１データコントローラから送信されたデータを記憶する第２記憶部と、前記第１データコントローラのデータの伝送経路と前記第２データコントローラのデータの伝送経路とを接続する第２バス接続部と、前記第２バス接続部を介して前記第２記憶部に記憶された外部から入力されたデータを前記第１データコントローラへ送信する第２データ送信部と、前記第２バス接続部を介して前記データ送信部により送信されたデータを取得し、前記第２記憶部に書き込むデータ書込部と、前記第２バス接続部及び前記データ書込部における障害を検出し、検出した前記障害を発生させたデータの送信元を特定し、特定した前記送信元が前記第１データコントローラか否かを判定する第２障害検出部と、前記送信元が前記第１データコントローラの場合、前記第２データ送信部から前記第１データコントローラへのデータ送信を停止させ、データが前記データ送信部から再送信されるまで待機させ、前記データ送信部から再送信されてくるデータを受信するよう前記第２バス接続部及び前記データ書込部を制御する制御部とを備える。
【発明の効果】
【００１６】
本願の開示するストレージ装置及びストレージ装置の制御方法の一つの態様によれば、データ受信側のＣＭに波及する異常が発生しても、データ受信側のＣＭの動作を継続させることができるという効果を奏する。さらに、メモリに異常データが書き込まれたままになる状態を回避することができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係るコントローラモジュールのブロック図である。
【図２】図２は、ストレージ装置のハードウェアの全体構成を示すハードウェア構成図である。
【図３】図３は、実施例１に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【図４】図４は、実施例２に係るコントローラモジュールのブロック図である。
【図５】図５は、実施例２に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【図６】図６は、実施例２の変形例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【図７】図７は、実施例３に係るコントローラモジュールのブロック図である。
【図８】図８は、実施例３に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示するストレージ装置及びストレージ装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージ装置及びストレージ装置の制御方法が限定されるものではない。
【実施例１】
【００１９】
図１は、本実施例に係るストレージ装置に配置されたコントローラモジュール（ＣＭ）のブロック図である。図１に示すように、ＣＭ１は、障害検出部１１、制御部１２、データ書込部１３、バス接続部１４及び揮発性記憶部１５を有している。また、ＣＭ２は、障害検出部２１、制御部２２、データ送信部２３、バス接続部２４及び揮発性記憶部２５を有している。ここで、本実施例では、バス接続部１４及びバス接続部２４は、ＰＣＩｅブリッジにあたるので、以下では、ＰＣＩｅブリッジ１４及びＰＣＩｅブリッジ２４と言う。また、本実施例では揮発性記憶部１５及び揮発性記憶部２５は、メモリにあたるので、以下では、メモリ１５及びメモリ２５という。この、ＣＭ１が「第２データコントローラ」の一例にあたり、ＣＭ２が「第１データコントローラ」の一例にあたる。また、揮発性記憶部２５が「第１記憶部」の一例にあたり、揮発性記憶部１５が「第２記憶部」の一例にあたる。
【００２０】
また、ＣＭ２はサーバなどのホストコンピュータ（以下では、単に「ホスト」と言う。）と接続しており、ホストからのデータ及びそのデータの書き込み命令を受信する。そして、ＣＭ２は、ホストからのデータの書き込み命令を受信すると、メモリ２５にデータを一時的に格納する。そして、ＣＭ２は、メモリ２５に蓄積しているデータをハードディスクに書き込む。これらのストレージ装置の全体的な動作については後で詳細に説明する。このとき、ＣＭ２及びＣＭ１はメモリ２５に格納されているデータをメモリ１５にコピーすることで、データの二重化を行う。以下では、このデータの二重化時のＣＭ１及びＣＭ２の動作について説明する。
【００２１】
以下の説明では、ホストから送信されたデータがメモリ２５に既に格納されている場合で説明する。また、以下の説明ではデータのパリティエラーが起こった場合を例に説明する。ここで、以下の説明では、発生するエラーとしてパリティエラーを例に説明するが、検出するエラーは、データ受信側のＣＭの内部に異常が波及するエラーであれば特に制限は無い。例えば、このエラーの他の例としては、データの格納先のアドレスの異常や伝送路異常などでもよい。
【００２２】
データ送信部２３は、メモリ２５からデータを読み出す。そして、データ送信部２３は、ＰＣＩｅブリッジ２４に読み出したデータを送信する。また、データ送信部２３は、後述する障害検出部２１からデータの再送の命令を受けると、ＰＣＩｅブリッジ２４に向けて最後に送信したデータをメモリ２５から読み出す。そして、データ送信部２３は、読み出したデータをＰＣＩｅブリッジ２４へ再送信する。
【００２３】
ＰＣＩｅブリッジ２４は、後述するＰＣＩｅブリッジ１４とともにＣＭ１のバスとＣＭ２のバスとの間を繋ぎ、ＣＭ１とＣＭ２との間でデータの授受が行えるようにする。ＰＣＩｅブリッジ２４は、データ送信部２３からデータを受信する。そして、ＰＣＩｅブリッジ２４は、受信したデータのパリティチェックなどのデータのチェックを行う。そして、ＰＣＩｅブリッジ２４は、パリティチェックの結果を障害検出部２１へ出力する。さらに、ＣＭ１のＰＣＩｅブリッジ１４にデータを送信する。このとき、ＰＣＩｅブリッジ２４は、例えデータのパリティチェックの結果に異常があっても、データの送信を行う。このＰＣＩｅブリッジ２４が「第１バス接続部」の一例にあたる。
【００２４】
障害検出部２１は、ＰＣＩｅブリッジ２４において、パリティエラーなどを含む予め決められた種類のエラーなどの所定の異常が発生したか否かを判定する。例えば、障害検出部２１は、ＰＣＩｅブリッジ２４からパリティチェックの結果を取得する。そして、障害検出部２１は、パリティエラーが発生している場合、ＰＣＩｅブリッジ２４において、所定の異常が発生したと判定する。そして、障害検出部２１は、送信したデータを異常データと判定する。さらに、障害検出部２１は、ＰＣＩｅブリッジ２４で故障が発生したと判定する。そして、障害検出部２１は、異常が発生したデータの再送をデータ送信部２３に指示する。この障害検出部２１が「第１障害検出部」の一例にあたる。
【００２５】
制御部２２は、ＰＣＩｅブリッジ２４の障害の検出の通知を障害検出部２１から受ける。そして、データの再送信において障害検出部２１から障害の検出の通知を受けなければ、制御部２２は、データの再送信が正常に行われたと判定する。また、制御部２２は、データの再送信において障害検出部２１が障害を検出した回数をカウントし、カウントしている回数が所定回数に達した場合に、再送信が所定回数行われたと判定する。そして、制御部２２は、データ送信部２３によるデータの再送信において、正常に送信できた場合、もしくはデータ送信部２３がデータの再送信を所定回数行った場合、ＣＭ２をダウンさせる。
【００２６】
ＰＣＩｅブリッジ１４は、ＰＣＩｅブリッジ２４とともにＣＭ１のバスとＣＭ２のバスとの間を繋ぎ、ＣＭ１とＣＭ２との間でデータの授受が行えるようにする。ＰＣＩｅブリッジ１４は、ＰＣＩｅブリッジ２４からデータを受信する。また、ＰＣＩｅブリッジ１４は、データ送信部２３によって再送信されたデータをＰＣＩｅブリッジ２４から受信する。そして、ＰＣＩｅブリッジ１４は、受信したデータのパリティチェックを行う。そして、ＰＣＩｅブリッジ１４は、受信したデータをデータ書込部１３へ送信する。このとき、ＰＣＩｅブリッジ１４は、例えデータのパリティチェックの結果に異常があっても、データの送信を行う。このＰＣＩｅブリッジ１４が「第２バス接続部」の一例にあたる。
【００２７】
データ書込部１３は、データ送信部２３から送られてきたデータをＰＣＩｅブリッジ１４から受信する。また、データ書込部１３は、データ送信部２３によって再送信されたデータをＰＣＩｅブリッジ１４から受信する。そして、データ書込部１３は、受信したデータのパリティチェックを行う。そして、データ書込部１３は、受信したデータをメモリ１５に書き込む。このとき、データ書込部１３は、例えデータのパリティチェックの結果に異常があっても、データの書き込みを行う。
【００２８】
障害検出部１１は、パリティエラーなどを含む予め決められた種類のエラーを所定の異常として記憶している。そして、障害検出部１１は、ＰＣＩｅブリッジ１４及びデータ書込部１３において所定の異常が発生しているか否かを判定する。例えば、障害検出部１１は、ＰＣＩｅブリッジ１４及びデータ書込部１３からパリティチェックの結果を取得する。そして、障害検出部１１は、パリティチェックの結果に異常が有る場合、所定の異常が発生していると判定する。そして、障害検出部１１は、異常が発生したデータを異常データと判定する。そして、障害検出部１１は、異常発生の通知を制御部１２に通知する。この障害検出部１１が「第２障害検出部」の一例にあたる。
【００２９】
制御部１２は、異常データがＣＭ２から送られてきたのか否かを判定する。この判定方法の一例として、制御部１２は、異常データがＰＣＩｅブリッジ１４及びデータ書込部１３でパリティエラーを起こしていることから、ＰＣＩｅブリッジ１４と接続されているＣＭ２から異常データが送られてきたと判定することができる。また、他の例として、制御部１２は、異常データと判定されたデータをデータ書込部１３から取得し、その取得したデータのヘッダなどから送信元を調べることでそのデータがＣＭ２から送られてきたか否かを判定してもよい。
【００３０】
そして、制御部１２は、パリティチェックの結果に異常があるデータがＣＭ２から送られてきたと判定した場合、ＰＣＩｅブリッジ１４及びデータ書込部１３に対して異常が発生したデータが再送信されてくるまで待機するように命令する。これに対し、制御部１２は、異常データがＣＭ２から送られたデータでない場合や、障害検出部１１がパリティエラーなど所定の異常以外の異常を検出した場合には、ＣＭ１をダウンさせる。この制御部１２が「制御部」の一例にあたる。
【００３１】
図２は、ストレージ装置のハードウェアの全体構成を示すハードウェア構成図である。次に、図２を参照して、ストレージ装置全体の構成及び全体の動作の流れを説明する。図２に示すように、ストレージ装置は、ＣＭ１、ＣＭ２及びハードディスク３を有している。ここで、図２に示すように、ストレージ装置は、ハードディスクを複数本有しているが、ここではまとめてハードディスク３と呼ぶ。
【００３２】
ＣＭ１は、ＣＰＵ１０１、低速バスコントローラ１０２、ＰＣＩｅブリッジ１０３、ＤＭＡ（Direct  Memory  Access）コントローラ１０４、メモリコントローラ１０５、メモリ１０６及びＩ／Ｏコントローラ１０７を有している。また、ＣＭ２も同様に、ＣＰＵ２０１、低速バスコントローラ２０２、ＰＣＩｅブリッジ２０３、ＤＭＡコントローラ２０４、メモリコントローラ２０５、メモリ２０６及びＩ／Ｏコントローラ２０７を有している。さらに、図２には記載していないが、ＣＭ１及びＣＭ２のバスはホストと接続されている。
【００３３】
ストレージ装置におけるホストからのデータの書き込み及び読み出しの動作を説明する。ここで、ＣＭ１とＣＭ２は同じ動作を行うので、ＣＭ１を例に動作を説明する。
【００３４】
ＣＰＵ１０１は、ホストからのデータの書き込み命令を受けて、ホストから送られてきたデータをメモリ１０６に書き込むように、メモリコントローラ１０５に命令する。さらに、ＣＰＵ１０１は、メモリ１０６に蓄積されたデータをハードディスク３へ書込むようＩ／Ｏコントローラ１０７に命令する。また、ＣＰＵ１０１は、ホストからのデータの読み込み命令を受けて、Ｉ／Ｏコントローラ１０７に対し指定されたデータのハードディスク３からの読み出し及びホストへの送信を命令する。
【００３５】
メモリコントローラ１０５は、ＣＰＵ１０１からのデータ書き込み命令を受けて、ホストから受信したデータをメモリ１０６に書き込む。また、メモリコントローラ１０５は、Ｉ／Ｏコントローラ１０７にメモリ１０６に蓄積されているデータを送信する。
【００３６】
Ｉ／Ｏコントローラ１０７は、ＣＰＵ１０１からのデータ書き込み命令を受けて、メモリ１０６が蓄積しているデータをメモリコントローラ１０５から受信し、ハードディスク３にデータを書き込む。また、Ｉ／Ｏコントローラ１０７は、ＣＰＵ１０１からのデータ読出し命令を受けて、指定されたデータをハードディスク３から読み出す。
【００３７】
また、低速バスコントローラ１０２と低速バスコントローラ２０２とは、パス５で接続されている。ＣＰＵ１０１及びＣＰＵ２０１からの命令を受けて、低速バスコントローラ１０２及び低速バスコントローラ２０２は、ＣＰＵ１０１とＣＰＵ２０１との間の制御情報の授受を行っている。制御情報はサイズが小さいため、このパス５は、パス４と比較して遅い転送速度でよい。本実施例では、パス５は、数十ＫＢ／ｓｅｃの転送速度を有している。
【００３８】
次に、ＣＭ１及びＣＭ２におけるメモリ上のデータの二重化について説明する。ここでは、ＣＭ１のメモリ１０６のデータをＣＭ２のメモリ２０６にコピーし二重化する場合について説明する。
【００３９】
ＤＭＡコントローラ１０４は、メモリコントローラ１０５がメモリ１０６に書き込んだデータをメモリコントローラ１０５から受信する。そして、ＤＭＡコントローラ１０４は、ＣＭ２のメモリ２０６にデータを書き込むためにＰＣＩｅブリッジ１０３にデータを渡す。
【００４０】
ＰＣＩｅブリッジ１０３は、ＤＭＡコントローラ１０４から受信したデータをパス４を経由させてＣＭ２のＰＣＩｅブリッジ２０３に送信する。
【００４１】
パス４は、データ伝送用の高速パスである。例えば、本実施例では、パス４の転送速度は７００ＭＢ／ｓｅｃである。
【００４２】
ＰＣＩｅブリッジ２０３は、ＰＣＩｅブリッジ１０３からデータを受信する。
【００４３】
ＤＭＡコントローラ２０４は、ＰＣＩｅブリッジ１０３が受信したデータを取得し、取得したデータをメモリコントローラ２０５に渡し、さらにメモリコントローラ２０５に対してメモリ２０６へのデータの書き込みを指示する。
【００４４】
メモリコントローラ２０５は、ＤＭＡコントローラ２０４からのデータ書き込みの指示を受けて、メモリ２０６にデータを書き込む。
【００４５】
このように、一方のメモリに蓄積されたデータを他方のメモリに書き込むことで、一方のＣＭが故障した場合にも、他方のＣＭのメモリ上のデータが残る。
【００４６】
ＤＭＡコントローラ２０４及びメモリコントローラ２０５が、図１のデータ送信部２３の機能を有する。また、ＤＭＡコントローラ２０４が、図１の障害検出部２１の機能を有する。また、メモリ２０６が、図１の揮発性記憶部２５の機能を有する。また、ＰＣＩｅブリッジ２０３が、図１のバス接続部２４の機能を有する。また、ＣＰＵ２０１が、図１の制御部２２の機能を有する。
【００４７】
また、ＰＣＩｅブリッジ１０３が、図１のバス接続部１４の機能を有する。また、ＤＭＡコントローラ１０４及びメモリコントローラ１０５が、図１のデータ書込部１３の機能を有する。また、メモリ１０６が、図１の不揮発性記憶部１５の機能を有する。また、ＣＰＵ１０１が、図１の制御部１２及び障害検出部１１の機能を有する。
【００４８】
次に、図３を参照して、本実施例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理の流れについて説明する。図３は、実施例１に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。図３の縦軸は紙面の下に向かって時間が経過していることを表している。そして、各縦軸上の各処理は縦軸の上部に記載された各ＣＭが行う処理を表している。さらに、縦軸間を繋ぐ矢印は、矢印の方向に向けてデータが送信されることを表している。
【００４９】
ＣＭ２のデータ送信部２３は、ＰＣＩｅブリッジ２４を介してメモリ２５に記憶されているデータをＣＭ１に送信する。異常検出部２１は、ＰＣＩｅブリッジ２４からパリティチェックの結果を受信する。そして、異常検出部２１は、受信したパリティチェックの結果に異常があると判定し、ＰＣＩｅブリッジ２４の故障を検出する（ステップＳ１０１）。
【００５０】
パリティチェックの結果に異常がある異常データが、ＰＣＩｅブリッジ２４からＰＣＩｅブリッジ１４へ送信される（ステップＳ１０２）。
【００５１】
ＰＣＩｅブリッジ１４は、パリティチェックの結果に異常がある異常データを受信する（ステップＳ１０３）。このとき、ＰＣＩｅブリッジ１４は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００５２】
データ書込部１３は、パリティチェックの結果に異常がある異常データをＰＣＩｅブリッジ１４から受信する（ステップＳ１０４）。このとき、データ書込部１３は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００５３】
障害検出部１１は、受信したパリティチェックの結果から異常が発生していると判定し、制御部１２に通知する。制御部１２は、ＰＣＩｅブリッジ１４及びデータ書込部１３で発生した異常がＣＭ２による異常であると判定する（ステップＳ１０５）。
【００５４】
そして、制御部１２は、ＣＭ２から再送信されるデータを受信するまでＰＣＩｅブリッジ１４及びデータ書込部１３を待機させる（ステップＳ１０６）。
【００５５】
この間、ＣＭ２の故障検出部２１は、パリティの異常という異常の種別からリトライが必要であると判定する（ステップＳ１０７）。そして、データ転送部２３は、最後に送信したデータをＣＭ１に向けて再送信する（ステップＳ１０８）。
【００５６】
再送信データが、ＣＭ２からＣＭ１に向けて送信される（ステップＳ１０９）。このとき、データ送信部２３は、データのパリティチェックで異常が出なくなるまで、もしくは予め決められている所定回数までデータの再送信を行う。
【００５７】
ＣＭ１の制御部１２は、ＣＭ１の各部に通常処理を継続させる（ステップＳ１１０）。
【００５８】
また、ＣＭ２の制御部２２は、ＣＭ２をダウンさせる（ステップＳ１１１）。
【００５９】
以上に説明したように、本実施例に係るストレージ装置では、データを送信する側のＣＭのＰＣＩｅブリッジでパリティエラーなどの異常が発生した場合、その異常データによってデータ受信側のＣＭで異常が引き起こされても、データ受信側のＣＭをダウンさせない。さらに、パリティエラーなどが発生したデータを再送することで、データ受信側のＣＭのメモリに異常データが書き込まれたままになる状態の回避に寄与することができる。
【００６０】
（変形例）
次に、実施例１に係るストレージ装置の変形例について説明する。実施例１では、データにパリティの異常が発生した場合、単に異常が発生したデータの再送信を行っていたが、本変形例ではＣＭ１とＣＭ２との間のパスのデータ転送の負荷を軽減した後に、データの再送信を行う。
【００６１】
具体的には、図示していないが、本変形例に係るストレージ装置では、ＣＭ１もデータ送信部を有している。そして、ＣＭ１は、ホストからデータを受信し、受信したデータをメモリ１５に一時的に蓄積する。このＣＭ１のデータ送信部が「送信部」の一例にあたる。
【００６２】
ＣＭ１のデータ送信部は、メモリ１５に蓄積されているデータをＣＭ２のメモリ２５にコピーする。すなわち、本変形例では、ＣＭ１及びＣＭ２のいずれからも二重化用のデータが送られる。このデータ送信部の機能は、図２のＤＭＡコントローラ１０４及びメモリコントローラ１０５が有している。
【００６３】
この点、ＰＣＩｅブリッジ１４とＰＣＩｅブリッジ２４との間のパス（図２の「パス４」など）においてデータの転送負荷が高い場合、ＰＣＩｅブリッジ２４において異常が発生する確率が上がるおそれがある。そこで、本変形例の制御部１２は、パリティチェックの結果に異常があるデータがＣＭ２から送られてきたと判定した場合、ＣＭ１のデータ送信部によるＣＭ２のメモリ２５に対するデータのコピーを停止させる。すなわち、異常が発生したときの状態では、ＣＭ１及びＣＭ２の双方からデータが送信されていたためＣＭ１とＣＭ２との間のパスの負荷が高くなっていた。そこで、ＣＭ１からのデータの送信を停止することで、ＣＭ１とＣＭ２との間のパスの負荷を軽減することができる。
【００６４】
そして、ＣＭ１からのデータの送信が停止した後、ＣＭ２のデータ送信部２３は、異常が発生したデータを再送信する。
【００６５】
このようにすることで、パスのデータ転送の負荷が高いことが原因での異常の発生を回避することができ、データの再送信を正常に行える確率を高くすることができる。したがって、本変形例に係るストレージ装置によれば、データ受信側のＣＭのメモリに異常データが書き込まれたままになる状態の回避率を向上させることができる。
【実施例２】
【００６６】
図４は、実施例２に係るコントローラモジュールのブロック図である。本実施例に係るコントローラモジュールは、異常が発生したデータの再送が正常に行えなかった場合に、ハードディスク経由でそのデータをデータ受信側のメモリにコピーすることが実施例１と異なるものである。そこで、以下では、ハードディスク経由でのデータのコピーについて主に説明する。
【００６７】
本実施例に係るＣＭは図４に示すように、実施例１のＣＭに読出部１６及び書込部２６がさらに加えられている。ここで、図４において、図１と同様の符号を有する各部は特に説明の無い限り同様の機能を有するものとする。また、本実施例に係るストレージ装置のハードウェア構成は図２と同様である。
【００６８】
本実施例では読出部１６及び書込部２６はディスク装置３０に接続している。ここで、本実施例ではディスク装置３０は、図２のハードディスク３を有している。そこで、以下では、ディスク装置３０が有するハードディスク３へのデータの書き込こみ又は読み出しを、ディスク装置３０へのデータを書き込み又は呼び出しという。
【００６９】
ＣＭ２の制御部２２は、データの再送信において障害検出部２１が障害を検出した回数をカウントし、カウントしている回数が所定回数に達した場合に、異常が発生したデータの再送信が正常に行えなかったと判定する。そして、再送信が正常に行えなかったと判定すると、制御部２２は、送信時に異常が発生したデータのディスク装置３０への書き込みを書込部２６に指示する。そして、制御部２２は、書込部２６によるディスク装置３０へのデータの書き込みが終了すると、ＣＭ２をダウンさせる。この制御部２２が「書込制御部」の一例にあたる。
【００７０】
書込部２６は、送信時に異常が発生したデータのディスク装置３０への書き込みの指示を制御部２２から受ける。そして、書込部２６は、送信時に異常が発生したデータをメモリ２５から読み出す。そして、書込部２６は、メモリ２５から読み出したデータをディスク装置３０に書き込む。この書込部２６の機能は、図２におけるＩ／Ｏコントローラ２０７が有する。
【００７１】
ＣＭ１の制御部１２は、カウンタを有している。さらに、制御部１２は、データの再送失敗を判定するための閾値として所定値を記憶している。そして、制御部１２は、障害検出部１１からの異常発生の通知を受けると自己のカウンタをインクリメントする。そして、制御部１２は、カウンタが所定値に達するとデータの再送が失敗したと判定する。この制御部１２による、再送の失敗の判定は他の方法でも良い。例えば、制御部１２は、閾値として所定の時間を記憶しておき、障害検出部１１からの異常発生の通知後、所定の時間内に異常が発生したデータを正常に受信できなければ再送失敗と判定しても良い。さらに、制御部１２は、異常が発生したデータの識別情報を障害検出部１１から受信する。そして、制御部１２は、ＣＭ２がダウンするまで待機する。例えば、ＣＭ１とＣＭ２と起動している間は制御部１２と制御部２２との間で図２のパス５などを用いてハートビートを相互に送ることで、制御部１２は制御部２２からのハートビートが届かなくなった場合にＣＭ２がダウンしたと判定できる。また、再送失敗の他の検知方法として、制御部１２は、異常発生の通知を障害検出部１１から受けた後に、異常が発生したデータを正常に受信しない間にＣＭ２がダウンした場合に再送が失敗したと判定してもよい。
【００７２】
そして、制御部１２は、ＣＭ２がダウンすると、障害検出部１１から受信した異常が圧制したデータの識別情報を用いて、再送信が失敗したデータのディスク装置３０からの読み出し及びメモリ１５への格納を読出部１６に指示する。そして、制御部１２は、メモリ１５にデータが格納されると通常処理に戻る。
【００７３】
読出部１６は、再送信が失敗したデータのディスク装置３０からの読み出し及びメモリ１５への格納の指示を制御部１２から受ける。そして、読出部１６は、ディスク装置３０から再送信が失敗したデータを読み出す。そして、読出部１６は、ディスク装置３０から読み出したデータをメモリ１５へ格納する。この読出部１６の機能は、図２におけるＩ／Ｏコントローラ１０７が有する。
【００７４】
次に、図５を参照して、本実施例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理の流れについて説明する。図５は、実施例２に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【００７５】
ＣＭ２のデータ送信部２３は、ＰＣＩｅブリッジ２４を介してメモリ２５に記憶されているデータをＣＭ１に送信する。異常検出部２１は、ＰＣＩｅブリッジ２４からパリティチェックの結果を受信する。そして、異常検出部２１は、受信したパリティチェックの結果からパリティエラーを検出する。そして、異常検出部２１は、ＰＣＩｅブリッジ２４の故障を検出する（ステップＳ２０１）。
【００７６】
パリティエラーが発生している異常データが、ＰＣＩｅブリッジ２４からＰＣＩｅブリッジ１４へ送信される（ステップＳ２０２）。
【００７７】
ＰＣＩｅブリッジ１４は、パリティエラーが発生している異常データを受信する（ステップＳ２０３）。このとき、ＰＣＩｅブリッジ１４は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００７８】
データ書込部１３は、パリティエラーが発生している異常データをＰＣＩｅブリッジ１４から受信する（ステップＳ２０４）。このとき、データ書込部１３は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００７９】
障害検出部１１は、受信したパリティチェックの結果からパリティエラーを検出し、制御部１２に通知する。制御部１２は、ＰＣＩｅブリッジ１４及びデータ書込部１３で発生した異常がＣＭ２による異常であると判定する（ステップＳ２０５）。
【００８０】
そして、制御部１２は、ＣＭ２から再送信されるデータを受信するまでＰＣＩｅブリッジ１４及びデータ書込部１３を待機させる（ステップＳ２０６）。
【００８１】
この間、ＣＭ２の故障検出部２１は、パリティエラーという異常の種別からリトライが必要であると判定する（ステップＳ２０７）。そして、データ転送部２３は、最後に送信したデータをＣＭ１に向けて再送信する（ステップＳ２０８）。
【００８２】
再送信データが、ＣＭ２からＣＭ１に向けて送信される（ステップＳ２０９）。
【００８３】
制御部２２は、データ送信部２３によるデータの再送信が成功したか否かを判定する（ステップＳ２１０）。データの再送信が成功した場合（ステップＳ２１０肯定）、制御部２２は、ＣＭ２をダウンさせる（ステップＳ２１１）。
【００８４】
これに対して、データの再送信が失敗した場合（ステップＳ２１０否定）、制御部２２は、メモリ２５に格納されている再送信に失敗したデータをディスク装置３０に書き込むよう書込部２６へ指示する。書込部２６は、再送信に失敗したデータをメモリ２５から読み出し、読み出したデータをディスク装置３０に書き込む（ステップＳ２１２）。
【００８５】
制御部２２は、再送信に失敗したデータのディスク装置３０への書き込みが完了すると、ＣＭ２をダウンさせる（ステップＳ２１３）。
【００８６】
ＣＭ１の制御部１２は、データの再送信が成功したか否かを判定する（ステップＳ２１４）。データの再送信が失敗した場合（ステップＳ２１４否定）、制御部１２は、ＣＭ２がダウンするまで待機し、その後ＣＭ２のダウンを検出する（ステップＳ２１５）。
【００８７】
そして、制御部１２は、再送信に失敗したデータのディスク装置３０からの読み出し及びメモリ１５への書き込みを読出部１６に指示する。読出部１６は、指示を受けて、ディスク装置３０から再送信に失敗したデータを読み出し、読み出したデータをメモリ１５へ格納する（ステップＳ２１６）。
【００８８】
制御部１２は、データの再送信が成功した場合（ステップＳ２１４肯定）又はディスク装置３０に書き込まれた再送信に失敗したデータのメモリ１５への格納が完了した場合、通常処理を継続する（ステップＳ２１７）。
【００８９】
以上に説明したように、本実施例に係るストレージ装置は、ＤＭＡによるデータの再送信が失敗した場合でも、ハードディスク経由でデータをデータ受信側のＣＭのメモリに移すことができる。これにより、データ受信側のＣＭのメモリに異常データが書き込まれたままになる状態の回避率を向上させることができる。
【００９０】
（変形例）
次に、実施例２に係るストレージ装置の変形例について説明する。本変形例に係るストレージ装置は、ＣＭ１及びＣＭ２がいずれもダウンした場合にメモリの内容を維持しつつ再起動する機能を有している。そこで、本実施形態に係るストレージ装置は、この機能を用いてＣＭ１及びＣＭ２を再起動した後、再送信に失敗したデータをハードディスク経由でＣＭ１のメモリに移す。図６は、実施例２の変形例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。そこで、図６を参照して、本変形例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理の流れについて説明する。
【００９１】
ＣＭ２のデータ送信部２３は、ＰＣＩｅブリッジ２４を介してメモリ２５に記憶されているデータをＣＭ１に送信する。異常検出部２１は、ＰＣＩｅブリッジ２４からパリティチェックの結果を受信する。そして、異常検出部２１は、受信したパリティチェックの結果からパリティエラーを検出する。そして、異常検出部２１は、ＰＣＩｅブリッジ２４の故障を検出する（ステップＳ３０１）。
【００９２】
パリティエラーが発生している異常データが、ＰＣＩｅブリッジ２４からＰＣＩｅブリッジ１４へ送信される（ステップＳ３０２）。
【００９３】
ＰＣＩｅブリッジ１４は、パリティエラーが発生している異常データを受信する（ステップＳ３０３）。このとき、ＰＣＩｅブリッジ１４は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００９４】
データ書込部１３は、パリティエラーが発生している異常データをＰＣＩｅブリッジ１４から受信する（ステップＳ３０４）。このとき、データ書込部１３は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【００９５】
障害検出部１１は、受信したパリティチェックの結果からパリティエラーを検出し、制御部１２に通知する。制御部１２は、ＰＣＩｅブリッジ１４及びデータ書込部１３で発生した異常がＣＭ２による異常であると判定する（ステップＳ３０５）。
【００９６】
そして、制御部１２は、ＣＭ２から再送信されるデータを受信するまでＰＣＩｅブリッジ１４及びデータ書込部１３を待機させる（ステップＳ３０６）。
【００９７】
この間、ＣＭ２の故障検出部２１は、パリティエラーという異常の種別からリトライが必要であると判定する（ステップＳ３０７）。そして、データ転送部２３は、最後に送信したデータをＣＭ１に向けて再送信する（ステップＳ３０８）。
【００９８】
再送信データが、ＣＭ２からＣＭ１に向けて送信される（ステップＳ３０９）。
【００９９】
制御部２２は、データ送信部２３によるデータの再送信が成功したか否かを判定する（ステップＳ３１０）。データの再送信が成功した場合（ステップＳ３１０肯定）、制御部２２は、ＣＭ２をダウンさせる（ステップＳ３１１）。
【０１００】
これに対して、データの再送信が失敗した場合（ステップＳ３１０否定）、制御部２２は、ＣＭ１に対してダウンを指示する（ステップＳ３１３）。
【０１０１】
ダウン指示が、ＣＭ１に送信される（ステップＳ３１４）。
【０１０２】
制御部２２は、ダウン指示の送信後、ＣＭ２をダウンさせる（ステップＳ３１５）。この場合、制御部２２は、不揮発性メモリなどのバックアップ用のデバイスにメモリ２５上のデータを移動した後ＣＭ２をダウンさせる。
【０１０３】
これに対して、ＣＭ１の制御部１２も、データの再送信が成功したか否かを判定する（ステップＳ３１２）。データの再送信が失敗した場合（ステップＳ３１２否定）、制御部１２は、ＣＭ２からのダウン指示を受けてＣＭ１をダウンさせる（ステップＳ３１６）。この場合も、制御部１２は、不揮発性メモリなどのバックアップ用のデバイスにメモリ１５上のデータを移動した後ＣＭ１をダウンさせる。
【０１０４】
ストレージ装置は、ＣＭ１及びＣＭ２のダウンが完了後、両方を再起動させる（ステップＳ３１７）。ここで、ＣＭ１及びＣＭ２の双方のダウンの監視並びに再起動は、例えば、後からダウンした側のＣＭの制御部に実行させることができる。また、ＣＭ１及びＣＭ２の双方のダウンを監視する監視制御部をさらに設け、その監視制御部が再起動を行っても良い。また、この起動においては、ＣＭ１及びＣＭ２共に、起動後バックアップ用のデバイスに保持しているデータを自己が有するメモリ上に展開する。
【０１０５】
ＣＭ２の制御部２２は、再起動後に各種ログのチェックなどにより再送信に失敗してダウンしたことを検出する（ステップＳ３１８）。そして、制御部２２は、メモリ２５に格納されている再送信に失敗したデータをディスク装置３０に書き込むよう書込部２６へ指示する。書込部２６は、再送信に失敗したデータをメモリ２５から読み出し、読み出したデータをディスク装置３０に書き込む（ステップＳ３１９）。
【０１０６】
制御部２２は、再送信に失敗したデータのディスク装置３０への書き込みが完了すると、ＣＭ２をダウンさせる（ステップＳ３２０）。
【０１０７】
制御部１２は、再起動後に各種ログのチェックなどを行い、ＣＭ２からの指示をうけてダウンしたことを検出し、ＣＭ２のダウンを検出するまで待機する（ステップＳ３２１）。その後、制御部１２は、ＣＭ２のダウンを検出する（ステップＳ３２２）。
【０１０８】
そして、制御部１２は、再送信に失敗したデータのディスク装置３０からの読み出し及びメモリ１５への書き込みを読出部１６に指示する。読出部１６は、指示を受けて、ディスク装置３０から再送信に失敗したデータを読み出し、読み出したデータをメモリ１５へ格納する（ステップＳ３２３）。
【０１０９】
制御部１２は、データの再送信が成功した場合（ステップＳ３１２肯定）又はディスク装置３０に書き込まれた再送信に失敗したデータのメモリ１５への格納が完了した場合、通常処理を継続する（ステップＳ３２４）。
【０１１０】
以上に説明したように、本変形例に係るストレージ装置は、両方のＣＭがダウンした場合にメモリの情報を保持したまま起動するという機能を用いてハードディスク経由のデータの移行を行うことができる。
【実施例３】
【０１１１】
図７は、実施例３に係るコントローラモジュールのブロック図である。本実施例に係るコントローラモジュールは、異常が発生したデータの再送が正常に行えなかった場合に、ＰＣＩｅブリッジ間のパスよりも転送速度が遅い伝送経路を用いてデータを送信することが実施例２と異なるものである。そこで、以下では、転送速度が遅い伝送経路を用いたデータの送信について主に説明する。
【０１１２】
本実施例に係るＣＭは図７に示すように、実施例２のＣＭに低速受信部１７及び低速送信部２７がさらに加えられている。ここで、図７において、図４と同様の符号を有する各部は特に説明の無い限り同様の機能を有するものとする。また、本実施例に係るストレージ装置のハードウェア構成は図２と同様である。
【０１１３】
そして、図２における低速バスコントローラ２０２が低速送信部２７の機能を有し、低速バスコントローラ１０２が低速受信部１７の機能を有する。そして、低速バスコントローラ１０２と低速バスコントローラ２０２とを結んでいるパス５が、転送速度が遅い伝送経路にあたる。上述したように、本実施例ではパス５は、数十ＫＢ／ｓｅｃの転送速度を有している。この転送速度が遅い伝送路が「低速伝送経路」の一例にあたる。
【０１１４】
低速送信部２７は、転送速度が遅い伝送経路を用いて低速受信部１７にデータを送信する。
【０１１５】
制御部２２は、障害検出部２１から障害の検出の通知を受ける。
【０１１６】
ＣＭ２の制御部２２は、障害検出部２１から障害の検出の通知を受けた場合、データ送信部２３から異常が発生したデータのサイズを取得する。制御部２２は、低速伝送路を用いた送信の可否を判断する閾値として所定サイズを記憶している。本実施例では、制御部２２は、所定サイズを１ＫＢと記憶している。そして、制御部２２は、異常が発生したデータのサイズが１ＫＢ以下か否かを判定する。そして、１ＫＢ以下の場合、制御部２２は、低速送信部２７を介して異常が発生したデータを送信することをデータ送信部２３に指示する。そして、制御部２２は、転送速度が遅い伝送経路を用いたデータの送信が完了すると、ＣＭ２をダウンさせる。ここで、本実施例では、バス５が数十ＫＢ／ｓｅｃの転送速度を有しているため、パス５で十分に転送できるサイズとして閾値を１ＫＢ／ｓｅｃと設定したが、この閾値は転送速度が遅い伝送経路の実際の転送速度に応じて決めることが好ましい。
【０１１７】
これに対して、異常が発生したデータのサイズが１ＫＢよりも大きい場合、制御部２２は、データ送信部２３に異常が発生したデータの再送信を指示する。そして、データの再送信において障害検出部２１から障害の検出の通知を受けなければ、制御部２２は、パリティエラーが発生せずに送信できたと判定する。その後、制御部２２は、ＣＭ２をダウンさせる。また、データの再送信において障害検出部２１が障害を検出した回数が所定回数に達した場合、制御部２２は、異常が発生したデータのディスク装置３０への書き込みを書込部２６に指示する。そして、制御部２２は、書込部２６によるディスク装置３０へのデータの書き込みが終了すると、ＣＭ２をダウンさせる。
【０１１８】
データ送信部２３は、低速送信部２７を介して異常が発生したデータを送信する指示を制御部２２から受けて、異常が発生したデータを低速送信部２７に送信する。また、異常が発生したデータの再送信の指示を受けた場合、データ送信部２３は、異常が発生したデータを、ＰＣＩｅブリッジ２４を介してＣＭ１に送信する。
【０１１９】
低速送信部２７は、データ送信部２３から異常が発生したデータを受信する。そして、低速送信部２７は、異常が発生したデータを転送速度が遅い伝送経路を介して低速受信部１７に送信する。
【０１２０】
ＣＭ１の低速受信部１７は、転送速度が遅い伝送経路を介してデータを低速送信部２７から受信する。そして、低速受信部１７は、受信したデータをデータ書込部１３に送信する。
【０１２１】
データ書込部１３は、低速受信部１７からデータを受信する。そして、データ書込部１３は、受信したデータをメモリ１５に書き込む。
【０１２２】
制御部１２は、低速受信部１７を介して受信した異常が発生したデータがメモリ１５に格納されると、通常処理に戻る。
【０１２３】
これに対して、制御部１２は、異常が発生したデータが低速受信部１７を介して送られてこない場合、異常が発生したデータの再送信を受信するようＰＣＩｅブリッジ１４及びデータ書込部１３に指示する。そして、異常が発生したデータの再送信が正常に行われた場合、制御部１２は通常処理に戻る。これに対して、制御部１２は、再送信の回数が所定値を超えた場合、ＣＭ２のダウンの通知を受けた後に、ディスク装置３０に格納されている再送信に失敗したデータをメモリ１５に格納するよう読出部１６に指示する。
【０１２４】
次に、図８を参照して、本実施例に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理の流れについて説明する。図８は、実施例３に係るストレージ装置のデータ二重化におけるパリティエラー発生時の処理のシーケンス図である。
【０１２５】
ＣＭ２のデータ送信部２３は、ＰＣＩｅブリッジ２４を介してメモリ２５に記憶されているデータをＣＭ１に送信する。異常検出部２１は、ＰＣＩｅブリッジ２４からパリティチェックの結果を受信する。そして、異常検出部２１は、受信したパリティチェックの結果からパリティエラーを検出する。そして、異常検出部２１は、ＰＣＩｅブリッジ２４の故障を検出する（ステップＳ４０１）。
【０１２６】
パリティエラーが発生している異常データが、ＰＣＩｅブリッジ２４からＰＣＩｅブリッジ１４へ送信される（ステップＳ４０２）。
【０１２７】
ＰＣＩｅブリッジ１４は、パリティエラーが発生している異常データを受信する（ステップＳ４０３）。このとき、ＰＣＩｅブリッジ１４は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【０１２８】
データ書込部１３は、パリティエラーが発生している異常データをＰＣＩｅブリッジ１４から受信する（ステップＳ４０４）。このとき、データ書込部１３は、受信したデータのパリティチェックを行い、チェック結果を障害検出部１１へ送信する。
【０１２９】
障害検出部１１は、受信したパリティチェックの結果からパリティエラーを検出し、制御部１２に通知する。制御部１２は、ＰＣＩｅブリッジ１４及びデータ書込部１３で発生した異常がＣＭ２による異常であると判定する（ステップＳ４０５）。
【０１３０】
そして、制御部１２は、ＣＭ２から異常が発生したデータを受信するまでＰＣＩｅブリッジ１４及びデータ書込部１３を待機させる（ステップＳ４０６）。
【０１３１】
この間、ＣＭ２の故障検出部２１は、パリティエラーという異常の種別からリトライが必要であると判定する（ステップＳ４０７）。
【０１３２】
制御部２２は、異常が発生したデータのサイズが１ＫＢ以下か否かを判定する（ステップＳ４０８）。１ＫＢ以下の場合（ステップＳ４０８肯定）、制御部２２は、異常が発生したデータをパス５を介してＣＭ１に送信することをデータ送信部２３に指示する。データ送信部２３は、制御部２２からの指示を受けて、パス５を経由させて異常が発生したデータをＣＭ１に送信する（ステップＳ４０９）。そして、パス５経由で異常が発生したデータを送信後、制御部２２はＣＭ２をダウンさせる（ステップＳ４１１）。
【０１３３】
異常が発生したデータは、低速送信部２７、パス５及び低速受信部１７を経由してデータ書込部１３に送信される（ステップＳ４１０）。データ書込部１３は、パス５経由で送られてきたデータを受信してメモリ１５に書き込む。
【０１３４】
制御部２１は、低速受信部１７及びデータ書込部１３を監視して、バス５経由でデータを受信したか否かを判定する（ステップＳ４１２）。例えば、制御部２１は、低速受信部１７からのデータを低速送信部２７から受信したという情報及びデータ書込部１３からの低速受信部１７からデータを受信したという情報を受けてデータの受信を確認する。パス５経由でデータを受信している場合（ステップＳ４１２肯定）、制御部２１は、通常の処理を継続する（ステップＳ４２１）。
【０１３５】
これに対して、異常が発生したデータのサイズが１ＫＢより大きい場合（ステップＳ４０８否定）、データ送信部２３は、最後に送信したデータをＣＭ１に向けてパス４経由で再送信する（ステップＳ４１３）。
【０１３６】
再送信データが、ＣＭ２からＣＭ１に向けて送信される（ステップＳ４１４）。
【０１３７】
制御部２２は、データ送信部２３によるデータの再送信が成功したか否かを判定する（ステップＳ４１５）。データの再送信が成功した場合（ステップＳ４１５肯定）、制御部２２は、ＣＭ２をダウンさせる（ステップＳ４１１）。
【０１３８】
これに対して、データの再送信が失敗した場合（ステップＳ４１５否定）、制御部２２は、メモリ２５に格納されている再送信に失敗したデータをディスク装置３０に書き込むよう書込部２６へ指示する。書込部２６は、再送信に失敗したデータをメモリ２５から読み出し、読み出したデータをディスク装置３０に書き込む（ステップＳ４１６）。
【０１３９】
制御部２２は、再送信に失敗したデータのディスク装置３０への書き込みが完了すると、ＣＭ２をダウンさせる（ステップＳ４１７）。
【０１４０】
ＣＭ１の制御部１２は、データの再送信が成功したか否かを判定する（ステップＳ４１８）。データの再送信が失敗した場合（ステップＳ４１８否定）、制御部１２は、ＣＭ２がダウンするまで待機し、その後ＣＭ２のダウンを検出する（ステップＳ４１９）。
【０１４１】
そして、制御部１２は、再送信に失敗したデータのディスク装置３０からの読み出し及びメモリ１５への書き込みを読出部１６に指示する。読出部１６は、指示を受けて、ディスク装置３０から再送信に失敗したデータを読み出し、読み出したデータをメモリ１５へ格納する（ステップＳ４２０）。
【０１４２】
制御部１２は、データの再送信が成功した場合（ステップＳ４１８肯定）又はディスク装置３０に書き込まれた再送信に失敗したデータのメモリ１５への格納が完了した場合、通常処理を継続する（ステップＳ４２１）。
【０１４３】
以上に説明したように、本実施例に係るストレージ装置は、二重化を行う際に送信側のＣＭのＰＣＩｅブリッジの故障によりデータが正常に送信できない場合、データのサイズが小さければ、転送速度の遅い伝送経路を用いて受信側のＣＭにデータを送信する。これにより、データ受信側のＣＭのメモリに異常データが書き込まれたままになる状態の回避率を向上させることができる。
【０１４４】
また、以上の各実施例では主にＣＭ２のメモリ内のデータをＣＭ１のメモリへコピーしてデータの二重化を行う場合で説明したが、この二重化はＣＭ１及びＣＭ２の間で双方向に行われていても良い。その場合、ＣＭ１及びＣＭ２は、以上の各実施例で説明した互いの機能と同様の機能を有し、ＣＭ１のメモリ内のデータをＣＭ２に二重化する場合にも各実施例と同様の処理を行う。
【符号の説明】
【０１４５】
１  コントローラモジュール（ＣＭ）
２  コントローラモジュール（ＣＭ）
３  ハードディスク
４  パス
５  パス
１１、２１  障害検出部
１２、２２  制御部
１３  データ書込部
１４、２４  バス接続部（ＰＣＩｅブリッジ）
１５、２５  揮発性記憶部（メモリ）
１６  読出部
１７  低速受信部
２３  データ送信部
２６  書込部
２７  低速送信部  
３０  ディスク装置
１０１、２０１  ＣＰＵ
１０２、２０２  低速バスコントローラ
１０３、２０３  ＰＣＩｅブリッジ
１０４、２０４  ＤＭＡコントローラ
１０５、２０５  メモリコントローラ
１０６、２０６  メモリ
１０７、２０７  Ｉ／Ｏコントローラ
【図１】
0005966243.tif 000002
【図２】
0005966243.tif 000003
【図３】
0005966243.tif 000004
【図４】
0005966243.tif 000005
【図５】
0005966243.tif 000006
【図６】
0005966243.tif 000007
【図７】
0005966243.tif 000008
【図８】
0005966243.tif 000009