(57)【要約】【課題】インタコネクト経由のリードを発行せずに、キャッシュミラーリングを行うことが可能な二重化コントーラ構成ブロックデバイス制御装置を提供する。【解決手段】コントローラ３（＃１，＃２）が、インタコネクト７及びコントローラ間信号線８によって相互接続される。コントローラ３(＃１)は、インタコネクト経由によるライトと、ライトされた値の保持とが可能な記憶手段を備える。コントローラ３（＃２）は、コントローラ間信号線を介して記憶手段に保持されている値をリードする手段と、コントローラ３（＃１）をターゲットとするインタコネクトを介したライトを発行する第１ステップ、記憶手段に対してインタコネクト経由でライトを発行する第２ステップ、前記リード手段によって、第２ステップでライトしたデータがリードできたことで、第１ステップで発行したライトの遅延書き込みの完了を確認する第３ステップを実行する手段とを備える。【選択図】図１
2009053946.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１台のディスク装置から構成されるディスクアレイへのアクセスを制御する第１及び第２のコントローラからなる二重化コントローラ構成ブロックデバイス制御装置であって、
前記第１のコントローラと前記第２のコントローラとは、インタコネクトによって、及び前記インタコネクトとは異なるコントローラ間信号線によって接続され、
前記インタコネクトは遅延書き込み機能を有し、前記インタコネクトのライト・リクエストの実行順序が保証されており、
前記第１のコントローラに備えられ、前記インタコネクト経由によるライトと、前記ライトされた値の保持とが可能であり、かつ前記コントーラ間信号線に接続された第１の記憶手段と、
前記第２のコントローラに備えられ、前記コントローラ間信号線を介して前記第１の記憶手段に保持されている値をリードするリード手段と、
前記第２のコントローラに備えられ、前記第１のコントローラをターゲットとする前記インタコネクトを介したライトを発行する第１のステップと、前記第１の記憶手段に対して前記インタコネクト経由でライトを発行する第２のステップと、前記リード手段によって、前記第２のステップでライトしたデータがリードできたことで、前記第１のステップで発行したライトの遅延書き込みの完了を確認する第３のステップとを実行する確認手段と
を備えたことを特徴とする二重化コントローラ構成ブロックデバイス制御装置。
【請求項２】
前記第１及び第２のコントローラはそれぞれ主記憶装置を備え、
前記第２のコントローラは、外部装置からライト要求を受信すると、ライトデータを、自己に備えられた主記憶装置に格納し、前記確認手段における前記第１のステップによって前記第１のコントローラに備えられた主記憶装置へ前記ライトデータを前記インタコネクトを介してライトし、前記第２のステップと前記第３のステップとを実行することにより、前記発行した前記第１のコントローラに備えられた主記憶装置への前記ライトデータのライトの遅延書き込みの完了を確認し、前記外部装置へ前記ライト要求の完了通知を行うことによって、ライトバック制御されたキャッシュデータの二重化を行うことを特徴とする請求項１に記載の二重化コントローラ構成ブロックデバイス制御装置。
【請求項３】
前記第２のコントローラに備えられ、前記第１のコントローラに備えられた前記記憶手段の値が更新されたことを、前記コントローラ間信号線を介して検知すると、前記第２のコントローラに対してその旨を通知するための割り込みを生成する割込生成手段を更に備えたことを特徴とする請求項１に記載の二重化コントローラ構成ブロックデバイス制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置へのアクセスを制御する、二重化して用いられるコントローラに係り、特に、二重化されたコントローラ間におけるキャッシュデータの冗長化制御に好適な二重化コントーラ構成ブロックデバイス制御装置に関する。
【背景技術】
【０００２】
近年、ストレージ装置に対する高信頼性化の要求が高まっており、ＲＡＩＤ（Redundant Array of Inexpensive Disks）によるデータの冗長化だけでなく、ストレージ装置内のコントローラを冗長化することで、障害発生時のシステム停止を回避する手段が用いられる。この種の冗長構成を持つストレージ装置では、キャッシュメモリの保全性を高めるために、ライトバック制御されたキャッシュデータの二重化（キャッシュミラーリング）を行う。ライトデータは他系コントローラのキャッシュメモリにコピーされ、ライトデータをディスクアレイへ書き込む前にコントローラが停止しても、他系コントローラがディスクアレイへ書き込む処理を引き継ぐことで、ライトデータ消失は回避される。この種のストレージ装置のコントローラは、ホストコンピュータからのライト要求を受信すると、キャッシュミラーリング処理が完了してからホストコンピュータに対してライト要求の応答を返すことが通常である。
【０００３】
Ｉ／Ｏ処理に伴うキャッシュミラーリング処理は性能上のボトルネックとなり得るため、高速な専用ハードウェアを介して行われることが多い。例えば、特許文献1では専用バスで結合されたキャッシュ制御回路によって、キャッシュミラーリングおよび論理ディスク領域の排他制御処理を高速化する手法が開示されている。
【０００４】
一方で、ストレージ装置の低価格化を実現するために、専用ハードウェアを実装せず、PCI-Express等の汎用バスをインタコネクトとして結合し、インタコネクトを介したコントローラ間通信によってキャッシュミラーリングを行うストレージ装置も存在する。
【０００５】
PCI-Expressは、PCI-SIG(Peripheral Component Interconnect-Special Interest Group)が策定した装置間を接続するバスの標準規格である。PCI-Expressバスは、ルート・コンプレックスと呼ばれる単一のデバイスとエンド・ポイントと呼ばれる複数のデバイスが、それぞれスイッチのポートにポイント・トゥ・ポイント接続されたトポロジを構成する。それぞれのデバイスとスイッチのポートの接続はリンクと呼ばれる。それぞれのデバイスはパケットの送受信によって通信を行う。送受信されるパケットの種類として、要求元(リクエスタ)が要求先(コンプリータ)に送信するメモリ・リード・リクエストやメモリ・ライト・リクエストやメッセージ・リクエスト、コンプリータがリクエスタへ処理の完了を通知するコンプリーションなどが定義されている。
【０００６】
この種のインタコネクトによって結合される構成を持つストレージ装置において、キャッシュミラーリングは自系コントローラからインタコネクト経由のＤＭＡ（Direct Memory Access）によって他系コントローラのキャッシュメモリに転送することで実現される。ホストコンピュータからライト要求を受信したコントローラは、二重化のためのＤＭＡ完了後に、ホストコンピュータへライト要求への応答を返す。
【０００７】
しかし、PCI-Expressにはリクエスタがコンプリータからのコンプリーションの受信を待たないポステッド・メモリ・ライト機能やフロー制御機能があるため、自系コントローラ上のプロセッサやＤＭＡコントローラがライト処理を完了しても、データ転送経路中のスイッチ等がバッファリングしている可能性があり、他系コントローラのメモリまで到達していないかもしれない。ホストコンピュータへ応答を先に返してしまうことで、ライトデータがメモリに到達する間に自系コントローラが停止し、ライトデータ消失によるデータ化けが起こる可能性が残る。
【０００８】
このため、通常はデータ転送のためのライトを行った後に、自系コントローラが他系コントローラ上のメモリをリードすることで上記問題を回避する。PCI-Expressの規格上、同一の仮想チャネルを使用している場合、PCI-Expressバス上のメモリ・リード・リクエストは先行するメモリ・ライト・リクエストを追い越すことができず、かつコンプリータからコンプリーションを受信するまで完了しない。即ち、PCI-Expressバス越しのリードの完了によって、先行して発行されたライトが全て完了しており、二重化するライトデータがメモリに到達していることが保証される。
【特許文献１】登録特許第３７１９９７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記のように、PCI-Expressのような汎用バスをインタコネクトとするストレージ装置では、Ｉ／Ｏ処理に付随するキャッシュミラーリング処理において、インタコネクト経由で他系コントローラをターゲットとするリード処理が発生する。これらのリード処理は専用のハードウェアを実装せず、汎用バスをインタコネクトとしたために止むを得ず行われるが、ソフトウェアがインタコネクト経由のリード処理を行うことにより以下の問題がある。
【００１０】
まず、プロセッサがインタコネクト経由でリードを発行する場合、データ転送が完了するまで時間がかかるためプロセッサが長時間ストールしてしまい、プロセッサのパイプライン処理を妨げる。また、PCI-Expressは全二重通信が可能であるが、自系コントローラのリードデータ転送と他系コントローラからのライトデータ転送が競合して相互干渉する等、インタコネクト経由のリードそのものが性能劣化の要因になり得る。
【００１１】
更に、コントローラ間でリードを発行することによってPCI-Expressのエラー処理が複雑化する問題がある。冗長構成を持つストレージ装置は、他系コントローラ異常の場合はシングルコントローラモードへ遷移して動作を継続し、自系コントローラ異常の場合は直ちに停止して他系コントローラに処理を委譲する必要がある。
【００１２】
PCI-Expressバス上のデバイス(コンプリータ)が故障して通信エラーが発生すると、リードのときは経路上のPCI-Expressスイッチのポートからエラー情報を含むコンプリーションがリクエスタに向けて送信され、ライトのときは経路上のPCI-Expressスイッチのポートからエラー情報を含むメッセージ・リクエストがリクエスタに向けて送信される。リクエスタは、コンプリーションまたはメッセージ・リクエストを受信することでエラーを検知する。
【００１３】
ソフトウェアはコントローラ間通信を行うだけでなく、PCI-Express経由で自系コントローラ内のハードウェアのレジスタ等をリード/ライトする必要もある。よって、リードを発行してエラー情報を含むコンプリーションを受信すると、リードの対象が自系コントローラ上のハードウェアか他系コントローラ上のハードウェアであるかを判断し、対象が他系コントローラ上のハードウェアであれば自系コントローラ上のハードウェア異常が原因であるのか、他系コントローラ異常が原因であるのかを判断して動作継続の可否を決定する必要が発生する。この判断を誤ると、両コントローラともに停止するか、または両コントローラともにシングルコントローラモードで動作するスプリットブレインに陥る可能性もあり、何れにしろ致命的な状態となる。エラー処理が複雑化し、動作継続の判定を行うための要因が増えることでレースコンディションによる誤動作等のソフトウェアの不具合が潜む確率が増加する。
【００１４】
また、エラー情報を含むコンプリーションが受信した後に、シングルコンローラモードへ遷移して動作を継続するためには、ソフトウェアは常にリード発行後にプロセッサ例外が発生する可能性を考慮する必要がある。PCI-Express経由で他系コントローラに対するリードを発行する全ての処理において、プロセッサ例外から正しく復帰できるようにコンテキストを退避してチェックポイントを予め作成しておき、プロセッサ例外が発生するとコンテキストを復元してチェックポイントにロールバックし、シングルコントローラモードへ分岐する等の手順が必要となり、ソフトウェアの処理が煩雑となり、これもまた性能劣化の要因になり得る。
【００１５】
仮に、他系コントローラへのインタコネクト経由のリード処理を省略することができれば、エラー情報を含むコンプリーションを受信したときは、エラー要因が自系コントローラ異常に限定できるため、直ちに動作を停止することができる。このようにエラー処理の複雑化が緩和され、例外からの復帰のための処理も不要となる。
【００１６】
本発明はこのような事情に鑑みてなされたものであり、コントローラ間インタコネクトに単純なハードウェアを追加し、もって、性能劣化やエラー処理複雑化の要因となり得るインタコネクト経由のリードを発行せずに、キャッシュミラーリングを行うことが可能な二重化コントーラ構成ブロックデバイス制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記の目的を達成するために、本発明では、以下のような手段を講じる。
【００１８】
すなわち、請求項１の発明は、少なくとも１台のディスク装置から構成されるディスクアレイへのアクセスを制御する第１及び第２のコントローラからなる二重化コントローラ構成ブロックデバイス制御装置である。この装置では、前記第１のコントローラと前記第２のコントローラとは、インタコネクトによって、及び前記インタコネクトとは異なるコントローラ間信号線によって接続され、前記インタコネクトは遅延書き込み機能を有し、前記インタコネクトのライト・リクエストの実行順序が保証されている。そして、前記第１のコントローラに備えられ、前記インタコネクト経由によるライトと、前記ライトされた値の保持とが可能であり、かつ前記コントーラ間信号線に接続された第１の記憶手段と、前記第２のコントローラに備えられ、前記コントローラ間信号線を介して前記第１の記憶手段に保持されている値をリードするリード手段と、前記第２のコントローラに備えられ、前記第１のコントローラをターゲットとする前記インタコネクトを介したライトを発行する第１のステップと、前記第１の記憶手段に対して前記インタコネクト経由でライトを発行する第２のステップと、前記リード手段によって、前記第２のステップでライトしたデータがリードできたことで、前記第１のステップで発行したライトの遅延書き込みの完了を確認する第３のステップとを実行する確認手段とを備えている。
【００１９】
従って、請求項１の発明の二重化コントローラ構成ブロックデバイス制御装置においては、以上のような手段を講じることにより、第２のコントローラが、インタコネクト経由で第１のコントローラの第１の記憶手段をライトし、コントローラ間信号線経由で第１の記憶手段の値をリードすることで、遅延書き込みの完了を確認することができるため、インタコネクト経由のリード発行に伴う性能劣化やエラー処理の複雑化を回避することが可能となる。
【００２０】
また、請求項２の発明は、請求項１に記載の二重化コントローラ構成ブロックデバイス制御装置において、前記第１及び第２のコントローラはそれぞれ主記憶装置を備えている。更に、前記第２のコントローラは、外部装置からライト要求を受信すると、ライトデータを、自己に備えられた主記憶装置に格納し、前記確認手段における前記第１のステップによって前記第１のコントローラに備えられた主記憶装置へ前記ライトデータを前記インタコネクトを介してライトし、前記第２のステップと前記第３のステップとを実行することにより、前記発行した前記第１のコントローラに備えられた主記憶装置への前記ライトデータのライトの遅延書き込みの完了を確認し、前記外部装置へ前記ライト要求の完了通知を行うことによって、ライトバック制御されたキャッシュデータの二重化を行う。
【００２１】
従って、請求項２の発明の二重化コントローラ構成ブロックデバイス制御装置においては、以上のような手段を講じることにより、キャッシュミラーリング処理において、インタコネクト経由のリードを使用しないことで、リード発行に伴う性能劣化やエラー処理の複雑化を回避することが可能となる。
【００２２】
請求項３の発明は、請求項１に記載の二重化コントローラ構成ブロックデバイス制御装置において、前記第２のコントローラに備えられ、前記第１のコントローラに備えられた前記記憶手段の値が更新されたことを、前記コントローラ間信号線を介して検知すると、前記第2のコントローラに対してその旨を通知するための割り込みを生成する割込生成手段とを更に備える。
【００２３】
従って、請求項３の発明の二重化コントローラ構成ブロックデバイス制御装置においては、以上のような手段を講じることにより、遅延書き込みの完了が割り込みで通知されることによって、処理の並列実行が可能となる。
【発明の効果】
【００２４】
本発明によれば、コントローラ間インタコネクトに単純なハードウェアを追加し、もって、性能劣化やエラー処理複雑化の要因となり得るインタコネクト経由のリードを発行せずに、キャッシュミラーリングを行うことが可能な二重化コントーラ構成ブロックデバイス制御装置を実現することができる。
【発明を実施するための最良の形態】
【００２５】
以下に、本発明を実施するための最良の形態について図面を参照しながら説明する。
【００２６】
図１は、第１の実施の形態に係る二重化コントーラ構成ブロックデバイス制御装置の構成例を示すブロック図である。
【００２７】
図１に示すように、二重化コントローラ構成ブロックデバイス制御装置（以下、単に「ブロックデバイス制御装置」と称する）２は、２台のコントローラ３（＃１，＃２）を備えている。そして、各コントローラ３（＃１，＃２）は、スイッチ４を介してＮ台のホストコンピュータ１（＃１）〜１（＃Ｎ）と接続している。更に、各コントローラ３（＃１，＃２）は、スイッチ５を介してディスクアレイ６と接続している。
【００２８】
ホストコンピュータ１とブロックデバイス制御装置２との間を接続するインタコネクトとして、限定される訳ではないが、ＳＣＳＩプロトコルに基づくブロックデバイス用インタフェース（Ｉ／Ｆ）であるＦＣ（Fibre Channel）やｉＳＣＳＩ（Internet SCSI）を想定している。ＦＣの場合、スイッチ４の部分がファブリック・スイッチとなり、ｉＳＣＳＩの場合はイーサネット（登録商標）のスイッチング・ハブとなる。また、ブロックデバイス制御装置２とディスクアレイ６との間を接続するインタコネクトとして、限定される訳ではないが、ＦＣやＳＡＳ（Serial Attached SCSI）、ＳＡＴＡ（Serial ATA）を想定している。ＦＣの場合、スイッチ５の部分がファブリック・スイッチとなり、ＳＡＳやＳＡＴＡの場合はエクスパンダとなる。
【００２９】
各コントローラ３（＃１，＃２）はPCI-Expressリンク７によって相互に接続される。また、各コントローラ３（＃１，＃２）には他系のコントローラへ出力するコントローラ間信号線８（８ビット幅）、および他系のコントローラから入力されるコントローラ間信号線８（８ビット幅）も接続される。
【００３０】
自系コントローラ３（以下、例えば、コントローラ３（＃１）とする）は、他系コントローラ３（以下、例えば、コントローラ３（＃２）とする）の起動を検知するとデュアルコントローラモードに遷移し、コントローラ間ハートビート通信を行いながら互いの状態を監視する。コントローラ間ハートビート通信はPCI-Expressリンク７を介して行われる。自系コントローラ３（＃１）の異常を検出した場合には処理を中止、ハートビート通信の応答をしないことで他系コントローラ３（＃２）がシングルコントローラモードに遷移することを促す。一方、他系コントローラ３（＃２）の異常を検出した場合には、他系コントローラ３（＃２）の処理を引継ぎ、シングルコントローラモードで動作する。
【００３１】
図２は、このようなコントローラ３の詳細構成例を示すブロック図である。
【００３２】
コントローラ３はＩ／Ｏプロセッサ２０１上で動作するソフトウェアにより制御される。このソフトウェアはＲＯＭ２０２に格納され、起動時にメモリ２０３にロードされＩ／Ｏプロセッサ２０１上で実行される。メモリ２０３は、バッテリ２０４により停電時もバックアップされ、ホストコンピュータ１に提供するブロックデバイスのディスクキャッシュとしても使用される。
【００３３】
Ｉ／Ｏプロセッサ２０１は、PCI-Expressスイッチ２０７を介してホストＩ／Ｆ  ２０５、ディスクＩ／Ｆ  ２０６、他系コントローラ３上のPCI-Expressスイッチ２０７と接続する。Ｉ／Ｏプロセッサ２０１はルート・コンプレックスとして動作し、ホストＩ／Ｆ  ２０５、ディスクＩ／Ｆ  ２０６はエンド・ポイントとして動作する。ホストＩ／Ｆ  ２０５はスイッチ４を介してホストコンピュータ１に接続され、ディスクＩ／Ｆ  ２０６はスイッチ５を介してディスクアレイ６に接続される。ホストＩ／Ｆ  ２０５としては、限定される訳ではないが、ＦＣやｉＳＣＳＩコントローラ、ディスクＩ／Ｆ  ２０６としては、限定される訳ではないが、ＦＣやＳＡＳ、ＳＡＴＡコントローラを想定している。
【００３４】
PCI-Expressスイッチ２０７のポートは、コントローラ３（＃１）と他系コントローラ３（＃２）を結合するPCI-Expressリンク7の片側が接続されたポートのみノントランスペアレント接続し、その他はトランスペアレント接続することで、PCI-Expressバス上に複数のルート・コンプレックスが混在することを許可する。またノントランスペアレント接続されたポートのパケット転送機能とアドレス変換機能を使用することで、Ｉ／Ｏプロセッサ２０１は他系コントローラ３に内在するPCI-Expressバスのメモリ空間にアクセス可能である。
【００３５】
また、Ｉ／Ｏプロセッサ２０１はバス２０９を介して信号線制御モジュール２０８に接続され、信号線制御モジュール２０８から入力／出力ともに８ビット幅のコントローラ間信号線８によって他方のコントローラ３（＃２）に接続される。
【００３６】
ソフトウェアは、Ｉ／Ｏプロセッサ２０１等の内部ハードウェアとホストＩ／Ｆ  ２０５、ディスクＩ／Ｆ  ２０６等の外部ハードウェアを制御し、複数のＨＤＤで構成するディスクアレイ６を論理ユニットとしてホストコンピュータ１に提供する。
【００３７】
図３は、Ｉ／Ｏプロセッサ２０１の一般的な内部構成例を示すブロック図である。
【００３８】
Ｉ／Ｏプロセッサ２０１の内部では、ソフトウェアを実行するＩ／Ｏプロセッサコア３０１やメモリコントローラ３０２、バスＩ／Ｆ  ３０３、割り込みコントローラ３０４、ＤＭＡコントローラ３０５、PCI-Express Ｉ／Ｆ  ３０６が内部バス３０７によって接続されている。PCI-Express Ｉ／Ｆ  ３０６は、内部バス３０７の任意のアドレスをPCI-Expressバス上のメモリ空間にマップする機能を持ち、メモリコントローラ３０２やバスＩ／Ｆ  ３０３と連携することによって、内部バス３０７にマップされたメモリ２０３やＲＯＭ２０２、信号線制御モジュール２０８内のレジスタをPCI-Expressバスのメモリ空間にマップすることができる。これにより、他方のコントローラ３（＃２）のＩ／Ｏプロセッサコア３０１やＤＭＡコントローラ３０５はメモリ空間にマップされたメモリ２０３やＲＯＭ２０２、信号線制御モジュール２０８内のレジスタ等にＩ／Ｏプロセッサコア３０１を介さずに直接リード／ライトすることが可能となっている。
【００３９】
ソフトウェアは、PCI-Expressバス上のライト・リクエストの実行順序を保証するために、全てのライト・リクエストが同一仮想チャネルを使用し、Relaxed Ordering機能を使用しないようにPCI-Express Ｉ／Ｆ  ３０６及びPCI-Expressスイッチ207の各ポートを設定する。
【００４０】
図４は、信号線制御モジュール２０８の詳細構成例を示すブロック図である。
【００４１】
信号線制御モジュール２０８は、コントローラ間信号線８及び割り込み信号線４０７を制御する制御回路で、限定される訳ではないが、ＰＬＤ(Programmable Logic Device)内に定義された論理回路の一部である。Ｉ／Ｏプロセッサ２０１に対する割り込み信号を制御するための割り込み制御回路４０１、割り込み制御回路４０１に接続されたマスクレジスタ４０２とステータスレジスタ４０４、出力のコントローラ間信号線８に接続された送信レジスタ４０５、入力のコントローラ間信号線８及び割り込み制御回路４０１に接続された受信レジスタ４０６、各レジスタとバス２０９を接続するバスＩ／Ｆ  ４０３によって構成される。
【００４２】
バスＩ／Ｆ ４０３は各レジスタをバス２０９のアドレスにマップする機能を持つ。これにより、Ｉ／Ｏプロセッサ２０１内のバスＩ／Ｆ ３０３と連携することで各レジスタは内部バス３０７にマップされ、Ｉ／Ｏプロセッサコア３０１が各レジスタをリード／ライトすることが可能となると同時に、上記の通りコントローラ３（＃２）のＩ／Ｏプロセッサコア３０１やＤＭＡコントローラ３０５が直接リード／ライトすることが可能となる。
【００４３】
送信レジスタ４０５および受信レジスタ４０６は８ビット幅で、それぞれ出力／入力のコントローラ間信号線８が直結しており、コントローラ間信号線８の値とレジスタの値は常に一致する。即ち、自系コントローラ３（＃１）の送信レジスタ４０５と他系コントローラ３（＃２）の受信レジスタ４０６の値は一致し、自系コントローラ３（＃１）の受信レジスタ４０６と他系コントローラ３（＃２）の送信レジスタ４０５の値は一致する。
【００４４】
マスクレジスタ４０２にはInterrupt Mask Bitがあり、バスＩ／Ｆ  ４０３を介してリード／ライト可能である。Interrupt Mask Bitが１に設定されているときは、割り込み制御回路４０１は決して割り込み信号線４０７をアサートしない。
【００４５】
ステータスレジスタ４０４にはInterrupt Pending Bitがあり、バスＩ／Ｆ ４０３を介したライトは無視して、リードに対してはデータを返した後に０クリアする。
【００４６】
割り込み制御回路４０１は、受信レジスタ４０６の値を内部で保持しており、受信レジスタ４０６の値が更新されたことを検知することができ、検知するとステータスレジスタ４０４のInterrupt Pending Bitに１を設定する。ステータスレジスタ４０４のInterrupt Pending Bitが１で、かつマスクレジスタ４０２のInterrupt Mask Bitが0のとき、割り込み信号線４０７をアサートし、それ以外のときはネゲートする。
【００４７】
上記の通り、自系コントローラ３（＃１）の信号線制御モジュール２０８内の各レジスタは、自系コントローラ３（＃１）および他系コントローラ３（＃２）のＩ／Ｏプロセッサコア３０１とＤＭＡコントローラ３０５からリード／ライト可能である。他系コントローラ３（＃２）の送信レジスタ４０５の値が更新されると自系コントローラ３（＃１）の受信レジスタ４０６の値も更新され、信号線制御モジュール４０１は更新を検知する。このときステータスレジスタ４０４のInterrupt Pending Bitに１が設定され、マスクレジスタ４０２のInterrupt Mask Bitが０であれば割り込み信号線４０７がアサートされ、ステータスレジスタ４０４がバスＩ／Ｆ ４０３経由でリードされるまでネゲートされない。
【００４８】
次に、ホストコンピュータからライト要求を受信してキャッシュメモリ上のライトデータを二重化するキャッシュミラーリング処理を例にとり、Ｉ／Ｏプロセッサ上のソフトウェアの動作について説明する。
【００４９】
ソフトウェアは、自系コントローラ３（＃１）の信号線制御モジュール２０８とペアで８ビット長のカウンタ変数を管理する。ソフトウェアは自系コントローラ３（＃１）の信号線制御モジュール２０８およびカウンタ変数を予め初期化しておく。初期化処理は、ソフトウェアのスタートアップ中や他系コントローラ３（＃２）の起動検出後など、デュアルコントローラモードに遷移するときに一度だけ実行され、以下の手順でなされる。
【００５０】
まず、自系コントローラ３（＃１）のキャッシュデータをコピーするPCI-Express上のメモリ空間アドレス（他系コントローラ３（＃２）のキャッシュメモリがマップされたアドレス）を決定する。このアドレスは、予め静的に定められたアドレスを割り振られても良いし、他系コントローラ３（＃２）とのネゴシエーションによって決定されても構わない。同様に、他系コントローラ３（＃２）の送信レジスタ４０５がマップされたPCI-Express上のメモリ空間アドレスも決定する。自系コントローラ３（＃１）のマスクレジスタ４０２のInterrupt Mask Bitに１をライトし、ステータスレジスタ４０４をリードすることでInterrupt Pending Bitを０に設定する。受信レジスタ４０６をリードして、その値をカウンタ変数の初期値に設定し、マスクレジスタ４０２のInterrupt Mask Bitに０を設定する。
【００５１】
図５は、ソフトウェアにおけるライト要求受信処理の動作フローチャートである。
【００５２】
ホストコンピュータ１からホストＩ／Ｆ  ２０５を経由して、ライト要求を受信する（ステップ５０１）。このとき、ライト要求受信処理を行うために必要となる情報を保持するためにメモリ領域(コンテキスト)を確保する。次に、自系コントローラ３（＃１）のキャッシュメモリからブロックを確保して、ホストコンピュータ１からホストＩ／Ｆ  ２０５を経由して、ライトデータを受信する（ステップ５０２）。
【００５３】
そして、オペレーティングシステムやハードウェアの機能を利用して、異なるコンテキストを持つ処理にプリエンプトされることを禁止する（ステップ５０３）。更に、カウンタ変数の値をインクリメントする（ステップ５０４）。そして、ステップ５０２で確保したキャッシュメモリブロックを他系コントローラ３（＃２）上のキャッシュメモリにコピーするべく、ディスクリプタを設定してＤＭＡコントローラ３０５をドライブする（ステップ５０５）。同様に、他系コントローラ３（＃２）の送信レジスタ４０５に、自系コントローラ３（＃１）が管理するカウンタ変数の値をライトするべく、ディスクリプタを設定してＤＭＡコントローラ３０５をドライブする（ステップ５０６）。
【００５４】
更に、コンテキストにステップ５０６でライトしたカウンタ変数の値を格納する（ステップ５０７）。ステップ５０３で変更された状態を元に戻して、異なるコンテキストを持つ処理にプリエンプトされることを許可する（ステップ５０８）。
【００５５】
その後、コンテキストを退避してライト要求受信処理の実行を中断し、キャッシュミラーリングが完了するのを待つ（ステップ５０９）。即ち、信号線制御モジュール２０８から割り込みが入り、割り込み処理において受信レジスタ４０６の値がステップ５０６でライトしたカウンタ変数の値よりも大きいことが確認できるまで待つ。信号線制御モジュール２０８からの割り込み処理については後ほど説明する。
【００５６】
キャッシュミラーリングが完了した後に、ホストコンピュータ１へ応答を返して、コンテキストを解放する（ステップ５１０）。
【００５７】
図６は、信号線制御モジュール２０８からの割り込み処理の動作フローチャートである。
【００５８】
まず、自系コントローラ３（＃１）のマスクレジスタ４０２のInterrupt Mask Bitに１を設定して、信号線制御モジュール２０８からの割り込みを禁止する（ステップ６０１）。次に、自系コントローラ３（＃１）のステータスレジスタ４０４のInterrupt Pending Bitの値が１であることをリードして確認する（ステップ６０２）。ステップ６０２の結果が偽であれば、自系コントローラ３（＃１）のマスクレジスタ４０２のInterrupt Mask Bitに０を設定して（ステップ６０５）、処理を完了する。ステップ６０２の結果が真であれば、ステップ６０３以下を実行する。
【００５９】
更に、自系コントローラ３（＃１）の受信レジスタ４０６をリードする（ステップ６０３）。そして、中断されている全てのライト要求受信処理の中で、ステップ５０７においてコンテキストに格納されたカウンタ変数の値が、受信レジスタ４０６の値よりも小さいか等しい処理に関して、処理の実行を再開させる（ステップ６０４）。その後、ステップ６０２に戻る。
【００６０】
次に、自系コントローラ３（＃１）がPCI-Expressバスの異常を検出した場合の処理について説明する。
【００６１】
PCI-Expressスイッチ２０７のポートからエラー情報を含んだメッセージ・リクエスト受信した場合、そのメッセージ・リクエストのリクエスタがPCI-Expressリンク７が接続されたポートであれば、シングルコントローラモードに遷移して、中断中の全てのライト要求受信処理に関して処理の実行を再開する。リクエスタがPCI-Expressリンク７が接続されたポートでなければ、直ちに処理を停止して他系コントローラ３（＃２）がシングルコントローラモードに遷移することを促す。
【００６２】
また、PCI-Expressスイッチ２０７のポートからエラー情報を含んだコンプリーションを受信した場合、直ちに処理を停止して他系コントローラ３（＃２）がシングルコントローラモードに遷移することを促す。PCI-Expressスイッチ２０７が故障して、PCI-Express  Ｉ／Ｆ  ３０６がPCI-Expressリンク２１０のリンクダウンを検出した場合も同様に処理を停止する。
【００６３】
上記の構成、作用により、キャッシュミラーリング機能が実現される。
【００６４】
自系コントローラ３（＃１）のソフトウェアはPCI-Expressリンク７上のリードを発行せず、ライトデータのＤＭＡを行った後に他系コントローラ３（＃２）の送信レジスタ４０５をライトすることで、自系コントローラ３（＃１）の受信レジスタ４０６の値が更新されることを待つ。受信レジスタ４０６の値が更新された後、ホストコンピュータ１へライト要求の応答を返す。
【００６５】
PCI-Expressバス上のライト・リクエストに着目すると、キャッシュミラーリングのためのライト・リクエストに続いて、他系コントローラ３（＃２）の送信レジスタ４０５に対するライト・リクエストの順序で発行される。バス上のライト・リクエストの順序は保証されているため、受信レジスタ４０６の値が更新されることで、キャッシュミラーリングのライトデータが他系コントローラ３（＃２）のキャッシュメモリに到達していることが保証される。
【００６６】
また、自系コントローラ３（＃１）のソフトウェアではライト要求受信処理は並列実行されるが、それぞれの処理に対して、キャッシュミラーリングする際に単純増加するカウンタ変数を用いてユニークな値が関連付けられる。他系コントローラ３（＃２）の送信レジスタ４０５にこの値をライトすることで、自系コントローラ３（＃１）の受信レジスタ４０６の値よりも小さな値に関連付けられたライト要求受信処理は、キャッシュミラーリング処理が完了していることが保証される。
【００６７】
また、PCI-Expressバス上のリード・リクエストのコンプリータは自系コントローラ３（＃１）内のハードウェアのみであるため、エラー情報を含んだコンプリーションを受信した場合、自系コントローラ３（＃１）のハードウェア異常が原因であることを断定できるため、直ちにソフトウェアの実行を停止することができる。
【００６８】
本実施の形態では、信号線制御モジュール２０８からの割り込みを使用しているが、割り込みを使用せずに受信レジスタ４０６の値が変化するまでビジーウェイトして、ライト要求受信処理を継続することも可能である。また、コントローラ間信号線８、送信レジスタ４０５、受信レジスタ４０６、マスクレジスタ４０２のInterrupt Mask Bit、ステータスレジスタ４０４のInterrupt Pending Bit、カウンタ変数を多重化することで、並列動作することも可能である。
【００６９】
本実施の形態で示した通り、二重化されたコントローラ３（＃１，＃２）間の接続において、インタコネクトであるPCI-Expressリンク７とは別にコントローラ間信号線８を配し、各コントローラ３（＃１，＃２）内部に単純な送信レジスタ４０５及び受信レジスタ４０６を含む信号線制御モジュール２０８を実装することで、PCI-Expressリンク７経由のライトのみでキャッシュミラーリング機能が実現され、PCI-Expressリンク７経由のリードに伴う性能劣化やエラー処理が複雑化することを避けることができる効果が得られる。
【００７０】
以上、本発明を実施するための最良の形態について、添付図面を参照しながら説明したが、本発明はかかる構成に限定されない。特許請求の範囲の発明された技術的思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の技術的範囲に属するものと了解される。
【図面の簡単な説明】
【００７１】
【図１】第１の実施の形態に係る二重化コントーラ構成ブロックデバイス制御装置の構成例を示すブロック図。
【図２】コントローラの詳細構成例を示すブロック図。
【図３】Ｉ／Ｏプロセッサの一般的な内部構成例を示すブロック図。
【図４】信号線制御モジュールの詳細構成例を示すブロック図。
【図５】ソフトウェアにおけるライト要求受信処理の動作フローチャート。
【図６】信号線制御モジュールからの割り込み処理の動作フローチャート。
【符号の説明】
【００７２】
１…ホストコンピュータ、２…二重化コントローラ構成ブロックデバイス制御装置、３…コントローラ、４…スイッチ、５…スイッチ、６…ディスクアレイ、７…PCI-Expressリンク、８…コントローラ間信号線、２０１…Ｉ／Ｏプロセッサ、２０２…ＲＯＭ、２０３…メモリ、２０４…バッテリ、２０５…ホストＩ／Ｆ、２０６…ディスクＩ／Ｆ、２０７…PCI-Expressスイッチ、２０８…信号線制御モジュール、２０９…バス、２１０…PCI-Expressリンク、３０１…Ｉ／Ｏプロセッサコア、３０２…メモリコントローラ、３０３…バスＩ／Ｆ、３０４…割り込みコントローラ、３０５…ＤＭＡコントローラ、３０６…PCI-ExpressＩ／Ｆ、３０７…内部バス、４０１…割り込み制御回路、４０２…マスクレジスタ、４０３…バスＩ／Ｆ、４０４…ステータスレジスタ、４０５…送信レジスタ、４０６…受信レジスタ、４０７…割り込み信号線
【図１】
2009053946.tif 000003
【図２】
2009053946.tif 000004
【図３】
2009053946.tif 000005
【図４】
2009053946.tif 000006
【図５】
2009053946.tif 000007
【図６】
2009053946.tif 000008