(57)【要約】【課題】共有メモリに故障が生じた場合に、自動交替機能において書き込みデータが共有メモリに反映されない問題の発生を防ぎ、情報処理システムに継続動作を行わせること。【解決手段】アクセス遮断部７４が、トークンを用いてハードウェア的に故障セグメントへのアクセスを遮断し、交替部７５が故障セグメントを交替セグメントに交替する処理を行う。また、アプリ把握部７１は、共有メモリ４３のセグメント毎に、アクセスを許可したノード１のノード番号及びアプリケーションのＰＩＤを把握して管理テーブル７０に記録する。そして、アクセス停止部７３は、共有メモリ４３に故障が発生すると、管理テーブル７０を用いて、故障したセグメントを使用するアプリケーションを他のノード１も含めて特定し、アプリケーションに故障セグメントの使用停止を通知する。【選択図】図３
2015179488.tif 000002
【特許請求の範囲】
【請求項１】
他の情報処理装置とともに情報処理システムを構築し、他の情報処理装置からアクセスされる共有メモリを有する情報処理装置において、
前記共有メモリの第１領域でアクセス障害が検出されると、他の情報処理装置からの第１領域へのアクセスの許可の制御に使用される許可制御情報を用いて第１領域へのアクセスを遮断する遮断部と、
前記遮断部によりアクセスが遮断された第１領域を正常な第２領域と交替し、前記許可制御情報により第２領域へのアクセスの許可の制御を行うようにする交替部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記共有メモリの各領域へのアクセスを許可した他の情報処理装置を把握する把握部と、
第１領域でアクセス障害が検出されると、第１領域へのアクセス許可について前記把握部が把握した他の情報処理装置へ第１領域へのアクセスの停止を通知する停止通知部と、
前記交替部により第２領域への交替が行われると、前記停止通知部がアクセスの停止を通知した他の情報処理装置へアクセスの再開を通知する再開通知部と
をさらに備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記把握部は、前記共有メモリの各領域へのアクセスを許可したアプリケーションを把握し、
前記停止通知部は、第１領域へのアクセス許可について前記把握部が把握したアプリケーションへ第１領域へのアクセスの停止を通知し、
前記再開通知部は、前記停止通知部がアクセスの停止を通知したアプリケーションへアクセスの再開を通知することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記共有メモリの各領域に対応付けて各領域へのアクセスを許可した他の情報処理装置を識別する識別情報及び前記許可制御情報を含む管理情報を記憶する管理情報記憶部をさらに備え、
前記把握部は、アクセス許可について把握した他の情報処理装置を識別する情報を前記管理情報記憶部に書き込み、
前記停止通知部は、前記管理情報記憶部が記憶する管理情報に基づいて第１領域へのアクセスの停止を通知し、
前記交替部は、前記管理情報記憶部が第１領域について記憶する管理情報を第２領域について記憶する管理情報とすることを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記許可制御情報は、各領域に対応付けられたレジスタが記憶するメモリトークンであり、
前記交替部は、第１領域に対応付けられたレジスタが記憶するメモリトークンを第２領域に対応付けられたレジスタに設定することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記交替部は、論理アドレスを実アドレス又は物理アドレスに変換するマッピングテーブルを書き換えることにより第１領域を第２領域と交替することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
他の情報処理装置とともに情報処理システムを構築し、他の情報処理装置からアクセスされる共有メモリを有する情報処理装置による共有メモリ管理方法において、
前記共有メモリの第１領域でアクセス障害が検出されると、他の情報処理装置からの第１領域へのアクセスの許可の制御に使用される許可制御情報を用いて第１領域へのアクセスを遮断し、
アクセスを遮断した第１領域を正常な第２領域と交替し、前記許可制御情報により第２領域へのアクセスの許可の制御を行うようにする
処理を行うことを特徴とする共有メモリ管理方法。
【請求項８】
他の情報処理装置とともに情報処理システムを構築し、他の情報処理装置からアクセスされる共有メモリを有する情報処理装置で実行される共有メモリ管理プログラムにおいて、
前記共有メモリの第１領域でアクセス障害が検出されると、他の情報処理装置からの第１領域へのアクセスの許可の制御に使用される許可制御情報を用いて第１領域へのアクセスを遮断し、
アクセスを遮断した第１領域を正常な第２領域と交替し、前記許可制御情報により第２領域へのアクセスの許可の制御を行うようにする
処理を当該情報処理装置に実行させることを特徴とする共有メモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムに関する。
【背景技術】
【０００２】
近年、複数の情報処理装置をクロスバースイッチなどで接続した情報処理システムがサーバなどで利用されている。各情報処理装置は、ＣＰＵ（Central  Processing  Unit）、メモリ、ＨＤＤ（Hard  Disk  Drive）などを有し、クロスバースイッチを介して他の情報処理装置と通信を行う。また、各情報処理装置が有するメモリには、自装置だけがアクセス可能なローカルメモリと他の情報処理装置がアクセス可能な共有メモリがある。
【０００３】
共有メモリについては、他の情報処理装置からのアクセスの許可を制御する技術としてアクセストークンを用いる技術が開発されている（例えば、特許文献１参照）。各情報処理装置は、共有メモリの所定の大きさの単位領域毎にメモリトークンと呼ばれるキーをレジスタに記憶し、キーをアクセストークンとして指定した他の情報処理装置だけに対応する単位領域へのアクセスを許可する。
【０００４】
また、メモリの故障については、ＥＣＣ（Error  Correcting  Code）によりシングルビットエラーが検出された場合に、故障が発生したメモリ領域と正常なメモリ領域を自動的に入れ替える自動交替機能をサポートするＯＳやハイパーバイザがある。
【０００５】
また、半導体ディスク装置において、メモリエラーが生じた半導体メモリモジュールの記憶内容を予備のモジュールにコピーすることにより、メモリエラーが生じた半導体メモリモジュールの記憶内容を無停止で退避する従来技術がある（例えば、特許文献２参照）。また、キャッシュ装置において、２つのキャッシュ装置のうちホストからデータを受信した装置は、データを自装置のキャッシュメモリに記憶するとともに、他の装置に送信して障害時のデータ喪失を防ぐ従来技術がある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１４０４４６号公報
【特許文献２】特開平７−３１１６６１号公報
【特許文献３】国際公開第２００３／０９００８９号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
複数の情報処理装置をクロスバースイッチなどで接続した情報処理システムでは、複数のＯＳが動作するため、共有メモリに故障が発生した場合に、自動交替機能において書き込みデータが共有メモリに反映されない問題が発生することがある。
【０００８】
すなわち、あるＯＳが共有メモリのうち故障メモリ領域のデータを正常メモリ領域にコピーしている間に、別のＯＳが動作する他の情報処理装置から故障メモリ領域への書き込みが発生すると、書き込んだデータが正常メモリ領域に反映されないことがある。
【０００９】
また、自動交替機能を実行しているＯＳは、故障メモリ領域のデータが更新されないように防ごうとしても、他のＯＳ上で実行されるプロセスの処理を停止することができないため、他のＯＳ上で実行されるプロセスからのアクセスを防ぐことができない。
【００１０】
本発明は、１つの側面では、共有メモリを有する情報処理システムで共有メモリに故障が生じた場合に、自動交替機能において書き込みデータが共有メモリに反映されない問題の発生を防ぎ、システムに継続動作を行わせることを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示する情報処理装置は、１つの態様において、他の情報処理装置とともに情報処理システムを構築し、他の情報処理装置からアクセスされる共有メモリを有する。そして、前記情報処理装置は、前記共有メモリの第１領域でアクセス障害が検出されると、他の情報処理装置からの第１領域へのアクセスの許可の制御に使用される許可制御情報を用いて第１領域へのアクセスを遮断する遮断部を備える。また、前記遮断部によりアクセスが遮断された第１領域を正常な第２領域と交替し、前記許可制御情報により第２領域へのアクセスの許可の制御を行うようにする交替部を備える。
【発明の効果】
【００１２】
１実施態様によれば、共有メモリに故障が生じた場合に、自動交替機能において書き込みデータが共有メモリに反映されない問題の発生を防ぎ、システムに継続動作を行わせることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例に係る情報処理システムのハードウェア構成を示す図である。
【図２】図２は、ＣＰＵチップのブロック図である。
【図３】図３は、実施例に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。
【図４Ａ】図４Ａは、管理テーブルの一例を示す図である。
【図４Ｂ】図４Ｂは、図４Ａに示した管理テーブルの状態から故障セグメントの管理情報が交替セグメントの管理情報へコピーされた状態を示す図である。
【図４Ｃ】図４Ｃは、図４Ｂに示した管理テーブルの状態から故障セグメントの使用禁止フラグが変更された状態を示す図である。
【図５】図５は、共有メモリを使用するアプリケーションをセグメント単位で把握する処理のフローを示すフローチャートである。
【図６Ａ】図６Ａは、共有メモリを使用するノードをセグメント単位で把握する処理のフローを示すフローチャートである。
【図６Ｂ】図６Ｂは、共有メモリを使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。
【図７】図７は、共有メモリのセグメントＡにエラーが発生した場合の処理のフローを示すフローチャートである。
【図８】図８は、共有メモリの交替処理のフローを示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１５】
まず、実施例の記載で用いられる用語について説明する。
「ノード」：  一つ以上のＯＳが動作する情報処理装置（コンピュータシステム）。仮想化機能を有するコンピュータシステムでは、ノード内を論理的に複数の論理ドメインに分割して、複数のＯＳを稼働させることもできる。
「ノード間の共有メモリ」：  複数のノード（複数の異なるＯＳ上で動作する複数のアプリケーション）からアクセス（リード／ライト）可能な共有メモリ。
【００１６】
「ホームノード」：  ノード間の共有メモリ領域として設定した物理メモリを有するノード。
「リモートノード」：  ホームノードのメモリを参照したり更新したりするノード。
「セグメント」：  共有メモリの管理単位。セグメント毎に後述するメモリトークンを設定することができる。
「セグメントサイズ」：  共有メモリの管理単位のサイズ。例えば、４ＭＢ（メガバイト）、３２ＭＢ、２５６ＭＢ、２ＧＢ（ギガバイト）など。
【００１７】
「ＶＡ」：  論理アドレス。ＯＳやアプリケーションが使用するアドレス。
「ＲＡ」：  実アドレス。仮想化機能を導入したシステムで論理ドメイン毎に割り振られるアドレス。
「ＰＡ」：  物理アドレス。物理位置によって割り振られるアドレス。
【００１８】
「メモリトークン」：  ホームノード側のＣＰＵチップのメモリトークンレジスタに設定されるメモリアクセスキー。セグメント毎に異なるメモリトークンが設定される。
「アクセストークン」：  リモートノードからホームノード（他ノード）の共有メモリにアクセスする際に設定されるメモリアクセスキー。
・リモートノードからのメモリアクセス要求に付加されたアクセストークンとホームノードのメモリトークンレジスタに設定されたメモリトークンに基づいて、ハードウェアがメモリアクセス要求実行の可否を制御する。
・ホームノードのメモリトークンとリモートノードのアクセストークンが一致する場合は、共有メモリにアクセス（リード及びライト）することが可能。
・ホームノードのメモリトークンとリモートノードのアクセストークンが不一致の場合、共有メモリにアクセス（リード及びライト）しようとすると、例外トラップが発生してアクセス不可。
【００１９】
次に、実施例に係る情報処理システムのハードウェア構成について説明する。図１は、実施例に係る情報処理システムのハードウェア構成を示す図である。図１に示すように、情報処理システム２は、３つのノード１と、サービスプロセッサ３とを有する。また、３つのノード１とサービスプロセッサ３はクロスバーネットワーク４で接続される。
【００２０】
ノード１は、２つのＣＰＵチップ１１と、ディスクユニット１２と、通信インターフェイス１３とを有する情報処理装置である。ＣＰＵチップ１１は、２つのコア１４と、２つのメモリを有するチップである。コア１４は、２つのストランド１６を有する演算処理装置である。ストランド１６は、コア１４において命令を実行する単位である。プログラムは、各ストランド１６で実行される。メモリ１５は、コア１４が実行するプログラムやコア１４が使用するデータを記憶するＲＡＭ（Random  Access  Memory）である。
【００２１】
ディスクユニット１２は、２つのＨＤＤ１７を有する記憶装置である。ＨＤＤ１７は、磁気ディスク装置である。通信インターフェイス１３は、クロスバーネットワーク４を介して他のノード１やサービスプロセッサ３と通信するためのインターフェイスである。
【００２２】
サービスプロセッサ３は、ノード１を制御する装置であり、ＣＰＵ３１と、メモリ３２と、通信インターフェイス３３とを有する。ＣＰＵ３１は、メモリ３２が記憶するプログラムを実行する中央処理装置である。メモリ３２は、ＣＰＵ３１によって実行されるプログラムやＣＰＵ３１が使用するデータなどを記憶するＲＡＭである。通信インターフェイス３３は、クロスバーネットワーク４を介してノード１と通信するためのインターフェイスである。
【００２３】
なお、説明の便宜上、図１では３つのノード１を示したが、情報処理システム２は、任意の個数のノード１を有してよい。また、図１では、ノード１が２つのＣＰＵチップ１１を有する場合を示したが、ノード１は、任意の個数のＣＰＵチップ１１を有してよい。また、図１では、ＣＰＵチップ１１が２つのコア１４を有する場合を示したが、ＣＰＵチップ１１は、任意の個数のコア１４を有してよい。また、図１では、コア１４が２つのストランド１６を有する場合を示したが、コア１４は、任意の個数のストランド１６を有してよい。また、図１では、ＣＰＵチップ１１が２つのメモリ１５を有する場合を示したが、ＣＰＵチップ１１は、任意の個数のメモリ１５を有してよい。また、図１では、ディスクユニット１２が２つのＨＤＤ１７を有する場合を示したが、ディスクユニット１２は、任意の個数のＨＤＤ１７を有してよい。
【００２４】
図２は、ＣＰＵチップ１１のブロック図である。図２に示すように、ＣＰＵチップ１１は、２つのコア１４と、メモリ２６と、メモリトークンレジスタ２７と、二次キャッシュ１８とを有する。なお、メモリ２６は、図１の２つのメモリ１５と対応する。
【００２５】
メモリトークンレジスタ２７は、セグメント毎にメモリトークンを記憶する。二次キャッシュ１８は、コア１４内の一次キャッシュ１９と比較して低速で大容量のキャッシュメモリを有するキャッシュ装置である。なお、図１において、メモリトークンレジスタ２７と二次キャッシュ１８は省略されている。
【００２６】
コア１４は、一次キャッシュ１９と、２つのストランド１６とを有する。一次キャッシュ１９は、二次キャッシュ１８と比較して高速で小容量のキャッシュメモリを有するキャッシュ装置である。一次キャッシュ１９は、命令キャッシュ２０とデータキャッシュ２１とを有する。命令キャッシュ２０は、命令を記憶し、データキャッシュ２１は、データを記憶する。
【００２７】
ストランド１６は、一次キャッシュ１９から命令及びデータを読み出す。ストランド１６が読み出す命令又はデータが一次キャッシュ１９にない場合には、一次キャッシュ１９は、二次キャッシュ１８から命令又はデータを読み出す。一次キャッシュ１９が読み出す命令又はデータが二次キャッシュ１８にない場合には、二次キャッシュ１８は、メモリ２６から命令又はデータを読み出す。
【００２８】
また、ストランド１６は、メモリ２６に格納するデータを一次キャッシュ１９に書き込む。ストランド１６が一次キャッシュ１９に書き込んだデータは、二次キャッシュ１８に書き込まれ、二次キャッシュ１８からメモリ２６に書き込まれる。
【００２９】
ストランド１６は、命令制御部２２と、命令バッファ２３と、演算部２４と、レジスタ部２５と、アクセストークンレジスタ２８とを有する。命令制御部２２は、命令バッファ２３から命令を読み出し、読み出した命令の実行を制御する。命令バッファ２３は、命令キャッシュ２０から読み出された命令を記憶する。演算部２４は、四則演算などの演算を実行する。レジスタ部２５は、命令の実行に用いられるデータや命令の実行結果などを記憶する。なお、ストランド１６は独自の命令バッファ２３とレジスタ２５を備えるが、命令制御部２２と演算部２４は２つのストランド１６で共用される。
【００３０】
アクセストークンレジスタ２８は、他のノード１の共有メモリのセグメント毎にアクセストークンを記憶する。ストランド１６で実行されるプロセスは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いて共有メモリにアクセスする。なお、図１では、一次キャッシュ１９及びアクセストークンレジスタ２８は省略されている。また、図２では、アクセストークンレジスタ２８はストランド１６に含まれるが、アクセストークンレジスタ２８の実装は図２の例に限定されることなく、各ストランド１６に対応する各アクセストークンレジスタ２８はストランド１６の外にあってもよい。
【００３１】
次に、実施例に係る情報処理システム２のハードウェアの論理構成及びソフトウェアの機能構成について説明する。ここで、ハードウェアの論理構成とは、ＯＳやアプリケーションが使用する論理的なハードウェアである。図３は、実施例に係る情報処理システム２のハードウェアの論理構成及びソフトウェアの機能構成を示す図である。なお、図３では、１つのノード１を１つの論理ドメインとした場合を示す。１つの論理ドメインでは１つのＯＳが実行される。したがって、図３では、各ノード１で１つのＯＳが実行される。
【００３２】
図３に示すように、ノード１は、論理資源として、４つのＶＣＰＵ４１と、ローカルメモリ４２と、共有メモリ４３と、ディスク装置４４と有する。ＶＣＰＵ４１は、論理的なＣＰＵであり、図１に示した８個のストランド１６のいずれかに対応付けられる。
【００３３】
ローカルメモリ４２は、自ノード１だけからアクセスされるメモリであり、共有メモリ４３は、他のノード１からもアクセス可能なメモリである。ローカルメモリ４２と共有メモリ４３は、図１に示した４つのメモリ１５に対応する。ローカルメモリ４２に２つのメモリ１５を対応付け、共有メモリ４３に他の２つのメモリ１５を対応付けてもよいし、ローカルメモリ４２に３つのメモリ１５を対応付け、共有メモリ４３に他の１つのメモリ１５を対応付けてもよい。共有メモリ４３内のあるセグメントが故障すると、故障セグメントは他のセグメントと交替される。ディスク装置４４は、図１に示したディスクユニット１２に対応する。
【００３４】
ハイパーバイザ５０は、情報処理システム２の物理資源を管理してＯＳ６０に論理資源を提供する基本ソフトウェアであり、メモリエラー検出部５１と、共有メモリ判定部５２とを有する。
【００３５】
メモリエラー検出部５１は、ローカルメモリ４２又は共有メモリ４３で発生したＥＣＣエラーなどのエラーを検出し、共有メモリ判定部５２にエラーが発生したメモリ領域の情報（アドレス、サイズなど）を通知する。
【００３６】
共有メモリ判定部５２は、メモリエラー検出部５１で検出されたエラーが共有メモリ４３で発生したエラーであるかローカルメモリ４２で発生したエラーであるかを、エラーが発生したメモリ領域の情報（アドレス、サイズなど）から判定する。そして、共有メモリ判定部５２は、ローカルメモリ４２でエラーが発生した場合には、ローカルメモリ交替処理部６１に、エラーが発生したメモリ領域を含むセグメントの情報（アドレス、サイズ、セグメント番号など）を通知する。また、共有メモリ判定部５２は、共有メモリ４３でエラーが発生した場合には、ホームノードの共有メモリ管理部６２に、エラーが発生したメモリ領域を含むセグメントの情報（アドレス、サイズ、セグメント番号など）を通知する。
【００３７】
ＯＳ６０は、論理資源を用いてアプリケーションの実行を制御する。ＯＳ６０は、ローカルメモリ交替処理部６１と、共有メモリ管理部６２と、マッピングテーブル６３とを有する。ローカルメモリ交替処理部６１は、ローカルメモリ４２でエラーが発生した場合に、ローカルメモリ４２内でエラー発生領域を正常な領域に交替するローカルメモリ交替処理又はエラー発生領域を切り離すローカルメモリ切り離し処理を行う。マッピングテーブル６３は、ＶＡをＲＡに変換するためのテーブルである。
【００３８】
共有メモリ管理部６２は、共有メモリ４３を管理し、管理テーブル７０と、アプリ把握部７１と、故障領域認識部７２と、アクセス停止部７３と、アクセス遮断部７４と、交替部７５と、アクセス再開部７６とを有する。
【００３９】
管理テーブル７０は、他のノード１が有する共有メモリ４３を含めて情報処理システム２が有する全ての共有メモリ４３について、セグメント毎に共有メモリ４３の情報を記憶するテーブルである。
【００４０】
図４Ａは、管理テーブル７０の一例を示す図である。図４Ａは、ノード番号が「０」であるホームノードが有する管理テーブル７０とノード番号が「１」及び「２」の他の２つのリモートノードが有する管理テーブル７０を示す。図４Ａにおいて、セグメント番号が「０」〜「５」のセグメントは、ホームノードが物理メモリを有するセグメントである。
【００４１】
図４Ａに示すように、ホームノードの管理テーブル７０は、セグメント毎に、セグメント番号と、アドレスと、セグメントサイズと、使用許可ノード番号と、使用中アプリのＰＩＤと、メモリトークンと、使用禁止フラグとを記憶する。また、リモートノードの管理テーブル７０は、ホームノードの管理テーブル７０とほぼ同じ項目を記憶するが、メモリトークンの代わりにアクセストークンを記憶する。
【００４２】
セグメント番号は、セグメントを識別する識別番号である。アドレスは、セグメントのＲＡである。なお、アドレスは、ＰＡであってもよい。セグメントサイズは、セグメントのサイズである。使用許可ノード番号は、ホームノードの管理テーブル７０でだけ用いられ、セグメントの使用が許可されたノード１の番号である。
【００４３】
使用中アプリのＰＩＤは、自ノードにおいてセグメントを使用するアプリケーションのプロセスＩＤである。メモリトークンは、セグメントのアクセス許可の制御に用いられるメモリアクセスキーである。アクセストークンは、ホームノードの共有メモリにアクセスする際に使用されるメモリアクセスキーである。使用禁止フラグは、セグメントが使用可（０）であるか不可（１）であるかを示すフラグである。
【００４４】
例えば、ホームノードの管理テーブル７０では、識別番号が「０」であるセグメントは、ＲＡが１６進数で「００００００００」であり、サイズが「２５６ＭＢ」であり、使用が許可されたノードの番号は「１」及び「２」である。また、識別番号が「０」であるセグメントは、ホームノードにおいてプロセスＩＤが「１２３」、「４５６」などのプロセスで使用されており、メモリアクセスキーは１６進数で「０１２３」であり、使用可能の状態である。
【００４５】
また、ノード番号が「１」であるリモートノードの管理テーブル７０では、識別番号が「０」であるセグメントは、ＲＡが１６進数で「００００００００」であり、サイズが「２５６ＭＢ」である。また、識別番号が「０」であるセグメントは、自ノードが物理メモリを有する共有メモリ４３ではないので、使用許可ノード番号は使用されない。また、識別番号が「０」であるセグメントは、自ノードにおいてプロセスＩＤが「３２１」、「６５４」などのプロセスで使用されており、メモリアクセスキーは１６進数で「０１２３」であり、使用可能の状態である。また、ノード番号が「１」であるリモートノードの管理テーブル７０では、識別番号が「２」であるセグメントは、使用が許可されていないので、使用しているアプリケーションのプロセスＩＤはない。
【００４６】
図３に戻って、アプリ把握部７１は、共有メモリ４３のセグメント毎に、どのノード１で使用され、どのプロセスで使用されているかを把握する。具体的には、ホームノードのアプリ把握部７１は、リモートノードに共有メモリ４３の使用許可を与える際に、その共有メモリセグメントを使用するリモートノードのノード番号を管理テーブル７０に記録する。共有メモリ４３なので、その共有メモリ４３を使用するリモートノードは複数存在する可能性があり、アプリ把握部７１は、共有メモリ４３の使用許可を与える度にノード番号を全て記録する。
【００４７】
また、各ノード１のアプリ把握部７１は、共有メモリ４３をアプリケーションに割り当てる際に、その共有メモリ４３を使用するアプリケーションのプロセスＩＤ（ＰＩＤ）を管理テーブル７０に記録する。共有メモリ４３なので、その共有メモリ４３を使用するアプリケーションは複数存在する可能性があり、アプリ把握部７１は、共有メモリ４３をアプリケーションに割り当てる度にＰＩＤを全て記録する。
【００４８】
また、ホームノードのアプリ把握部７１は、リモートノードから共有メモリ４３の使用終了の通知があった場合や、リモートノードが停止した場合は、該当リモートノードのノード番号の記録を管理テーブル７０から削除する。また、各ノード１のアプリ把握部７１は、アプリケーションから共有メモリの使用終了の通知があった場合や、アプリケーションが終了した場合は、該当アプリケーションのプロセスＩＤの記録を管理テーブル７０から削除する。
【００４９】
故障領域認識部７２は、共有メモリ判定部５２から故障セグメントの情報（アドレス、サイズ、セグメント番号など）の通知を受けて、故障セグメントの故障を認識する。そして、故障領域認識部７２は、故障セグメントと同じサイズで、物理的には異なる別の正常なセグメントを交替セグメントとして確保する。
【００５０】
アクセス停止部７３は、ホームノードだけでなく複数あるリモートノードにも故障領域を含むセグメントの情報を通知し、そのセグメント単位でアクセスを停止させる。具体的には、ホームノードのアクセス停止部７３は、故障セグメントを使用している全ノード１のアクセス停止部７３に故障セグメントの情報（アドレス、サイズ、セグメント番号など）と交替セグメントの情報（アドレス、サイズ、セグメント番号など）を通知する。
【００５１】
そして、各ノードのアクセス停止部７３が、セグメント毎に用意した管理テーブル７０を参照して、故障セグメントを使用しているアプリケーションを特定する。そして、各ノードのアクセス停止部７３は、故障セグメントを使用している全てのアプリケーションに、故障セグメントの情報（アドレス、サイズ、セグメント番号など）を通知して、一時的に故障セグメントへのアクセスを停止するよう指示する。
【００５２】
すると、エラーが発生した共有メモリを使用しているアプリケーションが、故障セグメントへのアクセスを一時的に停止する。ただし、停止するのは故障セグメントの共有メモリへのアクセスのみであり、他の共有メモリやローカルメモリにはアクセス可能であるため、アプリケーション全体の動作は停止する必要はない。
【００５３】
そして、エラーが発生した共有メモリを使用しているアプリケーションは、各ノード１のアクセス停止部７３に、故障セグメントへのアクセスを停止したことを通知する。すると、各ノード１のアクセス停止部７３が、ホームノードのアクセス停止部７３に、故障セグメントへのアクセス停止処理の完了を通知する。
【００５４】
アクセス遮断部７４は、アクセス停止部７３の処理の完了後に、ホームノードの故障セグメントに対するメモリトークンと、リモートノードの故障セグメントに対するアクセストークンの設定を解除し、ハード的にも故障セグメントへのアクセスを停止させる。アクセス遮断部７４は、データ破壊が発生しないことを１００％保証するため、ハード的に完全にアクセスを遮断する。
【００５５】
また、各ノード１のアクセス遮断部７４は、管理テーブル７０の故障セグメントのアドレス以外の管理情報（セグメントサイズ、使用許可ノード番号、使用中アプリのＰＩＤ、メモリトークン、使用禁止フラグ）を、交替セグメントの管理情報にコピーする。
【００５６】
図４Ｂは、図４Ａに示した管理テーブル７０の状態から故障セグメントの管理情報が交替セグメントの管理情報へコピーされた状態を示す図である。図４Ｂに示すように、ホームノード及び２つのリモートノードにおいて、故障セグメントであるセグメント番号「１」のアドレス以外の管理情報が交替セグメントであるセグメント番号「５」の管理情報にコピーされている。
【００５７】
そして、各ノード１のアクセス遮断部７４は、故障セグメントのメモリトークン又はアクセストークンの設定を解除する。これにより、共有メモリ管理部６２は、リモートノードからの故障セグメントへのアクセスを完全に遮断することができる。
【００５８】
交替部７５は、アクセス遮断部７４がハード的にアクセスを遮断した後、故障セグメントのデータを、交替セグメントにコピーする。そして、交替部７５は、故障セグメント（コピー元）と新たに確保した交替セグメント（コピー先）の論理アドレスＶＡが一致するように、ＶＡ−ＲＡのマッピング情報を記憶するマッピングテーブル６３を書き換える。
【００５９】
具体的には、ホームノードの交替部７５が、故障セグメントのデータを、交替セグメントにコピーする。そして、ホームノードの交替部７５は、故障セグメントの物理メモリを解放する。また、各ノード１の交替部７５が、セグメント管理テーブル７０の故障セグメントに対応する使用禁止フラグを「０」から「１」に変更することで使用禁止のマークを付けて、以降の処理で使用しないようにする。
【００６０】
図４Ｃは、図４Ｂに示した管理テーブル７０の状態から故障セグメントの使用禁止フラグが変更された状態を示す図である。図４Ｃに示すように、ホームノード及び２つのリモートノードにおいて、故障セグメントであるセグメント番号「１」の使用禁止フラグが「０」から「１」に変更されている。
【００６１】
そして、各ノード１の交替部７５は、ＶＡ−ＲＡのマッピング情報を書き換えて、エラー発生領域の論理アドレス（ＶＡ）に対応するＲＡを、交替セグメントのＲＡに切り替える。なお、ここでは、各ノード１の交替部７５が、ＶＡ−ＲＡのマッピング情報を書き換えるが、各ノード１のハイパーバイザが、ＲＡ−ＰＡのマッピング情報を書き換えてもよい。
【００６２】
そして、ホームノードの交替部７５が、交替セグメントのメモリトークンが故障セグメントのメモリトークンと同じになるようメモリトークンを設定する。
【００６３】
アクセス再開部７６は、交替部７５によるメモリトークンの再設定後、ホームノードだけでなく複数あるリモートノードにも、セグメント単位でアクセス再開を指示する。具体的には、ホームノードのアクセス再開部７６が、故障セグメントを使用していた全ノード１のアクセス再開部７６に対象セグメントへのアクセス再開を通知する。そして、各ノード１のアクセス再開部７６が、故障セグメントを使用していた全アプリケーションに、対象セグメントへのアクセスを再開するよう指示する。
【００６４】
この後、アプリケーションは、エラー発生領域の論理アドレス（ＶＡ）にアクセスすると、新たに確保された交替セグメントの物理メモリにアクセスすることになる。
【００６５】
次に、共有メモリ４３を使用するアプリケーションをセグメント単位で把握する処理のフローについて説明する。図５は、共有メモリ４３を使用するアプリケーションをセグメント単位で把握する処理のフローを示すフローチャートである。なお、以下の説明において、セグメントＡは、故障セグメントを示し、セグメントＢは、交替セグメントを示す。また、アプリＨは、ホームノードでセグメントＡを使用するアプリケーションを示し、アプリＲは、リモートノードでセグメントＡを使用するアプリケーションを示し、リモートノードＮは、セグメントＡを使用するノード１を示す。
【００６６】
図５に示すように、ホームノードのアプリＨは、共有メモリ４３のセグメントＡを獲得する（ステップＳ１）。すると、ホームノードのアプリ把握部７１は、管理テーブル７０にセグメントＡを使用するアプリＨのＰＩＤを追加する（ステップＳ２）。
【００６７】
その後、ホームノードの共有メモリ管理部６２は、リモートノードＮに共有メモリ４３のセグメントＡの使用を許可し、セグメントＡの使用許可をリモートノードＮに通知する（ステップＳ３）。その際、ホームノードのアプリ把握部７１は、管理テーブル７０にセグメントＡを使用するリモートノードＮのノード番号を追加する（ステップＳ４）。
【００６８】
一方、リモートノードＮの共有メモリ管理部６２は、セグメントＡの使用許可をホームノードから通知されると、共有メモリ４３を使用するアプリＲにセグメントＡを割り当てる（ステップＳ１４）。また、リモートノードＮのアプリ把握部７１は、管理テーブル７０にセグメントＡを使用するアプリＲのＰＩＤを追加する（ステップＳ１５）。
【００６９】
そして、ホームノードの共有メモリ管理部６２は、セグメントＡ用のメモリトークンを獲得し（ステップＳ５）、リモートノードＮにセグメントＡ用のメモリトークンを通知する（ステップＳ６）。そして、ホームノードの共有メモリ管理部６２は、セグメントＡのメモリトークンをメモリトークンレジスタ２７に設定し（ステップＳ７）、管理テーブル７０にセグメントＡのメモリトークンを追加する（ステップＳ８）。
【００７０】
一方、リモートノードＮの共有メモリ管理部６２は、セグメントＡ用のメモリトークンをホームノードから通知されると、セグメントＡ用のメモリトークンを認識する（ステップＳ１６）。そして、リモートノードＮの共有メモリ管理部６２は、セグメントＡのメモリトークンをアクセストークンとしてアクセストークンレジスタ２８に設定し（ステップＳ１７）、管理テーブル７０にセグメントＡのアクセストークンを追加する（ステップＳ１８）。
【００７１】
そして、ホームノードのアプリＨが、セグメントＡのデータを参照したり、更新したりする（ステップＳ９）。一方、リモートノードＮのアプリＲも、セグメントＡのデータを参照したり、更新したりする（ステップＳ１９）。
【００７２】
そして、リモートノードＮのアプリＲが、セグメントＡの使用を終了し、リモートノードＮの共有メモリ管理部６２が、ホームノードに使用終了を通知する（ステップＳ２０）。すると、ホームノードの共有メモリ管理部６２が、リモートノードＮによるセグメントＡの使用終了を認識する（ステップＳ１０）。そして、ホームノードのアプリ把握部７１が、管理テーブル７０からセグメントＡの使用を終了したリモートノードのノード番号を削除する（ステップＳ１１）。
【００７３】
その後、ホームノードのアプリＨがセグメントＡの使用を終了する。すると、ホームノードの共有メモリ管理部６２は、セグメントＡのメモリトークンの設定を解除し（ステップＳ１２）、ホームノードのアプリ把握部７１が、管理テーブル７０からセグメントＡのメモリトークンとアプリＨのＰＩＤを削除する（ステップＳ１３）。
【００７４】
一方、リモートノードＮの共有メモリ管理部６２が、ホームノードにセグメントＡの使用終了を通知すると、リモートノードＮのアプリ把握部７１が、管理テーブル７０からセグメントＡの使用を終了したアプリＲのＰＩＤを削除する（ステップＳ２１）。そして、リモートノードＮの共有メモリ管理部６２は、セグメントＡのアクセストークンの設定を解除し（ステップＳ２２）、管理テーブル７０からセグメントＡのアクセストークンを削除する（ステップＳ２３）。
【００７５】
このように、ホームノードのアプリ把握部７１とリモートノードＮのアプリ把握部７１が連携してセグメントＡを使用するノードのノード番号及びプロセスのＰＩＤを把握する。したがって、セグメントＡに故障が発生した場合に、セグメントＡのホームノードの共有メモリ管理部６２は、セグメントＡを使用するリモートノードにセグメントＡの使用停止を依頼することができる。
【００７６】
次に、共有メモリ４３を使用するノード１をセグメント単位で把握する処理のフローについて説明する。図６Ａは、共有メモリ４３を使用するノード１をセグメント単位で把握する処理のフローを示すフローチャートである。なお、図６Ａに示す処理は、図５に示した処理のステップＳ４とステップＳ１１の処理に対応する。
【００７７】
図６Ａに示すように、ホームノードのアプリ把握部７１は、リモートノードへの共有メモリ４３のセグメント使用の許可時であるか否かを判定する（ステップＳ３１）。その結果、リモートノードへの共有メモリ４３のセグメント使用の許可時である場合には、ホームノードのアプリ把握部７１は、管理テーブル７０にセグメントを使用するノード１のノード番号を追加する（ステップＳ３２）。
【００７８】
一方、リモートノードへの共有メモリ４３のセグメント使用の許可時でない場合、すなわち、使用終了時は、ホームノードのアプリ把握部７１は、管理テーブル７０からセグメントの使用を終了したノード１のノード番号を削除する（ステップＳ３３）。
【００７９】
このように、ホームノードのアプリ把握部７１は、セグメントを使用するノード１のノード番号を管理テーブル７０を用いて管理することによって、セグメントを使用するリモートノードを把握することができる。
【００８０】
次に、共有メモリ４３を使用するプロセスをセグメント単位で把握する処理のフローについて説明する。図６Ｂは、共有メモリ４３を使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。なお、図６Ｂに示す処理は、図５に示した処理のステップＳ１５とステップＳ２１の処理に対応する。
【００８１】
図６Ｂに示すように、リモートノードのアプリ把握部７１は、セグメント割り当て時であるか否かを判定する（ステップＳ４１）。その結果、セグメント割り当て時である場合には、リモートノードのアプリ把握部７１は、管理テーブル７０にセグメントを使用するアプリケーションのＰＩＤを追加する（ステップＳ４２）。
【００８２】
一方、セグメント割り当て時でない場合、すなわち、解放時は、リモートノードのアプリ把握部７１は、管理テーブル７０からセグメントを解放するアプリケーションのＰＩＤを削除する（ステップＳ４３）。
【００８３】
このように、リモートノードのアプリ把握部７１は、セグメントを使用するアプリケーションのＰＩＤを管理テーブル７０を用いて管理することによって、セグメントを使用するアプリケーションを把握することができる。
【００８４】
次に、共有メモリ４３のセグメントＡにエラーが発生した場合の処理のフローについて説明する。図７は、共有メモリ４３のセグメントＡにエラーが発生した場合の処理のフローを示すフローチャートである。
【００８５】
図７に示すように、ホームノードのハイパーバイザ５０のメモリエラー検出部５１が、セグメントＡのＥＣＣシングルビットエラーを検出する（ステップＳ５１）と、共有メモリ判定部５２は、共有メモリ４３の故障であるか否かを判定する（ステップＳ５２）。その結果、共有メモリ４３の故障でない場合には、ＯＳ６０のローカルメモリ交替処理部６１が、ローカルメモリ交替処理又は切り離し処理を行う（ステップＳ５３）。
【００８６】
一方、共有メモリ４３の故障である場合には、共有メモリ管理部６２のアクセス停止部７３が、セグメント単位で共有メモリ４３へのアクセスを停止する（ステップＳ５４）。そして、アクセス遮断部７４が、セグメントＡのトークンの設定を解除し、セグメントＡへのアクセスを遮断する（ステップＳ５５）。ここで、セグメントＡのトークンの設定を解除するとは、ホームノードのアクセス遮断部７４がメモリトークンの設定を解除し、リモートノードのアクセス遮断部７４がアクセストークンの設定を解除することを意味する。
【００８７】
そして、交替部７５が、セグメントＡのデータを新たに確保したセグメントＢにコピーし（ステップＳ５６）、セグメントＡの使用禁止フラグを禁止に変更する（ステップＳ５７）。そして、交替部７５は、ＶＡ−ＲＡマッピング情報を変更することでセグメントＡをセグメントＢに交替し（ステップＳ５８）、セグメントＢのトークンを設定してアクセスを再開する（ステップＳ５９）。ここで、セグメントＢのトークンを設定するとは、ホームノードの交替部７５がメモリトークンを設定し、リモートノードの交替部７５がアクセストークンを設定することを意味する。
【００８８】
そして、アクセス再開部７６は、セグメント単位で共有メモリ４３へのアクセスを再開する（ステップＳ６０）。
【００８９】
このように、アクセス停止部７３が、故障セグメントＡへのアクセスを停止し、アクセス遮断部７４が、故障セグメントＡへのアクセスを遮断し、交替部７５が故障セグメントＡを交替セグメントＢで交替する。したがって、共有メモリ管理部６２は、共有メモリ４３に故障が発生した場合の情報処理システム２への影響を抑え、情報処理システム２を継続動作させることができる。
【００９０】
次に、ノード間共有メモリの交替処理のフローの詳細について説明する。図８は、共有メモリ４３の交替処理のフローを示すフローチャートである。なお、図８のステップ７３以降の処理は、図７に示したステップＳ５４〜ステップＳ６０の処理をホームノードの処理とリモートノードの処理に分けて詳細化したものである。
【００９１】
図８に示すように、ホームノードの故障領域認識部７２は、共有メモリ４３のセグメントＡの故障を認識する（ステップＳ７１）と、別の正常セグメントを交替セグメントＢとして確保する（ステップＳ７２）。
【００９２】
そして、ホームノードのアクセス停止部７３が、セグメントＡ及びＢの情報をセグメントＡを使用する全てのリモートノードに通知する（ステップＳ７３）。そして、ホームノードのアクセス停止部７３は、セグメントＡを使用するアプリケーションを管理テーブル７０を用いて特定し（ステップＳ７４）、セグメントＡを使用するアプリケーションに故障を通知する（ステップＳ７５）。
【００９３】
すると、ホームノードでセグメントＡを使用するアプリケーションがセグメントＡへのアクセスを停止し（ステップＳ７６）、ホームノードのＯＳ６０がホームノードのアクセス停止部７３にセグメントＡへのアクセス停止を通知する（ステップＳ７７）。
【００９４】
一方、ホームノードからセグメントＡ及びＢの情報を受け取ったリモートノードのアクセス停止部７３は、セグメントＡ及びＢの情報を認識する（ステップＳ８７）。そして、リモートノードのアクセス停止部７３は、セグメントＡを使用するアプリケーションを管理テーブル７０を用いて特定し（ステップＳ８８）、セグメントＡを使用するアプリケーションに故障を通知する（ステップＳ８９）。
【００９５】
すると、リモートノードでセグメントＡを使用するアプリケーションが、セグメントＡへのアクセスを停止し（ステップＳ９０）、リモートノードのアクセス停止部７３へセグメントＡへのアクセス停止を通知する（ステップＳ９１）。そして、リモートノードのアクセス停止部７３がホームノードのアクセス停止部７３にアクセス停止処理の完了を通知する（ステップＳ９２）。
【００９６】
そして、セグメントＡを使用する全てのリモートノードからアクセス停止処理の完了を通知されると、ホームノードのアクセス停止部７３は、アクセス停止処理の完了を認識する（ステップＳ７８）。そして、ホームノードのアクセス遮断部７４が、セグメントＡの管理情報をセグメントＢにコピーし、（ステップＳ７９）、セグメントＡのメモリトークンの設定を解除する（ステップＳ８０）。
【００９７】
一方、リモートノードのアクセス遮断部７４は、セグメントＡの管理情報をセグメントＢにコピーし、（ステップＳ９３）、セグメントＡのアクセストークンの設定を解除する（ステップＳ９４）。
【００９８】
そして、ホームノードの交替部７５が、セグメントＡのデータをセグメントＢにコピーし（ステップＳ８１）、セグメントＡの使用禁止フラグを禁止に変更する（ステップＳ８２）。そして、ホームノードの交替部７５は、ＶＡ−ＲＡマッピング情報を変更し（ステップＳ８３）、セグメントＢのメモリトークンを設定する（ステップＳ８４）。
【００９９】
一方、リモートノードの交替部７５は、セグメントＡの使用禁止フラグを禁止に変更し（ステップＳ９５）、ＶＡ−ＲＡマッピング情報を変更する（ステップＳ９６）。そして、リモートノードの交替部７５は、セグメントＢのアクセストークンを設定する（ステップＳ９７）。
【０１００】
そして、ホームノードのアクセス再開部７６が、セグメントＢを使用する全てのリモートノードにアクセス再開を通知し（ステップＳ８５）、アクセス再開をアプリケーションに通知する（ステップＳ８６）。
【０１０１】
一方、リモートノードのアクセス再開部７６は、ホームノードからセグメントＢのアクセス再開の通知を受け取ると、アクセス再開を認識し（ステップＳ９８）、アクセス再開をアプリケーションに通知する（ステップＳ９９）。
【０１０２】
上述してきたように、実施例では、アクセス遮断部７４が、トークンを用いてハードウェア的に故障セグメントへのアクセスを遮断し、交替部７５が故障セグメントを交替セグメントに交替する処理を行う。したがって、共有メモリ管理部６２は、自動交替機能において書き込みデータが共有メモリ４３に反映されない問題の発生を防ぎ、情報処理システム２に継続動作を行わせることができる。
【０１０３】
また、実施例では、ホームノードの管理テーブル７０に共有メモリ４３のセグメント毎にアクセスを許可したノード１のノード番号を記憶し、各ノード１の管理テーブル７０に共有メモリ４３を使用するアプリケーションのＰＩＤをセグメント毎に記憶する。また、アプリ把握部７１は、共有メモリ４３のセグメント毎に、アクセスを許可したノード１のノード番号及びアプリケーションのＰＩＤを把握して管理テーブル７０に記録する。そして、アクセス停止部７３は、共有メモリ４３に故障が発生すると、故障したセグメントを使用するアプリケーションを他のノード１も含めて特定し、アプリケーションに故障セグメントの使用停止を通知する。したがって、共有メモリ管理部６２は、アプリケーションが故障セグメントにアクセスすることを防ぐことができる。
【０１０４】
また、実施例では、故障セグメントの交替セグメントへの交替が完了すると、アクセス再開部７６が、故障セグメントを利用していたアプリケーションに他のノード１のアプリケーションも含めてアクセス再開を通知する。したがって、故障セグメントを利用していたアプリケーションは、継続して処理を行うことができる。
【０１０５】
また、実施例では、メモリトークンを用いてハードウェア的に故障セグメントへのアクセスを遮断する場合について説明したが、本発明はこれに限定されるものではなく、ソフトウェア的に故障セグメントへのアクセスを遮断する場合にも同様に適用することができる。
【符号の説明】
【０１０６】
１    ノード
２    情報処理システム
３    サービスプロセッサ
１１    ＣＰＵチップ
１２    ディスクユニット
１３    通信インターフェイス
１４    コア
１５    メモリ
１６    ストランド
１７    ＨＤＤ
１８    二次キャッシュ
１９    一次キャッシュ
２０    命令キャッシュ
２１    データキャッシュ
２２    命令制御部
２３    命令バッファ
２４    演算部
２５    レジスタ部
２６    メモリ
２７    メモリトークンレジスタ
２８    アクセストークンレジスタ
３１    ＣＰＵ
３２    メモリ
３３    通信インターフェイス
４１    ＶＣＰＵ
４２    ローカルメモリ
４３    共有メモリ
４４    ディスク装置
５０    ハイパーバイザ
５１    メモリエラー検出部
５２    共有メモリ判定部
６０    ＯＳ
６１    ローカルメモリ交替処理部
６２    共有メモリ管理部
６３    マッピングテーブル
７０    管理テーブル
７１    アプリ把握部
７２    故障領域認識部
７３    アクセス停止部
７４    アクセス遮断部
７５    交替部
７６    アクセス再開部
【図１】
2015179488.tif 000003
【図２】
2015179488.tif 000004
【図３】
2015179488.tif 000005
【図４Ａ】
2015179488.tif 000006
【図４Ｂ】
2015179488.tif 000007
【図４Ｃ】
2015179488.tif 000008
【図５】
2015179488.tif 000009
【図６Ａ】
2015179488.tif 000010
【図６Ｂ】
2015179488.tif 000011
【図７】
2015179488.tif 000012
【図８】
2015179488.tif 000013