(57)【特許請求の範囲】
【請求項１】
クライアントからＩ／Ｏ（Input/Output）コマンドを受けそのＩ／Ｏコマンドに従いストレージ装置に対してデータのＩ／Ｏを行うフォールトトレラントの計算機システムであって、
第１の物理サーバと、
前記第１の物理サーバに接続された第２の物理サーバと、
前記第１及び第２の物理サーバが接続される２以上の第１ポートと前記ストレージ装置が接続される２以上の第２ポートとを有するスイッチ装置と
を有し、
前記第１の物理サーバが、前記第１の物理サーバにおいて第１の仮想サーバを実行する第１のハイパバイザを有し、
前記第２の物理サーバが、前記第２の物理サーバにおいて第２の仮想サーバを実行する第２のハイパバイザを有し、
前記第１及び第２のハイパバイザが、互いに通信することで、前記第１及び第２の仮想サーバの同期を制御し、
前記スイッチ装置が、前記第１及び第２の仮想サーバの前記ストレージ装置に対するデータのＩ／Ｏの同期を制御し、
前記スイッチ装置が、どの第２ポートとどの第１ポートとが対応するかを表すポート管理情報を記憶する記憶領域を有し、
前記２以上の第１ポートからデータが入力された場合、前記スイッチ装置が、前記ポート管理情報を基に、データが入力された２以上の第１ポートに対応した２以上の第２ポートを特定し、特定された２以上の第２ポートのうちのいずれかの第２ポートから、データを出力し、
前記スイッチ装置が、２以上のバススイッチと、バススイッチ選択機構とを有し、
各バススイッチに、前記２以上の第２ポートのいずれかと、前記２以上の第１ポートとが接続されており、
前記バススイッチ選択機構が、前記ポート管理情報を基に、前記２以上の第２ポートを特定し、前記２以上の第２ポートに接続されている前記２以上のバススイッチから１つのバススイッチを選択し、
前記選択されたバススイッチが、前記２以上の第１ポートのうちのいずれかの第１ポートからのデータを、そのバススイッチに接続されている第２ポートに出力する、
計算機システム。
【請求項２】
クライアントからＩ／Ｏ（Input/Output）コマンドを受けそのＩ／Ｏコマンドに従いストレージ装置に対してデータのＩ／Ｏを行うフォールトトレラントの計算機システムであって、
第１の物理サーバと、
前記第１の物理サーバに接続された第２の物理サーバと、
前記第１及び第２の物理サーバが接続される２以上の第１ポートと前記ストレージ装置が接続される２以上の第２ポートとを有するスイッチ装置と
を有し、
前記第１の物理サーバが、前記第１の物理サーバにおいて第１の仮想サーバを実行する第１のハイパバイザを有し、
前記第２の物理サーバが、前記第２の物理サーバにおいて第２の仮想サーバを実行する第２のハイパバイザを有し、
前記第１及び第２のハイパバイザが、互いに通信することで、前記第１及び第２の仮想サーバの同期を制御し、
前記スイッチ装置が、前記第１及び第２の仮想サーバの前記ストレージ装置に対するデータのＩ／Ｏの同期を制御し、
前記スイッチ装置が、どの第２ポートとどの第１ポートとが対応するかを表すポート管理情報を記憶する記憶領域を有し、
前記２以上の第１ポートからデータが入力された場合、前記スイッチ装置が、前記ポート管理情報を基に、データが入力された２以上の第１ポートに対応した２以上の第２ポートを特定し、特定された２以上の第２ポートのうちのいずれかの第２ポートから、データを出力し、
前記スイッチ装置が、比較器を有し、
前記比較器が、入力された２以上のデータを比較し、それら２以上のデータが一致していれば、前記スイッチ装置が、前記２以上の第２ポートのうちの或る第２ポートから、データを出力する、
計算機システム。
【請求項３】
クライアントからＩ／Ｏ（Input/Output）コマンドを受けそのＩ／Ｏコマンドに従いストレージ装置に対してデータのＩ／Ｏを行うフォールトトレラントの計算機システムであって、
第１の物理サーバと、
前記第１の物理サーバに接続された第２の物理サーバと、
前記第１及び第２の物理サーバが接続される２以上の第１ポートと前記ストレージ装置が接続される２以上の第２ポートとを有するスイッチ装置と
を有し、
前記第１の物理サーバが、前記第１の物理サーバにおいて第１の仮想サーバを実行する第１のハイパバイザを有し、
前記第２の物理サーバが、前記第２の物理サーバにおいて第２の仮想サーバを実行する第２のハイパバイザを有し、
前記第１及び第２のハイパバイザが、互いに通信することで、前記第１及び第２の仮想サーバの同期を制御し、
前記スイッチ装置が、前記第１及び第２の仮想サーバの前記ストレージ装置に対するデータのＩ／Ｏの同期を制御し、
前記スイッチ装置が、どの第２ポートとどの第１ポートとが対応するかを表すポート管理情報を記憶する記憶領域を有し、
前記２以上の第１ポートからデータが入力された場合、前記スイッチ装置が、前記ポート管理情報を基に、データが入力された２以上の第１ポートに対応した２以上の第２ポートを特定し、特定された２以上の第２ポートのうちのいずれかの第２ポートから、データを出力し、
前記スイッチ装置が、前記２以上の第１ポートから入力されたデータをそれぞれ記憶する２以上のバッファを有する、
計算機システム。
【請求項４】
クライアントからＩ／Ｏ（Input/Output）コマンドを受けそのＩ／Ｏコマンドに従いストレージ装置に対してデータのＩ／Ｏを行うフォールトトレラントの計算機システムであって、
第１の物理サーバと、
前記第１の物理サーバに接続された第２の物理サーバと、
前記第１及び第２の物理サーバが接続される２以上の第１ポートと前記ストレージ装置が接続される２以上の第２ポートとを有するスイッチ装置と
を有し、
前記第１の物理サーバが、前記第１の物理サーバにおいて第１の仮想サーバを実行する第１のハイパバイザを有し、
前記第２の物理サーバが、前記第２の物理サーバにおいて第２の仮想サーバを実行する第２のハイパバイザを有し、
前記第１及び第２のハイパバイザが、互いに通信することで、前記第１及び第２の仮想サーバの同期を制御し、
前記スイッチ装置が、前記第１及び第２の仮想サーバの前記ストレージ装置に対するデータのＩ／Ｏの同期を制御し、
前記スイッチ装置が、どの第２ポートとどの第１ポートとが対応するかを表すポート管理情報を記憶する記憶領域と、２以上のバススイッチと、バススイッチ選択機構とを有し、
各バススイッチには、出力端子に、前記２以上の第１ポートのいずれかが接続されており、２以上の入力端子に、前記２以上の第２ポートが接続されており、
或る第２ポートからデータが入力された場合、前記バススイッチ選択機構が、前記ポート管理情報を基に、前記或る第２ポートに対応した２以上の第１ポートを特定し、前記２以上のバススイッチから、前記２以上の第１ポートに接続されている２以上のバススイッチを選択し、選択された２以上のバススイッチに、選択する入力端子を指定し、
前記選択された２以上のバススイッチが、指定された入力端子からのデータを、それら２以上のバススイッチに接続されている前記２以上の第１ポートに出力する、
計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラントの計算機システムに関する。
【背景技術】
【０００２】
複数の物理サーバを有する計算機システムが知られている。複数の物理サーバには、現用サーバ（稼動中の物理サーバ）と待機サーバ（待機中の物理サーバ）とがある。この種の計算機システムとして、フォールトトレラントの計算機システム（以下、フォールトトレラントシステム）と、フォールトトレラントでない計算機システム（以下、通常システム）とがある。
【０００３】
通常システムでは、現用サーバに障害が生じた場合、現用サーバから待機サーバへの切り替わりの情報の引継ぎ等のために、ダウンタイムが生じることになる。
【０００４】
しかし、フォールトトレラントシステムでは、現用サーバと待機サーバは同期しており、このため、現用サーバに障害が生じても、現用サーバから待機系サーバにすぐに切り替わるので、ダウンタイムは通常システムよりも短い（例えば、ダウンタイムは最小限である）。
【０００５】
フォールトトレラントシステムにおける、複数の物理サーバの同期（以下、サーバ同期）は、ハードウェアのみによって実現される。例えば、特許文献１では、そのようなハードウェアとして、特殊なＬＳＩ（Large  Scale  Integration）が採用されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２６９３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ハードウェアのみによってサーバ同期を行うフォールトトレラントシステムには、ハードウェアのコストが高いという問題や、システムの構成が制限されてしまう（言い換えればシステムの柔軟性が無い）という問題がある。
【０００８】
従って、本発明の目的は、コストが抑えられ且つ柔軟性のあるフォールトレラントシステムを提供することにある。
【課題を解決するための手段】
【０００９】
第１の物理サーバに、第２の物理サーバが接続される。第１の物理サーバが、第１の物理サーバにおいて第１の仮想サーバを実行する第１のハイパバイザを有し、第２の物理サーバが、第２の物理サーバにおいて第２の仮想サーバを実行する第２のハイパバイザを有する。第１及び第２のハイパバイザが、互いに通信することで、第１及び第２の仮想サーバの同期を制御する。
【００１０】
好ましくは、第１及び第２の物理サーバとストレージ装置とに、スイッチ装置が接続される。スイッチ装置が、第１及び第２の仮想サーバのストレージ装置に対するデータのＩ／Ｏの同期を制御する。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施例１に係るフォールトトレラントシステムの構成を示す。
【図２】ディスク装置からサーバに対するデータのライト処理（実施例１に係るライト処理）のフローを示す。
【図３】ディスク装置からサーバへのデータのリード処理（実施例１に係るリード処理）のフローを示す。
【図４】本発明の実施例２に係るフォールトトレラントシステムの構成を示す。
【図５】ポート管理情報の構成を示す。
【図６】ＰＣＩ−ｅスイッチのデータ入力機構を示す。
【図７】ＰＣＩ−ｅスイッチのデータ出力機構を示す。
【図８】ディスク装置からサーバに対するデータのライト処理（実施例２に係るライト処理）のフローを示す。
【図９】ディスク装置からサーバへのデータのリード処理（実施例２に係るリード処理）のフローを示す。
【発明を実施するための形態】
【００１２】
以下、本発明の幾つかの実施例を説明する。
【００１３】
なお、以下の説明において、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェイス装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、サーバが行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機（例えば物理サーバ又は仮想サーバ）にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１４】
また、以下、説明を分かり易くするため、特段の説明がある場合を除いて、フォールトトレラントシステムが有する物理サーバの数は、２とする。しかし、物理サーバの数は、３以上でも良い。
【実施例１】
【００１５】
実施例１では、物理サーバが互いに通信可能に接続されており、各物理サーバが、サーバの仮想化を実現するソフトウェアであるハイパバイザを有する。ハイパバイザが、互いに通信することで、サーバ同期を制御する。
【００１６】
以下、実施例１を詳細に説明する。
【００１７】
図１は、本発明の実施例１に係るフォールトトレラントシステムの構成を示す。
【００１８】
本実施例に係るフォールトトレラントシステムは、ハードウェア構成が同じである２つ物理サーバ１０１，１１５を有する。以下、物理サーバ１０１を、「サーバ１０１」或いは「メインサーバ１０１」と呼び、物理サーバ１１５を、「サーバ１１５」或いは「サブサーバ１１５」と呼ぶことがある。なお、図１では、サブサーバ１１５は単数だが、複数であっても良い。サーバ１０１（１１５）は、例えば、ブレードサーバである。
【００１９】
サーバ１０１（１１５）は、ハイパバイザ１０２（１１６）と、ＬＰＡＲ（Logical  PARtition）１０３（１１７）と、ＨＢＡ（Host  Bus  Adaptor）１１３（１２７）と、管理ＬＡＮ（Local  Area  Network）１１４（１２８）とを備える。
【００２０】
メインサーバ１０１は、ＨＢＡ１１３を介してディスク装置１３０に接続され、サブサ−バ１１５は、ＨＢＡ１２７を介してディスク装置１３０に接続される。すなわち、各サーバ１０１，１１５は、共通のディスク装置１３０に接続される。ＨＢＡ１１３（１２７）は、サーバ１０１（１１５）が有するＩ／Ｏ（Input/Output）デバイスの一種である。
【００２１】
メインサーバ１０１とサブサーバ１１５が、管理ＬＡＮ１１４及び１２８を介して接続されている。管理ＬＡＮ１１４と管理ＬＡＮ１２８は、ＬＡＮ１２９を介して接続されている。管理ＬＡＮ１１４（１２８）は、ＬＡＮ１２９を介して通信するためのＩ／Ｏデバイス（通信インターフェイス装置）であり、例えば、ＮＩＣ（Network  Interface  Card）である。
【００２２】
ディスク装置１３０は、例えば、複数のディスク型の物理記憶デバイスを備えたストレージ装置である。２以上の物理記憶デバイスでＲＡＩＤ（Redundant  Array  of  Independent  (or  Inexpensive)  Disks）グループが構成されていても良い。物理記憶デバイスは、例えば、ＨＤＤ（Hard  Disk  Drive）である。物理記憶デバイスは、ディスク型の物理記憶デバイスに限らず、他種の物理記憶デバイス（例えば、フラッシュメモリデバイス）が採用されても良い。また、ディスク装置１３０は、単数でも複数でも良い。ディスク装置１３０は、例えば、ブートデバイスとして使用される。すなわち、サーバ１０１（１１５）は、ディスク装置１３０からＯＳを読み出すブートを行うことができる。
【００２３】
ハイパバイザ１０２（１１６）は、ＯＳ（Operation  System）（以下、管理ＯＳ）１０４（１１８）を備える。サーバ１０１（１１５）が有するハードウェアリソースは、Ｉ／Ｏデバイス（例えばＨＢＡ１１３（１２７）及び管理ＬＡＮ１１４（１２８））の他に、例えば、１以上のＣＰＵ及び１以上のメモリを含むが、ハイパバイザ１０２（１１６）は、サーバ１０１（１１５）のハードウェアリソースを少なくとも２つ以上に論理的に分割することで、ＬＰＡＲ１０３（１１７）を生成する。ＬＰＡＲ１０３（１１７）は、仮想サーバであり、サーバ１０１（１１５）のハードウェアリソースの一部が割り当てられている。ＬＰＡＲ１０３（１１７）上では、ゲストＯＳ１０９（１２３）が動作する。
【００２４】
管理ＯＳ１０４（１１８）では、ＨＢＡドライバ１０５（１１９）と、バックエンドドライバ１０６（１２０）と、管理ＬＡＮドライバ１０７（１２１）が実行される。管理ＯＳ１０４（１１８）は、メモリ（以下、管理ＯＳ用メモリ）１０６（１２２）を管理する。
【００２５】
ＨＢＡドライバ１０５（１１９）は、ＨＢＡ１１３（１２７）を制御するソフトウェアである。管理ＬＡＮドライバ１０７（１２１）は、管理ＬＡＮ１１４（１２８）を制御するソフトウェアである。バックエンドドライバ１０６（１２０）は、仮想ＨＢＡ１１２（１２６）とＨＢＡドライバ１０５（１１９）との通信を中継するソフトウェアである。
【００２６】
管理ＯＳ用メモリ１０８（１２２）が、管理ＯＳ１０４（１１８）で実行されるコンピュータプログラム（ソフトウェア）を記憶して良い。また、管理ＯＳ用メモリ１０８（１２２）は、ディスク装置１３０から読み出されたデータ、及び、ディスク装置１３０に書き込まれるデータの一時的な記憶領域としても使用される。
【００２７】
ＬＰＡＲ１０３（１１７）は、ＯＳ（以下、ゲストＯＳ）１０９（１２３）と、仮想ＨＢＡ１１２（１２６）とを備える。仮想ＨＢＡ１１２（１２６）は、ＬＰＡＲ１０９（１２３）の外にあっても良い（ハイパバイザ１０２（１１６）に含まれても良い）。
【００２８】
ゲストＯＳ１０９（１２３）では、仮想ＨＢＡドライバ１１０（１２４）が実行される。ゲストＯＳ１０９（１２３）は、メモリ（以下、ゲストＯＳ用メモリ）１１１（１２５）を管理する。ゲストＯＳ１０９（１２３）では、アプリケーションプログラムが実行されて良い。
【００２９】
仮想ＨＢＡドライバ１１０（１２４）は、ゲスト用ＯＳメモリ１１１（１２５）に記憶されていて良い。ゲストＯＳ用メモリ１１１（１２５）は、ＬＰＡＲ１０９（１２３）を制御するプログラム等を記憶していて良い。仮想ＨＢＡドライバ１１０（１２４）は、仮想ＨＢＡ１１２，１２６を制御するソフトウェアである。
【００３０】
管理ＯＳ１０４（１１８）とゲストＯＳ１０９（１２３）が、管理ＯＳ用メモリ１０８（１２２）、仮想ＨＢＡ１１２（１２６）及びゲストＯＳ用メモリ１１１，１２５）を介して通信することができる。
【００３１】
上記構成によって、メインサーバ１０１内のハイパバイザ１０２と、サブサーバ１１５内のハイパバイザ１１６とは、管理ＬＡＮ１１４及び１２８を介して、ＬＰＡＲ１０９（１１７）を同期させることができる。
【００３２】
なお、ＬＰＡＲ１０３及び１１７は、それぞれ、複数存在しても良い。この場合、ＨＢＡ１１３（１２７）、及び／又は、管理ＬＡＮ１１４（１２８）は、２以上のＬＰＡＲ１０３（１１７）に共有されても良いし、ＬＰＡＲ１０３（１１７）毎に、ＨＢＡ１１３（１２７）及び／又は管理ＬＡＮ１１４（１２８）が割り当てられても良い。
【００３３】
ＬＰＡＲ１０３及び１１７がそれぞれ複数存在する場合、下記の（Ａ）又は（Ｂ）が行われても良い。
（Ａ）ＬＰＡＲ１０３（１１７）毎に、管理ＬＡＮ１１４（１２８）が割り当てられていて良い。管理ＬＡＮ１１４と管理ＬＡＮ１２８が１対１で対応していて良い。例えば、第１のＬＰＡＲ１０３がＩ／Ｏコマンド（リードコマンド又はライトコマンド）をクライアント（図示せず）から受信した場合、第１のＬＰＡＲ１０３が、図２のステップ２０１又は図３のステップ３０１を開始し、且つ、ハイパバイザ１０２が、複数の管理ＬＡＮ１１４のうち、第１のＬＰＡＲ１０３に対応する管理ＬＡＮ１１４を通じて、受信したＩ／Ｏコマンドを転送して良い。複数の管理ＬＡＮ１２８のうち、Ｉ／Ｏコマンドの発行元の管理ＬＡＮ１１４に対応した管理ＬＡＮ１２８が、そのＩ／Ｏコマンドを受信して良い。ハイパバイザ１１６は、Ｉ／Ｏコマンドを受信した管理ＬＡＮ１２８に対応する第１のＬＰＡＲ１１７の管理用ＯＳに対して、そのＩ／Ｏコマンドを転送して良い。これにより、図２のステップ２０２又は図３のステップ３０２が開始されて良い。
（Ｂ）ハイパバイザ１０２及び／又は１１６が、どのＬＰＡＲ１０３とどのＬＰＡＲ１１７が対応するかを表すＬＰＡＲ管理情報を保持していても良い。この場合、例えば、第１のＬＰＡＲ１０３がＩ／Ｏコマンドをクライアントから受信した場合、第１のＬＰＡＲ１０３が、図２のステップ２０１又は図３のステップ３０１を開始し、且つ、下記の（ｂ１）又は（ｂ２）が行われて良い。
（ｂ１）ハイパバイザ１０２が、第１のＬＰＡＲ１０３に対応する第１のＬＰＡＲ１１７を、ハイパバイザ１０２が保持するＬＰＡＲ管理情報から特定して良い。ハイパバイザ１０２は、第１のＬＰＡＲ１１７を表す送信先情報と上記受信したＩ／Ｏコマンドとを、管理ＬＡＮ１１４を通じて、発行して良い。ハイパバイザ１１６は、送信先情報及びＩ／Ｏコマンドを受けた場合、送信先情報から第１のＬＰＡＲ１１７を特定し、第１のＬＰＡＲ１１７の管理用ＯＳに対して、そのＩ／Ｏコマンドを転送して良い。これにより、図２のステップ２０２又は図３のステップ３０２が開始されて良い。
（ｂ２）ハイパバイザ１０２が、第１のＬＰＡＲ１０３が受信したＩ／Ｏコマンドとそれの受信者（第１のＬＰＡＲ１０３）を表す受信者情報とを、管理ＬＡＮ１１４を通じて、ハイパバイザ１１６に転送して良い。ハイパバイザ１１６は、受信者情報及びＩ／Ｏコマンドを受けた場合、受信者情報が表す第１のＬＰＡＲ１０３に対応する第１のＬＰＡＲ１１７を、ハイパバイザ１１６が保持するＬＰＡＲ管理情報から特定し、第１のＬＰＡＲ１１７の管理用ＯＳに対して、受信したＩ／Ｏコマンドを転送して良い。これにより、図２のステップ２０２又は図３のステップ３０２が開始されて良い。
【００３４】
次に、図２及び３を参照して、本実施例に係るフォールトトレラントシステムが行う処理を説明する。
【００３５】
図２は、ディスク装置からサーバに対するデータのライト処理のフローを示す。
【００３６】
ここで、「ディスク装置からサーバに対するデータのライト処理」とは、リードコマンドを受けたＬＰＡＲ１０３（１１７）がディスク装置１３０からリード対象のデータを読み出す処理と同じである。ＬＰＡＲ１０３（１１７）は、リードコマンドを受けると、ディスク装置１３０からリード対象のデータを読み出し、そのデータをクライアントに返す。これは、ディスク装置１３０を主体とすれば、ディスク装置１３０がＬＰＡＲ１０３（１１７）に対してデータを書き込むと言うことができる。従って、本実施例の説明では、ディスク装置１３０からデータを読み出すことを、ディスク装置１３０がＬＰＡＲ１０３（１１７）にデータを書き込むとすることがある（同様に、ＬＰＡＲ１０３（１１７）がディスク装置１３０にデータを書き込むことを、ディスク装置１３０からＬＰＡＲ１０３（１１７）へデータが読み出されるとすることがある）。
【００３７】
従って、以下、ＬＰＡＲ１０３（１１７）からのリード要求を「ＤＭＡ（Direct  Memory  Access）ライト要求」と言う。ＤＭＡライト要求は、クライアントからのリードコマンドを基に特定されたＩ／Ｏ先情報（例えば、リードコマンドで指定されているファイルを記憶するブロックのＬＢＡ（Logical  Block  Address）とそのブロックを有する論理ボリュームのＬＵＮ（Logical  Unit  Number）とを含んだ情報）を有して良い。ＤＭＡライト要求に従うデータを「ＤＭＡライトデータ」と言う。ＤＭＡライトデータの入力が完了したときに発行される応答を「ＤＭＡライト完了通知」と言う。なお、データの転送は、ＤＭＡ以外の方式で行われても良い。
【００３８】
メインサーバ１０１内のＬＰＡＲ１０３が、クライアントからリードコマンドを受けると、図２のステップ２０１が開始する。また、ＬＰＡＲ１０３がクライアントからリードコマンドを受けると、ハイパバイザ１０２が、管理ＬＡＮ１１４を通じて、サブサーバ１１５内のハイパバイザ１１６に、そのリードコマンドを転送し、ハイパバイザ１１６が、管理ＬＡＮ１２８を通じて受信したそのリードコマンドを、ＬＰＡＲ１１７の管理用ＯＳ１１８に、転送する。これにより、図２のステップ２０２が開始される。
【００３９】
すなわち、仮想ＨＢＡドライバ１１０（１２４）は、仮想ＨＢＡ１１２（１２６）に対しＤＭＡライト要求を発行する（ステップ２０１（２０２））。
【００４０】
ＤＭＡライト要求を受けたハイパバイザ１０２（１１６）（仮想ＨＢＡ１１２（１２６））は、データの同期を図るため、ＬＡＮ１２９を介して、ＤＭＡライト要求の発行を待ち合わせる（ステップ２０３（２０４））。具体的には、例えば、ハイパバイザ１１６（仮想ＨＢＡ１２６）が、管理ＬＡＮ１２８を通じて、待ち合わせを通知する。その通知を、管理ＬＡＮ１１４を通じてハイパバイザ１０２（仮想ＨＢＡ１１２）を受信した場合、待ち合わせの完了となる（ステップ２０５）。
【００４１】
ＤＭＡライト要求の待ち合わせが完了した場合、ハイパバイザ１０２（管理ＯＳ１０４）が、ＤＭＡライト要求に従うＤＭＡライトデータをディスク装置１３０から読み出す。例えば、ハイパバイザ１０２（管理ＯＳ１０４）が、ＤＭＡライト要求に従うリード要求（例えば、ＬＵＮ及びＬＢＡを含んだ要求）を、ディスク装置１３０に送信し、そのリード要求に対する応答として、ＤＭＡライトデータを受信する。具体的には、例えば、下記が行われる。
（＊）ハイパバイザ１０２（管理ＯＳ１０４）は、バックエンドドライバ１０６を介して（ステップ２０６）、ＨＢＡドライバ１０５に、ＤＭＡライト要求を転送する（ステップ２０７）。
（＊）ＤＭＡライト要求を受けたＨＢＡドライバ１０５は、ＨＢＡ１１３にＤＭＡライト要求を転送する（ステップ２０８）。ＤＭＡライト要求を受けたＨＢＡ１１３は、ディスク装置１３０から、ＤＭＡライト要求に従うＤＭＡライトデータを読み出し、管理ＯＳ用メモリ１０８に、そのＤＭＡライトデータを転送する（ステップ２０９）。
【００４２】
管理ＯＳ用メモリ１０８にＤＭＡライトデータが転送された場合、ハイパバイザ１０２は、管理ＯＳ用メモリ１０８から、ＬＡＮ１２９を経由して、サブサーバ１１５内の管理ＯＳ用メモリ１２２に、ＤＭＡライトデータを転送する（ステップ２１０、２１１、２１２）。
【００４３】
ステップ２１０の後、ハイパバイザ１０２が、ＤＭＡライトデータを管理ＯＳ用メモリ１０８からゲストＯＳ用メモリ１１１に転送する（ステップ２１３）。
【００４４】
一方、ステップ２１２の後（管理ＯＳ用メモリ１２２へのＤＭＡライトデータの転送が完了した場合）、ハイパバイザ１１６が、ＤＭＡライトデータを管理ＯＳ用メモリ１２２からゲストＯＳ用メモリ１２５に転送する（ステップ２１４）。
【００４５】
ここで、データ入力の同期を図るため、ハイパバイザ１０２（１１６）は、ＬＡＮ１２９を介して、ゲストＯＳ用メモリ１１１（１２５）へ転送したＤＭＡライトデータの入力を待ち合わせる（ステップ２１５、２１６）。具体的には、例えば、ハイパバイザ１０２は、待ち合わせ完了の通知を内部で発生させる。一方、ハイパバイザ１１６は、待ち合わせ完了を、管理ＬＡＮ１２８を通じてメインサーバ１０１内のハイパバイザ１０２に通知する（ステップ２１７）。
【００４６】
ハイパバイザ１０２が、データ入力の待ち合わせが完了したことを検出した場合（例えば、待ち合わせ完了の通知が内部で発生し、且つ、ハイパバイザ１１６から待ち合わせ完了の通知を受信した場合）、ハイパバイザ１０２は、ＨＢＡドライバ１０５に対しＤＭＡライト完了通知を転送する（ステップ２１８）。
【００４７】
ＤＭＡライト完了通知を受けたＨＢＡドライバ１０５は、バックエンドドライバ１０６を介して、仮想ＨＢＡ１１２にＤＭＡライト完了通知を転送する（ステップ２１９、２２０）。
【００４８】
仮想ＨＢＡ１１２にＤＭＡライト完了通知が転送された場合、仮想ＨＢＡ１１２から仮想ＨＢＡドライバ１１０に、ＤＭＡライト完了通知が転送される（ステップ２２３）。また、ハイパバイザ１０２は、ＬＡＮ１２９を介して、ハイパバイザ１１６にＤＭＡライト完了通知を転送し、ハイパバイザ１１６が、仮想ＨＢＡ１２６にＤＭＡライト完了通知を転送する（ステップ２２１、２２２、２２４）。仮想ＨＢＡ１２６へのＤＭＡライト完了通知の転送が完了した場合、仮想ＨＢＡ１２６は、ＤＭＡライト完了通知を仮想ＨＢＡドライバ１２４に転送する（ステップ２２５）。
【００４９】
なお、図２に示したライト処理においてゲストＯＳ用メモリ１１１に格納されたＤＭＡライトデータは、ＬＰＡＲ１０３によって、クライアントからのリードコマンドに従うリード対象データとして、クライアントに送信される。もし、メインサーバ１０１に障害が発生した場合には、サブサーバ１１５内のハイパバイザ１１６が、メインサーバ１０１に障害が発生したことを、管理ＬＡＮ１２８を通じて、検出し、ＬＰＡＲ１１７に、ゲストＯＳ用メモリ１２５内のＤＭＡライトデータ（リードコマンドに従うリード対象データ）をクライアントに送信させて良い。
【００５０】
図３は、ディスク装置からサーバへのデータのリード処理のフローを示す。
【００５１】
以下、ＬＰＡＲ１０３（１１７）からのライト要求を「ＤＭＡリード要求」と言う。ＤＭＡリード要求は、クライアントからのライトコマンドを基に特定されたＩ／Ｏ先情報（例えば、ライトコマンドで指定されているファイルの書き込み先のブロックのＬＢＡとそのブロックを有する論理ボリュームのＬＵＮとを含んだ情報）を有して良い。ＤＭＡリード要求に従うデータを「ＤＭＡリードデータ」と言う。ＤＭＡリードデータの出力が完了したときに発行される応答を「ＤＭＡリード完了通知」と言う。
【００５２】
メインサーバ１０１内のＬＰＡＲ１０３が、クライアントからライトコマンドを受けると、図３のステップ３０１が開始する。また、ＬＰＡＲ１０３がクライアントからライトコマンドを受けると、ハイパバイザ１０２が、管理ＬＡＮ１１４を通じて、サブサーバ１１５内のハイパバイザ１１６に、そのライトコマンドを転送し、ハイパバイザ１１６が、管理ＬＡＮ１２８を通じて受信したそのライトコマンドを、ＬＰＡＲ１１７の管理用ＯＳ１１８に、転送する。これにより、図３のステップ３０２が開始される。なお、ＬＰＡＲ１０３（１１７）が受けたライトコマンドに従うデータ（ＤＭＡリードデータ）は、ゲストＯＳ用メモリ１１１（１２５）に記憶される。
【００５３】
すなわち、仮想ＨＢＡドライバ１１０（１２４）は、仮想ＨＢＡ１１２（１２６）に対しＤＭＡリード要求を発行する（ステップ３０１（３０２））。
【００５４】
ＤＭＡリード要求を受けたハイパバイザ１０２（１１６）（仮想ＨＢＡ１１２（１２６））は、データの同期を図るため、ＬＡＮ１２９を介して、仮想ＨＢＡ１１２（１２６）が受け取ったＤＭＡリード要求を待ち合わせる（ステップ３０３、３０４）。具体的には、例えば、ハイパバイザ１１６（仮想ＨＢＡ１２６）が、管理ＬＡＮ１２８を通じて、待ち合わせを通知する。その通知を、管理ＬＡＮ１１４を通じてハイパバイザ１０２（仮想ＨＢＡ１１２）を受信した場合、待ち合わせの完了となる（ステップ３０５）。
【００５５】
ＤＭＡリード要求の待ち合わせが完了した場合、ハイパバイザ１０２（１１６）は、ゲストＯＳ用メモリ１１１（１２５）からＤＭＡリードデータを仮想ＨＢＡ１１２（１２６）に転送する（ステップ３０６（３０７））。
【００５６】
ＤＭＡリードデータを受けた仮想ＨＢＡ１１２（１２６）（ハイパバイザ１０２（１１６））は、管理ＯＳ用メモリ１０８（１２２）に、そのＤＭＡリードデータを転送する（ステップ３０８（３０９））。
【００５７】
ＤＭＡリードデータが管理ＯＳ用メモリ１０８（１２２）に転送された場合、サブサーバ１１５内のハイパバイザ１１６は、管理ＬＡＮ１２８を介して、メインサーバ１０１内のハイパバイザ１０２（管理ＯＳ用メモリ１０８）にＤＭＡリードデータを転送する（ステップ３１０、３１１、３１２）。
【００５８】
サブサーバ１１５からＤＭＡリードデータを受けたハイパバイザ１０２は、管理ＯＳ用メモリ１０８上で、ＬＰＡＲ１０３からのＤＭＡリードデータと、ＬＰＡＲ１１７からのＤＭＡリードデータとを比較する（出力データの整合性チェック）。ＤＭＡリードデータが互いに一致していなければ、ハイパバイザ１０２は、例えば、エラーを、ＬＰＡＲ１０３に通知し、且つ、管理ＬＡＮ１１４を介して、ハイパバイザ１１６に通知して良い。ハイパバイザ１１６は、ハイパバイザ１０２からのエラーを、ＬＰＡＲ１１７に通知して良い。
【００５９】
ＤＭＡリードデータが互いに一致していれば、ハイパバイザ１０２（管理ＯＳ１０４）が、ＤＭＡリード要求に従うＤＭＡリードデータ（上記整合性チェックで比較された２つのＤＭＡリードデータのうちの一方）を、ディスク装置１３０に書き込む。例えば、ハイパバイザ１０２（管理ＯＳ１０４）が、ＤＭＡリード要求に従うライト要求（例えば、ＬＵＮ及びＬＢＡを含んだ要求）とライト対象データ（ＤＭＡリードデータ）を、ディスク装置１３０に送信する。具体的には、例えば、下記が行われる。
（＊）ハイパバイザ１０２（仮想ＨＢＡ１１２）は、バックエンドドライバ１０６を介して（ステップ３１３）、ＨＢＡドライバ１０５にＤＭＡリード要求を転送する（ステップ３１４）。
（＊）ＤＭＡリード要求を受けたＨＢＡドライバ１０５は、ＨＢＡ１１３にＤＭＡリード要求を転送する（ステップ３１５）。
（＊）ＤＭＡリード要求を受けたＨＢＡ１１３は、ハイパバイザ１０２（管理ＯＳ用メモリ１０８）に対しメモリリード要求を発行する（ステップ３１６）。
（＊）メモリリード要求を受けたハイパバイザ１０２は、管理ＯＳ用メモリ１０８から、上記整合性チェックで比較された２つのＤＭＡリードデータのうちの一方を、ＨＢＡ１１３に転送する（ステップ３１７）。
（＊）ＤＭＡリードデータを受けたＨＢＡ１１３は、ディスク装置１３０へＤＭＡリードデータを転送し、当該データの転送が完了した場合、ＨＢＡドライバ１０５に対し、ＤＭＡリード完了通知を転送する（ステップ３１８）。
【００６０】
ＤＭＡリード完了通知を受けたＨＢＡドライバ１０５は、バックエンドドライバ１０６を介して、仮想ＨＢＡ１１２にＤＭＡリード完了通知を転送する（ステップ３１９、３２０）。
【００６１】
仮想ＨＢＡ１１２にＤＭＡリード完了通知が転送された場合、ハイパバイザ１０２は、ＬＡＮ１２９を介して、ハイパバイザ１１６（仮想ＨＢＡ１２６）にＤＭＡリード完了通知を転送する（ステップ３２１、３２２、３２３）。
【００６２】
ここで、ハイパバイザ１０２（１１６）は、データ出力の同期を図るため、ＬＡＮ１２９を介して、仮想ＨＢＡ１１２（１２６）へ転送されたＤＭＡリード完了通知を待ち合わせる（ステップ３２４、３２５）。具体的には、例えば、ハイパバイザ１０２は、待ち合わせ完了の通知を内部で発生させる。一方、ハイパバイザ１１６は、待ち合わせ完了を、管理ＬＡＮ１２８を通じてメインサーバ１０１内のハイパバイザ１０２に通知する（ステップ３２６）。
【００６３】
ＤＭＡリード完了通知の待ち合わせが完了した場合（例えば、待ち合わせ完了の通知が内部で発生し、且つ、ハイパバイザ１１６から待ち合わせ完了の通知を受信した場合）、ハイパバイザ１０２（１１６）（仮想ＨＢＡ１１２（１２６））は、ＤＭＡリード完了通知を仮想ＨＢＡドライバ１１０（１２４）に転送する（ステップ３２７、３２８）。
【００６４】
以上、実施例１によれば、サーバ１０１（１１５）が、ハイパバイザ１０２（１１６）を有し、ハイパバイザ１０２及び１１６が、ＬＡＮ１２９を介して互いに通信することで、ＬＰＡＲ（仮想サーバ）１０３及び１１７の同期と、サーバ１０１（１１５）のディスク装置１３０に対するデータ入出力の同期とを制御する。このため、これらの同期を制御するためのハードウェアは不要になる。また、ハイパバイザ１０２（１１６）によってハードウェアリソースが論理的に分割されるので、システムの構成が制限されない。従って、コストが抑えられ且つ柔軟性のあるフォールトレラントシステムを提供することができる。
【実施例２】
【００６５】
以下、本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【００６６】
本実施例によれば、ハイパバイザ１０２及び１１６が行う同期制御の一部が、ハードウェアによって行われる。このため、ハイパバイザ１０２（１１６）を実行するサーバ１０１（１１５）の負荷を軽減することができ、故に、クライアントからのＩ／Ｏの性能の向上が期待できる。なお、コストは、実施例１よりも高くなる可能性があるが、システムの構成が制限されないという点は、変わらない。本実施例でも、ハイパバイザ１０２（１１６）によってハードウェアリソースが論理的に分割されるからである。
【００６７】
ハードウェアで行われる同期制御部分として、ディスク装置１３０に対するデータ入出力の同期が採用される。具体的には、例えば、図２のステップ２１０〜２１４、及び、図３のステップ３０５〜３１７が、ハードウェアで行われる。それ以外の同期制御は、ハイババイザ１０２及び１１６によって行われる。
【００６８】
そのようなハードウェアとして、図４に示すにように、本実施例に係るフォールトトレラントシステムは、サーバ１０１（１１５）の他に、Ｉ／Ｏ拡張モジュール４０１を有する。
【００６９】
Ｉ／Ｏ拡張モジュール４０１は、複数のサーバ（１０１、１１５）とディスク装置１３０とに接続されるスイッチ装置である。Ｉ／Ｏ拡張モジュール４０１は、例えば、ディスク装置１３０に接続される複数のＨＢＡ（４１３，４２８）と、サーバ（１０１，１１５）と（ＨＢＡ４１３，４２８）とのパスを切り替えるＰＣＩ−ｅ（PCI  Express）スイッチ４０２と、構成設定レジスタ４０７と、ＣＰＵ（Central  Processing  Unit）４０８と、メモリ４１０とを有する。メモリ４１０は、ファームウェア４０９を記憶する。
【００７０】
ＰＣＩ−ｅスイッチ４０２は、複数のアップスストリームポート（以下、アップポート）（４０３，４０５）と、複数のダウンストリームポート（以下、ダウンポート）（４０４，４０６）とを有する。図４は、２つのアップポート４０３及び４０５と、２つのダウンポート４０４及び４０６を示しているが、アップポート及びダウンポートは、３つ以上あって良い。また、本実施例では、アップポートの数とダウンポートの数は同じであるが、それらの数は異なっていても良い。また、アップポートは、物理サーバに割り当てられても良いし、物理サーバ内のＬＰＡＲに割り当てられても良い。従って、例えば、１つの物理サーバに複数のアップポートに接続され、各アップポートは、その物理サーバ内のＬＰＡＲに割り当てられても良い。
【００７１】
メインサーバ１０１はアップポート４０３に、サブサーバ１１５はアップポート４０５に、それぞれ、ＰＣＩ  Ｅｘｐｒｅｓｓインターフェースを介して接続される。また、ＨＢＡ４１３はダウンポート４０４に、ＨＢＡ４２８はダウンポート４０６に、それぞれＰＣＩ  Ｅｘｐｒｅｓｓインターフェースを介して接続される。Ｉ／Ｏ拡張モジュール４０１は、サーバ１０１及び１１５の共通のＩ／Ｏデバイスである。サーバ１０１（１１５）は、サーバ１０１（１１５）内のインターフェースと同じインターフェースで、ＨＢＡ４１３（４２８）に接続されている。なお、サーバ１０１（１１５）内のインターフェース、サーバ１０１（１１５）とスイッチ４０２間のインターフェース、及び、スイッチ４０２内でのインターフェースは、ＰＣＩ  Ｅｘｐｒｅｓｓに代えて、他のインターフェースが採用されても良い。
【００７２】
ＰＣＩ−ｅスイッチ４０２は、データ入出力機構を有する。データ入出力機構は、ディスク装置１３０から入力されたデータの分配、及び、ディスク装置１３０へ出力されるデータの整合性チェック等を行う。
【００７３】
ＣＰＵ４０８は、ファームウェア４０９を実行することにより、ＰＣＩ−ｅスイッチ４０２の監視（例えば、アップポート及びダウンポートのエラーの有無の監視）を行なうことができる。
【００７４】
構成設定レジスタ４０７は、同期させる必要のある２以上の物理サーバが接続されている２以上のアップポートを表す情報を記憶する記憶領域の一種である。そのような情報として、図５に示すポート管理情報６０１がある。この情報６０１は、ダウンポートとアップポートとの対応関係を示す。この情報６０１によれば、例えば、下記のことがわかる。
（Ａ）ダウンポート０（４０４）に入力されたデータは、アップポート０（４０３）及びアップポート１（４０５）に分配され、アップポート０（４０３）及びアップポート１（４０５）から出力される（つまり、アップポート０に接続されているサーバと、アップポート１に接続されているサーバを、同期させる必要がある）。
（Ｂ）アップポート０（４０３）又はアップポート１（４０５）から入力されたデータは、ダウンポート０（４０４）から出力される。
【００７５】
図６は、ＰＣＩ−ｅスイッチ４０２のデータ入出力機構のうちのデータ入力機構を示す。
【００７６】
データ入力機構は、ディスク装置１３０から入力されたデータをサーバ１０１（１１５）に分配する。データ入力機構は、調停デバイス５０１と、複数のバススイッチ（５０３，５０４）と、複数のデータバッファ（５０５，５０６）とを有する。
【００７７】
データバッファ（ダウンポート用のバッファ）は、ダウンポート毎にあって良い。このため、２つのデータバッファ５０５及び５０６が図示されている。データバッファ５０５（５０６）は、ディスク装置１３０からのデータの入力の同期を実現させるために、そのデータが一時的に格納される記憶領域である。
【００７８】
バススイッチ（例えばセレクタ）は、アップポート毎にあって良い。このため、２つのバススイッチ５０３及び５０４が図示されている。１つのバススイッチ５０３（５０４）の複数の入力端子には、複数の第１の入力パス（複数のダウンポート（４０４及び４０６）にそれぞれ接続されている複数のパス）が接続されている。また、１つのバススイッチ５０３（５０４）の出力端子には、第１の出力パス（このバススイッチ５０３（５０４）に対応するアップポート４０３（４０５）に接続されているパス）とが接続されている。従って、複数のアップポート（４０３，４０５）と複数のダウンポート（４０４，４０６）間には、複数の第１の入力パスと複数の第１の出力パスとが存在する。バススイッチ５０３（５０４）は、複数の第１の入力パスのうちの一つを選択し（複数の入力端子のうちの１つを選択し）、選択された第１の入力パスに接続されているデータバッファ５０５（５０６）からのデータを、このバススイッチ５０３（５０４）に接続されている第１の出力パスから出力する。
【００７９】
調停デバイス５０１は、出力命令パス５０２を介して、全てのバススイッチ（５０３，５０４）に接続されているハードウェア回路である。調停デバイス５０１は、ポート管理情報６０１（図５参照）を基に、複数のバススイッチから２以上のバススイッチを選択し、選択したバススイッチに、出力命令パス５０２を介して、選択する第１の入力パスを指定した出力命令を送信する。具体的には、調停デバイス５０１は、下記、
（＊）複数のダウンポートのうち、データが入力されたダウンポート（例えば４０４）を検出する、
（＊）ポート管理情報６０１を基に、検出されたダウンポート（４０４）に対応する２以上のアップポート（４０３及び４０５）を特定する、
（＊）特定した２以上のアップポート（４０３及び４０５）にそれぞれ接続されている２以上のバススイッチ（５０３及び５０４）に、出力命令パス５０２を介して、選択する第１の入力パス（データが入力されたダウンポート（４０４）に接続されている入力パス）を指定した出力命令を出力する。
【００８０】
その出力命令を受けたバススイッチ５０３（５０４）は、そのバススイッチ５０３（５０４）に接続されている複数の第１の入力パスから、出力命令で指定されている第１の入力パス（データが入力されたダウンポート（４０４）に接続されている入力パス）を選択する。バススイッチ５０３（５０４）は、複数のデータバッファのうちの、選択した第１の入力パスに接続されているデータバッファ（５０５）からデータを読み出し、読み出したデータを、第１の出力パスを介して出力する。
【００８１】
このようなデータ入力機構により、ダウンポート４０４に入力されたデータが２つに分配され、分配された２つのデータが、それぞれ、そのダウンポート４０４に対応する２つのアップポート４０３及び４０５を介して、同期する２つのサーバ１０１及び１１５に送信される。このように、ディスク装置１３０から入力されたデータの分配及びサーバ１０１（１１５）への入力を、Ｉ／Ｏ拡張モジュール４０１というハードウェアにより実現することができる。このため、ハイパバイザ１０２（１１６）を実行するサーバ１０１（１１５）の負荷を軽減することができる。
【００８２】
図７は、ＰＣＩ−ｅスイッチ４０２のデータ入出力機構のうちのデータ出力機構を示す。
【００８３】
データ出力機構は、調停デバイス５０１と、複数の乗算器（７０２，７０３，７２１）と、複数のデータバッファ（７０７，７０８）と、比較器７０９と、複数のバススイッチ（７１０，７１１）と、スイッチコントローラ７１２とを有する。
【００８４】
データバッファ（アップポート用のバッファ）は、アップポート毎にあって良い。このため、２つのデータバッファ７０７及び７０８が図示されている。データバッファ７０７（７０８）は、サーバ１０１（１１５）からアップポート４０３（４０５）を介して入力されたデータの出力の同期を実現するために、そのデータが一時的に格納される記憶領域である。
【００８５】
バススイッチ（例えばセレクタ）は、ダウンポート毎にあって良い。このため、２つのバススイッチ７１０及び７１１が図示されている。１つのバススイッチ７１０（７１１）には、複数の第２の入力パス（複数のアップポート（４０３及び４０５）にそれぞれ接続されている複数のパス）と、一つの第２の出力パス（このバススイッチ７１０（７１１）に対応するダウンポート４０４（４０６）に接続されているパス）とが接続されている。従って、複数のアップポート（４０３，４０５）と複数のダウンポート（４０４，４０６）間には、複数の第２の入力パスと複数の第２の出力パスとが存在する。バススイッチ７１０（７１１）は、複数の第２の入力パスのうちの一つを選択し、選択された第２の入力パスに接続されているデータバッファ７０７（７０８）からのデータを、バススイッチ７１０（７１１）に接続されている第２の出力パスから出力する。
【００８６】
乗算器として、出力にエラー通知パス７０５が接続されている第１の乗算器（７０２）と、出力に出力命令パス（バススイッチ（７１０，７１１）に接続される出力命令パス）（７０６，７２２）が接続される第２の乗算器（７０３，７２１）とがある。第１の乗算器（７０２）と第２の乗算器（７０３，７２１）で構成された乗算器群は、同期サーバ群（同期する複数のサーバ）に対応したアップポート群毎に、設けられて良い。例えば、アップポート群に対応する乗算器群において、第１の乗算器の数は、そのアップポート群を構成するアップポートの数に関わらず１であって良く、第２の乗算器の数は、そのアップポート群を構成するアップポートの数と同じで良い。乗算器群における各乗算器は、第１及び第２の入力端子を有して良い。第１の入力端子に、調停デバイス５０１に接続されている出力命令パス７０１が接続されていて、第２の入力端子に、比較結果通知パス（この乗算器群に対応したアップポート群に対応する比較器（７０９）の出力パス）（７０４）が接続されている。
【００８７】
調停デバイス５０１は、図６に示したデバイス５０１である。調停デバイス５０１は、ポート管理情報６０１を基に、複数の乗算器群から、データが入力されたアップポート群に対応した乗算器群を選択し、選択した乗算器群の各乗算器に出力命令を送信する。
【００８８】
比較器７０９は、アップポート群（２以上のアップポート）毎に用意されていて良い。比較器７０９は、その比較器７０９に対応する２つのアップポート４０３及び４０５からデータバッファ７０７及び７０８を介して出力された２つのデータを比較する。比較器７０９は、比較の結果に対応する信号を、比較結果通知パス７０４を介して、その比較器７０９に対応する乗算器群（乗算器７０２，７０３，７２１）と、調停デバイス５０１とに出力する。
【００８９】
スイッチコントローラ７１２は、ダウンポート４０４（又は４０６）が故障した際に、故障したダウンポート４０４（又は４０６）からのデータの出力を停止させ、他の正常なダウンポート４０６（又は４０４）に切り替えてデータを出力するように、調停デバイス５０１に対して命令を出力するものである。
【００９０】
以下、図７の例を基に、データ出力機構が行う処理を説明する。
【００９１】
同期しているサーバ１０１及び１１５から出力されたデータが、アップポート４０３及び４０５を介して入力され、データバッファ７０７及び７０８に格納される。調停デバイス５０１が、データが入力されたアップポート０（４０３）及びアップポート１（４０５）に対応するダウンポート０（４０４）を、同期管理情報６０１を基に特定する。なお、図５に示す情報６０１によれば、アップポート０（４０３）及びアップポート１（４０５）に、ダウンポート１（４０６）が対応付けられていないが、それは、ダウンポート１（４０６）が、ダウンポート０（４０４）からの切り替え先のダウンポートであることを意味する。同様に、図５に示す情報６０１について、アップポート２、３及び４には、ダウンポート３及び４が対応付けられていないが、これは、ダウンポート３及び４がダウンポート２からの切り替え先であることを意味する。このため、例えば、ダウンポート２で障害が発生した場合には、ダウンポート３又は４を介して、サーバからのデータがディスク装置１３０に書き込まれる。
【００９２】
調停デバイス５０１は、データが入力されたアップポート０（４０３）及びアップポート１（４０５）に対応するデータバッファ７０７及び７０８からデータを出力させる。これにより、バススイッチ７１０及び７１１と、比較器７０９とに、データバッファ７０７及び７０８からデータが入力される。
【００９３】
２つのデータが入力された比較器７０９は、２つのデータを比較し、比較結果を表す値（信号）を、比較結果通知パス７４０出力する。出力された値（比較結果値）は、調停デバイス５０１に入力され、且つ、乗算器７０２，７０３及び７２１のそれぞれの第２の入力端子に入力される。乗算器７０２には、比較結果値が反転されて入力される。
【００９４】
比較結果値は、比較器７０９による比較の結果が一致の場合（つまり、入力された２つのデータが互いに一致した場合）、一致を意味する値、例えば、「１」という値である。一方、比較結果値は、比較器７０９による比較の結果が不一致の場合（つまり、入力された２つのデータが異なっている場合）、不一致を意味する値、例えば、「０」という値である。
【００９５】
比較結果値を受けた調停デバイス５０１は、データが入力されたアップポート４０３及び４０５に対応するデータバッファ７０７及び７０８からデータを出力させ、且つ、同期管理情報６０１（図５参照）を基に、乗算器７０２、７０３及び７２１を特定し、それら乗算器７０２、７０３及び７２１に、出力命令を入力する。出力命令は、例えば、「１」という値である。乗算器７２１には、出力命令「１」が反転されて入力される。
【００９６】
以上の流れより、比較結果が一致の場合と不一致の場合は、次の処理が行われる。
【００９７】
＜比較の結果が一致の場合（比較結果値が「１」の場合）＞。
【００９８】
乗算器７０２には、出力命令「１」と反転された比較結果値「０」が入力される。このため、乗算器７０２からは、エラーを意味しない値「０」が出力される。
【００９９】
乗算器７０３には、出力命令「１」と比較結果値「１」が入力される。このため、乗算器７０２からは、出力命令パス７０６を介して、出力を意味する値「１」がバススイッチ７１０に出力される。
【０１００】
乗算器７２１には、反転された出力命令「０」と比較結果値「１」が入力される。このため、乗算器７２１からは、出力命令パス７２２を介して、出力を意味しない値「０」がバススイッチ７１１に出力される。
【０１０１】
従って、バススイッチ７１０及び７１１のうちのバススイッチ７１０が、データバッファ７０７及び７０８のうちのいずれかのバッファからのデータを、ダウンポート４０４を介して出力する。
【０１０２】
つまり、このケースでは、調停デバイス５０１が、データバッファ７０７又は７０８からのデータをバススイッチ７１０に出力させ、データバッファ７０７又は７０８からのデータをバススイッチ７１１に出力させない。
【０１０３】
＜比較の結果が不一致の場合（比較結果値が「０」の場合）＞。
【０１０４】
乗算器７０２には、出力命令「１」と反転された比較結果値「１」が入力される。このため、乗算器７０２からは、エラーを意味する値「１」が出力される。
【０１０５】
乗算器７０３には、出力命令「１」と比較結果値「０」が入力される。このため、乗算器７０２からは、出力命令パス７０６を介して、出力を意味しない値「０」がバススイッチ７１０に出力される。
【０１０６】
乗算器７２１には、反転された出力命令「０」と比較結果値「０」が入力される。このため、乗算器７２１からは、出力命令パス７２２を介して、出力を意味しない値「０」がバススイッチ７１１に出力される。
【０１０７】
従って、バススイッチ７１０及び７１１のうちのいずれからも、データバッファ７０７及び７０８からのデータは出力されない。また、乗算器７０２から出力された、エラーを意味する値「１」は、メインサーバ１０１内のハイパバイザ１０２に出力されて良い。ハイパバイザ１０２は、エラーを、ＬＰＡＲ１０３に通知して良い。エラーを意味する値「１」は、サブサーバ１１５内のハイパバイザ１１６に出力され、ハイパバイザ１１６も、ＬＰＡＲ１１７にエラーを通知して良い。
【０１０８】
つまり、このケースでは、調停デバイス５０１が、バススイッチ７１０及び７１１のいずれからもデータを出力させず、エラーを通知する。
【０１０９】
このようなデータ出力機構により、アップポート４０３及び４０５から入力された２つのデータの整合性をチェックし、一致が得られた場合に、２つのデータのうちのいずれかだけをディスク装置１３０に書き込むことができる。このようなデータ出力が、Ｉ／Ｏ拡張モジュール４０１というハードウェアにより実現される。このため、ハイパバイザ１０２（１１６）を実行するサーバ１０１（１１５）の負荷を軽減することができる。
【０１１０】
ところで、ダウンポート０（４０４）又はそれに接続されている第２の出力パスに障害が発生する等の原因で、ダウンポート０（４０４）からディスク装置１３０へのデータ出力が不可能となる場合がある。
【０１１１】
その場合、ディスク装置１３０へのパスが、ダウンポート０（４０４）とディスク装置１３０とを接続するパスから、ダウンポート１（４０６）とディスク装置１３０とを接続するパスに切り替えられ、切り替え後のパスを介して、ディスク装置１３０へデータが出力される。そのため、サーバ０（１０１）又はサーバ１（１１５）から出力されたデータが、ダウンポート０（４０４）に接続されているバススイッチ７１０だけではなく、ダウンポート１（４０６）に接続されているバススイッチ７１１に対しても送られる。
【０１１２】
ダウンポート０（４０４）からデータ出力が不可能になった（例えば、ダウンポート０（４０４）又はそれに接続されているパスに何らかの障害が発生した）場合、そのことが、例えば、下記の（ａ）又は（ｂ）の要素、
（ａ）アップポート０（４０３）に接続されているメインサーバ１０１に組み込みまれているソフトウェア、
（ｂ）ファームウェア４０９（図４参照）、
によって、検出される。要素（ａ）又は（ｂ）は、特定インターフェース７１４を介して、スイッチコントローラ７１２に、ダウンポート０（４０４）からデータ出力不可能であること（障害通知）を出力する。
【０１１３】
障害通知を受けたスイッチコントローラ７１２は、調停５０１デバイスに対し、ダウンポート０（４０４）への出力停止命令と、ダウンポート１（４０６）への出力切替命令とを出力する。それらの命令を受けた調停デバイス５０１は、ダウンポート０（４０４）に接続されているバススイッチ７１０への出力命令を停止し、ダウンポート１（４０６）に接続されているバススイッチ７１１に対し出力命令を出力する。具体的には、例えば、下記が行われる。
（＊）調停デバイス５０１が、ダウンポート０（４０４）からデータ出力不可能であることの通知を受ける前に出力した出力命令を反転した命令「０」を出力命令パス７０１を介して出力する。
（＊）乗算器７０２には、反転した出力命令「０」と反転された比較結果値「０」が入力される。このため、乗算器７０２からは、エラーを意味しない値「０」が出力される。
（＊）乗算器７０３には、反転した出力命令「０」と比較結果値「１」が入力される。このため、乗算器７０３からは、出力命令パス７０６を介して、出力を意味しない値「０」がバススイッチ７１０に出力される。
（＊）乗算器７２１には、反転した出力命令「１」と比較結果値「１」が入力される。このため、乗算器７２１からは、出力命令パス７２２を介して、出力を意味する値「１」がバススイッチ７１１に出力される。
【０１１４】
従って、バススイッチ７１０及び７１１のうちのバススイッチ７１１が、データバッファ７０７及び７０８のうちのいずれかのバッファからのデータを、ダウンポート１（４０６）を介して出力する。つまり、パスの切り替えが行われる。
【０１１５】
以下、本実施例に係る、ディスク装置からサーバに対するデータのライト処理、及び、ディスク装置からサーバへのデータのリード処理を説明する。
【０１１６】
図８は、本実施例に係る、ディスク装置からサーバに対するデータのライト処理のフローを示す。
【０１１７】
仮想ＨＢＡドライバ１１０（１２４）は、仮想ＨＢＡ１１２（１２６）に対しＤＭＡライト要求を発行する（ステップ８０１（８０２））。
【０１１８】
ＤＭＡライト要求を受けた仮想ＨＢＡ１１２（１２６）は、バックエンドドライバ１０６（１２０）にＤＭＡライト要求を転送し（ステップ８０３（８０４））、バックエンドドライバ１０６（１２０）は、ＨＢＡドライバ１０５（１１９）にＤＭＡライト要求を転送する（ステップ８０５（８０６））。
【０１１９】
ＤＭＡライト要求を受けたＨＢＡドライバ１０５（１１９）は、Ｉ／Ｏ拡張モジュール４０１上のアップポート４０３（４０５）に、ＤＭＡライト要求を転送する（ステップ８０７（８０８））。
【０１２０】
サーバ１０１（１１５）からＤＭＡライト要求を受けたＩ／Ｏ拡張モジュール４０１は、ＰＣＩ−ｅスイッチ４０２の上述のデータ出力機構により、サーバ１０１及び１１５からのＤＭＡライト要求を互いに比較し、それらが互いに一致していれば、アップポート４０３及び４０５に対応するダウンポート４０４に、ＤＭＡライト要求を転送する（ステップ８０９）。
【０１２１】
ダウンポート４０４に転送されたＤＭＡライト要求は、ＨＢＡ４１３に転送され（ステップ８１０）、ＨＢＡ４１３は、ディスク装置１３０からＤＭＡライトデータを読み出し、ダウンポート４０４に対しＤＭＡライトデータを転送する（ステップ８１１）。
【０１２２】
ＤＭＡライトデータを受けたＩ／Ｏ拡張モジュール４０１は、ＰＣＩ−ｅスイッチ４０２の上述のデータ入力機構により、ディスク装置１３０からのＤＭＡライトデータをアップポート４０３及び４０５に分配する（ステップ８１２、８１３）。
【０１２３】
ＤＭＡライトデータを受けたアップポート４０３（４０５）は、管理ＯＳ１０４（１１８）内の管理ＯＳ用メモリ１０８（１２２）にＤＭＡライトデータを転送する（ステップ８１４（８１５））。
【０１２４】
管理ＯＳ用メモリ１０８，１２２に転送されたＤＭＡライトデータは、ハイパバイザ１０２（１１６）により、仮想ＨＢＡ１１２（１２６）に転送される（ステップ８１６（８１７））。
【０１２５】
ＤＭＡライトデータを受けた仮想ＨＢＡ１１２（１２６）は、ゲストＯＳ用メモリ１１１（１２５）に、ＤＭＡライトデータを転送する（ステップ８１８（８１９））。
【０１２６】
ディスク装置１３０からサーバ１０１（１１５）へのＤＭＡライトデータの転送が完了した場合、ＨＢＡ４１３は、ＤＭＡライト完了通知を発行する。
【０１２７】
発行されたＤＭＡライト完了通知は、Ｉ／Ｏ拡張モジュール４０１のダウンポート４０４に転送され（ステップ８２０）、ＤＭＡライト完了通知を受けたＩ／Ｏ拡張モジュール４０１は、ＰＣＩ−ｅスイッチ４０２のデータ入力機構により、ＤＭＡライト完了通知をアップポート４０３及び４０５に分配する（ステップ８２１、８２２）。
【０１２８】
アップポート４０３（４０５）に転送されたＤＭＡライト完了通知は、管理ＯＳ１０４（１１８）内のＨＢＡドライバ１０５（１１９）に転送される（ステップ８２３、８２４）。
【０１２９】
ＤＭＡライト完了通知を受けたＨＢＡドライバ１０５（１０９）は、バックエンドドライバ１０６（１２０）にＤＭＡライト完了通知を転送し（ステップ８２５（８２６））、バックエンドドライバ１０６（１２０）は、仮想ＨＢＡ１１２（１２６）にＤＭＡライト完了通知を転送する（ステップ８２７（８２８））。
【０１３０】
ＤＭＡライト完了通知を受けた仮想ＨＢＡ１１２（１２６）は、仮想ＨＢＡドライバ１１０（１２４）にＤＭＡライト完了通知を転送する（ステップ８２９（８３０））。
【０１３１】
以上が、本実施例に係る、ディスク装置からサーバに対するデータのライト処理の流れ、である。
【０１３２】
図９は、本実施例に係る、ディスク装置からサーバへのデータのリード処理のフローを示す。
【０１３３】
仮想ＨＢＡドライバ１１０（１２４）は、仮想ＨＢＡ１１２（１２６）に対しＤＭＡリード要求を発行する（ステップ９０１（９０２））。
【０１３４】
ＤＭＡリード要求を受けた仮想ＨＢＡ１１２（１２６）は、バックエンドドライバ１０６（１２０）にＤＭＡリード要求を転送し（ステップ９０３（９０４））、バックエンドドライバ１０６（１２０）は、ＨＢＡドライバ１０５（１１９）にＤＭＡリード要求を転送する（ステップ９０５（９０６））。
【０１３５】
ＤＭＡリード要求を受けたＨＢＡドライバ１０５（１１９）は、Ｉ／Ｏ拡張モジュール４０１上のアップポート４０３（４０５）にＤＭＡリード要求を転送する（ステップ９０７（９０８））。
【０１３６】
サーバ１０１及び１１５からＤＭＡリード要求を受けたＩ／Ｏ拡張モジュール４０１（アップポート４０３及び４０５）は、ＰＣＩ−ｅスイッチ４０２のデータ出力機構により、それらのサーバ１０１及び１１５からのＤＭＡリード要求を互いに比較し、それらが一致していれば、アップポート４０３及び４０５に対応するダウンポート４０４にＤＭＡリード要求を転送する（ステップ９０９）。
【０１３７】
ダウンポート４０４に転送されたＤＭＡリード要求は、ＨＢＡ４１３に転送され（ステップ９１０）、ＨＢＡ４１３は、サーバから出力されたデータを要求するためのメモリリード要求を発行する。
【０１３８】
発行されたメモリリード要求は、ダウンポート４０４に転送され（ステップ９１１）、ＰＣＩ−ｅスイッチ４０２のデータ入力機構により、メモリリード要求がアップポート４０３及び４０５に分配される（ステップ９１２、９１３）。
【０１３９】
メモリリード要求を受けたアップポート４０３（４０５）は、ＨＢＡドライバ１０５（１１９）に転送される（ステップ９１４（９１５））。
【０１４０】
メモリリード要求を受けたＨＢＡドライバ１０５（１１９）は、バックエンドドライバ１０６（１２０）を介して（ステップ９１６（９１７））、メモリリード要求を、仮想ＨＢＡ１１２（１２６）に転送する（ステップ９１８（９１９））。
【０１４１】
メモリリード要求を受けた仮想ＨＢＡ１１２（１２６）は、ゲストＯＳ用メモリ１１１（１２５）にメモリリード要求を転送する（ステップ９２０（９２１））。
【０１４２】
メモリリード要求を受けたゲストＯＳ用メモリ１１１（１２５）は、ＤＭＡリードデータを出力する。
【０１４３】
ゲストＯＳ用メモリ１１１（１２５）から出力されたＤＭＡリードデータは、仮想ＨＢＡ１１２（１２６）に転送され（ステップ９２２（９２３））、仮想ＨＢＡ１１２（１２６）を介して管理ＯＳ用メモリ１０８（１２２）に転送される（ステップ９２４（９２５））。
【０１４４】
ＤＭＡリードデータを受けた管理用ＯＳメモリ１０８（１２２）は、Ｉ／Ｏ拡張モジュール４０１上のアップポート４０３（４０５）にＤＭＡリードデータを転送する（ステップ９２６（９２７））。
【０１４５】
ＤＭＡリードデータを受けたＩ／Ｏ拡張モジュール４０１は、ＰＣＩ−ｅスイッチ４０２のデータ出力機構により、サーバ１０１及び１１５からアップポート４０３及び４０５を介して入力されたＤＭＡリードデータを互いに比較し、それらが一致していれば、アップポート４０３及び４０５に対応するダウンアポート４０４にＤＭＡリードデータを転送する（ステップ９２８）。
【０１４６】
ダウンポート４０４に転送されたＤＭＡリードデータは、ＨＢＡ４１３に転送され（ステップ９２９）、ＨＢＡ４１３は、ディスク装置１３０に対しデータ（ＤＭＡリードデータ）を書き込む。
【０１４７】
ディスク装置１３０へのＤＭＡリードデータの転送が完了した場合、ＨＢＡ４１３は、ＤＭＡリード完了通知を発行する。
【０１４８】
発行されたＤＭＡリード完了通知は、Ｉ／Ｏ拡張モジュール４０１のダウンポート４０４に転送され（ステップ９３０）、ＤＭＡリード完了通知を受けたＩ／Ｏ拡張モジュール４０１は、ＰＣＩ−ｅスイッチ４０２のデータ入力機構により、ＤＭＡリード完了通知をアップポート４０３及び４０５に分配する（ステップ９３１（９３２））。
【０１４９】
アップポート４０３（４０５）に転送されたＤＭＡリード完了通知は、ＨＢＡドライバ１０５（１１９）に転送される（ステップ９３３（９３４））。
【０１５０】
ＤＭＡリード完了通知を受けたＨＢＡドライバ１０５（１１９）は、バックエンドドライバ１０６（１２０）にＤＭＡリード完了通知を転送し（ステップ９３５（９３６））、バックエンドドライバ１０６（１２０）は、仮想ＨＢＡ１１２（１２６）にＤＭＡリード完了通知を転送する（ステップ９３７（９３８））。
【０１５１】
ＤＭＡリード完了通知を受けた仮想ＨＢＡドライバ１１２（１１６）は、仮想ＨＢＡドライバ１１０（１２４）にＤＭＡリード完了通知を転送する（ステップ９３９（９４０））。
【０１５２】
以上が、本実施例に係る、ディスク装置からサーバへのデータのリード処理の流れ、である。
【０１５３】
以上、本発明の幾つかの実施例を説明したが、これらは本発明のための例示であって、本発明の範囲をこれらの実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ダウンポートの監視等を、ファームウェア４０９に代えてハイパバイザ１０２及び／又は１１６、或いは、サーバ１０１及び／又は１１５内の別の要素（ソフトウェア及び／又はハードウェア）が行えば、ＣＰＵ４０８及びメモリ４１０は無くても良い。
【符号の説明】
【０１５４】
１０１（１１５）…物理サーバ  １０２（１１６）…ハイパバイザ  １０３（１１７）…仮想サーバ（ＬＰＡＲ）
【図１】
0005511546.tif 000002
【図２】
0005511546.tif 000003
【図３】
0005511546.tif 000004
【図４】
0005511546.tif 000005
【図５】
0005511546.tif 000006
【図６】
0005511546.tif 000007
【図７】
0005511546.tif 000008
【図８】
0005511546.tif 000009
【図９】
0005511546.tif 000010