(57)【要約】      （修正有）【課題】サブシステム間を接続する信号伝送路を流れるデータ量を低減しつつ、ロックステップ同期およびロックステップ非同期の双方の状態で動作できるフォールトトレラントシステムを提供する。【解決手段】互いに同一のハードウェアで構成された複数のサブシステムは、信号伝送路によって互いに接続される。各サブシステムの制御部は、プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムのプロセッサ部から入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムのプロセッサ部から入出力部へアクセスされるデータの他系への送信を行う。【選択図】図１
2015069270.tif 000002
【特許請求の範囲】
【請求項１】
互いに同一のハードウェアで構成された複数のサブシステムを備えたフォールトトレラントシステムであって、
前記複数のサブシステムは、
前記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、
前記プロセッサ部に接続される入出力部と、
前記プロセッサ部および前記入出力部間に接続される制御部と、
前記制御部を介して前記複数のサブシステム間を互いに接続する信号伝送路とを有し、
前記制御部は、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステム。
【請求項２】
前記信号伝送路は複数の信号伝送路で構成され、
前記制御部は、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行い、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行う
請求項１に記載のフォールトトレラントシステム。
【請求項３】
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データの受信時刻と前記データとからチェックサムを生成し、該生成した前記チェックサムを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
請求項２に記載のフォールトトレラントシステム。
【請求項４】
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データが有するＣＲＣを抽出し、該抽出した前記ＣＲＣを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
請求項２に記載のフォールトトレラントシステム。
【請求項５】
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データと前記誤り検出用データ生成器から出力された前記誤り検出用データとのうちの何れか一方を選択する第１のセレクタを有する
請求項３または４に記載のフォールトトレラントシステム。
【請求項６】
前記制御部は、
自制御部の前記第１のセレクタの出力と自サブシステムの前記入出力部から他サブシステムの前記プロセッサ部へアクセスされるデータとを同じ一つの前記信号伝送路へ送信する第１の送信部と、
自制御部の前記誤り検出用データ生成器から出力された前記誤り検出用データを一時的に記憶する第１のバッファと、
前記信号伝送路から受信した前記誤り検出用データを一時的に記憶する第２のバッファと、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データを一時的に記憶する第３のバッファと、
前記信号伝送路から受信した他の前記サブシステムの前記プロセッサ部から自サブシステムの前記入出力部へアクセスされる前記データを一時的に記憶する第４のバッファと、
前記第１のバッファに記憶された前記誤り検出用データと前記第２のバッファに記憶された前記誤り検出用データとを比較する比較器と、
前記プロセッサ部が前記ロックステップ同期の状態にあるときは、前記比較器で一致が検出されることを条件に前記第３のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力し、前記プロセッサ部が前記ロックステップ非同期の状態にあるときは、前記第３のバッファに記憶された前記データまたは前記第４のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力する第２のセレクタと
を有する
請求項５に記載のフォールトトレラントシステム。
【請求項７】
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いる制御装置であって、
自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続され、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムで用いる制御装置。
【請求項８】
互いに同一のハードウェアで構成された複数のサブシステムを備え、前記複数のサブシステムは、前記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、前記プロセッサ部に接続される入出力部と、前記プロセッサ部および前記入出力部間に接続される制御部と、前記制御部を介して前記複数のサブシステム間を互いに接続する信号伝送路とを有するフォールトトレラントシステムの動作方法であって、
前記制御部が、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムの動作方法。
【請求項９】
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続される制御装置の動作方法であって、
前記制御装置が、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムで用いる制御装置の動作方法。
【請求項１０】
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続された制御装置を構成するコンピュータに、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行わせ、
ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行わせる
ためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラントシステム、それに用いる制御装置、それらの動作方法、およびプログラムに関する。
【背景技術】
【０００２】
可用性を高めた計算機システムとして、フォールトトレラントシステムが知られている。フォールトトレラントシステムでは、アプリケーションやＯＳが特別な処理を必要としないで、透過的にサービスを継続することができる。フォールトトレラントシステムを実現する方式は、ハードウェア方式とソフトウェア方式とに大別される。本発明は、ハードウェア方式のフォールトトレラントシステムの改良に関する。
【０００３】
ハードウェア方式のフォールトトレラントシステムは、ＣＰＵ、メモリ、ストレージなどの主要なハードウェアコンポーネントを冗長化し、あるコンポーネントに障害が発生した場合は、そのコンポーネントを切り離して動作を継続する。ＣＰＵやメモリを含むモジュールをＣＰＵサブシステム、各種ＩＯデバイスを含むモジュールをＩＯサブシステムと呼ぶ。コンポーネントを二重化する一般的なフォールトトレラントシステムでは、ＣＰＵサブシステムとＩＯサブシステムとで二重化の方式が異なる。ＣＰＵサブシステムは、クロック単位でハードウェアの動作を完全に一致させる。これをロックステップ同期と呼ぶ。二重化されたＣＰＵサブシステムは、両方とも完全に同じ動作をしているので、障害発生時はその障害が発生したＣＰＵサブシステムを論理的に切り離し、正常なＣＰＵサブシステムに瞬時に処理を切り換えて動作を継続させる。一方、ＩＯサブシステムは、ロックステップ同期こそしていないが、障害が発生した場合、直ちに他方のＩＯサブシステムに切り換える。
【０００４】
ロックステップ同期の状態において、ＣＰＵサブシステムの不正な動作を検出する方法として、各ＣＰＵサブシステムからＩＯサブシステムへアクセスするデータを比較する方法がある。その際、各サブシステムが、自サブシステムのＣＰＵで生成したアクセスデータからチェックサムを生成してクロスリンクを介して他サブシステムへ送信する一方、上記生成したチェックサムとクロスリンクを介して他サブシステムから受信したチェックサムとを比較してサブシステム間の処理の不一致を検知することが、本発明に関連する第１の関連技術として提案されている（例えば特許文献１参照）。
【０００５】
その他、フォールトトレラントシステムに関して、以下のような先行技術がある。
【０００６】
まず、自他システム間でクロックステップ同期により同じタイミングで動作するＣＰＵサブシステムと、これに接続されるＩＯサブシステムと、両者間に接続されるＦＴコントローラとを有する２つのシステムをクロスリンクによって互いに接続したフォールトトレラントシステムにおいて、ＦＴコントローラが、両システムによるフォールトトレラント用のエラー処理、二重化処理、および再同期化処理を行うための複数のシステム動作をこれに対応する複数ステートとして所定のイベント信号に関連付けて管理し、イベント信号に応じて、システム毎にステートを遷移させながら複数のシステム動作を選択してＣＰＵサブシステムに実行させることが、本発明に関連する第２の関連技術として提案されている（例えば特許文献２参照）。
【０００７】
また、上記フォールトトレラントシステムにおいて、ＣＰＵサブシステムからＩＯサブシステムへのアクセスパケットに、アクセス元およびアクセス先のＩＤコードと、同期アクセスか否かの同期情報とを含むタグ情報を付与し、各々のシステムのアクセス比較部が、アクセスパケットに付与されたタグ情報に基づいて、複数のＣＰＵサブシステムがロックステップ同期状態にある場合のアクセス処理を行うか、非同期状態に応じたアクセス処理を行うかを決定することが、本発明に関連する第３の関連技術として提案されている（例えば特許文献３参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２１８３７０号公報
【特許文献２】特開２００６−１７８６１６号公報
【特許文献３】特開２００６−１７８６１５号公報
【特許文献４】特開２００６−１７８６１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明に関連する第１の関連技術では、パケットそのものでなくパケットから生成したチェックサムをクロスリンクを介して他サブシステムへ送信する一方、上記生成したチェックサムとクロスリンクを介して他サブシステムから受信したチェックサムとを比較してサブシステム間の処理の不一致を検知している。これにより、パケットそのものをクロスリンクを介して他サブシステムへ送信する場合に比べて、クロスリンクを流れるデータ量を低減することができる。しかしながら、パケットそのものでなくパケットから生成したチェックサムをクロスリンクを介して他サブシステムへ送信する上記第１の関連技術では、フォールトトレラントシステムをロックステップ非同期の状態で動作させるのは困難である。その理由は、パケットから生成したチェックサムをクロスリンクを介して他サブシステムへ送信しても、他サブシステム側にその元となるパケットと同じパケットが存在しないロックステップ非同期の状態では他サブシステムの入出力部をアクセスできないためである。他方、本発明に関連する第３の関連技術では、フォールトトレラントシステムをロックステップ同期の状態およびロックステップ非同期の状態の双方の状態で動作させることが可能であるが、パケットそのものをクロスリンクを介して送信するため、クロスリンクを流れるデータ量を低減することは困難である。
【００１０】
本発明の目的は、上述した課題、すなわち、サブシステム間を接続する信号伝送路を流れるデータ量を低減しつつ、フォールトトレラントシステムをロックステップ同期の状態およびロックステップ非同期の状態の双方の状態で動作させるのは困難である、という課題を解決するフォールトトレラントシステムを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の第１の観点に係るフォールトトレラントシステムは、
互いに同一のハードウェアで構成された複数のサブシステムを備えたフォールトトレラントシステムであって、
上記複数のサブシステムは、
上記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、
上記プロセッサ部に接続される入出力部と、
上記プロセッサ部および上記入出力部間に接続される制御部と、
上記制御部を介して上記複数のサブシステム間を互いに接続する信号伝送路とを有し、
上記制御部は、上記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータの他サブシステムへの送信を行う。
【００１２】
本発明の第２の観点に係るフォールトトレラントシステムで用いる制御装置は、
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いる制御装置であって、
自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と上記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続され、
上記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータの他サブシステムへの送信を行う。
【００１３】
本発明の第３の観点に係るフォールトトレラントシステムの動作方法は、
互いに同一のハードウェアで構成された複数のサブシステムを備え、上記複数のサブシステムは、上記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、上記プロセッサ部に接続される入出力部と、上記プロセッサ部および上記入出力部間に接続される制御部と、上記制御部を介して上記複数のサブシステム間を互いに接続する信号伝送路とを有するフォールトトレラントシステムの動作方法であって、
上記制御部が、
上記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータの他サブシステムへの送信を行う。
【００１４】
本発明の第４の観点に係るフォールトトレラントシステムで用いる制御装置の動作方法は、
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と上記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続される制御装置の動作方法であって、
上記制御装置が、上記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータの他サブシステムへの送信を行う。
【００１５】
本発明の第４の観点に係るプログラムは、
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と上記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続された制御装置を構成するコンピュータに、
上記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行わせ、
ロックステップ非同期の状態にあるときは、自サブシステムの上記プロセッサ部から上記入出力部へアクセスされるデータの他サブシステムへの送信を行わせる。
【発明の効果】
【００１６】
本発明は上述した構成を有するため、サブシステム間を接続する信号伝送路を流れるデータ量を低減しつつ、フォールトトレラントシステムをロックステップ同期の状態およびロックステップ非同期の状態の双方の状態で動作させることができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１の実施形態のブロック図である。
【図２】本発明の第１の実施形態におけるロックステップ同期状態時の動作の一例を示す図である。
【図３】本発明の第１の実施形態におけるロックステップ同期状態時の動作の他の例を示す図である。
【図４】本発明の第１の実施形態におけるロックステップ非同期状態時の動作の一例を示す図である。
【図５】本発明の第１の実施形態におけるロックステップ非同期状態時の動作の他の例を示す図である。
【図６】本発明の第２の実施形態のブロック図である。
【図７】本発明の第２の実施形態におけるロックステップ同期状態時の動作の一例を示す図である。
【図８】本発明の第２の実施形態におけるロックステップ同期状態時の動作の他の例を示す図である。
【図９】本発明の第２の実施形態におけるロックステップ非同期状態時の動作の一例を示す図である。
【図１０】本発明の第２の実施形態におけるロックステップ非同期状態時の動作の他の例を示す図である。
【図１１】本発明の第３の実施形態のブロック図である。
【図１２】本発明の第４の実施形態のブロック図である。
【図１３】本発明に関連する第１のフォールトトレラントシステムにおけるロックステップ同期状態時の動作の一例を示す図である。
【図１４】本発明に関連する第１のフォールトトレラントシステムにおけるロックステップ同期状態時の動作の他の例を示す図である。
【図１５】本発明に関連する第１のフォールトトレラントシステムにおけるロックステップ非同期状態時の動作の一例を示す図である。
【図１６】本発明に関連する第１のフォールトトレラントシステムにおけるロックステップ非同期状態時の動作の他の例を示す図である。
【図１７】本発明に関連する第２のフォールトトレラントシステムのブロック図である。
【発明を実施するための形態】
【００１８】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１９】
［第１の実施形態］
図１を参照すると、本発明の第１の実施形態にかかるフォールトトレラントシステム１００００は、互いに同一のハードウェアで構成された２つのサブシステム１１０００、１２０００を備えている。
【００２０】
サブシステム１１０００は、プロセッサ部１１１００、このプロセッサ部１１１００に接続される入出力部１１２００、および、プロセッサ部１１１００と入出力部１１２００間に接続される制御部１１３００を有する。また、サブシステム１２０００は、プロセッサ部１２１００、このプロセッサ部１２１００に接続される入出力部１２２００、および、プロセッサ部１２１００と入出力部１２２００間に接続される制御部１２３００を有する。さらに、制御部１１３００、１２３００を介してサブシステム１１０００とサブシステム１２０００間を互いに接続する信号伝送路１３０００が設けられている。
【００２１】
プロセッサ部１１１００とプロセッサ部１２１００は、サブシステム１１０００とサブシステム１２０００とがロックステップ動作している状態（ロックステップ同期の状態）で動作可能であると共に、サブシステム１１０００とサブシステム１２０００とがロックステップ動作していない状態（ロックステップ非同期の状態）で動作可能である。
【００２２】
制御部１１３００、１２３００は、以下のような機能を有する。
【００２３】
まず、制御部１１３００、１２３００は、プロセッサ部１１１００、１２１００がロックステップ同期の状態にあるときは、自サブシステムのプロセッサ部から入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行う。ここで、誤り検出用データの種類およびその生成方法は、任意である。例えば、プロセッサ部から入出力部へアクセスされるデータが本来のデータ以外にＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を有する場合、このＣＲＣを上記誤り検出用データとして使用して良い。また、プロセッサ部から入出力部へアクセスされるデータに基づいてチェックサムを算出し、この算出したチェックサムを上記誤り検出用データとして使用して良い。
【００２４】
他方、プロセッサ部１１１００、１２１００がロックステップ非同期の状態にあるときは、制御部１１３００、１２３００は、自サブシステムのプロセッサ部から入出力部へアクセスされるデータの他サブシステムへの送信を行う。すなわち、プロセッサ部１１１００、１２１００がロックステップ非同期の状態にあるときは、主として、何れか一方のプロセッサ部が停止している。仮にプロセッサ部１２１００が停止しているとすると、入出力部１１２００、１２２００へのアクセスはプロセッサ部１１１００が担うことになる。このため、制御部１１３００は、プロセッサ部１１１００から入出力部１２２００へアクセスされるデータそのものの他サブシステムへの送信を行う。
【００２５】
次に本実施形態に係るフォールトトレラントシステム１００００の動作を説明する。
【００２６】
まず、プロセッサ部１１１００、１２１００がロックステップ同期の状態にあるときの動作を説明する。
【００２７】
図２は、プロセッサ部１１１００とプロセッサ部１２１００とが入出力部１１２００内の入出力デバイス１１２１０をアクセスするデータを生成したときと、入出力デバイス１１２１０がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１１３００は、入出力部１１２００内の入出力デバイス１１２１０宛のデータをプロセッサ部１１１００から受信すると、そのデータから誤り検出用データを作成し、元のデータと上記作成した誤り検出用データとを制御部１１３００内部のバッファに蓄積して一時的に保存する。他方、制御部１２３００は、入出力デバイス１１２１０宛のデータをプロセッサ部１２１００から受信すると、そのデータから誤り検出用データを作成し、信号伝送路１３０００を介して制御部１１３００へ送信する。制御部１１３００は、バッファに蓄積されている誤り検出用データと信号伝送路１３０００を介して制御部１２３００から受信した誤り検出用データとを比較する。そして、双方の誤り検出用データが一致した場合に限り、バッファに保持している入出力デバイス１１２１０宛のデータを入出力部１１２００の入出力デバイス１１２１０へ送信する。これにより、双方の誤り検出用データが一致しないような不正な状況の下で入出力デバイス１１２１０がアクセスされる事態が回避される。
【００２８】
入出力デバイス１１２１０は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３００へ送信する。ロックステップ同期の状態にあるので、制御部１１３００は、入出力デバイス１１２１０からのデータを受信すると、プロセッサ部１１１００へ転送すると共に、信号伝送路１３０００を介して制御部１２３００へ転送する。制御部１２３００は、この転送されてきたデータをプロセッサ部１２１００へさらに転送する。
【００２９】
このように、プロセッサ部１１１００、１２１００がロックステップ同期の状態にある場合、プロセッサ部１２１００から入出力デバイス１１２１０宛のデータは信号伝送路１３０００に送信されず、そのデータから生成された誤り検出用データが信号伝送路１３０００に送信される。その結果、信号伝送路１３０００上のデータ量を削減することができる。
【００３０】
図３は、プロセッサ部１１１００とプロセッサ部１２１００とが入出力部１２２００内の入出力デバイス１２２１０をアクセスするデータを生成したときと、入出力デバイス１２２１０がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１２３００は、入出力部１２２００内の入出力デバイス１２２１０宛のデータをプロセッサ部１２１００から受信すると、そのデータから誤り検出用データを作成し、元のデータと上記作成した誤り検出用データとを制御部１２３００内部のバッファに蓄積して一時的に保存する。他方、制御部１１３００は、入出力デバイス１２２１０宛のデータをプロセッサ部１１１００から受信すると、そのデータから誤り検出用データを作成し、信号伝送路１３０００を介して制御部１２３００へ送信する。制御部１２３００は、バッファに蓄積されている誤り検出用データと信号伝送路１３０００を介して制御部１１３００から受信した誤り検出用データとを比較する。そして、双方の誤り検出用データが一致した場合に限り、バッファに保持している入出力デバイス１２２１０宛のデータを入出力部１２２００の入出力デバイス１２２１０へ送信する。これにより、双方の誤り検出用データが一致しないような不正な状況の下で入出力デバイス１２２１０がアクセスされる事態が回避される。
【００３１】
入出力デバイス１２２１０は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３００へ送信する。ロックステップ同期の状態にあるので、制御部１２３００は、入出力デバイス１２２１０からのデータを受信すると、プロセッサ部１２３００へ転送すると共に、信号伝送路１３０００を介して制御部１１３００へ転送する。制御部１１３００は、この転送されてきたデータをプロセッサ部１１１００へさらに転送する。
【００３２】
このように、プロセッサ部１１１００、１２１００がロックステップ同期の状態にある場合、プロセッサ部１１１００から入出力デバイス１２２１０宛のデータは信号伝送路１３０００に送信されず、そのデータから生成された誤り検出用データが信号伝送路１３０００に送信される。その結果、信号伝送路１３０００上のデータ量を削減することができる。
【００３３】
次に、プロセッサ部１１１００、１２１００がロックステップ非同期の状態にあるときの動作を説明する。例として、プロセッサ部１１１００が障害など何らかの理由で稼働を停止し、プロセッサ部１２１００が稼働している状態を想定する。このとき、入出力部１１２００および入出力部１２２００をアクセスするデータを生成するのは、プロセッサ部１２１００のみである。
【００３４】
図４は、プロセッサ部１２１００が入出力部１１２００内の入出力デバイス１１２１０をアクセスするデータを生成したときと、入出力デバイス１１２１０がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ非同期の状態にあるので、制御部１２３００は、入出力部１１２００内の入出力デバイス１１２１０宛のデータをプロセッサ部１２１００から受信すると、受信したデータを信号伝送路１３０００を介して制御部１１３００へ送信する。また制御部１１３００は、受信したデータを入出力部１１２００の入出力デバイス１１２１０へ送信する。
【００３５】
入出力デバイス１１２１０は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３００へ送信する。プロセッサ部１１１００が稼働していないロックステップ非同期の状態にあるので、制御部１１３００は、入出力デバイス１１２１０からのデータを受信すると、信号伝送路１３０００を介して制御部１２３００へ転送する。制御部１２３００は、この転送されてきたデータをプロセッサ部１２１００へさらに転送する。
【００３６】
このように、プロセッサ部１１１００、１２１００がロックステップ非同期の状態にある場合、プロセッサ部１２１００から入出力デバイス１１２１０宛のデータそのものが信号伝送路１３０００に送信される。
【００３７】
図５は、プロセッサ部１２１００が入出力部１２２００内の入出力デバイス１２２１０をアクセスするデータを生成したときと、入出力デバイス１２２１０がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。制御部１２３００は、入出力部１２２００内の入出力デバイス１２２１０宛のデータをプロセッサ部１２１００から受信すると、そのデータを入出力部１２２００の入出力デバイス１２２１０へ送信する。プロセッサ部１１１００が稼働していないロックステップ非同期の状態にあるので、制御部１２３００は信号伝送路１３０００への送信は行わない。
【００３８】
入出力デバイス１２２１０は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３００へ送信する。制御部１２３００は、入出力デバイス１２２１０からのデータを受信すると、プロセッサ部１２１００へ転送する。プロセッサ部１１１００が稼働していないロックステップ非同期の状態にあるので、制御部１２３００は信号伝送路１３０００への送信は行わない。
【００３９】
以上説明したように本実施形態によれば、サブシステム間を接続する信号伝送路１３０００を流れるデータ量を低減しつつ、フォールトトレラントシステムをロックステップ同期の状態およびロックステップ非同期の状態の双方の状態で動作させることができる。
【００４０】
その理由は、制御部１１３００、１２３００は、プロセッサ部１１１００、１２１００がロックステップ同期の状態にあるときは、自サブシステムのプロセッサ部から入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、他方、プロセッサ部１１１００、１２１００がロックステップ非同期の状態にあるときは、自サブシステムのプロセッサ部から入出力部へアクセスされるデータの他サブシステムへの送信を行うためである。
[第２の実施形態]
次に本発明の第２の実施形態について説明する。まず、本実施形態が解決しようとする課題について説明する。
【００４１】
特許文献１〜３に詳細は記載されていないが、例えば特許文献４の図１等に示されるように、フォールトトレラントシステムを構成する冗長化されたサブシステム間を接続するクロスリンクは、例えば本発明に関連する第２のフォールトトレラントシステムの構成図である図１７に示すように、以下の４つの信号伝送路（リンク）で構成されている。
【００４２】
（１）モジュール１のＣＰＵサブシステム１０からモジュール２のＩＯサブシステム２１へアクセスするデータを転送するための信号伝送路Ｌ１
（２）モジュール１のＩＯサブシステム１１からモジュール２のＣＰＵサブシステム２０へアクセスするデータを転送するための信号伝送路Ｌ２
（３）モジュール２のＣＰＵサブシステム２０からモジュール１のＩＯサブシステム１１へアクセスするデータを転送するための信号伝送路Ｌ３
（４）モジュール２のＩＯサブシステム２１からモジュール１のＣＰＵサブシステム１０へアクセスするデータを転送するための信号伝送路Ｌ４
【００４３】
ＣＰＵサブシステム１０、２０がロックステップ動作している場合、信号伝送路Ｌ１、Ｌ３には、プロセッサ１００、２００からｆｔチップセット１１０、２１０へ送信されるパケット量と同じ量のパケットが流れ、信号伝送路Ｌ２、Ｌ４には、ＩＯデバイス１３０、２３０からｆｔチップセット１１０、２１０を通じてプロセッサ１００、２００へ送信されるパケット量と同じ量のパケットが流れる。即ち、モジュール間リンクの帯域は、プロセッサとｆｔチップセット間のリンクの帯域と同等になるように設計されている。例えば、プロセッサとｆｔチップセットとの間がＰＣＩ−ｅｘｐｒｅｓｓ５．０ＧＴ／ｓｘ４で接続されている場合、自系のＣＰＵサブシステムと他系のＩＯサブシステムの間も、ＰＣＩ−ｅｘｐｒｅｓｓ５．０ＧＴ／ｓｘ４と同等のデータ転送帯域を持つリンクで接続されている。
【００４４】
近年、より高いＩＯ性能が要求されるのに従い、プロセッサとｆｔチップセット間のリンクに必要となる帯域も増加している。その結果、モジュール間リンクにもより広い帯域が必要となり、そのためには、モジュール間リンクの転送速度を高速化するか、リンク幅を広げる必要がある。しかし、モジュール間リンクの転送速度を高速化するとシグナルインテグリティの検証のためのコストが増加し、リンク幅を広げるとｆｔチップセットのコストが大きくなる。そのため、コストの増加を抑えるために、モジュール間リンクに必要となる帯域を広げることなく、より高いＩＯ性能を実現する方法が必要となる。
【００４５】
本発明に関連する第１の関連技術では、パケットそのものでなくパケットから生成したチェックサムをクロスリンクを介して他サブシステムへ送信する一方、上記生成したチェックサムとクロスリンクを介して他サブシステムから受信したチェックサムとを比較してサブシステム間の処理の不一致を検知している。従って、上記第１の関連技術を図１７の本発明に関連する第２のフォールトトレラントシステムに適用すれば、ＣＰＵサブシステム１０、２０がロックステップ動作している際に信号伝送路Ｌ１、Ｌ３を流れるデータ量を、パケットそのものを送信する場合に比べて低減することが可能である。しかしながら、信号伝送路Ｌ１、Ｌ３は、ＣＰＵサブシステム１０、２０がロックステップ動作している場合に使用される以外に、ロックステップ動作していない場合にも使用される。例えば信号伝送路Ｌ１は、ＣＰＵサブシステム２０が停止している状態で、ＣＰＵサブシステム１０から他系のＩＯサブシステム２３０を制御するために、プロセッサ１００で生成したパケットそのものを流すために使用される。また信号伝送路Ｌ３は、ＣＰＵサブシステム１０が停止している状態で、ＣＰＵサブシステム２０から他系のＩＯサブシステム１３０を制御するために、プロセッサ２００で生成したパケットそのものを流すために使用される。従って、ロックステップ動作時の必要帯域を狭くしただけでは、信号伝送路Ｌ１、Ｌ３に必要となる帯域を削減することはできない。
【００４６】
本実施形態の目的は、上述した課題、すなわち、サブシステム間を相互に接続する信号伝送路に必要となる帯域を削減することは困難である、という課題を解決するフォールトトレラントシステムを提供することにある。
【００４７】
図６を参照すると、本発明の第２の実施形態にかかるフォールトトレラントシステム１０００は、互いに同一のハードウェアで構成された２つのサブシステム１１００、１２００を備えている。
【００４８】
サブシステム１１００は、プロセッサ部１１１０、このプロセッサ部１１１０に接続される入出力部１１２０、および、プロセッサ部１１１０と入出力部１１２０間に接続される制御部１１３０を有する。また、サブシステム１２００は、プロセッサ部１２１０、このプロセッサ部１２１０に接続される入出力部１２２０、および、プロセッサ部１２１０と入出力部１２２０間に接続される制御部１２３０を有する。さらに、制御部１１３０、１２３０を介してサブシステム１１００とサブシステム１２００間を互いに接続する２本の信号伝送路１３００、１４００が設けられている。
【００４９】
プロセッサ部１１１０とプロセッサ部１２１０は、サブシステム１１００とサブシステム１２００とがロックステップ動作している状態（ロックステップ同期の状態）で動作可能であると共に、サブシステム１１００とサブシステム１２００とがロックステップ動作していない状態（ロックステップ非同期の状態）で動作可能である。
【００５０】
制御部１１３０、１２３０は、以下のような機能を有する。
【００５１】
まず、制御部１１３０、１２３０は、プロセッサ部１１１０、１２１０がロックステップ同期の状態にあるときは、制御部１１３０、１２３０を介してサブシステム１１００のプロセッサ部１１１０からサブシステム１２００の入出力部１２２０へアクセスされるデータから制御部１１３０によって生成された誤り検出用データの送信と、サブシステム１１００の入出力部１１２０からサブシステム１２００のプロセッサ部１２１０へアクセスされるデータの送信とで、信号伝送路１３００を共用する制御を行う。同じくプロセッサ部１１１０、１２１０がロックステップ同期の状態にあるときは、制御部１１３０、１２３０を介してサブシステム１２００のプロセッサ部１２１０からサブシステム１１００の入出力部１１２０へアクセスされるデータから制御部１２３０によって生成された誤り検出用データの送信と、サブシステム１２００の入出力部１２２０からサブシステム１１００のプロセッサ部１１１０へアクセスされるデータの送信とで信号伝送路１４００を共用する制御を行う。
【００５２】
ここで、誤り検出用データの種類およびその生成方法は、任意である。例えば、プロセッサ部から入出力部へアクセスされるデータが本来のデータ以外にＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を有する場合、このＣＲＣを上記誤り検出用データとして使用して良い。また、プロセッサ部から入出力部へアクセスされるデータに基づいてチェックサムを算出し、この算出したチェックサムを上記誤り検出用データとして使用して良い。
【００５３】
他方、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときは、制御部１１３０、１２３０は、制御部１１３０、１２３０を介してサブシステム１１００のプロセッサ部１１１０からサブシステム１２００の入出力部１２２０へアクセスされるデータの送信と、サブシステム１１００の入出力部１１２０からサブシステム１２００のプロセッサ部１２１０へアクセスされるデータの送信とのうちの何れか一方で、信号伝送路１３００を使用する制御を行う。同じくプロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときは、制御部１１３０、１２３０を介してサブシステム１２００のプロセッサ部１２１０からサブシステム１１００の入出力部１１２０へアクセスされるデータの送信と、サブシステム１２００の入出力部１２２０からサブシステム１１００のプロセッサ部１１１０へアクセスされるデータの送信とのうちの何れか一方で、信号伝送路１４００を使用する制御を行う。
【００５４】
すなわち、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときは、主として、何れか一方のプロセッサ部が停止している。仮にプロセッサ部１２１０が停止しているとすると、入出力部１１２０、１２２０へのアクセスはプロセッサ部１１１０が担うことになる。このため、信号伝送路１３００は、プロセッサ部１１１０から入出力部１２２０へアクセスするデータの送信に使用され、信号伝送路１４００は、入出力部１２２０からプロセッサ部１１１０へアクセスするデータの送信に使用される。プロセッサ部１２１０は停止しているので、プロセッサ部１２１０から信号伝送路１４００を通じて入出力部１１２０へアクセスするデータを送信することはなく、また入出力部１１２０から信号伝送路１３００を通じてプロセッサ部１２１０へアクセスするデータを送信することはない。
【００５５】
次に本実施形態に係るフォールトトレラントシステム１０００の動作を説明する。
【００５６】
まず、プロセッサ部１１１０、１２１０がロックステップ同期の状態にあるときの動作を説明する。
【００５７】
図７は、プロセッサ部１１１０とプロセッサ部１２１０とが入出力部１１２０内の入出力デバイス１１２１をアクセスするデータを生成したときと、入出力デバイス１１２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１１３０は、入出力部１１２０内の入出力デバイス１１２１宛のデータをプロセッサ部１１１０から受信すると、そのデータから誤り検出用データを作成し、元のデータと上記作成した誤り検出用データとを制御部１１３０内部のバッファに蓄積して一時的に保存する。他方、制御部１２３０は、入出力デバイス１１２１宛のデータをプロセッサ部１２１０から受信すると、そのデータから誤り検出用データを作成し、信号伝送路１４００を介して制御部１１３０へ送信する。制御部１１３０は、バッファに蓄積されている誤り検出用データと信号伝送路１４００を介して制御部１２３０から受信した誤り検出用データとを比較する。そして、双方の誤り検出用データが一致した場合に限り、バッファに保持している入出力デバイス１１２１宛のデータを入出力部１１２０の入出力デバイス１１２１へ送信する。これにより、双方の誤り検出用データが一致しないような不正な状況の下で入出力デバイス１１２１がアクセスされる事態が回避される。
【００５８】
入出力デバイス１１２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３０へ送信する。ロックステップ同期の状態にあるので、制御部１１３０は、入出力デバイス１１２１からのデータを受信すると、プロセッサ部１１１０へ転送すると共に、信号伝送路１３００を介して制御部１２３０へ転送する。制御部１２３０は、この転送されてきたデータをプロセッサ部１２１０へさらに転送する。
【００５９】
このように、プロセッサ部１１１０、１２１０がロックステップ同期の状態にある場合、プロセッサ部１２１０から入出力デバイス１１２１宛のデータは信号伝送路１４００に送信されず、そのデータから生成された誤り検出用データが信号伝送路１４００に送信される。他方、信号伝送路１３００には、入出力デバイス１１２１が生成したデータが送信される。
【００６０】
図８は、プロセッサ部１１１０とプロセッサ部１２１０とが入出力部１２２０内の入出力デバイス１２２１をアクセスするデータを生成したときと、入出力デバイス１２２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１２３０は、入出力部１２２０内の入出力デバイス１２２１宛のデータをプロセッサ部１２１０から受信すると、そのデータから誤り検出用データを作成し、元のデータと上記作成した誤り検出用データとを制御部１２３０内部のバッファに蓄積して一時的に保存する。他方、制御部１１３０は、入出力デバイス１２２１宛のデータをプロセッサ部１１１０から受信すると、そのデータから誤り検出用データを作成し、信号伝送路１３００を介して制御部１２３０へ送信する。制御部１２３０は、バッファに蓄積されている誤り検出用データと信号伝送路１３００を介して制御部１１３０から受信した誤り検出用データとを比較する。そして、双方の誤り検出用データが一致した場合に限り、バッファに保持している入出力デバイス１２２１宛のデータを入出力部１２２０の入出力デバイス１２２１へ送信する。これにより、双方の誤り検出用データが一致しないような不正な状況の下で入出力デバイス１２２１がアクセスされる事態が回避される。
【００６１】
入出力デバイス１２２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３０へ送信する。ロックステップ同期の状態にあるので、制御部１２３０は、入出力デバイス１２２１からのデータを受信すると、プロセッサ部１２１０へ転送すると共に、信号伝送路１４００を介して制御部１１３０へ転送する。制御部１１３０は、この転送されてきたデータをプロセッサ部１１１０へさらに転送する。
【００６２】
このように、プロセッサ部１１１０、１２１０がロックステップ同期の状態にある場合、プロセッサ部１１１０から入出力デバイス１２２１宛のデータは信号伝送路１３００に送信されず、そのデータから生成された誤り検出用データが信号伝送路１３００に送信される。他方、信号伝送路１４００には、入出力デバイス１２２１が生成したデータが送信される。
【００６３】
現用で使用する入出力デバイスが入出力部１１２０と入出力部１２２０とに分散している場合、図７に示したような動作と図８に示したような動作とが並行して行われる。その結果、信号伝送路１３００、１４００に流れる誤り検出用データのデータ量の最大値をＸ、入出力部で生成されるデータ量の最大値をＹとすると、信号伝送路１３００、１４００に流れるデータ量の最大値はＸ＋Ｙとなる。
【００６４】
次に、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときの動作を説明する。例として、プロセッサ部１１１０が障害など何らかの理由で稼働を停止し、プロセッサ部１２１０が稼働している状態を想定する。このとき、入出力部１１２０および入出力部１２２０をアクセスするデータを生成するのは、プロセッサ部１２１０のみである。
【００６５】
図９は、プロセッサ部１２１０が入出力部１１２０内の入出力デバイス１１２１をアクセスするデータを生成したときと、入出力デバイス１１２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ非同期の状態にあるので、制御部１２３０は、入出力部１１２０内の入出力デバイス１１２１宛のデータをプロセッサ部１２１０から受信すると、受信したデータを信号伝送路１４００を介して制御部１１３０へ送信する。また制御部１１３０は、受信したデータを入出力部１１２０の入出力デバイス１１２１へ送信する。
【００６６】
入出力デバイス１１２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３０へ送信する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１１３０は、入出力デバイス１１２１からのデータを受信すると、信号伝送路１３００を介して制御部１２３０へ転送する。制御部１２３０は、この転送されてきたデータをプロセッサ部１２１０へさらに転送する。
【００６７】
このように、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にある場合、プロセッサ部１２１０から入出力デバイス１１２１宛のデータそのものが信号伝送路１４００に送信される。他方、信号伝送路１３００には、入出力デバイス１１２１が生成したデータが送信される。
【００６８】
図１０は、プロセッサ部１２１０が入出力部１２２０内の入出力デバイス１２２１をアクセスするデータを生成したときと、入出力デバイス１２２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。制御部１２３０は、入出力部１２２０内の入出力デバイス１２２１宛のデータをプロセッサ部１２１０から受信すると、そのデータを入出力部１２２０の入出力デバイス１２２１へ送信する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１２３０は信号伝送路１４００への送信は行わない。
【００６９】
入出力デバイス１２２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３０へ送信する。制御部１２３０は、入出力デバイス１２２１からのデータを受信すると、プロセッサ部１２１０へ転送する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１２３０は信号伝送路１４００への送信は行わない。
【００７０】
このように、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にある場合、プロセッサ部１２１０から入出力デバイス１２２１をアクセスする際には信号伝送路１４００は使用されない。また入出力デバイス１２２１がデータを生成した際も、信号伝送路１４００は使用されない。
【００７１】
現用で使用する入出力デバイスが入出力部１１２０と入出力部１２２０とに分散している場合、図９に示したような動作と図１０に示したような動作とが並行して行われる。プロセッサ部から入出力部をアクセスするデータのデータ量の最大値は、入出力部で生成されるデータ量の最大値とほぼ同じである。従って、信号伝送路１３００、１４００に流れるデータ量の最大値はＹとなる。
【００７２】
次に、比較のために、図１３〜図１６に示すように、サブシステム１１００、１２００間を以下のような４つの信号伝送路で接続した本発明に関連する第１のフォールトトレラントシステムについて説明する。
【００７３】
（１）サブシステム１１００のプロセッサ部１１１０からサブシステム１２００の入出力部１２２０へアクセスするデータを転送するための信号伝送路１３１０
（２）サブシステム１１００の入出力部１１２０からサブシステム１２００のプロセッサ部１２１０へアクセスするデータを転送するための信号伝送路１３２０
（３）サブシステム１２００のプロセッサ部１２１０からサブシステム１１００の入出力部１１２０へアクセスするデータを転送するための信号伝送路１４１０
（４）サブシステム１２００の入出力部１２２０からサブシステム１１００のプロセッサ部１１１０へアクセスするデータを転送するための信号伝送路１４２０
【００７４】
まず、プロセッサ部１１１０、１２１０がロックステップ同期の状態にあるときの動作を説明する。
【００７５】
図１３は、プロセッサ部１１１０とプロセッサ部１２１０とが入出力部１１２０内の入出力デバイス１１２１をアクセスするデータを生成したときと、入出力デバイス１１２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１１３０は、入出力部１１２０内の入出力デバイス１１２１宛のデータをプロセッサ部１１１０から受信すると、そのデータからチェックサムを作成し、元のデータと上記作成したチェックサムとを制御部１１３０内部のバッファに蓄積して一時的に保存する。他方、制御部１２３０は、入出力デバイス１１２１宛のデータをプロセッサ部１２１０から受信すると、そのデータからチェックサムを作成し、信号伝送路１４１０を介して制御部１１３０へ送信する。制御部１１３０は、バッファに蓄積されているチェックサムと信号伝送路１４１０を介して制御部１２３０から受信したチェックサムとを比較する。そして、双方のチェックサムが一致した場合に限り、バッファに保持している入出力デバイス１１２１宛のデータを入出力部１１２０の入出力デバイス１１２１へ送信する。
【００７６】
入出力デバイス１１２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３０へ送信する。ロックステップ同期の状態にあるので、制御部１１３０は、入出力デバイス１１２１からのデータを受信すると、プロセッサ部１１１０へ転送すると共に、信号伝送路１３２０を介して制御部１２３０へ転送する。制御部１２３０は、この転送されてきたデータをプロセッサ部１２１０へさらに転送する。
【００７７】
図１４は、プロセッサ部１１１０とプロセッサ部１２１０とが入出力部１２２０内の入出力デバイス１２２１をアクセスするデータを生成したときと、入出力デバイス１２２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ同期の状態にあるので、制御部１２３０は、入出力部１２２０内の入出力デバイス１２２１宛のデータをプロセッサ部１２１０から受信すると、そのデータからチェックサムを作成し、元のデータと上記作成したチェックサムとを制御部１２３０内部のバッファに蓄積して一時的に保存する。他方、制御部１１３０は、入出力デバイス１２２１宛のデータをプロセッサ部１１１０から受信すると、そのデータからチェックサムを作成し、信号伝送路１３１０を介して制御部１２３０へ送信する。制御部１２３０は、バッファに蓄積されているチェックサムと信号伝送路１３１０を介して制御部１１３０から受信したチェックサムとを比較する。そして、双方のチェックサムが一致した場合に限り、バッファに保持している入出力デバイス１２２１宛のデータを入出力部１２２０の入出力デバイス１２２１へ送信する。
【００７８】
入出力デバイス１２２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３０へ送信する。ロックステップ同期の状態にあるので、制御部１２３０は、入出力デバイス１２２１からのデータを受信すると、プロセッサ部１２１０へ転送すると共に、信号伝送路１４２０を介して制御部１１３０へ転送する。制御部１１３０は、この転送されてきたデータをプロセッサ部１１１０へさらに転送する。
【００７９】
現用で使用する入出力デバイスが入出力部１１２０と入出力部１２２０とに分散している場合、図１３に示したような動作と図１４に示したような動作とが並行して行われる。その結果、信号伝送路１３１０、１３２０、１４１０、１４２０に流れるデータ量の最大値はＹとなる。
【００８０】
次に、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときの動作を説明する。例として、プロセッサ部１１１０が障害など何らかの理由で稼働を停止し、プロセッサ部１２１０が稼働している状態を想定する。このとき、入出力部１１２０および入出力部１２２０をアクセスするデータを生成するのは、プロセッサ部１２１０のみである。
【００８１】
図１５は、プロセッサ部１２１０が入出力部１１２０内の入出力デバイス１１２１をアクセスするデータを生成したときと、入出力デバイス１１２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。ロックステップ非同期の状態にあるので、制御部１２３０は、入出力部１１２０内の入出力デバイス１１２１宛のデータをプロセッサ部１２１０から受信すると、受信したデータを信号伝送路１４１０を介して制御部１１３０へ送信する。また制御部１１３０は、受信したデータを入出力部１１２０の入出力デバイス１１２１へ送信する。
【００８２】
入出力デバイス１１２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１１３０へ送信する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１１３０は、入出力デバイス１１２１からのデータを受信すると、信号伝送路１３２０を介して制御部１２３０へ転送する。制御部１２３０は、この転送されてきたデータをプロセッサ部１２１０へさらに転送する。
【００８３】
図１６は、プロセッサ部１２１０が入出力部１２２０内の入出力デバイス１２２１をアクセスするデータを生成したときと、入出力デバイス１２２１がそのアクセスデータに対する応答データを生成したときのデータの流れを示している。制御部１２３０は、入出力部１２２０内の入出力デバイス１２２１宛のデータをプロセッサ部１２１０から受信すると、そのデータを入出力部１２２０の入出力デバイス１２２１へ送信する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１２３０は信号伝送路１４１０への送信は行わない。
【００８４】
入出力デバイス１２２１は、上記データを受信し、上記データに応じた処理を行い、その処理結果を応答データとして生成し、制御部１２３０へ送信する。制御部１２３０は、入出力デバイス１２２１からのデータを受信すると、プロセッサ部１２１０へ転送する。プロセッサ部１１１０が稼働していないロックステップ非同期の状態にあるので、制御部１２３０は信号伝送路１４２０への送信は行わない。
【００８５】
このように、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にある場合、プロセッサ部１２１０から入出力デバイス１２２１をアクセスする際には信号伝送路１４１０は使用されない。また入出力デバイス１２２１がデータを生成した際も、信号伝送路１４２０は使用されない。
【００８６】
現用で使用する入出力デバイスが入出力部１１２０と入出力部１２２０とに分散している場合、図１５に示したような動作と図１６に示したような動作とが並行して行われる。従って、信号伝送路１３２０、１４１０に流れるデータ量の最大値はＹとなる。同様に、プロセッサ部１１１０でなくプロセッサ部１２１０が障害等により停止した場合には、信号伝送路１３１０、１４２０に流れるデータ量の最大値はＹとなる。
【００８７】
以上の結果、サブシステム１１００、１２００間を図１３〜図１６に示すように４本の信号伝送路で接続したフォールトトレラントシステムにおいては、各信号伝送路に必要となる帯域はＹとなる。従って、サブシステム全体では、サブシステム１１００からサブシステム１２００へデータを送信するために必要となる帯域、および、サブシステム１２００からサブシステム１１００へデータを送信するために必要となる帯域は、それぞれ２Ｙとなる。
【００８８】
これに対して、サブシステム１１００、１２００間を図７〜図１０に示すように２本の信号伝送路１３００、１４００で接続し、一方のサブシステムのプロセッサ部から他方のサブシステムの入出力部へアクセスするデータと一方のサブシステムの入出力部から他方のサブシステムのプロセッサ部へアクセスするデータとで同じ信号伝送路を共有する本実施形態に係るフォールトトレラントシステムでは、サブシステム１１００からサブシステム１２００へデータを送信するために必要となる帯域、および、サブシステム１２００からサブシステム１１００へデータを送信するために必要となる帯域は、それぞれＸ＋Ｙとなる。ここで、ＸはＹより十分に小さい。従って、本実施形態によれば、サブシステム間を相互に接続する信号伝送路に必要となる帯域を大幅に削減することができる。
【００８９】
なお、プロセッサ部１１１０、１２１０がロックステップ非同期の状態にあるときに、プロセッサ部１１１０、１２１０の双方を独立して稼働させ、プロセッサ部１１１０に他系の入出力部１２２０との間でデータの授受を行わせ、且つ、プロセッサ部１２１０に他系の入出力部１１２０との間でデータの授受を行わせることは、理論的には可能である。そして、その際には信号伝送路１３００、１４００に必要な帯域は２Ｙとなる。従って、信号伝送路１３００、１４００の帯域をＸ＋Ｙに設定した場合、上述したような動作は信号伝送路の帯域不足によって実現困難になるが、実用面では全く問題とはならない。何故ならば、上述したような動作形態は実際の運用では必要性がないためである。
【００９０】
[第３の実施形態]
次に本発明の第３の実施形態について詳細に説明する。
[本実施形態が解決しようとする課題]
まず、図１７を参照して本実施形態が解決しようとする課題について説明する。図１７は、２つのモジュールをロックステップ動作させる本発明に関連する第２のフォールトトレラントシステムの構成を示している。このフォールトトレラントシステムでは、自モジュールのＣＰＵサブシステムと他モジュールのＩＯサブシステムとの間、また自モジュールのＩＯサブシステムと他モジュールのＣＰＵサブシステムの間が、モジュール間リンクにより双方向接続されている。このとき、モジュール間リンクの帯域は、プロセッサとｆｔチップセット間のリンクの帯域と同等になるように設計されている。例えば、プロセッサとｆｔチップセットとの間がＰＣＩ−ｅｘｐｒｅｓｓ５．０ＧＴ／ｓｘ４で接続されている場合、自系のＣＰＵサブシステムと他系のＩＯサブシステムの間も、ＰＣＩ−ｅｘｐｒｅｓｓ５．０ＧＴ／ｓｘ４と同等のデータ転送帯域を持つリンクで接続されている。
【００９１】
近年、より高いＩＯ性能が要求されるのに従い、プロセッサとｆｔチップセット間のリンクに必要となる帯域も増加している。その結果、モジュール間リンクにもより高い帯域が必要となるが、帯域を高めるためには、転送速度を高速化させるか、リンク幅を増やす必要がある。しかし、転送速度を高速化させるとシグナルインテグリティの検証の為のコストが増加し、リンク幅を増やすとｆｔチップセットのコストが大きくなる。その為、コストの増加を抑えるために、モジュール間リンクに必要となる帯域を増やすことなく、より高いＩＯ性能を実現する方法が必要となる。
【００９２】
[本実施形態の概要]
本実施形態では、以下の２つの手段により上記課題を解決する。
【００９３】
１つ目の手段として、モジュール間リンクを共用化する。本発明に関連する第２のフォールトトレラントシステムでは、モジュール間リンクはモジュール１のＣＰＵサブシステムからモジュール２のＩＯサブシステムへのリンク、モジュール１のＩＯサブシステムからモジュール２のＣＰＵサブシステムへのリンク、モジュール２のＣＰＵサブシステムからモジュール１のＩＯサブシステムへのリンク、モジュール２のＩＯサブシステムからモジュール１のＣＰＵサブシステムへのリンクの、４つのリンクで構成されていた。一方、本実施形態による構成では、モジュール間リンクをモジュール１からモジュール２へのリンク、モジュール２からモジュール１へのリンクの２つのリンクに再構成し、モジュール１のＣＰＵサブシステムからモジュール２のＩＯサブシステムへのデータ転送と、モジュール１のＩＯサブシステムからモジュール２のＣＰＵサブシステムへのデータ転送でモジュール間リンクを共用する。
【００９４】
２つ目の手段として、ＣＰＵサブシステムがロックステップ動作している場合に、反対側のモジュールのＩＯサブシステムへのデータ転送量を削減する。本発明に関連する第２のフォールトトレラントシステムでは、ＣＰＵサブシステムはプロセッサから受信したパケットの宛先を確認し、モジュール１のＩＯサブシステム、またはモジュール２のＩＯサブシステムにパケット全体を転送していた。ＩＯサブシステムはモジュール１のＣＰＵサブシステムから受信したパケットと、モジュール２のＣＰＵサブシステムから受信したパケットが一致していることを確認し、ＩＯデバイスにそのパケットを転送していた。一方、本実施形態による構成では、ＣＰＵサブシステムはプロセッサから受信したパケットの宛先を確認し、宛先が反対側のモジュールのＩＯデバイスであった場合、かつＣＰＵサブシステムがロックステップ動作している場合には、パケット全体を送信せずに、パケットの一部（または後述する実施形態のようにパケット情報やパケットを受信した時刻情報から生成したチェックサム等であってもよい）を送信する。一例としてパケットに含まれるＣＲＣのみを送信する場合、ＩＯサブシステムは、モジュール１のＣＰＵサブシステムから受信したＣＲＣと、モジュール２のＣＰＵサブシステムから受信したＣＲＣとを比較し、一致した場合には、自系のＣＰＵサブシステムから受信したパケットをＩＯデバイスに転送する。一方、パケットの宛先が自系のＩＯサブシステムであった場合、またはＣＰＵサブシステムがロックステップ動作していない場合には、パケット全体をＩＯサブシステムに転送する。
【００９５】
[本実施形態の構成]
図１１を参照すると、本発明の第３の実施形態として、モジュール１とモジュール２から構成されるフォールトトレラントシステムが示されている。モジュール１とモジュール２とは、モジュール間リンク３０によって相互に接続されている。モジュール間リンク３０は、モジュール１からモジュール２への送信に使用する信号伝送路３１と、その逆にモジュール２からモジュール１への送信に使用する信号伝送路３２との２つの信号伝送路で構成されている。
【００９６】
モジュール１は、プロセッサ１００、ｆｔチップセット１１０、ＩＯデバイス１３０で構成される。プロセッサ１００は、図示しないＣＰＵやメモリ等に加えて、パケット送信部１０１とパケット受信部１０２を有する。ＩＯデバイス１３０は、図示しないＩＯデバイス等に加えて、パケット送信部１３１とパケット受信部１３２を有する。ｆｔチップセット１１０は、パケット受信部１１１、パケット送信部１１２、セレクタ１１３、ＣＲＣ抽出器１１５、送信部１１６、受信部１１７、バッファ１１８、バッファ１１９、バッファ１２０、バッファ１２１、比較器１２２、セレクタ１２３、パケット送信部１２４、パケット受信部１２５から構成される。また、ｆｔチップセット１１０は、モジュール間リンク３０に接続されている。
【００９７】
モジュール２は、モジュール１と同じ構成を有する。すなわち、モジュール２は、プロセッサ２００、ｆｔチップセット２１０、ＩＯデバイス２３０で構成される。プロセッサ２００は、図示しないＣＰＵやメモリ等に加えて、パケット送信部２０１とパケット受信部２０２を有する。ＩＯデバイス２３０は、図示しないＩＯデバイス等に加えて、パケット送信部２３１とパケット受信部２３２を有する。ｆｔチップセット２１０は、パケット受信部２１１、パケット送信部２１２、セレクタ２１３、ＣＲＣ抽出器２１５、送信部２１６、受信部２１７、バッファ２１８、バッファ２１９、バッファ２２０、バッファ２２１、比較器２２２、セレクタ２２３、パケット送信部２２４、パケット受信部２２５から構成される。また、ｆｔチップセット２１０は、モジュール間リンク３０に接続されている。
【００９８】
モジュール１とモジュール２は同じ構成なので、以下では、主にモジュール１について説明する。
【００９９】
プロセッサ１００は、ＩＯデバイス１３０、ＩＯデバイス２３０に対するパケットを生成する。パケットは、例えば、宛先の情報、送信元の情報、データ、ＣＲＣ、およびその他の情報を有する。プロセッサ１００が生成したパケットは、パケット送信部１０１により、パケットの中継を行うｆｔチップセット１１０に送信される。また、パケット受信部１０２は、ｆｔチップセット１１０からパケットを受信する。
【０１００】
ＩＯデバイス１３０は、プロセッサ１００、プロセッサ２００に対するパケットを生成する。生成されたパケットは、パケット受信部１３２により、パケットの中継を行うｆｔチップセット１１０に送信される。また、パケット受信部１３１は、ｆｔチップセット１１０からパケットを受信する。
【０１０１】
ｆｔチップセット１１０は、プロセッサ１００、プロセッサ２００、ＩＯデバイス１３０、ＩＯデバイス２３０から発行されたパケットの中継を行う。
【０１０２】
パケット受信部１１１は、プロセッサ１００から受信したパケットを出力する。またパケット受信部１１１は、プロセッサ１００から受信したパケットの宛先を確認し、ＩＯデバイス１３０宛てのパケットであった場合にはバッファ１２１に登録する。
【０１０３】
パケット送信部１１２は、受信部１１７、またはパケット受信部１２５から受信したパケットを、プロセッサ１００に送信する。
【０１０４】
セレクタ１１３は、ＣＰＵサブシステムがロックステップ動作している場合には、ＣＲＣ抽出器１１５の出力を選択し、ＣＰＵサブシステムがロックステップ動作していない場合には、パケット受信部１１１からの出力を選択する。
【０１０５】
ＣＲＣ抽出器１１５は、パケット受信部１１１から出力されるパケットからＣＲＣを抽出し、セレクタ１１３に出力する。また、ＣＲＣをバッファ１１８に登録する。
【０１０６】
送信部１１６は、セレクタ１１３から出力されるＣＲＣまたはパケットを、モジュール間リンク３０の信号伝送路３１を介して、モジュール２のＩＯサブシステム２１に送信する。また、送信部１１６は、パケット受信部１２５から受信したパケットも、信号伝送路３１を介して、モジュール２のＩＯサブシステム２１に送信する。
【０１０７】
受信部１１７は、モジュール間リンク３０の信号伝送路３２を介してモジュール２のＣＰＵサブシステム２０から受信したＣＲＣをバッファ１１９に登録する。また、受信部１１７は、信号伝送路３２を介してモジュール２のＣＰＵサブシステム２０から受信したパケットをバッファ１２０に登録する。
【０１０８】
比較器１２２は、バッファ１１８とバッファ１１９から出力されるＣＲＣを比較し、一致した場合には、バッファ１２１にパケットを出力するように指示する。
【０１０９】
セレクタ１２３は、ＣＰＵサブシステムがロックステップ動作している場合、またＣＰＵサブシステム１０のみが稼働している場合には、バッファ１２１を選択する。ＣＰＵサブシステム２０のみが稼働している場合には、バッファ１２０を選択する。
【０１１０】
[本実施形態の動作]
ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作している場合と、ロックステップ動作していない場合とで動作が異なる。まず、ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作している場合の動作を説明する。
【０１１１】
ＣＰＵサブシステムがロックステップ動作している場合には、プロセッサ１００とプロセッサ２００は、同じ時刻に同じパケットを生成する。ここで、生成されたパケットの宛先がＩＯデバイス１３０であるとする。生成されたパケットは、パケット送信部１０１、パケット送信部２０１を経由してパケット受信部１１１とパケット受信部２１１に受信される。パケット受信部１１１は、受信したパケットを出力し、バッファ１２１に登録する。また、ＣＲＣ抽出器１１５は、受信したパケットのＣＲＣを取り出し、バッファ１１８に登録する。
【０１１２】
一方、パケット受信部２１１は、パケットの宛先がＩＯデバイス１３０宛てである場合には、バッファ２２１にパケットを登録しない。セレクタ２１３にはパケット受信部２１１が受信したパケットと、ＣＲＣ抽出器２１５がパケットから取り出したＣＲＣが入力されているが、ＣＰＵがロックステップ動作しているため、ＣＲＣを送信部２１６に送付する。送信部２１６は、ＣＲＣを信号伝送路３２を介して受信部１１７に送信する。受信部１１７は、受信したＣＲＣをバッファ１１９に登録する。比較器１２２は、バッファ１１８に登録されたＣＲＣと、バッファ１１９に登録されたＣＲＣとを比較し、一致している場合にはバッファ１２１に指示して、バッファ１２１に登録されているパケットを出力させる。セレクタ１２３は、バッファ１２１から受け取ったパケットをパケット送信部１２４に出力する。パケット送信部１２４は、受け取ったパケットをＩＯデバイス１３０に送信する。
【０１１３】
次に、ＩＯデバイス１３０がパケットを生成した場合の動作を説明する。ＣＰＵサブシステムがロックステップ動作している場合には、このパケットはプロセッサ１００とプロセッサ２００の両方に送信する必要がある。パケット送信部１３２は、ＩＯデバイス１３０が生成したパケットをパケット受信部１２５に送信する。パケット受信部１２５は、受信したパケットをパケット送信部１１２と、送信部１１６に出力する。パケット送信部１１２は、受け取ったパケットをパケット送信部１０２に送信する。送信部１１６は、受け取ったパケットを信号伝送路３１を介して受信部２１７に送信する。受信部２１７は、受信したパケットの宛先を確認し、パケット送信部２１２に出力する。パケット送信部２１２は、受け取ったパケットをパケット送信部２０２に送信する。
【０１１４】
このように、ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作している場合には、プロセッサからＩＯデバイス宛てのパケットはＣＲＣのみがモジュール間リンク３０上で送信され、ＩＯデバイスからプロセッサ宛てのパケットはパケット全体がモジュール間リンク３０上で送信される。
【０１１５】
次に、ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作していない場合の動作を説明する。ここでは、ＣＰＵサブシステム１０が稼働しており、ＣＰＵサブシステム２０は稼働していない場合の説明を行う。
【０１１６】
ＣＰＵサブシステム１０のみが稼働しているため、ＩＯデバイス１３０宛てのパケット、ＩＯデバイス２３０宛てのパケットを発行するのはＣＰＵサブシステム１０のみである。まず、ＣＰＵサブシステム１０がＩＯデバイス１３０宛てのパケットを発行した場合の説明を行う。プロセッサが発行したＩＯデバイス１３０宛てのパケットは、パケット送信部１０１、パケット受信部１１１を経由してバッファ１２１に入力される。ここで、ＣＰＵサブシステム１０とＣＰＵサブシステム２０はロックステップ動作していない為、バッファ１２１に入力されたパケットは、セレクタ１２３、パケット送信部１２４を経由して、パケット受信部１３１により受信される。
【０１１７】
次に、ＣＰＵサブシステム１０がＩＯデバイス２３０宛てのパケットを発行した場合の説明を行う。同様に、プロセッサが発行したパケットは、パケット送信部１０１、パケット受信部１１１を経由するが、宛先がＩＯデバイス２３０であるため、バッファ１２１には登録されない。その代わりに、ＩＯデバイス２３０宛てのパケットは、セレクタ１１３、送信部１１６を経由して、信号伝送路３１経由で受信部２１７により受信される。受信部２１７は、受信したパケットの宛先を確認し、ＩＯデバイス２３０宛なので、バッファ２２０に登録する。登録されたパケットは、セレクタ２２３、パケット送信部２２４を経由して、パケット受信部２３１により受信される。このように、ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作していない場合、宛先が他系のＩＯデバイスであるパケットは、その全体がモジュール間リンク３０上で送信される。
【０１１８】
次に、ＩＯデバイス１３０がパケットを生成した場合の動作を説明する。ＣＰＵサブシステム１０のみが稼働しているため、このパケットはプロセッサ１００にのみ送信する必要がある。ＩＯデバイス１３０が生成したパケットは、パケット送信部１３２、パケット受信部１２５、パケット送信部１１２を経由して、パケット送信部１０２に受信される。
【０１１９】
次に、ＩＯデバイス２３０がパケットを生成した場合の動作を説明する。ＣＰＵサブシステム１０のみが稼働しているため、このパケットもプロセッサ１００にのみ送信する必要がある。ＩＯデバイス２３０が生成したパケットは、パケット送信部２３２、パケット受信部２２５、送信部２１６、信号伝送路３２、受信部１１７、パケット送信部１１２を経由して、パケット送信部１０２に受信される。このように、ＣＰＵサブシステム１０とＣＰＵサブシステム２０がロックステップ動作していない場合、ＩＯデバイスが生成したパケットの宛先が他系のプロセッサである場合、パケット全体がモジュール間リンク３０上で送信される。
【０１２０】
[本実施形態の効果]
本実施形態の効果として、モジュール間リンクに必要となる帯域を大幅に減少することが可能になる。その理由は以下の通りである。
【０１２１】
本発明に関連する第２のフォールトトレラントシステムでは、ＣＰＵサブシステムがロックステップ動作しているかどうかにかかわらず、モジュール間リンク上でパケット全体を送信していた。その為、自系のＣＰＵサブシステムから他系のＩＯサブシステムへのモジュール間リンクと、自系のＩＯサブシステムから他系のＣＰＵサブシステムへのモジュール間リンクを独立して用意する必要があった。一方で、本実施形態によるシステムでは、ＣＰＵサブシステムがロックステップ動作している場合には、自系のＣＰＵサブシステムから他系のＩＯサブシステムへはＣＲＣのみを送付すれば良い。パケット全体のデータ量に対して、ＣＲＣのみのデータ量は数十分の一に抑えることが出来るため、自系のＣＰＵサブシステムから他系のＩＯサブシステムへのデータ転送量が大幅に削減できる。一方、ＣＰＵサブシステムがロックステップ動作していない場合には、稼働しているＣＰＵサブシステムから他系のＩＯサブシステムへはパケット全体を送信する必要があるが、稼働していないＣＰＵサブシステムから他系のＩＯサブシステムへのデータ転送が不要である。その為、モジュール１からモジュール２、またはモジュール２からモジュール１全体で見た場合、モジュール間リンク上で転送されるデータ量は、ＣＰＵサブシステムがロックステップ動作している場合よりも、ＣＲＣの送信にかかる分だけ少ない。
【０１２２】
以上より、本発明に関連する第２のフォールトトレラントシステムではパケット全体の送信に必要となる帯域をＰとした場合、モジュール１からモジュール２へ２Ｐの帯域が、モジュール２からモジュール１へ２Ｐの帯域が必要となっていた。一方で、ＣＲＣのみの送信に必要となる帯域をＣとした場合、モジュール１からモジュール２へＰ＋Ｃの帯域が、モジュール２からモジュール１へＰ＋Ｃの帯域のみがあれば良い。これにより、モジュール１からモジュール２への送信に必要となる帯域、モジュール２からモジュール１への送信に必要となる帯域がＰ−Ｃ削減される。前述の通りＣはＰよりも十分小さいため、大幅にデータ帯域を減らすことが可能になる。
【０１２３】
[第４の実施形態]
【０１２４】
図１２は本発明の第４の実施形態を示している。本発明の第４の実施形態では、本発明の第３の実施形態におけるＣＲＣ抽出器１１５、ＣＲＣ抽出器２１５が、チェックサム生成器１２６、チェックサム生成器２２６で置き変わっている。チェックサム生成器１２６とチェックサム生成器２２６は同等であるため、チェックサム生成器１２６を例に動作の説明を行う。
【０１２５】
チェックサム生成器１２６は、パケット受信部１１１から受け取ったパケットと、パケットを受け取った時刻情報とから、チェックサム情報を生成する。そしてＣＰＵサブシステムがロックステップ動作している場合には、チェックサム情報を他系のＩＯサブシステムに送信する。ＣＲＣを送信する代わりにチェックサムを送信する利点は、チェックサムには時刻情報が付加されている点である。
【０１２６】
例えば、プロセッサ１００の内部で訂正可能なエラーが発生した場合、プロセッサ１００からｆｔチップセット１１０にパケットが送信される時刻と、プロセッサ２００からｆｔチップセット２１０にパケットが送信される時刻に、若干のズレが発生する場合が多い。しかし、例えばＰＣＩ−Ｅｘｐｒｅｓｓの仕様では、ｆｔチップセット１１０とｆｔチップセット２１０が、各々プロセッサ１００とプロセッサ２００から同じパケットを異なる時刻に受信した場合でも、パケットに含まれるＣＲＣは同じになる。そのため、第３の実施形態では比較器１２２は差分を検出できない。一方、チェックサム情報には時刻情報が含まれるため、ｆｔチップセット１１０とｆｔチップセット２１０が、各々プロセッサ１００とプロセッサ２００から同じパケットを異なる時刻に受信した場合、チェックサム情報が異なる為、比較器１２２が差分を検出することができる。これにより、プロセッサ１００の異常を早期に検出することができる。
【０１２７】
また、プロセッサとｆｔチップセット間のリンクで転送されるパケットが、ＣＲＣを含まないリンク仕様を採用する場合、ＣＲＣ抽出器を使用する第３の実施形態は動作しない。
【０１２８】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。
【産業上の利用可能性】
【０１２９】
本発明は、フォールトトレラントシステム、特にハードウェアによって実現されるフォールトトレラントシステムに適用することができる。
【０１３０】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
互いに同一のハードウェアで構成された複数のサブシステムを備えたフォールトトレラントシステムであって、
前記複数のサブシステムは、
前記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、
前記プロセッサ部に接続される入出力部と、
前記プロセッサ部および前記入出力部間に接続される制御部と、
前記制御部を介して前記複数のサブシステム間を互いに接続する信号伝送路とを有し、
前記制御部は、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステム。
（付記２）
前記信号伝送路は複数の信号伝送路で構成され、
前記制御部は、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行い、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行う
付記１に記載のフォールトトレラントシステム。
（付記３）
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データの受信時刻と前記データとからチェックサムを生成し、該生成した前記チェックサムを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
付記２に記載のフォールトトレラントシステム。
（付記４）
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データが有するＣＲＣを抽出し、該抽出した前記ＣＲＣを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
付記２に記載のフォールトトレラントシステム。
（付記５）
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データと前記誤り検出用データ生成器から出力された前記誤り検出用データとのうちの何れか一方を選択する第１のセレクタを有する
付記３または４に記載のフォールトトレラントシステム。
（付記６）
前記制御部は、
自制御部の前記第１のセレクタの出力と自サブシステムの前記入出力部から他サブシステムの前記プロセッサ部へアクセスされるデータとを同じ一つの前記信号伝送路へ送信する第１の送信部と、
自制御部の前記誤り検出用データ生成器から出力された前記誤り検出用データを一時的に記憶する第１のバッファと、
前記信号伝送路から受信した前記誤り検出用データを一時的に記憶する第２のバッファと、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データを一時的に記憶する第３のバッファと、
前記信号伝送路から受信した他の前記サブシステムの前記プロセッサ部から自サブシステムの前記入出力部へアクセスされる前記データを一時的に記憶する第４のバッファと、
前記第１のバッファに記憶された前記誤り検出用データと前記第２のバッファに記憶された前記誤り検出用データとを比較する比較器と、
前記プロセッサ部が前記ロックステップ同期の状態にあるときは、前記比較器で一致が検出されることを条件に前記第３のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力し、前記プロセッサ部が前記ロックステップ非同期の状態にあるときは、前記第３のバッファに記憶された前記データまたは前記第４のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力する第２のセレクタと
を有する
付記５に記載のフォールトトレラントシステム。
（付記７）
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いる制御装置であって、
自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続され、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムで用いる制御装置。
（付記８）
前記信号伝送路は複数の信号伝送路で構成され、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行い、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行う
付記７に記載のフォールトトレラントシステムで用いる制御装置。
（付記９）
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データの受信時刻と前記データとからチェックサムを生成し、該生成した前記チェックサムを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
付記８に記載のフォールトトレラントシステムで用いる制御装置。
（付記１０）
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データが有するＣＲＣを抽出し、該抽出した前記ＣＲＣを前記誤り検出用データとして出力する誤り検出用データ生成器を有する
付記８に記載のフォールトトレラントシステムで用いる制御装置。
（付記１１）
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データと前記誤り検出用データ生成器から出力された前記誤り検出用データとのうちの何れか一方を選択する第１のセレクタを有する
付記９または１０に記載のフォールトトレラントシステムで用いる制御装置。
（付記１２）
前記第１のセレクタの出力と自サブシステムの前記入出力部から他サブシステムの前記プロセッサ部へアクセスされるデータとを同じ一つの前記信号伝送路へ送信する第１の送信部と、
前記誤り検出用データ生成器から出力された前記誤り検出用データを一時的に記憶する第１のバッファと、
前記第２の信号伝送路から受信した前記誤り検出用データを一時的に記憶する第２のバッファと、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データを一時的に記憶する第３のバッファと、
前記信号伝送路から受信した他サブシステムの前記プロセッサ部から自サブシステムの前記入出力部へアクセスされる前記データを一時的に記憶する第４のバッファと、
前記第１のバッファに記憶された前記誤り検出用データと前記第２のバッファに記憶された前記誤り検出用データとを比較する比較器と、
前記プロセッサ部が前記ロックステップ同期の状態にあるときは、前記比較器で一致が検出されることを条件に前記第３のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力し、前記プロセッサ部が前記ロックステップ非同期の状態にあるときは、前記第３のバッファに記憶された前記データまたは前記第４のバッファに記憶された前記データを自サブシステムの前記入出力部へ出力する第２のセレクタと
を有する
付記１１に記載のフォールトトレラントシステムで用いる制御装置。
（付記１３）
互いに同一のハードウェアで構成された複数のサブシステムを備え、前記複数のサブシステムは、前記複数のサブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と、前記プロセッサ部に接続される入出力部と、前記プロセッサ部および前記入出力部間に接続される制御部と、前記制御部を介して前記複数のサブシステム間を互いに接続する信号伝送路とを有するフォールトトレラントシステムの動作方法であって、
前記制御部が、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムの動作方法。
（付記１４）
前記信号伝送路は複数の信号伝送路で構成され、
前記制御部が、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行い、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行う
付記１３に記載のフォールトトレラントシステムの動作方法。
（付記１５）
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データの受信時刻と前記データとからチェックサムを生成し、該生成した前記チェックサムを前記誤り検出用データとして使用する
付記１４に記載のフォールトトレラントシステムの動作方法。
（付記１６）
前記制御部は、
自サブシステムの前記プロセッサ部から前記入出力部へアクセスされる前記データが有するＣＲＣを抽出し、該抽出した前記ＣＲＣを前記誤り検出用データとして使用する
付記１４に記載のフォールトトレラントシステムの動作方法。
（付記１７）
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続される制御装置の動作方法であって、
前記制御装置が、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行い、ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行う
フォールトトレラントシステムで用いる制御装置の動作方法。
（付記１８）
前記信号伝送路は複数の信号伝送路で構成され、
前記制御装置が、前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行い、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行う
付記１７に記載のフォールトトレラントシステムで用いる制御装置の動作方法。
（付記１９）
同一のハードウェアで構成された複数のサブシステムで構成されるフォールトトレラントシステムの各サブシステムで用いられ、自他サブシステム間においてロックステップ同期の状態および非同期の状態で動作可能なプロセッサ部と前記プロセッサ部に接続される入出力部との間に接続され、また、自他サブシステム間を互いに接続する信号伝送路に接続された制御装置を構成するコンピュータに、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信を行わせ、
ロックステップ非同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信を行わせる
ためのプログラム。
（付記２０）
前記信号伝送路は複数の信号伝送路で構成され、
前記コンピュータに、
前記プロセッサ部がロックステップ同期の状態にあるときは、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータから生成した誤り検出用データの他サブシステムへの送信と自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信とで同じ一つの前記信号伝送路を共用する制御を行わせ、ロックステップ非同期の状態にあるときは、前記同じ一つの前記信号伝送路を、自サブシステムの前記プロセッサ部から前記入出力部へアクセスされるデータの他サブシステムへの送信、自サブシステムの前記入出力部から前記プロセッサ部へアクセスされるデータの他サブシステムへの送信のうちの何れか一方の送信のために使用する制御を行わせる
付記１９に記載のプログラム。
【符号の説明】
【０１３１】
１０００…フォールトトレラントシステム
１１００、１２００…サブシステム
１１１０、１２１０…プロセッサ部
１１２０、１２２０…入出力部
１１２１、１２２１…入出力デバイス
１１３０、１２３０…制御部
１３００、１４００…信号伝送路
【図１】
2015069270.tif 000003
【図２】
2015069270.tif 000004
【図３】
2015069270.tif 000005
【図４】
2015069270.tif 000006
【図５】
2015069270.tif 000007
【図６】
2015069270.tif 000008
【図７】
2015069270.tif 000009
【図８】
2015069270.tif 000010
【図９】
2015069270.tif 000011
【図１０】
2015069270.tif 000012
【図１１】
2015069270.tif 000013
【図１２】
2015069270.tif 000014
【図１３】
2015069270.tif 000015
【図１４】
2015069270.tif 000016
【図１５】
2015069270.tif 000017
【図１６】
2015069270.tif 000018
【図１７】
2015069270.tif 000019