(57)【要約】      （修正有）【課題】複数のノードを使った共通のデバイスに対する監視を効率的に行うことを可能とする。【解決手段】各々がＢＭＣ（ベースボードマネジメントコントローラ）を備える複数のノードが同一のデバイス１１２を共有する計算機システム１００において、各ＢＭＣは、各々のＢＭＣ内の情報を転送する転送バス１１１により接続され、各ＢＭＣは、自身及び他のノードのステータスに基づいて自身のステータスを決定するマトリックスを備え、共有デバイス１１２を監視しているマスタＢＭＣは、共有デバイス１１２から取得したログ情報を格納する記憶領域１１３を備え、共有デバイス１１２を監視していないスレーブＢＭＣは転送バス１１１を介してマスタＢＭＣ内の共有デバイスログ情報を読み出して格納する記憶領域１１４を備え、マスタＢＭＣに障害が発生した際に、スレーブＢＭＣは前記ステータスとマトリックスにより新たなマスタコントローラに成る。【選択図】図１
2015230720.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードが同一のデバイスを共有し、各ノードは前記共有デバイスを排他的に監視するコントローラを備えた計算機システムにおいて、各コントローラは、各コントローラのステータスを表示するステータス信号と、各コントローラ内の情報を転送する転送バスにより接続され、各コントローラは、他コントローラのステータス信号に基づいて自コントローラのステータスを決定するマトリックスを備え、前記共有デバイスを監視しているコントローラ（以後、マスタコントローラと呼ぶ。）は当該共有デバイスから取得したログ情報を格納する記憶領域を備え、前記共有デバイスを監視していないコントローラ（以後、スレーブコントローラと呼ぶ。）は前記転送バスを介して前記マスタコントローラ内の共有デバイスログ情報を読み出して格納する記憶領域を備え、前記マスタコントローラに障害が発生した際に、前記スレーブコントローラは前記ステータス信号と前記マトリックスにより新たなマスタコントローラに成ることを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェアプログラムによって更新可能なファームウェアを内部に有するサーバ装置に関するものである。
【背景技術】
【０００２】
昨今のサーバの運用上、省スペースでなおかつ性能が確保されているCiBS(Cluster in Box System)を使用するケースが年々増加している。CiBSとは、一つのシステム内に、複数のノードが搭載される形態のことである。
【０００３】
しかしながら、一つのノード内に全てのデバイスを搭載すると、ノードの数だけデバイスを用意する必要があるため、コストの増大が懸念される。
【０００４】
そこで、複数のノードが一部のデバイスを共有化するシステムが提案された。共有化されたデバイスに対しての監視は、片側のノード内のＢＭＣ(ベースボードマネジメントコントローラ)のみが実施する。監視をするＢＭＣをマスタＢＭＣとする。なお、もう一つのノードにもＢＭＣは搭載されているが、競合が発生しないように共有デバイスに対する監視は実施しない。監視をしていないＢＭＣをスレーブＢＭＣとする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１２３５３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本システムに対する課題として、以下の２点が挙げられる。
１．マスタＢＭＣに障害が発生した場合、共有デバイスに対する監視が停止してしまう点が課題として挙げられる。本システムではスレーブＢＭＣを搭載しているが、前記背景技術にあるように、共有デバイスに対する競合を避けるためにスレーブＢＭＣは共有デバイスに対する監視を実施していないので、マスタＢＭＣに障害が発生した場合もスレーブＢＭＣは共有デバイスを監視することができない。結果として、共有デバイスに対する監視はマスタＢＭＣのみに依存している。
２．マスタＢＭＣに障害が発生した場合、マスタＢＭＣに障害が発生する以前における共有デバイスに関するログは、障害が発生したＢＭＣに記録されているため、ログを抽出することが困難となる。
【課題を解決するための手段】
【０００７】
複数のノードが同一のデバイスを共有し、各ノードは前記共有デバイスを排他的に監視するコントローラを備えた計算機システムにおいて、各コントローラは、各コントローラのステータスを表示するステータス信号と、各コントローラ内の情報を転送する転送バスにより接続され、各コントローラは、他コントローラのステータス信号に基づいて自コントローラのステータスを決定するマトリックスを備え、前記共有デバイスを監視しているコントローラ（以後、マスタコントローラと呼ぶ。）は当該共有デバイスから取得したログ情報を格納する記憶領域を備え、前記共有デバイスを監視していないコントローラ（以後、スレーブコントローラと呼ぶ。）は前記転送バスを介して前記マスタコントローラ内の共有デバイスログ情報を読み出して格納する記憶領域を備え、前記マスタコントローラに障害が発生した際に、前記スレーブコントローラは前記ステータス信号と前記マトリックスにより新たなマスタコントローラに成ることを特徴とする。
【発明の効果】
【０００８】
・両ＢＭＣはお互いに監視しているため、マスタＢＭＣに障害が発生した場合に、スレーブＢＭＣがマスタＢＭＣの異常を検知することでマスタ化し、共有デバイスに対する監視を維持することができる。
・障害発生前のログを、スレーブからマスタに切り替わったＢＭＣが保持することができる。
・障害が発生したＢＭＣを搭載しているノードを交換した後にも、再度マスタＢＭＣとスレーブＢＭＣ間で共有デバイスのログを共有することができ、共有デバイスに対する監視及びログの保持をより確実にすることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明を適用するシステムの概略図である。
【図２】本発明を適用した場合の２つのＢＭＣの間の情報共有のためのフローである。
【図３】ＢＭＣ内に確保されている共有情報エリアを表す図である。
【図４】２つのＢＭＣの起動時における情報を同期するためのフローである。
【図５】ＩＰＭＢバスを使ったヘルスカウンタによるＢＭＣの監視方式の概略図である。
【図６】ＢＭＣ起動時における信号監視をするための各設定値の初期化フローである。
【図７】マスタ・スレーブ監視スレッドが信号を監視するためのフローである。
【図８】２ノードのＢＭＣ間の情報を示す信号とステータスの一覧表(表１)である。
【図９】２ノード内のＢＭＣの内部状態を示す変数の一覧表(表２)である。
【図１０】マスタ・スレーブ制御スレッドを制御するマトリックスの一覧表(表３)である
【図１１】マスタ・スレーブ制御スレッドの制御マトリックス内で用いる関数一覧表(表４)である。
【発明を実施するための形態】
【００１０】
以下、本発明の一実施形態を図面により説明する。
【００１１】
図１は、本発明を適用するシステムの概略図である。サーバ１００の内部には、ノード１０１、ノード１０３と呼ばれるモジュールと、ノード１０１とノード１０３が共有する共有デバイス１１２が搭載されている。共有デバイス１１２には、ＨＤＤや電源ユニット、ＰＡＮＥＬ、温度センサー等が含まれる。ノードＡ１０１は、ＢＭＣ０(マスター)１０２と個別デバイス１０５で構成されている。同様に、ノードＢ１０３は、ＢＭＣ１(スレーブ)１０４と個別デバイス１０６で構成されている。さらに、ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４を繋ぐＩＰＭＢバス１１１、ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４と共有デバイス１１２を接続するＩ２Ｃバス１０９、ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４と共有デバイス１１２を接続するＧＰＩＯバス１１０も実装されている。
【００１２】
また、ＢＭＣ０(マスター)１０２内には共有情報エリア１１３が、ＢＭＣ１(スレーブ)１０４内には共有情報エリア１１４がそれぞれ確保されている。
【００１３】
図３は、ＢＭＣ内のshared memoryに確保されている共有情報エリアを表す図である。各ＢＭＣの共有情報エリアには、共有構成情報、ＢＭＣ０固有情報、ＢＭＣ１固有情報、共有デバイス情報の４種類の情報が格納されている。この共有情報エリアは、ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４が、ＩＰＭＢバス１１１に対して、ＩＰＭＢコマンドを発行することで取得可能となっている。
【００１４】
次に、共有デバイスの監視方式について説明する。図１では、ＢＭＣ０(マスター)１０２がＩ２Ｃバス１０９を用いて共有デバイス１１２を監視している。なお、ＢＭＣ１(スレーブ)１０４は、共有デバイス１１２を監視していない。
【００１５】
さらに、ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４を管理するマスタ・スレーブ制御スレッドについて説明する。マスタ・スレーブ制御スレッドとは、ノード間のＢＭＣの制御するプログラムであり、各ＢＭＣ内に実装されている。ＢＭＣ０(マスター)１０２とＢＭＣ１(スレーブ)１０４の管理はマスタ・スレーブ制御スレッドが系間信号及び内部状態変数の組み合わせによって行う。
【００１６】
課題１を解決するための、ＩＰＭＢバスを使ったスレーブＢＭＣがマスタＢＭＣを監視するヘルスカウンタについて、図３と図５を用いて説明する。
【００１７】
図３に示すように、ＢＭＣ０内のＢＭＣ０固有情報エリアにＢＭＣ０用のヘルスカウンタエリアを用意する。同様にＢＭＣ０内のＢＭＣ１固有情報エリアに、ＢＭＣ１用のヘルスカウンタエリアを用意する。
【００１８】
図５は、ＩＰＭＢバスを使ったヘルスカウンタによるＢＭＣの監視方式の概略図である。ＢＭＣ０(マスター)５００は、ＢＭＣ０固有情報ヘルスカウントエリア５０１に対して、格納されている値を一定時間毎に加算する。さらにＢＭＣ１(スレーブ)５０２は、ＩＰＭＢバス５０４を通じて、ＢＭＣ０固有情報ヘルスカウントエリア５０１に格納された値を一定時間毎に読み出す。ＢＭＣ０(マスター)５００に問題が発生すると、ＢＭＣ０固有情報ヘルスカウントエリア５０１に格納されている値は変化しなくなるため、ＢＭＣ１(スレーブ)５０２は、ＢＭＣ０５００に問題が発生したことを検知することができる。また、ＢＭＣ１は、ＩＰＭＢバス５０４を通じて、ＢＭＣ０(マスター)５００内のＢＭＣ１固有情報ヘルスカウントエリア５０３に対して、格納されている値を一定時間毎に加算する。さらに、ＢＭＣ０(マスター)５００は、ＢＭＣ１固有情報ヘルスカウントエリア５０３に格納されている値を一定時間毎に読み取る。ＢＭＣ１５０２に問題が発生すると、ＢＭＣ１固有情報ヘルスカウントエリア５０３に格納されている値は変化しなくなるため、ＢＭＣ０５００は、ＢＭＣ１５０２に問題が発生したことを検知することができる。以上の仕様によって、ＢＭＣ０(マスター)５００とＢＭＣ１(スレーブ)５０２のどちらが故障しても、故障していないＢＭＣが検知することができる。
【００１９】
課題２を解決する本発明の運用方式を図１と図２のフローを用いて説明する。ＢＭＣ０(マスター)１０２がＩ２Ｃバス１０９を使って共有デバイスから得たログを、共有情報エリア１１３に記録するものとする。
【００２０】
図２は、通常運用時におけるマスタＢＭＣ２００とスレーブＢＭＣ２０１で共有デバイス１１２のログを共有するためのフローである。ＩＰＭＢコマンドは常にスレーブＢＭＣ２０１側がマスタ、マスターＢＭＣ２００側がスレーブとなりスレーブＢＭＣ側から発行する仕様とする。スレーブＢＭＣ２０１が、マスターＢＭＣ２００に対してＩＰＭＢコマンド２０４を送信する。ＢＭＣ０(マスター)２００は、ＩＰＭＢコマンド２０４を受け取ると、マスターＢＭＣ２００の内部に確保されている共有情報エリア２０２に記録されている共有デバイス１１２に関するログを読み出す。読み出したログをレスポンス２０５として、スレーブＢＭＣ２０１に送信する。スレーブＢＭＣ２０１は、レスポンス２０５を受信すると、共有情報エリア２０３に書き込むことで、共有デバイス１１２のログをマスターＢＭＣ２００とスレーブＢＭＣ２０１の間で共有する。
【００２１】
図４は、ＢＭＣ起動時におけるマスタＢＭＣ４００とスレーブＢＭＣ４０１で共有デバイス１１２のログを共有するためのフローである。マスタＢＭＣ４００は、ＢＭＣ起動４０６を実施した後、Master系と認識４０８され、同期化情報の設定４１０を実施し、ＢＭＣ起動完了４１２となる。一方、スレーブＢＭＣ４０１は、ＢＭＣ起動再起動４０７を実施する。そして、マスタＢＭＣ４００がMaster系と認識４０８された後に、スレーブＢＭＣ４０１はSlave系と認識４０９される。スレーブＢＭＣ４０１がマスタＢＭＣ４００に対してＩＰＭＢコマンドGetBMC sharedinfo４０４を送信する。マスタＢＭＣ４００は、ＩＰＭＢコマンドGetBMCsharedinfo４０４を受け取ると、マスターＢＭＣ４００の内部に確保されている共有情報エリア４０２に記録されている共有デバイス１１２に関するログを読み出す。読み出したログをレスポンス４０５として、スレーブＢＭＣ４０１に送信する。スレーブＢＭＣ４０１は、レスポンス４０５を受信すると、共有情報エリア４０３に書き込むことで、共有デバイス１１２のログをマスターＢＭＣ４００とスレーブＢＭＣ４０１の間で共有する。その後、スレーブＢＭＣ４０１は、ＢＭＣ起動完了(READY)４１１となる。以上の手法で、システム起動時に共有デバイス１１２のログをマスターＢＭＣ４００とスレーブＢＭＣ４０１の間で共有を実現する。以上の同期方法によって、マスタＢＭＣに障害が生じたことによって、スレーブＢＭＣがマスタに切り替わった後も、マスタＢＭＣが保持していた共有デバイスの監視ログを保持することができる。
【００２２】
ここで、ＢＭＣ０に障害が発生した後の状況を説明する。ＢＭＣ１はマスタとなったため、Ｉ２Ｃバス１０９を使って共有デバイス１１２の監視を行う。さらに、ＢＭＣ０が故障しているので、ノード０を交換した場合について説明する。ノード０を交換した場合、交換後のノード０に搭載されているＢＭＣ０はスレーブとなる。ＢＭＣ０がスレーブとして認識される流れを説明する。ノード０を交換し、ＢＭＣ０が再起動中は、ＢＭＣ０のステータスが「Ｂ」、ＢＭＣ１のステータスが「Ｄ」となる。図１０(表３)より、"F_BC"関数が実行され、ＢＭＣ０のステータスは「Ｃ」へ移行する。ＢＭＣ０のステータスは「Ｃ」、ＢＭＣ１のステータスは「Ｄ」なので、"F_N"関数が実行され、ＢＭＣ０のステータスは「Ｅ」へ移行する。ＢＭＣ０のステータスは「Ｅ」、ＢＭＣ１のステータスは「Ｄ」となるので、"F_SR"関数が実行され、ＢＭＣ０のステータスは「Ｆ」へ移行する。ＢＭＣ０のステータスは「Ｆ」、ＢＭＣ１のステータスは「Ｄ」となるので、"F_N"関数が実行され、ＢＭＣ０のステータスは「Ｆ」を維持する。以上の流れで、ノード０を交換した場合、ＢＭＣ０をスレーブとして認識する。また、ＢＭＣ１が共有デバイスを監視した際のログは、ノード０を交換した再度ＢＭＣ０と共有する。
【００２３】
最後に、課題１、課題２を解決するＩＰＭＢバスを使った場合のスレーブＢＭＣがマスタＢＭＣを監視する方式、及びマスタＢＭＣとスレーブＢＭＣの共有情報を同期させる方式を図８(表１)、図９(表２)、図１０(表３)、図１１(表４)を用いて説明する。
【００２４】
図８(表１)にマスタＢＭＣとスレーブＢＭＣ間の情報を示す信号の一覧を示す。この信号は、ＧＰＩＯに割り当てられる。図８(表１)の中の「Present」「Ready」「M/S」「Busy」「R/A」の信号がＧＰＩＯ１１０内の５本の信号線に割り当てられる。１つのＢＭＣに割り当てられた５本の信号線に対して、各ＢＭＣが自身の状態に応じて「０」か「１」かの信号を出力し続ける。出力された値から各ＢＭＣのステータスが図８(表１)より決定される。例として、「Present」「Ready」「M/S」の３つの信号の値が「１」、「Busy」信号の値が「０」の場合は、ステータスが「Ｄ」となり、マスタ状態が確定している状態となる。「Present」「Ready」の２つの信号の値が「１」、「M/S」「R/A」信号の値が「０」の場合は、ステータスが「Ｆ」となり、スレーブ状態が確定している状態となる。「Present」「Ready」「M/S」「Busy」の４つの信号の値が「１」の場合は、ステータスが「Ｊ」となり、スレーブ側ＢＭＣがマスタＢＭＣに対して、マスタＢＭＣがスレーブになった場合にマスタになることを禁止する信号を出す。
【００２５】
図９(表２)は、マスタＢＭＣとスレーブＢＭＣの内部状態を示す変数の一覧表である。これらの変数は、マスタ・スレーブ制御スレッドが図８(表１)、図１０(表３)の状態遷移のために用いる変数である。
【００２６】
図１０(表３)は、マスタ・スレーブ制御スレッドを制御するマトリックス表である。各ＢＭＣのステータスが変更されると、図１０(表３)のマトリックス表に従って、マスタ・スレーブ制御スレッドは各ＢＭＣのステータスを移行させる。図１０(表３)について説明する。
【００２７】
「自分のステータス」は、ＢＭＣ０、１のどちらでも当てはまり、「相手のステータス」には「自分のステータス」に選ばれなかったＢＭＣが当てはまる。各欄の上段の値は、実行される関数名であり、下段の値は、「自分のステータス」が移行するステータスを意味する。なお、上段の値である実行される関数は、後述の図１１(表４)で説明する。自分及び相手のすべてのステータス変化はそれぞれのステータスをトレースログに採取する（「自分のステータス」が「Ｄ」「相手のステータス」が「Ｇ」の場合、「自分のステータス」が「Ｆ」「相手のステータス」が「Ｈ」の場合、「自分のステータス」が「Ｆ」「相手のステータス」が「Ｉ」の場合の３つの場合は、自分のステータスが変化しないので除く）。IPMB通信は「自分のステータス」が「Ｆ」「相手のステータス」が「Ｄ」の場合の時以外はNot readyとし通信をしてはならない。
【００２８】
図９(表２)で示した「IPMB_ERR」は、スレーブ側のみ共通デバイスのログ取得時やヘルスカウンタ書き込み時にIPMB通信ライブラリにより検出し、正常・異常を共通変数に反映させる。図９(表２)で示した「HEL_ERR」はIPMB通信により互いにヘルスカウンタをチェックする。スレーブ側はマスタ側に自分のヘルスカウンタを報告する(マスタ側はIPMB通信を能動的に起動しないため)。
【００２９】
図１１(表４)は、図１０(表３)のマスタ・スレーブ制御スレッドを制御するマトリックスにおいて用いる関数の一覧表である。これらの仕様を用いて、マスタＢＭＣ０が故障した場合の動きについて説明する。
【００３０】
まず、マスタＢＭＣ０とスレーブＢＭＣ１に問題が無い場合、マスタＢＭＣ０のステータスは図８(表１)の「Ｄ」、スレーブＢＭＣ１のステータスは図８(表１)の「Ｆ」となる。この状態では、図１０(表３)のマトリックスからも、マスタＢＭＣ０のステータスは図８(表１)の「Ｄ」、スレーブＢＭＣ１のステータスは図８(表１)の「Ｆ」を維持し続ける。
【００３１】
ここで、マスタＢＭＣ０に障害が発生したことにより、ＢＭＣ０がリブートすることによって、ステータスが強制的に「Ｂ」になったとする。図１０(表３)より、スレーブＢＭＣ１のステータスを「自分のステータス」、マスタＢＭＣ０のステータスを「相手のステータス」とすると、「自分のステータス」が「Ｆ」、「相手のステータス」が「Ｂ」であることから、"F_MR"関数が実行され、「自分のステータス」が「Ｆ」から「Ｄ」へ移行するため、ＢＭＣ１はスレーブ状態からマスタ状態へ移行する。
【００３２】
また、図１０(表３)より、リブート中のＢＭＣ０のステータスを「自分のステータス」、マスタＢＭＣ１のステータスを「相手のステータス」とすると、「自分のステータス」が「Ｂ」、「相手のステータス」が「Ｄ」であることから、"F_BC"関数が実行され、「自分のステータス」が「Ｂ」から「Ｃ」へ移行する。その後、ＢＭＣ０のステータスを「自分のステータス」、マスタＢＭＣ１のステータスを「相手のステータス」とすると、「自分のステータス」が「Ｃ」、「相手のステータス」が「Ｄ」であることから、"F_N"関数が実行され、「自分のステータス」が「Ｃ」から「Ｅ」へ移行する。その後、ＢＭＣ０のステータスを「自分のステータス」、マスタＢＭＣ１のステータスを「相手のステータス」とすると、「自分のステータス」が「Ｅ」、「相手のステータス」が「Ｄ」であることから、"F_SR"関数が実行され、「自分のステータス」が「Ｅ」から「Ｆ」へ移行する。その後、障害が発生しない限り、ＢＭＣ０はステータス「Ｆ」を、ＢＭＣ１はステータス「Ｄ」を維持し続ける。
【００３３】
以上の過程によって、マスタ状態にあったＢＭＣ０に障害が発生した場合に、スレーブ状態にあったＢＭＣ１がマスタ状態に移行し、ＢＭＣ０がスレーブ状態に移行する。
【００３４】
次に、ＩＰＭＢ通信に障害(エラー)が発生した場合における、各ＢＭＣのステータスの変移を説明する。まず、ＩＰＭＢ通信に障害(エラー)が発生することで、図９(表２)の内部状態変数「IPMB_ERR」=「１」となる。次に、スレーブＢＭＣ１のステータスが「Ｆ」かつ「IPMB_ERR」=「１」となる。自分のステータスが「F &[IPMB_ERR]」かつ、相手のステータスが「Ｄ」なので、図１０(表３)よりF_ERR1関数が実施される。図１０(表３)及び、図１１(表４)のF_ERR1関数が実施されることによって、ＢＭＣ１のステータスが「Ｊ」に移行することにより、ＢＭＣ０のステータスが「Ｆ」に移行する(前述の通り、図８(表１)の各信号はＧＰＩＯ１１０を用いているため、ＩＰＭＢバス１１１に障害(エラー)が発生した場合でもステータスの移行には問題ない)。
【００３５】
ここで、ＩＰＭＢ通信の障害(エラー)が回復したとすると、マスタ側ＢＭＣ１はスレーブ側ＢＭＣ０からのＩＰＭＢによるヘルスカウント更新を検出することで、ＩＰＭＢ通信の障害(エラー)が回復したと判断し、Busy信号を無効にすることでステータス「Ｊ」は解除され、ステータス「Ｄ」へと移行される。これはＢＭＣ１がマスタ状態となり、なおかつ、ＩＰＭＢ通信の障害(エラー)が回復した場合にＢＭＣ０がマスタ状態になることを禁止している状態である。ＢＭＣ１側のステータスが「Ｊ」になったことで、図１０(表３)の「自分のステータス」が「Ｄ」、「相手のステータス」が「Ｊ」の場合より、ＢＭＣ０のステータスは「Ｆ」に移行する。
【００３６】
以上の様に、ＩＰＭＢ通信にエラーが発生した場合に、ＢＭＣ０とＢＭＣ１のマスタとスレーブを切り替えを実現する。なお、ＢＭＣ０、ＢＭＣ１のステータスが共に「Ｊ」となった場合、ＢＭＣ０がマスタとなるものとする。
【００３７】
ここで、ＢＭＣ起動時及びマスタ・スレーブ制御スレッドの信号監視フローについて説明する。
【００３８】
図６は、ＢＭＣ起動時における信号監視をするための各設定値の初期化フローである。装置に電源が供給されＢＭＣのＢＯＯＴが開始されると（ステップ６００）、図８(表１)のReady信号を「０」に、M/S信号を「０」に、Busy信号を「１」に、R/A信号を「０」に設定した後に（ステップ６０１）、ＢＭＣ本体が起動する仕様とする（ステップ６０２）。
【００３９】
図７は、マスタ・スレーブ制御スレッドの信号監視フローである。マスタ・スレーブ制御スレッドが動作開始すると（ステップ７００）、初期ステータスとして、図８(表１)のステータスを「Ｃ」に、図９(表２)の変数[DEV_OK]＝「０」に、変数[DEV_USE]＝「０」に設定する（ステップ７０１）。その後、ステータスをマスタ・スレーブ制御スレッドのみが更新できるように、排他制御をかける（ステップ７０２）。二つのＢＭＣのステータスを読み取り（ステップ７０３）、図１０(表３)のマトリックスから次に実施されるべき関数を選び出し（ステップ７０４）、呼び出した関数を実行することで（ステップ７０５）、ステータスを更新する（ステップ７０６）。その後、ステータス更新に対する排他制御を解除し（ステップ７０７）、10ms待ち（ステップ７０８）、再度ステータス更新に対する排他制御をかける（ステップ７０２）。以上の動作を10ms毎に繰り返す。
【符号の説明】
【００４０】
１００：サーバ
１０１、１０３：ノード
１０２、１０４：ＢＭＣ（ベースボードマネージメントコントローラ）
１０９：Ｉ２Ｃバス
１１０：ＧＰＩＯバス
１１１：ＩＰＭＢバス
１１２：共有デバイス
１１３：共有情報エリア
５０１：ＢＭＣ０固有情報エリアにおけるヘルスカウントエリア
５０３：ＢＭＣ１固有情報エリアにおけるヘルスカウントエリア
【図１】
2015230720.tif 000003
【図２】
2015230720.tif 000004
【図３】
2015230720.tif 000005
【図４】
2015230720.tif 000006
【図５】
2015230720.tif 000007
【図６】
2015230720.tif 000008
【図７】
2015230720.tif 000009
【図８】
2015230720.tif 000010
【図９】
2015230720.tif 000011
【図１０】
2015230720.tif 000012
【図１１】
2015230720.tif 000013