(57)【要約】      （修正有）【課題】複雑な装置構成を採用することなく、Ｉ／Ｏデバイスに対するＩ／Ｏアクセスの信頼性を向上させる技術を提供する。【解決手段】外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定部と、前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御部と、を備えてなる。【選択図】図１
2009238068.tif 000002
【特許請求の範囲】
【請求項１】
外部機器との通信を可能とする単一の通信端子と、
前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定部と、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御部と、
を備えてなる通信制御装置。
【請求項２】
請求項１に記載の通信制御装置において、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致しないと判定される場合に、該複数のアクセス情報の内に最も多く含まれるアクセス情報を多数決で選別する多数決判定部をさらに備え、
前記アクセス制御部は、前記多数決判定部にて選別されたアクセス情報を、該アクセス情報のアクセス先であるＩ／Ｏデバイスに送る通信制御装置。
【請求項３】
外部機器との通信を可能とする単一の通信端子と、
前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定部と、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御部と、
を備えてなる通信制御装置。
【請求項４】
請求項３に記載の通信制御装置において、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致しないと判定される場合に、該複数のデータの内に最も多く含まれるデータを多数決で選別する多数決判定部をさらに備え、
前記アクセス制御部は、前記多数決判定部にて選別されたデータを、該データの送信先であるＩ／Ｏデバイスに送る通信制御装置。
【請求項５】
外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定ステップと、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御ステップと、
を備えてなる通信制御方法。
【請求項６】
外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定ステップと、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御ステップと、
を備えてなる通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ／Ｏデバイスに対するＩ／Ｏアクセスの信頼性を向上させるための多重化技術に関するものである。
【背景技術】
【０００２】
コンピュータシステムを構成するＬＳＩは、年々微細化・低電圧化を進めることにより動作周波数を向上させ、性能向上の要求にこたえている。一方、微細化・低電圧化は外乱に対する影響を受けやすくする要因となり、個々のＬＳＩ単体で見た場合の信頼性は低下する傾向にある。そこで、計算機の実行結果そのものの信頼性を向上させるため手法として、多重実行方式が知られる。
【０００３】
多重実行方式は同じプログラムを複数回実行し、実行結果が一致するかどうかを検証し、複数で一致した結果を採用することによって結果の正当性を保証する方式である。入力として同じデータを与えれば、計算途中で故障等の問題が発生しない限り、計算結果は同じものとなるはずである。したがって、複数の計算結果の一致を確認することで、計算途中で故障等の問題が発生しているという確率を低下させることができる。図１２は、一般的な多重実行方式について説明するための図である。図１２では複数の計算ユニットが示されており、それぞれのユニットに同じプログラム、同じ入力データが与えられる。各計算ユニットでの計算結果が互いに一致すれば、計算は正しく動作したということが確認される。
【０００４】
複数の計算ユニットそれぞれにおける演算結果を比較して違いが発見された場合、３つ以上の演算結果があれば、多数決を用いて適切と思われる結果を選択することができる。演算結果が２つの場合は、実行を再度やり直したり、ユーザに対して警告を出したりする等の手法が用いられる。さらに、複数の計算ユニットで同時に実行を行なっている場合には、他の実行結果と異なる結果を出力した実行ユニットには故障が発生しているものとみなして、システムから切り離すなどの高度な処理も可能となる（例えば、特許文献１を参照）。
【０００５】
実際に多重実行方式を用いたシステムを構築しようとすると、多重化のレベルが問題となってくる。すなわち、図１２に示す「計算ユニット」の部分として、マイクロプロセッサレベル（ＬＳＩレベル）、ソフトウェアレベル、およびＩ／Ｏレベルの内のいずれのレベルでの多重化を選択するかによって、構成の容易さや一致検査の容易さなどが大きく変わってくる。ＬＳＩレベルでの多重化では、一致検査の機能が実装されているＬＳＩを用いたシステム以外では実現できないという問題があり、またソフトウェアレベルでの多重化では、ＣＰＵパワーを一致検査に大幅に費やしてしまい性能低下を招くという問題がある。
【０００６】
これに対し、Ｉ／Ｏレベルでの多重化は、ハードウェアによる多重化手法として広く用いられている。図１３は、計算機システムの一般的な構成を示す図である。図１３に示すように、一般的な計算機システムは、ＣＰＵおよびメモリからなるノードをベースとして構成される。ノードにはＩ／Ｏブリッジが存在し、Ｉ／ＯアクセスはこのＩ／Ｏブリッジを経由して行なわれる。Ｉ／Ｏブリッジの先にはＩ／Ｏバスがあり、Ｉ／Ｏデバイス、例えばネットワークインタフェースやディスクインタフェースなどはこのＩ／Ｏバスに接続する形で存在する。したがって、ＣＰＵから発行されたＩ／Ｏアクセスは、一旦Ｉ／Ｏブリッジを経由しＩ／Ｏバスに流され、対象となるＩ／Ｏデバイスに送られることになる。
【０００７】
図１４は、Ｉ／Ｏレベルでの多重化について説明するための図である。図１４に示すように、Ｉ／Ｏレベルでの多重化では、ノードを複数用意し（図１４では２つ用意している）、それぞれのＩ／Ｏブリッジから出力されるＩ／Ｏアクセスが一致しているかどうか検出する。不一致があればノード内部でエラーが発生したとみなされ、一致検出回路からエラー信号が出力される。図１４では二重化の例だけを載せているが、もちろん３つ以上のノードを接続し、多数決によってエラーが発生したと考えられるノードにのみエラー信号を送るなどのバリエーションも採用し得る。
【０００８】
図１４に示すように、Ｉ／Ｏレベルでの多重化を行なうには、複数のノードから出力されるＩ／Ｏアクセスの一致を検出する一致検出回路が必要不可欠である。この一致検出回路をどのように構成するかは、各ノードをどのような同期方式で同期させるか、一致検出回路の先につながっているＩ／Ｏデバイスをどのように駆動するか、といった点で様々な選択肢がある。
【０００９】
Ｉ／Ｏレベルでの多重化を実現する従来の高信頼システムのハードウェアは、おもにＩ／Ｏブリッジを用いた一致検出回路を用いて実現されてきた。このような一致検出回路としては、各ノードのＩ／ＯブリッジとＩ／Ｏデバイスの間に、更にＩ／Ｏブリッジを挿入する方式（図１５）と、ノード内部とＩ／Ｏバスとを接続するＩ／Ｏブリッジ内部に一致検査のための回路を組み込み、複数のノード（図の場合は２ノード構成なので相手ノード）からＩ／Ｏアクセス情報を受け取り、自ノードが発行したＩ／Ｏアクセスと比較しながら一致検査を行なう方式（図１６）の２タイプが知られる。
【特許文献１】特開平１１−０８５７１３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記のような、Ｉ／Ｏブリッジで実現する従来の手法には以下のような問題点がある。
【００１１】
（１）物理的に２つ以上のノードが必要
図１５および図１６を見てもわかるように、Ｉ／Ｏブリッジで一致検査を行なうためには、Ｉ／Ｏバスが二つ以上必要となる。したがって、Ｉ／Ｏバスを提供するノードを二つ以上用意しなくてはならない。しかし近年では仮想マシンを用いた多重実行環境が用いられ始めている。仮想マシンは、一つの物理ノードの上に複数の仮想的なノードを実現する方法で、物理ノードを一つ用意するだけで多重実行環境を実現することができる。しかし、上に挙げたＩ／Ｏブリッジで一致検査を行なう方式では、このような物理ノードが一台の環境では利用することができない。
【００１２】
（２）Ｉ／Ｏデバイス側からのアクセスを検査していない
Ｉ／Ｏアクセスは一般にはＣＰＵ側から行なうものであるが、Ｉ／Ｏデバイス側からノード内部（特にメモリの内容）をアクセスすることがある。これらのアクセスそのものに関しては、Ｉ／Ｏデバイス側から制御されたものであるため、一致検査する必要がない。しかし、アクセスの結果読みだされた結果（メモリ内容）は、ノード内部の情報であるため、本来は一致検査しなくてはならないものである。しかし従来のＩ／Ｏブリッジによる実現方法は、動作が非対称であるため、このようなＩ／Ｏデバイスがアクセスした内容に関しては検査されていない。
【００１３】
本発明は上述した問題点を解決するためになされたものであり、複雑な装置構成を採用することなく、Ｉ／Ｏデバイスに対するＩ／Ｏアクセスの信頼性を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決するため、本発明に係る通信制御装置は、外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定部と、前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御部と、を備えてなることを特徴とするものである。
【００１５】
また、本発明に係る通信制御装置は、外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定部と、前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御部と、を備えてなることを特徴とするものである。
【００１６】
また、本発明に係る通信制御方法は、外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定ステップと、前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御ステップと、を備えてなることを特徴とするものである。
【００１７】
また、本発明に係る通信制御方法は、外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定ステップと、前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御ステップと、を備えてなることを特徴とするものである。
【発明の効果】
【００１８】
以上に詳述したように本発明によれば、複雑な装置構成を採用することなく、Ｉ／Ｏデバイスに対するＩ／Ｏアクセスの信頼性を向上させる技術を提供することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【００２０】
（第１の実施の形態）
以下、本発明の第１の実施の形態について説明する。
【００２１】
図１は、本発明の第１の実施の形態による通信制御装置Ｃ、該通信制御装置Ｃを備えたＩ／Ｏデバイス１、該通信制御装置Ｃを含む多重化システムの構成を示す図である。
【００２２】
本実施の形態では、物理的には一つのホスト２で二つの仮想マシン（ＶＭ０，ＶＭ１）（複数の仮想演算部に相当）を動作させる。これら二つの仮想マシンは同じプログラムを実行し、同一の演算処理を行なっている。これら仮想マシンＶＭ０およびＶＭ１の動作が一致しているかどうかの検証は、Ｉ／Ｏブリッジ３を介してホスト２に接続されたＩ／Ｏデバイス１で行なわれる。Ｉ／Ｏデバイス１には、仮想マシンＶＭ０，ＶＭ１それぞれに対応した仮想インターフェースＶＩＦ０，ＶＩＦ１が設けられている。ここで、「ＶＭ」はVirtual Machineを意味し、「ＶＩＦ」はVirtual Interfaceを意味するものとする。
【００２３】
仮想インターフェースＶＩＦ０，ＶＩＦ１へのアクセスは、Ｉ／Ｏデバイス１内部に備えられたchecker（後述のcomparator１０３）によって一致しているかどうか検査され、一致していることが確認された場合にのみ、実際のＩ／Ｏデバイスとしての動作が行なわれる。
【００２４】
図１において、仮想マシンＶＭ０およびＶＭ１は、同一の物理Ｉ／Ｏデバイスを用いるが、インターフェースとしては異なるインターフェースである仮想インターフェースＶＩＦ０，ＶＩＦ１にアクセスする。
【００２５】
この仮想インターフェースＶＩＦ０，ＶＩＦ１は、PCI Express のＩＯＶ（I/O Virtualization）におけるvirtual functionを用いて実現されている。
【００２６】
したがって、仮想マシンＶＭ０およびＶＭ１から送りだされるＩ／Ｏアクセスは、PCI Express のＩＯＶ規格に基づいて別々のvirtual function宛てに振り分けられて送出される。Virtual functionの指定方法等についての詳細は、PCI Express の規格書である“PCI Express Base Specification Revision 1.1”およびＩＯＶの規格書“Single Root I/O Virtualization and Sharing Specification Revision 1.0”等を参照すること。
【００２７】
図２は、図１にて示したＩ／Ｏデバイス１のさらに詳細な構成を示す図である。図３は、Ｉ／ＯアクセスがＩ／Ｏデバイスに届き、それがQueueに登録されるまでの流れを示すフローチャートである。図４は、Queueに登録されたＩ／Ｏアクセス情報を取り出して、一致検査を行ない、Ｉ／Ｏデバイス本体を動作させるまでの流れを示すフローチャートである。図５は、Device Controllerで発生した「Ｉ／ＯデバイスからホストをアクセスするためのＩ／Ｏアクセス」が発生した場合の処理の流れを示すフローチャートである。
【００２８】
以下、図２に示すＩ／Ｏデバイス内部の各コンポーネントについて、それぞれの働きについて説明する。
【００２９】
Selector１０４は、物理的なインターフェースを経由して入力されたＩ／Ｏアクセスを、アクセスの種類によって分類する。このとき、入力されたＩ／Ｏアクセスが、あらかじめ設定されているバイパスすべきアクセスであった場合には、Ｉ／ＯアクセスをComparator１０３には渡さず、直接Device Controller１０５に送る。また、物理的なＩ／Ｏデバイスに対するアクセス、例えばデバイスの設定などに関するアクセスの場合（Ｓ１０１，Ｙｅｓ）は、当該Ｉ／ＯアクセスはＩ／Ｏデバイスに共通する処理を行なうCommon Block１０７に送られる（Ｓ１１３）。それ以外のＩ／Ｏアクセスの場合は、Ｉ／Ｏアクセスの宛先（ＶＩＦ０かＶＩＦ１か）に応じて、Splitter １０１ａおよびSplitter１０２ａの内のいずれに送られるかが決定される。なお、Selector１０４によってＩ／Ｏアクセスの送り先をCommon Block１０７，ＶＩＦ０およびＶＩＦ１の内のいずれかに振り分ける機能に関してはPCI ExpressのＩＯＶによるものと同等である。すなわち、本実施の形態ではホストから送られてきたＩ／Ｏアクセスを振り分ける部分に関して、PCI ExpressのＩＯＶによるものに一致検査の必要ないＩ／Ｏアクセス（Ｓ１０２，Ｙｅｓ）を直接Device Controller１０５に送る機能が付け加えられた構成となっている（Ｓ１１４）。
【００３０】
Splitter１０１ａおよび１０２ａは、送られてくるＩ／Ｏアクセスの種別を識別し（Ｓ１０３）、制御とデータに分類する。通常のＩ／Ｏアクセスの場合はそのままQueue0もしくはQueue1に送られる。図６は、Queue0およびQueue1におけるデータ構造を示す図であり、Ｉ／Ｏアクセスの種類（ＴＹＰＥ）やアクセスされたアドレス（Address）、書き込みの場合は書き込みデータ（Ｄａｔａ）が格納できるようになっている。
【００３１】
Ｉ／ＯアクセスがＤＭＡ（Direct Memory Access）要求の場合は、異なるフォーマットでQueueに格納される（Ｓ１０６０，Ｓ１０７０，Ｓ１０８０，Ｓ１０６１，Ｓ１０７１，Ｓ１０８１）。図７は、Ｉ／ＯアクセスがＤＭＡ（Direct Memory Access）要求の場合に、Queueに格納されるデータの構造を示す図である。
【００３２】
図７に示すように、Ｉ／ＯアクセスがＤＭＡ要求の場合は、Read（Ｓ１０５０，Ｙｅｓ）（Ｓ１０５１，Ｙｅｓ）かWrite（Ｓ１０５０，Ｎｏ）（Ｓ１０５１，Ｎｏ）かのアクセス種類（ＴＹＰＥ）の他、ＤＭＡの結果が返ってきているかどうかを表すフラグ（Ｆ）、ＤＭＡのＩＤ（ＩＤ）、ＤＭＡの結果を格納しているData Buffer内のアドレスTYPE Address Data（Buffer Address）（Ｓ１０９０、Ｓ１０９１）、ＤＭＡの結果から生成されるシグネチャ（Signature）を格納できる形で登録される。ただし、要求が来た段階ではフラグ（Ｆ）はクリアされており、Buffer Address やSignature は空の状態で登録される。
【００３３】
Ｉ／ＯアクセスがＤＭＡなどの結果であるデータブロックである場合は（Ｓ１０４０，Ｙｅｓ）（Ｓ１０４１，Ｙｅｓ）、Splitter１０１ａおよび１０２ａはデータの内容をData Buffer１０１ｂおよび１０２ｂに送る。それと同時に、Splitter１０１ａおよび１０２ａは、データのシグネチャを生成する（Ｓ１１００、Ｓ１１０１）。シグネチャは、例えば単純なチェックサムから生成することができるが、ＣＲＣ（Cyclic Redundancy Code）や、ＬＦＳＲ（Linear Feedback Shift Register）などから生成してもよい。データブロックをすべてData Buffer１０１ｂおよび１０２ｂに格納し、シグネチャを生成し終えると（Ｓ１１１０、Ｓ１１１１）、Splitter１０１ａおよび１０２ａはデータブロックに対応するＤＭＡ要求をQueueの中から探す。対応関係の確認にはＩＤの一致を用いる。
【００３４】
データブロックと同じＩＤを持つＤＭＡ要求を発見すると、図７に示したフィールドのうちFフィールドをセットしてデータが到着したことを登録し（Ｓ１１２０、Ｓ１１２１）、当該データを格納したData BufferのアドレスをBuffer Addressに格納し、さらに生成したシグネチャの値をSignatureフィールドに格納する。
【００３５】
Comparator１０３（一致判定部に相当）は、Queue0とQueue1それぞれの先頭から要素をひとつずつ取り出し、比較する（Ｓ２０１０）（Ｓ２０１１）。このように、本実施の形態では、クロックレベルでの同期ではなく、論理的なＩ／Ｏアクセス単位での同期をとる方法を採用している。一致検出回路内部にＩ／Ｏアクセスをバッファリングし、各ノードからのＩ／Ｏアクセスが揃った時点で一致を確認する。このようにすると、クロックレベルでの同期をとる必要がなく、一致検出を行なうことが可能となる。
【００３６】
このとき、Comparator１０３は、先頭の要素がＤＭＡ要求であった場合（Ｓ２０２０，Ｙｅｓ）（Ｓ２０２１，Ｙｅｓ）、Ｆフラグを調べ（Ｓ２０３０、Ｓ２０４０、Ｓ２０３１、Ｓ２０４１）、もしＦフラグがセットされていなければＦフラグがセットされるまで待つ。
【００３７】
Comparator１０３は、上記比較の結果、それぞれのＩ／Ｏアクセスの内容が一致していれば（Ｓ２０５，Ｙｅｓ）（Ｓ２０６，Ｙｅｓ）、当該Ｉ／ＯアクセスをDevice Controller１０５（アクセス制御部に相当）に送り、実際のＩ／Ｏデバイス動作を行なわせる。
【００３８】
一方、Comparator１０３は、上記比較の結果、それぞれのＩ／Ｏアクセスの内容が一致していなければエラー信号を発生させ、ホスト２にエラー発生を通知する。
【００３９】
この例では仮想インターフェースが２つしかないため、一致か一致でないかのみを判定として用いているが、３つ以上の仮想インターフェースを用いて多数決によってＩ／Ｏデバイスを動作させるかどうかを決定する方法も採用することが可能であることは言うまでもない。
【００４０】
Duplicator１０６は、Ｉ／Ｏデバイス１からホスト２へのアクセスを複製するユニットである。本実施の形態では、使用される仮想インターフェースが二つなので、Device Controller１０５から送られてきたホスト２に対するアクセスは２つに複製される（Ｓ３０１）。それぞれ、ＶＩＦ０，ＶＩＦ１に対応したホスト（この場合はＶＭ０，ＶＭ１）に対してアクセスを行なう（Ｓ３０１０〜Ｓ３０３０、Ｓ３０１１〜Ｓ３０３１）。
【００４１】
Device Controller１０５は、Ｉ／Ｏデバイス１の実際の動作を行なうユニットであり、従来のＩ／Ｏデバイスそのものに相当する場合もある。
【００４２】
Common Block１０７は、Ｉ／Ｏデバイス１の物理的な構成に対するアクセスを処理するユニットである。Common Block１０７は、Ｉ／Ｏデバイス１全体に亘る設定や、仮想インターフェースの設定などを行なう。
【００４３】
このように、本実施の形態では、以下に挙げる２つの構成をＩ／Ｏデバイスに新たに導入することによって、従来の問題点を解決するものである。以下に挙げるそれぞれの構造はそれぞれの問題点に対応しており、必ずしもすべてを同時に採用しなければならないというものではない。
【００４４】
＜仮想インターフェースによる接続＞
二つ以上の入力の一致を検出するためには、入力のための口が二つ以上なくてはならない。従来はこれを物理的な入力口により用意していた。ＰＣＩ規格のＰＣＩカード型Ｉ／Ｏデバイスでは、multi-function という機能が用意されている。これは物理的には一つのデバイスに対して異なる複数の機能を持たせるための機能である。これを用いると、外部からはあたかも一つの物理デバイスに複数のデバイスが同居しているような形に見え、複数個のインターフェースが提供されることになる。また、PCI Express のＩＯＶ（I/O Virtualization）ではvirtual function という機能が定義されている。これは物理的には一つのＩ／Ｏデバイスに対して、仮想的なインターフェースを複数用意し、複数の機器（あるいは仮想マシン）から物理的に一つのＩ／Ｏデバイスを共有するための機能である。そのため、機能としては複数の機器（あるいは仮想マシン）からのＩ／Ｏアクセスが混在してしまわないよう分離することを目的としている。これを用いることによっても、物理的な一つのデバイスに対して複数のインターフェースを用意することができる。
【００４５】
本実施の形態では、複数の異なる機能を提供するためのmulti-function や、Ｉ／Ｏアクセスが混在してしまわないように分離するためのvirtual function を利用して、一致検証のためのインターフェースを構築している。
【００４６】
複数あるmulti-function あるいはvirtual interface のうち、２つあるいはそれ以上を選択し、関連付けさせる。これら関連付けられたインターフェースに対するアクセスはそのまま実行されず、関連付けられたインターフェースすべてにアクセスが行なわれるまで待たされる。すべてのインターフェースに対してアクセスが行なわれると、Ｉ／Ｏデバイス内部でアクセス内容を検査し、すべてのＩ／Ｏアクセスの内容が一致していれば、実際にＩ／Ｏデバイスを動作させる。このとき、すべてが一致したかどうかの代わりに、多数決によって動作に使うアクセスを選択してもよい。このとき、多数決において少数となったＩ／Ｏアクセスを受信したインターフェースにのみエラーを発生させることもできる。
【００４７】
この仮想インターフェースの仕組みはＩ／Ｏブリッジに組み込むことも可能である。Ｉ／Ｏブリッジでは様々な行き先に対するＩ／Ｏアクセスが通過するが、あらかじめ指定された宛先（この場合、宛先として物理デバイス番号であってもmulti-function番号、あるいはvirtual function番号のいずれも用いることが可能である）を選択し、関連付ける。関連付けられた宛先へのＩ／Ｏアクセスは、上記Ｉ／Ｏデバイスの場合と同様に待たされ、検査される。Ｉ／Ｏブリッジの場合は、一致した場合にはあらかじめ指定された特定の宛先へＩ／Ｏアクセスが送り出されることとなる。
【００４８】
＜Ｉ／Ｏデバイスからのアクセスを一致検出回路に取り込む方式＞
Ｉ／Ｏデバイスからホストのメモリをアクセスした場合にも、その結果は一致検査を行なう必要がある。そのため、本実施の形態にて示されるＩ／ＯデバイスあるいはＩ／Ｏブリッジには、Ｉ／Ｏデバイスからのアクセスを各ホストに振り分けるための回路と、振り分けられたアクセスに関して、ホストから帰ってきた結果を一致検査回路に取り込むための回路が設けられている。
【００４９】
Ｉ／Ｏデバイスからのアクセスが単純な読み出しであれば、アクセスとその結果を一致検査回路に取り込むだけでよい。しかしＩ／ＯデバイスからのアクセスがＤＭＡであれば、動作は複雑になる。ＤＭＡはデータの単位が大きいため、そのままでは比較するのに大きな手間がかかる。そこで本発明ではＤＭＡアクセスの場合、ＤＭＡデータから生成されるシグネチャ（ＣＲＣやチェックサムなど）を比較することによってデータの比較の代わりとしている。これによって、少ないコストでＤＭＡのような大きなデータを比較することが可能となる。
【００５０】
また、本実施の形態では、Ｉ／Ｏアクセスの内容の一致検査を行ない、一致が確認されたのちに初めてＩ／Ｏデバイスを駆動する一致検査後動作方式を採用している。この方式を採用することにより、エラー発生時の影響を最小限にとどめることができるという利点がある。
【００５１】
（第２の実施の形態）
続いて、本発明の第２の実施の形態について説明する。
本発明の第２の実施の形態は、上述の各実施の形態の変形例である。以下、本実施の形態において、上述の実施の形態において述べた部分と同様な機能を有する部分には、同一符号を付し、説明は割愛する。
【００５２】
第１の実施の形態では、図１に示したように、Ｉ／Ｏデバイスの仮想インターフェースとしてＶＩＦ０とＶＩＦ１の２つのインターフェースを用いて、図２に示したようにQueue0とQueue1にそれぞれのＩ／Ｏアクセスを保存し、Comparatorで一致比較を行なっていた。
【００５３】
これに対し、本発明の第２の実施の形態では、Ｉ／ＯデバイスにＶＩＦ０，ＶＩＦ１，ＶＩＦ２の３つのインタフェース（もしくはそれ以上）を設ける構成としている。
【００５４】
図８は、本発明の第２の実施の形態による、３つの仮想インターフェースを用いたＩ／Ｏデバイスの構造を示す図である。図９は、後述のVoterの動作の流れを示すフローチャートである。なお、図９に示すフローチャートにおけるＳ４０１１〜Ｓ４０４１、Ｓ４０１２〜Ｓ４０４２、Ｓ４０１３〜Ｓ４０４３は、図４にて示したＳ２０１０〜Ｓ２０４０と同様な処理内容であるため説明は割愛する。
【００５５】
図８に示すように、仮想インターフェースの数に合わせてQueueの数が増えていることがわかる（Queue0〜Queue2）。図８において、Splitter１０１ａ、Queue0（１０１ｃ）およびDataBuffer１０７ｂがＶＩＦ０に相当し、Splitter１０２ａ、Queue0（１０２ｃ）およびDataBuffer１０７ｂがＶＩＦ１に相当し、Splitter１０３ａ、Queue0（１０３ｃ）およびDataBuffer１０７ｂがＶＩＦ２に相当する。
【００５６】
本実施の形態の場合、第１の実施の形態の場合とは異なり、Data BufferがひとつのData Buffer１０７ｂにまとめられており、それを制御するためのBuffer Controller１１２が設けられている。なお、仮想インターフェースが２つの場合でも同様の構成にすることは可能であり、また逆に、インターフェースが３つ以上でも図２に示したように個別のData Bufferを用いることも可能である。
【００５７】
図２ではComparatorとなっていた比較回路は、本実施の形態による構成では、多数決を行なうVoter１１１（多数決判定部に相当）に変更されている。Voter１１１では多数決（Ｓ４０５〜Ｓ４０９）によってDevice Controller１０５に送るＩ／Ｏアクセスを決定する。
【００５８】
多数決で多数になったものは正常動作とみなし、Device Controllerへ送られるが（Ｓ４０８、Ｓ４１２）、少数となったものは故障とみなして棄却される（Ｓ４０９）。その際、故障とみなされたＩ／Ｏアクセスを発行した元（ＶＭ０またはＶＭ１またはＶＭ２）にはエラー信号が送られる（Ｓ４１０、Ｓ４１１）。
【００５９】
本実施の形態では、仮想インターフェースが３つ設けられているため、Duplicator１０６も仮想インターフェースの数に合わせて３つの複製を生成する。
【００６０】
（第３の実施の形態）
続いて、本発明の第３の実施の形態について説明する。
本発明の第３の実施の形態は、上述の各実施の形態の変形例である。以下、本実施の形態において、上述の実施の形態において述べた部分と同様な機能を有する部分には、同一符号を付し、説明は割愛する。
【００６１】
本発明の第３の実施の形態では、Ｉ／Ｏアクセスの一致検査を行なう回路をＩ／Ｏブリッジに組み込んだ例を示す。
【００６２】
図１０は、本発明の第３の実施の形態による通信制御装置Ｃ”を含む多重化システムの全体構成を示す図であり、図１１は、図１０に示すIO Bridge 2 の構成の詳細を示す図である。上述した第１および第２の実施の形態の場合と同様に、本実施の形態においても物理的には一つのホスト２上で仮想マシンが２台（ＶＭ０，ＶＭ１）同じ動作を行なっている。ＶＭ０，ＶＭ１は一つのＩ／Ｏデバイス１”を共有して利用している。なお、本実施の形態では、「ＶＤ」はVirtual Deviceを意味するものとする。
【００６３】
図１０に示す例では、IO Bridge 2 内部に、仮想的に二つのインターフェースＶＩＦ０とＶＩＦ１が用意されている。しかしこれらのインターフェースはホストには認識されない。ホスト２には、物理的には一つであるＩ／Ｏデバイスが二つ（ＶＤ０，ＶＤ１）存在しているように見えており、ＶＭ０，ＶＭ１にはそれぞれＶＤ０，ＶＤ１が割り当てられ、ＶＭ０はＶＤ０を、ＶＭ１はＶＤ１を占有して利用している。すなわち、ＶＭ０はＶＤ０にアクセスし、ＶＭ１はＶＤ１にアクセスする。
【００６４】
しかし、ＶＭ０およびＶＭ１からのＶＤ０およびＶＤ１に対するアクセスは、IO Bridge 2 内に設けられた仮想インターフェースＶＩＦ０およびＶＩＦ１が受信する。IO Bridge 2 内でＶＩＦ０およびＶＩＦ１両方へのＩ／Ｏアクセスが揃うと、IO Bridge 2 内のCheckerがＩ／Ｏアクセスの内容を比較し、一致を検証する。Ｉ／Ｏアクセスの内容の一致が確認されれば、当該Ｉ／Ｏアクセスは物理的なＩ／Ｏデバイスに送られる。Ｉ／Ｏアクセスの内容が一致していなければ、IO Bridge 2 はエラー発生をホストに知らせる。
【００６５】
IO Bridge 2 の基本的な動作は、上述の第１の実施の形態にて示したＩ／Ｏデバイス１（図２を参照）の動作と同様である。すなわち、Selector１０４にてＩ／Ｏアクセスを振り分け、Ｉ／ＯアクセスがＶＩＦ０宛あるいはＶＩＦ１宛であれば、それぞれのＩ／Ｏアクセスの内容をQueue0，Queue1にため込み、Comparatorによって一致検査する（図３および図４のフローチャートを参照）。
【００６６】
また、IO Bridge 2 には様々な宛先に対するＩ／Ｏアクセスがやってくるので、ＶＤ０やＶＤ１を宛先としないものについてはSelector１０４によって出口側のＩ／Ｏバスに転送される。
【００６７】
Ｉ／Ｏデバイスからホストに対してアクセスする場合における動作も、第１の実施の形態の場合と同様である。すなわち、Duplicator１０６によってＩ／Ｏアクセスが複製され、ぞれぞれのＶＭ宛のアクセスが生成される。アクセスがDMA read であった場合はQueueに登録され、ＤＭＡの結果が返ってくるのを待つ（図５のフローチャートを参照）。
【００６８】
本実施の形態が第１の実施の形態と異なるのは、Device Controller１０５の代わりにMerger１１５が設けられていることである。このMerger１１５は、Splitterによって分離されたコマンドとデータを結合する機能を持つ。すなわち、Comparator１０３によって一致が確認されたQueueの中身がＤＭＡであった場合、Merger１１５はBuffer Address に登録されているアドレスからデータを取り込み、コマンドと結合させて宛先であるＩ／Ｏデバイス宛に送り出す。
【００６９】
更に、通信制御装置を構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、通信制御プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体（例えば、ＭＥＭＯＲＹ８０２など）に記憶させることによって、通信制御装置を構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータ（例えばＣＰＵ８０１など）により読取り可能な記録媒体としては、ＲＯＭやＲＡＭ等のコンピュータに内部実装される内部記憶装置、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【００７０】
このように、通信制御プログラムをＣＰＵ８０１等に実行させることにより、上述した通信制御方法における各ステップを実現することが可能である。
【００７１】
このように、上述の実施の形態によれば、物理的なハードウェアコストを上昇させることなく、信頼性の高い実行のためのオーバーヘッドを低減させ、従来の構成よりも信頼性の高い処理を実現することができる。
【００７２】
また、上述の実施の形態によれば、物理的なホスト１台だけで多重化高信頼実行を実現することができる。また、仮想マシンなどを用いることにより、物理的なインターフェースを１つしか必要としないため、１台のハードウェアしか有さない環境でも、多重化実行を実現することができる。このため、従来実現するためのコストが高かった、ハードウェアによる一致検査を行なう多重実行を低コストで実現することができる。
【００７３】
なお、上述の実施の形態では、本実施の形態による通信制御装置が、Ｉ／Ｏデバイスとして提供される態様や、Ｉ／Ｏブリッジとして提供される態様を主に例に挙げたが、これに限られるものではなく、上述のような通信制御装置を備えたＩ／ＯデイバスもしくはＩ／Ｏブリッジを備える高信頼システム（ホスト端末を含む）を提供することも可能であることは言うまでもない。
【００７４】
従来はホストからのＩ／Ｏデバイスに対するアクセスのみに関して一致検査を行なっていたが、上述の実施の形態にて示したように、Ｉ／Ｏデバイスからホストに対するＩ／Ｏアクセスを内部で一致検査回路に投入することによって、従来は実現できなかったＩ／Ｏデバイスからのホストに対するＩ／Ｏアクセスの一致検査を実現することができる。これにより、Ｉ／ＯデバイスからのＤＭＡ読み出しの一致検査を行なうことができ、より高信頼なシステムを構築することが可能となる。
【００７５】
本発明を特定の態様により詳細に説明したが、本発明の精神および範囲を逸脱しないかぎり、様々な変更および改質がなされ得ることは、当業者には自明であろう。
【００７６】
（付記１）外部機器との通信を可能とする単一の通信端子と、
前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定部と、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御部と、
を備えてなる通信制御装置。
（付記２）付記１に記載の通信制御装置において、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致しないと判定される場合に、該複数のアクセス情報の内に最も多く含まれるアクセス情報を多数決で選別する多数決判定部をさらに備え、
前記アクセス制御部は、前記多数決判定部にて選別されたアクセス情報を、該アクセス情報のアクセス先であるＩ／Ｏデバイスに送る通信制御装置。
（付記３）外部機器との通信を可能とする単一の通信端子と、
前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースと、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定部と、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御部と、
を備えてなる通信制御装置。
（付記４）付記３に記載の通信制御装置において、
前記一致判定部にて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致しないと判定される場合に、該複数のデータの内に最も多く含まれるデータを多数決で選別する多数決判定部をさらに備え、
前記アクセス制御部は、前記多数決判定部にて選別されたデータを、該データの送信先であるＩ／Ｏデバイスに送る通信制御装置。
（付記５）付記３に記載の通信制御装置において、
前記一致判定部は、前記複数の仮想インターフェースにて受信する複数のデータが一致するか否かの判定を、該データから生成されるシグネチャに基づいて行う通信制御装置。
（付記６）外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して出力されるＩ／Ｏアクセスそれぞれの内容を示すアクセス情報を、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のアクセス情報それぞれを互いに比較し、該複数のアクセス情報が互いに一致するか否かを判定する一致判定ステップと、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致していると判定される場合に、該アクセス情報を該アクセス情報のアクセス先であるＩ／Ｏデバイスに送るアクセス制御ステップと、
を備えてなる通信制御方法。
（付記７）付記６に記載の通信制御方法において、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のアクセス情報が互いに一致しないと判定される場合に、該複数のアクセス情報の内に最も多く含まれるアクセス情報を多数決で選別する多数決判定ステップをさらに備え、
前記アクセス制御ステップは、前記多数決判定ステップにて選別されたアクセス情報を、該アクセス情報のアクセス先であるＩ／Ｏデバイスに送る通信制御方法。
（付記８）外部機器との通信を可能とする単一の通信端子と、前記外部機器における複数の仮想演算部から同一のＩ／Ｏデバイスに対して送信されるデータであって、該Ｉ／Ｏデバイスからの要求に基づいて前記外部機器から送信されるデータそれぞれを、前記単一の通信端子を介して個別に受信する複数の仮想インターフェースとを備える通信制御装置における通信制御方法であって、
前記複数の仮想インターフェースにて前記外部機器から受信する複数のデータそれぞれを互いに比較し、該複数のデータが互いに一致するか否かを判定する一致判定ステップと、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致していると判定される場合に、該データを該データの送信先であるＩ／Ｏデバイスに送るアクセス制御ステップと、
を備えてなる通信制御方法。
（付記９）付記８に記載の通信制御方法において、
前記一致判定ステップにて前記複数の仮想インターフェースにて受信する複数のデータが互いに一致しないと判定される場合に、該複数のデータの内に最も多く含まれるデータを多数決で選別する多数決判定ステップをさらに備え、
前記アクセス制御ステップは、前記多数決判定ステップにて選別されたデータを、該データの送信先であるＩ／Ｏデバイスに送る通信制御方法。
（付記１０）付記８に記載の通信制御方法において、
前記一致判定ステップは、前記複数の仮想インターフェースにて受信する複数のデータが一致するか否かの判定を、該データから生成されるシグネチャに基づいて行う通信制御方法。
【図面の簡単な説明】
【００７７】
【図１】本発明の第１の実施の形態による通信制御装置Ｃを含む多重化システムの構成を示す図である。
【図２】図１にて示したＩ／Ｏデバイス１のさらに詳細な構成を示す図である。
【図３】Ｉ／ＯアクセスがＩ／Ｏデバイスに届き、それがQueueに登録されるまでの流れを示すフローチャートである。
【図４】Queueに登録されたＩ／Ｏアクセス情報を取り出して、一致検査を行ない、Ｉ／Ｏデバイス本体を動作させるまでの流れを示すフローチャートである。
【図５】Device Controllerで発生した「Ｉ／ＯデバイスからホストをアクセスするためのＩ／Ｏアクセス」が発生した場合の処理の流れを示すフローチャートである。
【図６】Queue0およびQueue1におけるデータ構造を示す図である。
【図７】Ｉ／ＯアクセスがＤＭＡ要求の場合に、Queueに格納されるデータの構造を示す図である。
【図８】本発明の第２の実施の形態による、３つの仮想インターフェースを用いたＩ／Ｏデバイスの構造を示す図である。
【図９】Voterの動作の流れを示すフローチャートを示す図である。
【図１０】本発明の第３の実施の形態による通信制御装置を含む多重化システムの全体構成を示す図である。
【図１１】図１０に示すIO Bridge 2 の構成の詳細を示す図である。
【図１２】一般的な多重実行方式について説明するための図である
【図１３】計算機システムの一般的な構成を示す図である。
【図１４】Ｉ／Ｏレベルでの多重化について説明するための図である
【図１５】Ｉ／Ｏブリッジを用いた一致検出回路の一例について説明するための図である。
【図１６】Ｉ／Ｏブリッジを用いた一致検出回路の一例について説明するための図である。
【符号の説明】
【００７８】
Ｃ  通信制御装置，Ｃ”  通信制御装置、１  Ｉ／Ｏデバイス、２  ホスト、３  Ｉ／Ｏブリッジ、８０１  ＣＰＵ、８０２  ＭＥＭＯＲＹ。
【図１】
2009238068.tif 000003
【図２】
2009238068.tif 000004
【図３】
2009238068.tif 000005
【図４】
2009238068.tif 000006
【図５】
2009238068.tif 000007
【図６】
2009238068.tif 000008
【図７】
2009238068.tif 000009
【図８】
2009238068.tif 000010
【図９】
2009238068.tif 000011
【図１０】
2009238068.tif 000012
【図１１】
2009238068.tif 000013
【図１２】
2009238068.tif 000014
【図１３】
2009238068.tif 000015
【図１４】
2009238068.tif 000016
【図１５】
2009238068.tif 000017
【図１６】
2009238068.tif 000018