なお、以下の説明において、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インターフェイス装置(例えば通信ポート)を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、サーバが行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機(例えば物理サーバ又は仮想サーバ)にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
また、以下、説明を分かり易くするため、特段の説明がある場合を除いて、フォールトトレラントシステムが有する物理サーバの数は、2とする。しかし、物理サーバの数は、3以上でも良い。
実施例1では、物理サーバが互いに通信可能に接続されており、各物理サーバが、サーバの仮想化を実現するソフトウェアであるハイパバイザを有する。ハイパバイザが、互いに通信することで、サーバ同期を制御する。
以下、実施例1を詳細に説明する。
図1は、本発明の実施例1に係るフォールトトレラントシステムの構成を示す。
本実施例に係るフォールトトレラントシステムは、ハードウェア構成が同じである2つ物理サーバ101,115を有する。以下、物理サーバ101を、「サーバ101」或いは「メインサーバ101」と呼び、物理サーバ115を、「サーバ115」或いは「サブサーバ115」と呼ぶことがある。なお、図1では、サブサーバ115は単数だが、複数であっても良い。サーバ101(115)は、例えば、ブレードサーバである。
サーバ101(115)は、ハイパバイザ102(116)と、LPAR(Logical PARtition)103(117)と、HBA(Host Bus Adaptor)113(127)と、管理LAN(Local Area Network)114(128)とを備える。
メインサーバ101は、HBA113を介してディスク装置130に接続され、サブサ−バ115は、HBA127を介してディスク装置130に接続される。すなわち、各サーバ101,115は、共通のディスク装置130に接続される。HBA113(127)は、サーバ101(115)が有するI/O(Input/Output)デバイスの一種である。
メインサーバ101とサブサーバ115が、管理LAN114及び128を介して接続されている。管理LAN114と管理LAN128は、LAN129を介して接続されている。管理LAN114(128)は、LAN129を介して通信するためのI/Oデバイス(通信インターフェイス装置)であり、例えば、NIC(Network Interface Card)である。
ディスク装置130は、例えば、複数のディスク型の物理記憶デバイスを備えたストレージ装置である。2以上の物理記憶デバイスでRAID(Redundant Array of Independent (or Inexpensive) Disks)グループが構成されていても良い。物理記憶デバイスは、例えば、HDD(Hard Disk Drive)である。物理記憶デバイスは、ディスク型の物理記憶デバイスに限らず、他種の物理記憶デバイス(例えば、フラッシュメモリデバイス)が採用されても良い。また、ディスク装置130は、単数でも複数でも良い。ディスク装置130は、例えば、ブートデバイスとして使用される。すなわち、サーバ101(115)は、ディスク装置130からOSを読み出すブートを行うことができる。
ハイパバイザ102(116)は、OS(Operation System)(以下、管理OS)104(118)を備える。サーバ101(115)が有するハードウェアリソースは、I/Oデバイス(例えばHBA113(127)及び管理LAN114(128))の他に、例えば、1以上のCPU及び1以上のメモリを含むが、ハイパバイザ102(116)は、サーバ101(115)のハードウェアリソースを少なくとも2つ以上に論理的に分割することで、LPAR103(117)を生成する。LPAR103(117)は、仮想サーバであり、サーバ101(115)のハードウェアリソースの一部が割り当てられている。LPAR103(117)上では、ゲストOS109(123)が動作する。
管理OS104(118)では、HBAドライバ105(119)と、バックエンドドライバ106(120)と、管理LANドライバ107(121)が実行される。管理OS104(118)は、メモリ(以下、管理OS用メモリ)106(122)を管理する。
HBAドライバ105(119)は、HBA113(127)を制御するソフトウェアである。管理LANドライバ107(121)は、管理LAN114(128)を制御するソフトウェアである。バックエンドドライバ106(120)は、仮想HBA112(126)とHBAドライバ105(119)との通信を中継するソフトウェアである。
管理OS用メモリ108(122)が、管理OS104(118)で実行されるコンピュータプログラム(ソフトウェア)を記憶して良い。また、管理OS用メモリ108(122)は、ディスク装置130から読み出されたデータ、及び、ディスク装置130に書き込まれるデータの一時的な記憶領域としても使用される。
LPAR103(117)は、OS(以下、ゲストOS)109(123)と、仮想HBA112(126)とを備える。仮想HBA112(126)は、LPAR109(123)の外にあっても良い(ハイパバイザ102(116)に含まれても良い)。
ゲストOS109(123)では、仮想HBAドライバ110(124)が実行される。ゲストOS109(123)は、メモリ(以下、ゲストOS用メモリ)111(125)を管理する。ゲストOS109(123)では、アプリケーションプログラムが実行されて良い。
仮想HBAドライバ110(124)は、ゲスト用OSメモリ111(125)に記憶されていて良い。ゲストOS用メモリ111(125)は、LPAR109(123)を制御するプログラム等を記憶していて良い。仮想HBAドライバ110(124)は、仮想HBA112,126を制御するソフトウェアである。
管理OS104(118)とゲストOS109(123)が、管理OS用メモリ108(122)、仮想HBA112(126)及びゲストOS用メモリ111,125)を介して通信することができる。
上記構成によって、メインサーバ101内のハイパバイザ102と、サブサーバ115内のハイパバイザ116とは、管理LAN114及び128を介して、LPAR109(117)を同期させることができる。
なお、LPAR103及び117は、それぞれ、複数存在しても良い。この場合、HBA113(127)、及び/又は、管理LAN114(128)は、2以上のLPAR103(117)に共有されても良いし、LPAR103(117)毎に、HBA113(127)及び/又は管理LAN114(128)が割り当てられても良い。
LPAR103及び117がそれぞれ複数存在する場合、下記の(A)又は(B)が行われても良い。
(A)LPAR103(117)毎に、管理LAN114(128)が割り当てられていて良い。管理LAN114と管理LAN128が1対1で対応していて良い。例えば、第1のLPAR103がI/Oコマンド(リードコマンド又はライトコマンド)をクライアント(図示せず)から受信した場合、第1のLPAR103が、図2のステップ201又は図3のステップ301を開始し、且つ、ハイパバイザ102が、複数の管理LAN114のうち、第1のLPAR103に対応する管理LAN114を通じて、受信したI/Oコマンドを転送して良い。複数の管理LAN128のうち、I/Oコマンドの発行元の管理LAN114に対応した管理LAN128が、そのI/Oコマンドを受信して良い。ハイパバイザ116は、I/Oコマンドを受信した管理LAN128に対応する第1のLPAR117の管理用OSに対して、そのI/Oコマンドを転送して良い。これにより、図2のステップ202又は図3のステップ302が開始されて良い。
(B)ハイパバイザ102及び/又は116が、どのLPAR103とどのLPAR117が対応するかを表すLPAR管理情報を保持していても良い。この場合、例えば、第1のLPAR103がI/Oコマンドをクライアントから受信した場合、第1のLPAR103が、図2のステップ201又は図3のステップ301を開始し、且つ、下記の(b1)又は(b2)が行われて良い。
(b1)ハイパバイザ102が、第1のLPAR103に対応する第1のLPAR117を、ハイパバイザ102が保持するLPAR管理情報から特定して良い。ハイパバイザ102は、第1のLPAR117を表す送信先情報と上記受信したI/Oコマンドとを、管理LAN114を通じて、発行して良い。ハイパバイザ116は、送信先情報及びI/Oコマンドを受けた場合、送信先情報から第1のLPAR117を特定し、第1のLPAR117の管理用OSに対して、そのI/Oコマンドを転送して良い。これにより、図2のステップ202又は図3のステップ302が開始されて良い。
(b2)ハイパバイザ102が、第1のLPAR103が受信したI/Oコマンドとそれの受信者(第1のLPAR103)を表す受信者情報とを、管理LAN114を通じて、ハイパバイザ116に転送して良い。ハイパバイザ116は、受信者情報及びI/Oコマンドを受けた場合、受信者情報が表す第1のLPAR103に対応する第1のLPAR117を、ハイパバイザ116が保持するLPAR管理情報から特定し、第1のLPAR117の管理用OSに対して、受信したI/Oコマンドを転送して良い。これにより、図2のステップ202又は図3のステップ302が開始されて良い。
次に、図2及び3を参照して、本実施例に係るフォールトトレラントシステムが行う処理を説明する。
図2は、ディスク装置からサーバに対するデータのライト処理のフローを示す。
ここで、「ディスク装置からサーバに対するデータのライト処理」とは、リードコマンドを受けたLPAR103(117)がディスク装置130からリード対象のデータを読み出す処理と同じである。LPAR103(117)は、リードコマンドを受けると、ディスク装置130からリード対象のデータを読み出し、そのデータをクライアントに返す。これは、ディスク装置130を主体とすれば、ディスク装置130がLPAR103(117)に対してデータを書き込むと言うことができる。従って、本実施例の説明では、ディスク装置130からデータを読み出すことを、ディスク装置130がLPAR103(117)にデータを書き込むとすることがある(同様に、LPAR103(117)がディスク装置130にデータを書き込むことを、ディスク装置130からLPAR103(117)へデータが読み出されるとすることがある)。
従って、以下、LPAR103(117)からのリード要求を「DMA(Direct Memory Access)ライト要求」と言う。DMAライト要求は、クライアントからのリードコマンドを基に特定されたI/O先情報(例えば、リードコマンドで指定されているファイルを記憶するブロックのLBA(Logical Block Address)とそのブロックを有する論理ボリュームのLUN(Logical Unit Number)とを含んだ情報)を有して良い。DMAライト要求に従うデータを「DMAライトデータ」と言う。DMAライトデータの入力が完了したときに発行される応答を「DMAライト完了通知」と言う。なお、データの転送は、DMA以外の方式で行われても良い。
メインサーバ101内のLPAR103が、クライアントからリードコマンドを受けると、図2のステップ201が開始する。また、LPAR103がクライアントからリードコマンドを受けると、ハイパバイザ102が、管理LAN114を通じて、サブサーバ115内のハイパバイザ116に、そのリードコマンドを転送し、ハイパバイザ116が、管理LAN128を通じて受信したそのリードコマンドを、LPAR117の管理用OS118に、転送する。これにより、図2のステップ202が開始される。
すなわち、仮想HBAドライバ110(124)は、仮想HBA112(126)に対しDMAライト要求を発行する(ステップ201(202))。
DMAライト要求を受けたハイパバイザ102(116)(仮想HBA112(126))は、データの同期を図るため、LAN129を介して、DMAライト要求の発行を待ち合わせる(ステップ203(204))。具体的には、例えば、ハイパバイザ116(仮想HBA126)が、管理LAN128を通じて、待ち合わせを通知する。その通知を、管理LAN114を通じてハイパバイザ102(仮想HBA112)を受信した場合、待ち合わせの完了となる(ステップ205)。
DMAライト要求の待ち合わせが完了した場合、ハイパバイザ102(管理OS104)が、DMAライト要求に従うDMAライトデータをディスク装置130から読み出す。例えば、ハイパバイザ102(管理OS104)が、DMAライト要求に従うリード要求(例えば、LUN及びLBAを含んだ要求)を、ディスク装置130に送信し、そのリード要求に対する応答として、DMAライトデータを受信する。具体的には、例えば、下記が行われる。
(*)ハイパバイザ102(管理OS104)は、バックエンドドライバ106を介して(ステップ206)、HBAドライバ105に、DMAライト要求を転送する(ステップ207)。
(*)DMAライト要求を受けたHBAドライバ105は、HBA113にDMAライト要求を転送する(ステップ208)。DMAライト要求を受けたHBA113は、ディスク装置130から、DMAライト要求に従うDMAライトデータを読み出し、管理OS用メモリ108に、そのDMAライトデータを転送する(ステップ209)。
管理OS用メモリ108にDMAライトデータが転送された場合、ハイパバイザ102は、管理OS用メモリ108から、LAN129を経由して、サブサーバ115内の管理OS用メモリ122に、DMAライトデータを転送する(ステップ210、211、212)。
ステップ210の後、ハイパバイザ102が、DMAライトデータを管理OS用メモリ108からゲストOS用メモリ111に転送する(ステップ213)。
一方、ステップ212の後(管理OS用メモリ122へのDMAライトデータの転送が完了した場合)、ハイパバイザ116が、DMAライトデータを管理OS用メモリ122からゲストOS用メモリ125に転送する(ステップ214)。
ここで、データ入力の同期を図るため、ハイパバイザ102(116)は、LAN129を介して、ゲストOS用メモリ111(125)へ転送したDMAライトデータの入力を待ち合わせる(ステップ215、216)。具体的には、例えば、ハイパバイザ102は、待ち合わせ完了の通知を内部で発生させる。一方、ハイパバイザ116は、待ち合わせ完了を、管理LAN128を通じてメインサーバ101内のハイパバイザ102に通知する(ステップ217)。
ハイパバイザ102が、データ入力の待ち合わせが完了したことを検出した場合(例えば、待ち合わせ完了の通知が内部で発生し、且つ、ハイパバイザ116から待ち合わせ完了の通知を受信した場合)、ハイパバイザ102は、HBAドライバ105に対しDMAライト完了通知を転送する(ステップ218)。
DMAライト完了通知を受けたHBAドライバ105は、バックエンドドライバ106を介して、仮想HBA112にDMAライト完了通知を転送する(ステップ219、220)。
仮想HBA112にDMAライト完了通知が転送された場合、仮想HBA112から仮想HBAドライバ110に、DMAライト完了通知が転送される(ステップ223)。また、ハイパバイザ102は、LAN129を介して、ハイパバイザ116にDMAライト完了通知を転送し、ハイパバイザ116が、仮想HBA126にDMAライト完了通知を転送する(ステップ221、222、224)。仮想HBA126へのDMAライト完了通知の転送が完了した場合、仮想HBA126は、DMAライト完了通知を仮想HBAドライバ124に転送する(ステップ225)。
なお、図2に示したライト処理においてゲストOS用メモリ111に格納されたDMAライトデータは、LPAR103によって、クライアントからのリードコマンドに従うリード対象データとして、クライアントに送信される。もし、メインサーバ101に障害が発生した場合には、サブサーバ115内のハイパバイザ116が、メインサーバ101に障害が発生したことを、管理LAN128を通じて、検出し、LPAR117に、ゲストOS用メモリ125内のDMAライトデータ(リードコマンドに従うリード対象データ)をクライアントに送信させて良い。
図3は、ディスク装置からサーバへのデータのリード処理のフローを示す。
以下、LPAR103(117)からのライト要求を「DMAリード要求」と言う。DMAリード要求は、クライアントからのライトコマンドを基に特定されたI/O先情報(例えば、ライトコマンドで指定されているファイルの書き込み先のブロックのLBAとそのブロックを有する論理ボリュームのLUNとを含んだ情報)を有して良い。DMAリード要求に従うデータを「DMAリードデータ」と言う。DMAリードデータの出力が完了したときに発行される応答を「DMAリード完了通知」と言う。
メインサーバ101内のLPAR103が、クライアントからライトコマンドを受けると、図3のステップ301が開始する。また、LPAR103がクライアントからライトコマンドを受けると、ハイパバイザ102が、管理LAN114を通じて、サブサーバ115内のハイパバイザ116に、そのライトコマンドを転送し、ハイパバイザ116が、管理LAN128を通じて受信したそのライトコマンドを、LPAR117の管理用OS118に、転送する。これにより、図3のステップ302が開始される。なお、LPAR103(117)が受けたライトコマンドに従うデータ(DMAリードデータ)は、ゲストOS用メモリ111(125)に記憶される。
すなわち、仮想HBAドライバ110(124)は、仮想HBA112(126)に対しDMAリード要求を発行する(ステップ301(302))。
DMAリード要求を受けたハイパバイザ102(116)(仮想HBA112(126))は、データの同期を図るため、LAN129を介して、仮想HBA112(126)が受け取ったDMAリード要求を待ち合わせる(ステップ303、304)。具体的には、例えば、ハイパバイザ116(仮想HBA126)が、管理LAN128を通じて、待ち合わせを通知する。その通知を、管理LAN114を通じてハイパバイザ102(仮想HBA112)を受信した場合、待ち合わせの完了となる(ステップ305)。
DMAリード要求の待ち合わせが完了した場合、ハイパバイザ102(116)は、ゲストOS用メモリ111(125)からDMAリードデータを仮想HBA112(126)に転送する(ステップ306(307))。
DMAリードデータを受けた仮想HBA112(126)(ハイパバイザ102(116))は、管理OS用メモリ108(122)に、そのDMAリードデータを転送する(ステップ308(309))。
DMAリードデータが管理OS用メモリ108(122)に転送された場合、サブサーバ115内のハイパバイザ116は、管理LAN128を介して、メインサーバ101内のハイパバイザ102(管理OS用メモリ108)にDMAリードデータを転送する(ステップ310、311、312)。
サブサーバ115からDMAリードデータを受けたハイパバイザ102は、管理OS用メモリ108上で、LPAR103からのDMAリードデータと、LPAR117からのDMAリードデータとを比較する(出力データの整合性チェック)。DMAリードデータが互いに一致していなければ、ハイパバイザ102は、例えば、エラーを、LPAR103に通知し、且つ、管理LAN114を介して、ハイパバイザ116に通知して良い。ハイパバイザ116は、ハイパバイザ102からのエラーを、LPAR117に通知して良い。
DMAリードデータが互いに一致していれば、ハイパバイザ102(管理OS104)が、DMAリード要求に従うDMAリードデータ(上記整合性チェックで比較された2つのDMAリードデータのうちの一方)を、ディスク装置130に書き込む。例えば、ハイパバイザ102(管理OS104)が、DMAリード要求に従うライト要求(例えば、LUN及びLBAを含んだ要求)とライト対象データ(DMAリードデータ)を、ディスク装置130に送信する。具体的には、例えば、下記が行われる。
(*)ハイパバイザ102(仮想HBA112)は、バックエンドドライバ106を介して(ステップ313)、HBAドライバ105にDMAリード要求を転送する(ステップ314)。
(*)DMAリード要求を受けたHBAドライバ105は、HBA113にDMAリード要求を転送する(ステップ315)。
(*)DMAリード要求を受けたHBA113は、ハイパバイザ102(管理OS用メモリ108)に対しメモリリード要求を発行する(ステップ316)。
(*)メモリリード要求を受けたハイパバイザ102は、管理OS用メモリ108から、上記整合性チェックで比較された2つのDMAリードデータのうちの一方を、HBA113に転送する(ステップ317)。
(*)DMAリードデータを受けたHBA113は、ディスク装置130へDMAリードデータを転送し、当該データの転送が完了した場合、HBAドライバ105に対し、DMAリード完了通知を転送する(ステップ318)。
DMAリード完了通知を受けたHBAドライバ105は、バックエンドドライバ106を介して、仮想HBA112にDMAリード完了通知を転送する(ステップ319、320)。
仮想HBA112にDMAリード完了通知が転送された場合、ハイパバイザ102は、LAN129を介して、ハイパバイザ116(仮想HBA126)にDMAリード完了通知を転送する(ステップ321、322、323)。
ここで、ハイパバイザ102(116)は、データ出力の同期を図るため、LAN129を介して、仮想HBA112(126)へ転送されたDMAリード完了通知を待ち合わせる(ステップ324、325)。具体的には、例えば、ハイパバイザ102は、待ち合わせ完了の通知を内部で発生させる。一方、ハイパバイザ116は、待ち合わせ完了を、管理LAN128を通じてメインサーバ101内のハイパバイザ102に通知する(ステップ326)。
DMAリード完了通知の待ち合わせが完了した場合(例えば、待ち合わせ完了の通知が内部で発生し、且つ、ハイパバイザ116から待ち合わせ完了の通知を受信した場合)、ハイパバイザ102(116)(仮想HBA112(126))は、DMAリード完了通知を仮想HBAドライバ110(124)に転送する(ステップ327、328)。
以上、実施例1によれば、サーバ101(115)が、ハイパバイザ102(116)を有し、ハイパバイザ102及び116が、LAN129を介して互いに通信することで、LPAR(仮想サーバ)103及び117の同期と、サーバ101(115)のディスク装置130に対するデータ入出力の同期とを制御する。このため、これらの同期を制御するためのハードウェアは不要になる。また、ハイパバイザ102(116)によってハードウェアリソースが論理的に分割されるので、システムの構成が制限されない。従って、コストが抑えられ且つ柔軟性のあるフォールトレラントシステムを提供することができる。
以下、本発明の実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
本実施例によれば、ハイパバイザ102及び116が行う同期制御の一部が、ハードウェアによって行われる。このため、ハイパバイザ102(116)を実行するサーバ101(115)の負荷を軽減することができ、故に、クライアントからのI/Oの性能の向上が期待できる。なお、コストは、実施例1よりも高くなる可能性があるが、システムの構成が制限されないという点は、変わらない。本実施例でも、ハイパバイザ102(116)によってハードウェアリソースが論理的に分割されるからである。
ハードウェアで行われる同期制御部分として、ディスク装置130に対するデータ入出力の同期が採用される。具体的には、例えば、図2のステップ210〜214、及び、図3のステップ305〜317が、ハードウェアで行われる。それ以外の同期制御は、ハイババイザ102及び116によって行われる。
そのようなハードウェアとして、図4に示すにように、本実施例に係るフォールトトレラントシステムは、サーバ101(115)の他に、I/O拡張モジュール401を有する。
I/O拡張モジュール401は、複数のサーバ(101、115)とディスク装置130とに接続されるスイッチ装置である。I/O拡張モジュール401は、例えば、ディスク装置130に接続される複数のHBA(413,428)と、サーバ(101,115)と(HBA413,428)とのパスを切り替えるPCI−e(PCI Express)スイッチ402と、構成設定レジスタ407と、CPU(Central Processing Unit)408と、メモリ410とを有する。メモリ410は、ファームウェア409を記憶する。
PCI−eスイッチ402は、複数のアップスストリームポート(以下、アップポート)(403,405)と、複数のダウンストリームポート(以下、ダウンポート)(404,406)とを有する。図4は、2つのアップポート403及び405と、2つのダウンポート404及び406を示しているが、アップポート及びダウンポートは、3つ以上あって良い。また、本実施例では、アップポートの数とダウンポートの数は同じであるが、それらの数は異なっていても良い。また、アップポートは、物理サーバに割り当てられても良いし、物理サーバ内のLPARに割り当てられても良い。従って、例えば、1つの物理サーバに複数のアップポートに接続され、各アップポートは、その物理サーバ内のLPARに割り当てられても良い。
メインサーバ101はアップポート403に、サブサーバ115はアップポート405に、それぞれ、PCI Expressインターフェースを介して接続される。また、HBA413はダウンポート404に、HBA428はダウンポート406に、それぞれPCI Expressインターフェースを介して接続される。I/O拡張モジュール401は、サーバ101及び115の共通のI/Oデバイスである。サーバ101(115)は、サーバ101(115)内のインターフェースと同じインターフェースで、HBA413(428)に接続されている。なお、サーバ101(115)内のインターフェース、サーバ101(115)とスイッチ402間のインターフェース、及び、スイッチ402内でのインターフェースは、PCI Expressに代えて、他のインターフェースが採用されても良い。
PCI−eスイッチ402は、データ入出力機構を有する。データ入出力機構は、ディスク装置130から入力されたデータの分配、及び、ディスク装置130へ出力されるデータの整合性チェック等を行う。
CPU408は、ファームウェア409を実行することにより、PCI−eスイッチ402の監視(例えば、アップポート及びダウンポートのエラーの有無の監視)を行なうことができる。
構成設定レジスタ407は、同期させる必要のある2以上の物理サーバが接続されている2以上のアップポートを表す情報を記憶する記憶領域の一種である。そのような情報として、図5に示すポート管理情報601がある。この情報601は、ダウンポートとアップポートとの対応関係を示す。この情報601によれば、例えば、下記のことがわかる。
(A)ダウンポート0(404)に入力されたデータは、アップポート0(403)及びアップポート1(405)に分配され、アップポート0(403)及びアップポート1(405)から出力される(つまり、アップポート0に接続されているサーバと、アップポート1に接続されているサーバを、同期させる必要がある)。
(B)アップポート0(403)又はアップポート1(405)から入力されたデータは、ダウンポート0(404)から出力される。
図6は、PCI−eスイッチ402のデータ入出力機構のうちのデータ入力機構を示す。
データ入力機構は、ディスク装置130から入力されたデータをサーバ101(115)に分配する。データ入力機構は、調停デバイス501と、複数のバススイッチ(503,504)と、複数のデータバッファ(505,506)とを有する。
データバッファ(ダウンポート用のバッファ)は、ダウンポート毎にあって良い。このため、2つのデータバッファ505及び506が図示されている。データバッファ505(506)は、ディスク装置130からのデータの入力の同期を実現させるために、そのデータが一時的に格納される記憶領域である。
バススイッチ(例えばセレクタ)は、アップポート毎にあって良い。このため、2つのバススイッチ503及び504が図示されている。1つのバススイッチ503(504)の複数の入力端子には、複数の第1の入力パス(複数のダウンポート(404及び406)にそれぞれ接続されている複数のパス)が接続されている。また、1つのバススイッチ503(504)の出力端子には、第1の出力パス(このバススイッチ503(504)に対応するアップポート403(405)に接続されているパス)とが接続されている。従って、複数のアップポート(403,405)と複数のダウンポート(404,406)間には、複数の第1の入力パスと複数の第1の出力パスとが存在する。バススイッチ503(504)は、複数の第1の入力パスのうちの一つを選択し(複数の入力端子のうちの1つを選択し)、選択された第1の入力パスに接続されているデータバッファ505(506)からのデータを、このバススイッチ503(504)に接続されている第1の出力パスから出力する。
調停デバイス501は、出力命令パス502を介して、全てのバススイッチ(503,504)に接続されているハードウェア回路である。調停デバイス501は、ポート管理情報601(図5参照)を基に、複数のバススイッチから2以上のバススイッチを選択し、選択したバススイッチに、出力命令パス502を介して、選択する第1の入力パスを指定した出力命令を送信する。具体的には、調停デバイス501は、下記、
(*)複数のダウンポートのうち、データが入力されたダウンポート(例えば404)を検出する、
(*)ポート管理情報601を基に、検出されたダウンポート(404)に対応する2以上のアップポート(403及び405)を特定する、
(*)特定した2以上のアップポート(403及び405)にそれぞれ接続されている2以上のバススイッチ(503及び504)に、出力命令パス502を介して、選択する第1の入力パス(データが入力されたダウンポート(404)に接続されている入力パス)を指定した出力命令を出力する。
その出力命令を受けたバススイッチ503(504)は、そのバススイッチ503(504)に接続されている複数の第1の入力パスから、出力命令で指定されている第1の入力パス(データが入力されたダウンポート(404)に接続されている入力パス)を選択する。バススイッチ503(504)は、複数のデータバッファのうちの、選択した第1の入力パスに接続されているデータバッファ(505)からデータを読み出し、読み出したデータを、第1の出力パスを介して出力する。
このようなデータ入力機構により、ダウンポート404に入力されたデータが2つに分配され、分配された2つのデータが、それぞれ、そのダウンポート404に対応する2つのアップポート403及び405を介して、同期する2つのサーバ101及び115に送信される。このように、ディスク装置130から入力されたデータの分配及びサーバ101(115)への入力を、I/O拡張モジュール401というハードウェアにより実現することができる。このため、ハイパバイザ102(116)を実行するサーバ101(115)の負荷を軽減することができる。
図7は、PCI−eスイッチ402のデータ入出力機構のうちのデータ出力機構を示す。
データ出力機構は、調停デバイス501と、複数の乗算器(702,703,721)と、複数のデータバッファ(707,708)と、比較器709と、複数のバススイッチ(710,711)と、スイッチコントローラ712とを有する。
データバッファ(アップポート用のバッファ)は、アップポート毎にあって良い。このため、2つのデータバッファ707及び708が図示されている。データバッファ707(708)は、サーバ101(115)からアップポート403(405)を介して入力されたデータの出力の同期を実現するために、そのデータが一時的に格納される記憶領域である。
バススイッチ(例えばセレクタ)は、ダウンポート毎にあって良い。このため、2つのバススイッチ710及び711が図示されている。1つのバススイッチ710(711)には、複数の第2の入力パス(複数のアップポート(403及び405)にそれぞれ接続されている複数のパス)と、一つの第2の出力パス(このバススイッチ710(711)に対応するダウンポート404(406)に接続されているパス)とが接続されている。従って、複数のアップポート(403,405)と複数のダウンポート(404,406)間には、複数の第2の入力パスと複数の第2の出力パスとが存在する。バススイッチ710(711)は、複数の第2の入力パスのうちの一つを選択し、選択された第2の入力パスに接続されているデータバッファ707(708)からのデータを、バススイッチ710(711)に接続されている第2の出力パスから出力する。
乗算器として、出力にエラー通知パス705が接続されている第1の乗算器(702)と、出力に出力命令パス(バススイッチ(710,711)に接続される出力命令パス)(706,722)が接続される第2の乗算器(703,721)とがある。第1の乗算器(702)と第2の乗算器(703,721)で構成された乗算器群は、同期サーバ群(同期する複数のサーバ)に対応したアップポート群毎に、設けられて良い。例えば、アップポート群に対応する乗算器群において、第1の乗算器の数は、そのアップポート群を構成するアップポートの数に関わらず1であって良く、第2の乗算器の数は、そのアップポート群を構成するアップポートの数と同じで良い。乗算器群における各乗算器は、第1及び第2の入力端子を有して良い。第1の入力端子に、調停デバイス501に接続されている出力命令パス701が接続されていて、第2の入力端子に、比較結果通知パス(この乗算器群に対応したアップポート群に対応する比較器(709)の出力パス)(704)が接続されている。
調停デバイス501は、図6に示したデバイス501である。調停デバイス501は、ポート管理情報601を基に、複数の乗算器群から、データが入力されたアップポート群に対応した乗算器群を選択し、選択した乗算器群の各乗算器に出力命令を送信する。
比較器709は、アップポート群(2以上のアップポート)毎に用意されていて良い。比較器709は、その比較器709に対応する2つのアップポート403及び405からデータバッファ707及び708を介して出力された2つのデータを比較する。比較器709は、比較の結果に対応する信号を、比較結果通知パス704を介して、その比較器709に対応する乗算器群(乗算器702,703,721)と、調停デバイス501とに出力する。
スイッチコントローラ712は、ダウンポート404(又は406)が故障した際に、故障したダウンポート404(又は406)からのデータの出力を停止させ、他の正常なダウンポート406(又は404)に切り替えてデータを出力するように、調停デバイス501に対して命令を出力するものである。
以下、図7の例を基に、データ出力機構が行う処理を説明する。
同期しているサーバ101及び115から出力されたデータが、アップポート403及び405を介して入力され、データバッファ707及び708に格納される。調停デバイス501が、データが入力されたアップポート0(403)及びアップポート1(405)に対応するダウンポート0(404)を、同期管理情報601を基に特定する。なお、図5に示す情報601によれば、アップポート0(403)及びアップポート1(405)に、ダウンポート1(406)が対応付けられていないが、それは、ダウンポート1(406)が、ダウンポート0(404)からの切り替え先のダウンポートであることを意味する。同様に、図5に示す情報601について、アップポート2、3及び4には、ダウンポート3及び4が対応付けられていないが、これは、ダウンポート3及び4がダウンポート2からの切り替え先であることを意味する。このため、例えば、ダウンポート2で障害が発生した場合には、ダウンポート3又は4を介して、サーバからのデータがディスク装置130に書き込まれる。
調停デバイス501は、データが入力されたアップポート0(403)及びアップポート1(405)に対応するデータバッファ707及び708からデータを出力させる。これにより、バススイッチ710及び711と、比較器709とに、データバッファ707及び708からデータが入力される。
2つのデータが入力された比較器709は、2つのデータを比較し、比較結果を表す値(信号)を、比較結果通知パス740出力する。出力された値(比較結果値)は、調停デバイス501に入力され、且つ、乗算器702,703及び721のそれぞれの第2の入力端子に入力される。乗算器702には、比較結果値が反転されて入力される。
比較結果値は、比較器709による比較の結果が一致の場合(つまり、入力された2つのデータが互いに一致した場合)、一致を意味する値、例えば、「1」という値である。一方、比較結果値は、比較器709による比較の結果が不一致の場合(つまり、入力された2つのデータが異なっている場合)、不一致を意味する値、例えば、「0」という値である。
比較結果値を受けた調停デバイス501は、データが入力されたアップポート403及び405に対応するデータバッファ707及び708からデータを出力させ、且つ、同期管理情報601(図5参照)を基に、乗算器702、703及び721を特定し、それら乗算器702、703及び721に、出力命令を入力する。出力命令は、例えば、「1」という値である。乗算器721には、出力命令「1」が反転されて入力される。
以上の流れより、比較結果が一致の場合と不一致の場合は、次の処理が行われる。
<比較の結果が一致の場合(比較結果値が「1」の場合)>。
乗算器702には、出力命令「1」と反転された比較結果値「0」が入力される。このため、乗算器702からは、エラーを意味しない値「0」が出力される。
乗算器703には、出力命令「1」と比較結果値「1」が入力される。このため、乗算器702からは、出力命令パス706を介して、出力を意味する値「1」がバススイッチ710に出力される。
乗算器721には、反転された出力命令「0」と比較結果値「1」が入力される。このため、乗算器721からは、出力命令パス722を介して、出力を意味しない値「0」がバススイッチ711に出力される。
従って、バススイッチ710及び711のうちのバススイッチ710が、データバッファ707及び708のうちのいずれかのバッファからのデータを、ダウンポート404を介して出力する。
つまり、このケースでは、調停デバイス501が、データバッファ707又は708からのデータをバススイッチ710に出力させ、データバッファ707又は708からのデータをバススイッチ711に出力させない。
<比較の結果が不一致の場合(比較結果値が「0」の場合)>。
乗算器702には、出力命令「1」と反転された比較結果値「1」が入力される。このため、乗算器702からは、エラーを意味する値「1」が出力される。
乗算器703には、出力命令「1」と比較結果値「0」が入力される。このため、乗算器702からは、出力命令パス706を介して、出力を意味しない値「0」がバススイッチ710に出力される。
乗算器721には、反転された出力命令「0」と比較結果値「0」が入力される。このため、乗算器721からは、出力命令パス722を介して、出力を意味しない値「0」がバススイッチ711に出力される。
従って、バススイッチ710及び711のうちのいずれからも、データバッファ707及び708からのデータは出力されない。また、乗算器702から出力された、エラーを意味する値「1」は、メインサーバ101内のハイパバイザ102に出力されて良い。ハイパバイザ102は、エラーを、LPAR103に通知して良い。エラーを意味する値「1」は、サブサーバ115内のハイパバイザ116に出力され、ハイパバイザ116も、LPAR117にエラーを通知して良い。
つまり、このケースでは、調停デバイス501が、バススイッチ710及び711のいずれからもデータを出力させず、エラーを通知する。
このようなデータ出力機構により、アップポート403及び405から入力された2つのデータの整合性をチェックし、一致が得られた場合に、2つのデータのうちのいずれかだけをディスク装置130に書き込むことができる。このようなデータ出力が、I/O拡張モジュール401というハードウェアにより実現される。このため、ハイパバイザ102(116)を実行するサーバ101(115)の負荷を軽減することができる。
ところで、ダウンポート0(404)又はそれに接続されている第2の出力パスに障害が発生する等の原因で、ダウンポート0(404)からディスク装置130へのデータ出力が不可能となる場合がある。
その場合、ディスク装置130へのパスが、ダウンポート0(404)とディスク装置130とを接続するパスから、ダウンポート1(406)とディスク装置130とを接続するパスに切り替えられ、切り替え後のパスを介して、ディスク装置130へデータが出力される。そのため、サーバ0(101)又はサーバ1(115)から出力されたデータが、ダウンポート0(404)に接続されているバススイッチ710だけではなく、ダウンポート1(406)に接続されているバススイッチ711に対しても送られる。
ダウンポート0(404)からデータ出力が不可能になった(例えば、ダウンポート0(404)又はそれに接続されているパスに何らかの障害が発生した)場合、そのことが、例えば、下記の(a)又は(b)の要素、
(a)アップポート0(403)に接続されているメインサーバ101に組み込みまれているソフトウェア、
(b)ファームウェア409(図4参照)、
によって、検出される。要素(a)又は(b)は、特定インターフェース714を介して、スイッチコントローラ712に、ダウンポート0(404)からデータ出力不可能であること(障害通知)を出力する。
障害通知を受けたスイッチコントローラ712は、調停501デバイスに対し、ダウンポート0(404)への出力停止命令と、ダウンポート1(406)への出力切替命令とを出力する。それらの命令を受けた調停デバイス501は、ダウンポート0(404)に接続されているバススイッチ710への出力命令を停止し、ダウンポート1(406)に接続されているバススイッチ711に対し出力命令を出力する。具体的には、例えば、下記が行われる。
(*)調停デバイス501が、ダウンポート0(404)からデータ出力不可能であることの通知を受ける前に出力した出力命令を反転した命令「0」を出力命令パス701を介して出力する。
(*)乗算器702には、反転した出力命令「0」と反転された比較結果値「0」が入力される。このため、乗算器702からは、エラーを意味しない値「0」が出力される。
(*)乗算器703には、反転した出力命令「0」と比較結果値「1」が入力される。このため、乗算器703からは、出力命令パス706を介して、出力を意味しない値「0」がバススイッチ710に出力される。
(*)乗算器721には、反転した出力命令「1」と比較結果値「1」が入力される。このため、乗算器721からは、出力命令パス722を介して、出力を意味する値「1」がバススイッチ711に出力される。
従って、バススイッチ710及び711のうちのバススイッチ711が、データバッファ707及び708のうちのいずれかのバッファからのデータを、ダウンポート1(406)を介して出力する。つまり、パスの切り替えが行われる。
以下、本実施例に係る、ディスク装置からサーバに対するデータのライト処理、及び、ディスク装置からサーバへのデータのリード処理を説明する。
図8は、本実施例に係る、ディスク装置からサーバに対するデータのライト処理のフローを示す。
仮想HBAドライバ110(124)は、仮想HBA112(126)に対しDMAライト要求を発行する(ステップ801(802))。
DMAライト要求を受けた仮想HBA112(126)は、バックエンドドライバ106(120)にDMAライト要求を転送し(ステップ803(804))、バックエンドドライバ106(120)は、HBAドライバ105(119)にDMAライト要求を転送する(ステップ805(806))。
DMAライト要求を受けたHBAドライバ105(119)は、I/O拡張モジュール401上のアップポート403(405)に、DMAライト要求を転送する(ステップ807(808))。
サーバ101(115)からDMAライト要求を受けたI/O拡張モジュール401は、PCI−eスイッチ402の上述のデータ出力機構により、サーバ101及び115からのDMAライト要求を互いに比較し、それらが互いに一致していれば、アップポート403及び405に対応するダウンポート404に、DMAライト要求を転送する(ステップ809)。
ダウンポート404に転送されたDMAライト要求は、HBA413に転送され(ステップ810)、HBA413は、ディスク装置130からDMAライトデータを読み出し、ダウンポート404に対しDMAライトデータを転送する(ステップ811)。
DMAライトデータを受けたI/O拡張モジュール401は、PCI−eスイッチ402の上述のデータ入力機構により、ディスク装置130からのDMAライトデータをアップポート403及び405に分配する(ステップ812、813)。
DMAライトデータを受けたアップポート403(405)は、管理OS104(118)内の管理OS用メモリ108(122)にDMAライトデータを転送する(ステップ814(815))。
管理OS用メモリ108,122に転送されたDMAライトデータは、ハイパバイザ102(116)により、仮想HBA112(126)に転送される(ステップ816(817))。
DMAライトデータを受けた仮想HBA112(126)は、ゲストOS用メモリ111(125)に、DMAライトデータを転送する(ステップ818(819))。
ディスク装置130からサーバ101(115)へのDMAライトデータの転送が完了した場合、HBA413は、DMAライト完了通知を発行する。
発行されたDMAライト完了通知は、I/O拡張モジュール401のダウンポート404に転送され(ステップ820)、DMAライト完了通知を受けたI/O拡張モジュール401は、PCI−eスイッチ402のデータ入力機構により、DMAライト完了通知をアップポート403及び405に分配する(ステップ821、822)。
アップポート403(405)に転送されたDMAライト完了通知は、管理OS104(118)内のHBAドライバ105(119)に転送される(ステップ823、824)。
DMAライト完了通知を受けたHBAドライバ105(109)は、バックエンドドライバ106(120)にDMAライト完了通知を転送し(ステップ825(826))、バックエンドドライバ106(120)は、仮想HBA112(126)にDMAライト完了通知を転送する(ステップ827(828))。
DMAライト完了通知を受けた仮想HBA112(126)は、仮想HBAドライバ110(124)にDMAライト完了通知を転送する(ステップ829(830))。
以上が、本実施例に係る、ディスク装置からサーバに対するデータのライト処理の流れ、である。
図9は、本実施例に係る、ディスク装置からサーバへのデータのリード処理のフローを示す。
仮想HBAドライバ110(124)は、仮想HBA112(126)に対しDMAリード要求を発行する(ステップ901(902))。
DMAリード要求を受けた仮想HBA112(126)は、バックエンドドライバ106(120)にDMAリード要求を転送し(ステップ903(904))、バックエンドドライバ106(120)は、HBAドライバ105(119)にDMAリード要求を転送する(ステップ905(906))。
DMAリード要求を受けたHBAドライバ105(119)は、I/O拡張モジュール401上のアップポート403(405)にDMAリード要求を転送する(ステップ907(908))。
サーバ101及び115からDMAリード要求を受けたI/O拡張モジュール401(アップポート403及び405)は、PCI−eスイッチ402のデータ出力機構により、それらのサーバ101及び115からのDMAリード要求を互いに比較し、それらが一致していれば、アップポート403及び405に対応するダウンポート404にDMAリード要求を転送する(ステップ909)。
ダウンポート404に転送されたDMAリード要求は、HBA413に転送され(ステップ910)、HBA413は、サーバから出力されたデータを要求するためのメモリリード要求を発行する。
発行されたメモリリード要求は、ダウンポート404に転送され(ステップ911)、PCI−eスイッチ402のデータ入力機構により、メモリリード要求がアップポート403及び405に分配される(ステップ912、913)。
メモリリード要求を受けたアップポート403(405)は、HBAドライバ105(119)に転送される(ステップ914(915))。
メモリリード要求を受けたHBAドライバ105(119)は、バックエンドドライバ106(120)を介して(ステップ916(917))、メモリリード要求を、仮想HBA112(126)に転送する(ステップ918(919))。
メモリリード要求を受けた仮想HBA112(126)は、ゲストOS用メモリ111(125)にメモリリード要求を転送する(ステップ920(921))。
メモリリード要求を受けたゲストOS用メモリ111(125)は、DMAリードデータを出力する。
ゲストOS用メモリ111(125)から出力されたDMAリードデータは、仮想HBA112(126)に転送され(ステップ922(923))、仮想HBA112(126)を介して管理OS用メモリ108(122)に転送される(ステップ924(925))。
DMAリードデータを受けた管理用OSメモリ108(122)は、I/O拡張モジュール401上のアップポート403(405)にDMAリードデータを転送する(ステップ926(927))。
DMAリードデータを受けたI/O拡張モジュール401は、PCI−eスイッチ402のデータ出力機構により、サーバ101及び115からアップポート403及び405を介して入力されたDMAリードデータを互いに比較し、それらが一致していれば、アップポート403及び405に対応するダウンアポート404にDMAリードデータを転送する(ステップ928)。
ダウンポート404に転送されたDMAリードデータは、HBA413に転送され(ステップ929)、HBA413は、ディスク装置130に対しデータ(DMAリードデータ)を書き込む。
ディスク装置130へのDMAリードデータの転送が完了した場合、HBA413は、DMAリード完了通知を発行する。
発行されたDMAリード完了通知は、I/O拡張モジュール401のダウンポート404に転送され(ステップ930)、DMAリード完了通知を受けたI/O拡張モジュール401は、PCI−eスイッチ402のデータ入力機構により、DMAリード完了通知をアップポート403及び405に分配する(ステップ931(932))。
アップポート403(405)に転送されたDMAリード完了通知は、HBAドライバ105(119)に転送される(ステップ933(934))。
DMAリード完了通知を受けたHBAドライバ105(119)は、バックエンドドライバ106(120)にDMAリード完了通知を転送し(ステップ935(936))、バックエンドドライバ106(120)は、仮想HBA112(126)にDMAリード完了通知を転送する(ステップ937(938))。
DMAリード完了通知を受けた仮想HBAドライバ112(116)は、仮想HBAドライバ110(124)にDMAリード完了通知を転送する(ステップ939(940))。
以上が、本実施例に係る、ディスク装置からサーバへのデータのリード処理の流れ、である。
以上、本発明の幾つかの実施例を説明したが、これらは本発明のための例示であって、本発明の範囲をこれらの実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ダウンポートの監視等を、ファームウェア409に代えてハイパバイザ102及び/又は116、或いは、サーバ101及び/又は115内の別の要素(ソフトウェア及び/又はハードウェア)が行えば、CPU408及びメモリ410は無くても良い。