(57)【要約】  予め仕様が決められたＰＣＩファブリックに接続するＩ／Ｏデバイスの数を増加させることを可能にしたコンピュータを提供する。コンピュータは、コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを保持する記憶部と、仮想マシンの動作に必要なＩ／Ｏデバイスを特定する仮想マシンモニタと、仮想マシンモニタによって特定されたＩ／Ｏデバイスが仮想マシンに割り当て可能か否かをＩ／Ｏデバイスリストを参照して判定し、仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、仮想マシンにＩ／Ｏデバイスを割り当て、Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を仮想マシンの識別子とともに記憶部に登録するＩ／Ｏデバイスマネージャーと、を有する。
2017068770.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータであって、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを保持する記憶部と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する仮想マシンモニタと、
前記仮想マシンモニタによって特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、該仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するＩ／Ｏデバイスマネージャーと、
を有するコンピュータ。
【請求項２】
請求項１に記載のコンピュータにおいて、
前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記Ｉ／Ｏデバイスマネージャーは、前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
前記仮想マシンモニタは、前記Ｉ／Ｏデバイスマネージャーから通知された、前記Ｉ／Ｏデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
【請求項３】
請求項１に記載のコンピュータにおいて、
前記記憶部は、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、
前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を前記Ｉ／Ｏデバイスマネージャーに通知し、
前記Ｉ／Ｏデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該Ｉ／Ｏデバイスに対して初期設定を実行する、コンピュータ。
【請求項４】
コンピュータによるデバイス割当管理方法であって、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納し、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定し、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する、デバイス割当管理方法。
【請求項５】
請求項４に記載のデバイス割当管理方法において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新し、
前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を保持し、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
【請求項６】
請求項４に記載のデバイス割当管理方法において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定し、
前記設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を読み出し、
読み出した前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
特定したインタフェース識別子を持つインタフェースを介して前記Ｉ／Ｏデバイスに対して初期設定を実行する、デバイス割当管理方法。
【請求項７】
コンピュータに、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する手順と、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラムを記録するプログラム記録媒体。
【請求項８】
請求項７に記載のプログラム記録媒体において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記プログラムは、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新する手順と、
前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに前記コンピュータに実行させるプログラム記録媒体。
【請求項９】
請求項７に記載のプログラム記録媒体において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記プログラムは、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定する手順と、
前記設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を読み出す手順と、
読み出した前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
特定したインタフェース識別子を持つインタフェースを介して前記Ｉ／Ｏデバイスに対して初期設定を実行する手順とをさらに前記コンピュータに実行させるプログラム記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機のＩ／Ｏファブリックを管理する技術に関する。特に、本発明は、計算機の筐体に収容できない数のＩ／Ｏデバイスをネットワーク越しに接続するコンピュータ、デバイス割当管理方法及びプログラム記録媒体に関する。
【背景技術】
【０００２】
サーバ仮想化技術によって、１台の計算機に複数の独立したＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）として動かし、１台の計算機をあたかも複数の計算機として使用できるようになった。１台のサーバに搭載されるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア数及びメモリ量の増加により、１台のサーバ上で稼働する仮想マシン数は増加し、場合によっては、１台のサーバ上で１００を超す仮想マシンを稼働させることもある。【０００３】
このようなサーバ仮想化技術では、各仮想マシンに仮想的なハードウェア、すなわち仮想的なＣＰＵ、メモリ、ディスク装置、Ｉ／Ｏデバイス、などを提供し、各仮想マシンはあたかも実ハードウェアであるかのように、これらの仮想的なハードウェアを利用する。
そのため、各仮想マシンが仮想的なハードウェアを利用する場合、サーバ仮想化技術の主要な構成要素の１つであるハイパーバイザ、あるいは仮想マシンモニタ（ＶＭＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）と呼ばれる管理プログラムが、仮想マシンのハードウェアへのアクセスをトラップし、実ハードウェアのリソースへの適切なアクセスを行う。そのため、仮想マシンが何らかの処理を行う場合、仮想マシンモニタのオーバヘッドが加わるため、一般に実ハードウェア上で稼働するＯＳよりも、仮想マシンの方が性能が低くなる。【０００４】
オーバヘッドを回避するために、仮想マシンに実ハードウェアリソースを直接割り当てる技術が提案され、実現されている。その技術の１つがＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）パススルーである。ＰＣＩパススルーでは、特定の仮想マシンに、ＰＣＩバス又はＰＣＩ−Ｅｘｐｒｅｓｓファブリックに接続されたＩ／Ｏデバイスへの直接のアクセスを可能にし、仮想マシンモニタのオーバヘッドを削減できる。以下に、ＰＣＩパススルー技術について説明するが、本明細書では、Ｉ／ＯデバイスをＰＣＩ−Ｅｘｐｒｅｓｓにおけるエンドポイントを指すものとする。【０００５】
しかし、ＰＣＩパススルーでは、対象のＩ／Ｏデバイスが特定の仮想マシンに占有されてしまうため、他の仮想マシンからは利用できないという課題がある。そこで、１つのＩ／Ｏデバイスを複数の仮想マシンから直接アクセス可能にする技術が提案された。それがＳＲ−ＩＯＶ（Ｓｉｎｇｌｅ  Ｒｏｏｔ−Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）である。ＳＲ−ＩＯＶに対応したＩ／Ｏデバイスは、複数のホストインタフェースを備え、各ホストインタフェースを仮想マシンに割り当てることで、複数の仮想マシンから単一のＩ／Ｏデバイスの共有を可能にしている。ＳＲ−ＩＯＶはイーサネット（登録商標）用ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）に採用される例が多く、ＮＩＣ以外のＩ／Ｏデバイス、例えばディスクコントローラやグラフィックスカードに採用される例はまれである。【０００６】
ＰＣＩパススルー及びＳＲ−ＩＯＶ（以下では、これらの技術を「パススルー技術」と総称する）のメリットは性能面だけでなく、Ｉ／Ｏデバイスのハードウェアが備える機能を仮想マシンが利用できるようになるという、機能面のメリットも存在する。仮想マシンが通常使用する仮想的なハードウェアは、世代の古いハードウェアを模したものが多く、一般的にシンプルな機能のみを備えている。例えばハイエンドなイーサネット（登録商標）用ＮＩＣが備えるようなＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）のオフロード機能などは利用できない。ＰＣＩパススルー技術では、Ｉ／Ｏデバイスを直接仮想マシンに割り当てるため、仮想マシンはこのようなオフロード機能を利用することができるようになる。【０００７】
ここで、図２４を用いて、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定について説明する。図２４はＰＣＩ−Ｅｘｐｒｅｓｓファブリックの一例を示したものである。【０００８】
図２４に示すように、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック２００は、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１をファブリックの根本（Ｒｏｏｔ）として、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０２〜２０７、及びＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８〜２０９がＰＣＩ−Ｅｘｐｒｅｓｓリンク２１０〜２１７を介して接続された構成である。【０００９】
本明細書では、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチを総称してＰＣＩ−Ｅｘｐｒｅｓｓデバイスと称する。なお、以下に説明する初期設定方法は、一般的なＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）と、Ｌｉｎｕｘ（登録商標）などの汎用ＯＳで行われている方法であるが、これ以外の初期設定方法も可能である。【００１０】
まず、ＰＣに電源が投入されると、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）又はＯＳがＰＣＩ−Ｅｘｐｒｅｓｓファブリック２００内のサーチを行う。このサーチは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック２００内の全てのＰＣＩ−Ｅｘｐｒｅｓｓデバイスを検出し、設定を行うために行われる。ＰＣＩ−Ｅｘｐｒｅｓｓでは、ＰＣＩ−ＥｘｐｒｅｓｓデバイスはＢＤＦ（Ｂｕｓ、Ｄｅｖｉｃｅ、Ｆｕｎｃｔｉｏｎ）という３つの番号（バス番号（０〜２５５）、デバイス番号（０〜３１）、ファンクション番号（０〜７））で識別される。なお、ファンクション番号は、同一のＰＣＩ−Ｅｘｐｒｅｓｓデバイスが複数の機能を備えている場合に、各機能を識別できるようにするために使用される番号である。【００１１】
ここで、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１と、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８〜２０９について説明する。【００１２】
図２５は、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１の内部の構成を簡易的に示したブロック図である。【００１３】
図２５を参照すると、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１は、ＰＣＩ  Ｃｏｍｐａｔｉｂｌｅ  Ｈｏｓｔ  Ｂｒｉｄｇｅ  Ｄｅｖｉｃｅと、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅ（Ｒｏｏｔ  ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｐｏｒｔ）と、Ｒｏｏｔ  Ｃｏｍｐｌｅｘ  Ｒｅｇｉｓｔｅｒ  Ｂｌｏｃｋ（ただしＯｐｔｉｏｎａｌ）とを有する。
これらの接続のために、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘは、内部でバス番号を１つ消費する。ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの根本（Ｒｏｏｔ）に位置するデバイスであるため、消費するバス番号は「０」である。【００１４】
図２６は、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８〜２０９の内部の構成を簡易的に示したブロック図である。【００１５】
図２６を参照すると、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８〜２０９は、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅ（Ｕｐｓｔｒｅａｍ  ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｐｏｒｔ、上流ポート）と、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅ（Ｄｏｗｎｓｔｒｅａｍ  ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｐｏｒｔ、下流ポート）とを有する。これらの接続のために、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８〜２０９は、内部でバス番号を１つ消費する。ここで、上流とは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック上で、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１側に近づく方向を意味する。下流とは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック上で、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１から離れる方向を意味する。図２６は、下流ポートが２本の場合を示しているが、下流ポートが３本であってもよい。【００１６】
ＰＣＩ−Ｅｘｐｒｅｓｓでは、ＰＣＩ−Ｅｘｐｒｅｓｓデバイス間はバス接続ではなく、スイッチによるＰｏｉｎｔ−ｔｏ−Ｐｏｉｎｔ接続であるため、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１のＰＣＩ−ｔｏ−ＰＣＩ  Ｂｒｉｄｇｅ、又はＰＣＩ−Ｅｘｐｒｅｓｓスイッチの２０８〜２０９の各ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅ（Ｄｏｗｎｓｔｒｅａｍ  ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｐｏｒｔ）に、１つだけＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント、又はＰＣＩ−Ｅｘｐｒｅｓｓスイッチが接続され、各リンクに異なるバス番号が割り当てられる。【００１７】
サーチの際には、バス番号０からサーチを行っていく。ＢＩＯＳ又はＯＳなどの初期設定プログラムは、バス番号０の各デバイス番号宛に、ＰＣＩ−ＥｘｐｒｅｓｓデバイスのベンダーＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）を読み出す処理を行う。ベンダーＩＤは、ＰＣＩ−ＥｘｐｒｅｓｓデバイスのＰＣＩコンフィギュレーション空間と呼ばれるレジスタ群に保存されている。この値が０ｘＦＦＦＦ（０ｘは１６進数を示すプレフィックス）でなければ、何らかのＰＣＩ−Ｅｘｐｒｅｓｓデバイスが接続されていることを示す。【００１８】
次に、何らかのＰＣＩ−Ｅｘｐｒｅｓｓデバイスが接続されていることを検出すると（図２４のＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０２〜２０３、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８）、初期設定プログラムは、そのＰＣＩ−Ｅｘｐｒｅｓｓデバイスに対して、クラスコードの読み出しを実行する。クラスコードもＰＣＩコンフィギュレーション空間に保存されている。クラスコードによって、そのＰＣＩ−Ｅｘｐｒｅｓｓデバイスが映像出力用のデバイスなのか、など、そのデバイスの種別が分かる。クラスコードがＰＣＩ−Ｅｘｐｒｅｓｓスイッチなど、異なるバス番号のリンク間を接続するデバイスの場合、現在サーチしているバス番号の下流にさらにＰＣＩ−Ｅｘｐｒｅｓｓデバイスが存在する可能性があることが分かる。【００１９】
次に、検出したＰＣＩ−ＥｘｐｒｅｓｓデバイスがＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントの場合（図２４のＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０２〜２０３）、初期設定プログラムは、そのＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントに、Ｉ／Ｏ領域、メモリ領域の割り当てを行う。この割り当ては、ＰＣＩ−ＥｘｐｒｅｓｓデバイスのＰＣＩコンフィギュレーション空間が備えるＢＡＲ（Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｓｔｅｒ）の設定を行うことで実現される。【００２０】
ＰＣＩ−ＥｘｐｒｅｓｓエンドポイントのＢＡＲは最大で０〜５の６つが備えられており、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントが必要とするＩ／Ｏ領域、メモリ領域の情報を保持する。初期設定プログラムは、ＢＡＲ０に対して、０ｘＦＦＦＦＦＦＦＦを書き込み、ＢＡＲ０の値を読み出す。すると、読み出した値によって、Ｉ／Ｏ領域とメモリ領域のどちらを要求しているか、どのくらいのサイズの領域を必要としているか、などが判明する。初期設定プログラムは、その要求に従って、ＢＡＲ０にベースアドレスを書き込む。このベースアドレスから、ベースアドレスにＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントが要求したサイズを加算した値までが、このＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントに割り当てられたＩ／Ｏ領域、又はメモリ領域である。ＢＡＲの設定は、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント間で重ならないように設定される。初期設定プログラムは、ＢＡＲ１〜５に対しても、同様の処理を行う。さらに、初期設定プログラムは、ＰＣＩコンフィギュレーション空間のコマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定も行う。【００２１】
次に、検出したＰＣＩ−Ｅｘｐｒｅｓｓデバイスが、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  ＣｏｍｐｌｅｘやＰＣＩ−Ｅｘｐｒｅｓｓスイッチのようなブリッジデバイスの場合（図２４のＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８）、初期設定プログラムは、まず、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントと同様にＢＡＲの設定を行う。ブリッジデバイスの場合、ＢＡＲは最大で０〜１の２つである。【００２２】
そして、初期設定プログラムは、ブリッジデバイスのＰＣＩコンフィギュレーション空間の、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定を行う。さらに、プライマリバス番号レジスタ、セカンダリバス番号レジスタ、サブオーディネートバス番号レジスタの設定を行う。プライマリバス番号とは、自ブリッジデバイスの上流側に存在するバスの番号を指し、セカンダリバス番号とは、自ブリッジデバイスの下流側に存在するバスの番号を指す。サブオーディネートバス番号とは、自ブリッジデバイスの下流に存在するリンクのうち、最大のバス番号を持つリンクのバス番号を示す。この時点では、全デバイスの検出を完了していないため、サブオーディネート番号は、最大の値である０ｘＦＦが設定される。【００２３】
そして、初期設定プログラムは、メモリベースアドレスレジスタ、Ｉ／Ｏベースアドレスレジスタの設定を行う。メモリベースアドレスレジスタは、セカンダリバス側に割り当てるメモリ空間の開始アドレス、Ｉ／Ｏベースアドレスレジスタは、セカンダリバス側に割り当てるＩ／Ｏ空間の開始アドレスを示す。【００２４】
続けて、初期設定プログラムは、このデバイスの下流に接続されているＰＣＩ−Ｅｘｐｒｅｓｓデバイスのサーチを行う。下流側のサーチを再帰的に行い、完了すると、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０９、２０８の順で、最終的なサブオーディネートバス番号が決まる。また、メモリリミットアドレス、Ｉ／Ｏリミットアドレスの値も決まり、これらをＰＣＩコンフィギュレーションレジスタの適切な位置に格納する。メモリリミットアドレスは、セカンダリバス側に割り当てるメモリ空間のサイズであり、Ｉ／Ｏリミットアドレスは、セカンダリバス側に割り当てるＩ／Ｏ空間のサイズである。初期設定プログラムは、下流側を再帰的にサーチする際に、各リンクに存在するデバイスに設定したＢＡＲの設定値を保持することで、各リンクに割り当てたメモリ空間、Ｉ／Ｏ空間のサイズを算出することができる。これにより、上流側のブリッジデバイスでのメモリリミットアドレス、Ｉ／Ｏリミットアドレスの値を求める。【００２５】
このようにして、初期設定プログラムは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの設定を完了する。図２４に示すＰＣＩ−Ｅｘｐｒｅｓｓファブリック２００では、まず、初期設定プログラムは、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１の設定を行う。続いて、初期設定プログラムは、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０２、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０３、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０４、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０９、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０６、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０７、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０９の順で設定を行っていく。最後のＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０９の設定では、Ｉ／Ｏリミットアドレス、メモリリミットアドレス、サブオーディネート番号を設定する。続いて、初期設定プログラムは、ＰＣＩ−Ｅｘｐｒｅｓｓエンドポイント２０５、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８の順で設定を行っていく。ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ２０８の設定では、Ｉ／Ｏリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。その後、初期設定プログラムは、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘ２０１について、Ｉ／Ｏリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。【００２６】
ＰＣＩ−Ｅｘｐｒｅｓｓの場合、ＰＣＩ−ＥｘｐｒｅｓｓデバイスのＰＣＩコンフィギュレーション空間に対して初期設定プログラムがアクセスするとき、初期設定プログラムは、コンフィギュレーションリードリクエスト又はコンフィギュレーションライトリクエストを発行する。これらのリクエストでは、宛先のデバイスを識別する情報として、ＢＤＦ番号が書き込まれている。ＰＣＩ−Ｅｘｐｒｅｓｓデバイス側は、コンフィギュレーションライトリクエストに含まれる宛先ＢＤＦ番号を、自身のＢＤＦ番号として保持する。
このＢＤＦ番号は、ＰＣＩ−Ｅｘｐｒｅｓｓデバイス側からメモリリードリクエストやメモリライトリクエストなどのリクエストが発行される際に、送信元のＰＣＩ−Ｅｘｐｒｅｓｓデバイスを示す情報として、リクエストに書き込まれる。【００２７】
今後、１台のサーバで稼働する仮想マシン数が漸増し、それぞれの仮想マシンに１つ以上のＩ／ＯデバイスをＰＣＩパススルーやＳＲ−ＩＯＶで割り当てようとすると、サーバやＰＣの筐体に必要な数のＩ／Ｏデバイスを設けることができなくなると予想される。一般に、２Ｕ（筺体の厚みが８．８９ｃｍ）のサーバであれば、５〜６個のＩ／Ｏデバイスを装着できるが、装着できるＩ／Ｏデバイスの数は仮想マシンの数に比べるとあまりにも少ない。【００２８】
上述した状況に対して、ＰＣ又はサーバに予め設けられたＰＣＩ−Ｅｘｐｒｅｓｓスロットの数よりも多い数のＩ／Ｏデバイスを接続可能にした技術が開発されている。具体的には、サーバ又はＰＣの筐体内にのみ存在していたＰＣＩ−Ｅｘｐｒｅｓｓファブリックを筐体外に延長し、ケーブルとスイッチで、Ｉ／Ｏデバイスが装着されたＩ／ＯボックスとＰＣ又はサーバとを接続することで、ＰＣＩ−Ｅｘｐｒｅｓｓスロットの数よりも多い数のＩ／Ｏデバイスを接続可能にしている。このような技術に基づく製品が非特許文献１及び非特許文献２に開示されている。【００２９】
非特許文献１に開示された技術は、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチの上流側の機能を模したＩ／Ｏカードと、下流側の機能を模したＩ／Ｏ拡張ボックスと、それらを接続するイーサネット（登録商標）とで、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックを筐体外に延長するものである。非特許文献２に開示された技術は、ＰＣＩ−Ｅｘｐｒｅｓｓの信号を延長するＩ／Ｏカードとケーブルで、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックを筐体外に延長するものである。
【先行技術文献】
【非特許文献】
【００３０】
【非特許文献１】“ＥｘｐＥｔｈｅｒ  Ｐｒｏｄｕｃｔｓ”，［ｏｎｌｉｎｅ］，ＥｘｐＥｔｈｅｒ  Ｃｏｎｓｏｒｔｉｕｍ，［２０１５年１０月１３日検索］，インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｅｘｐｅｔｈｅｒ．ｏｒｇ／ｅｐｒｏｄｕｃｔ．ｈｔｍｌ＞
【非特許文献２】“ＭＡＧＭＡ  ＥｘｐｒｅｓＢｏｘ３２００”，［ｏｎｌｉｎｅ］，ＭＡＧＭＡ社，［２０１５年１０月１３日検索］，インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｍａｇｍａ．ｃｏｍ／ｂａｃｋ−ｏｆｆｉｃｅ／ｗｐ−ｃｏｎｔｅｎｔ／ｕｐｌｏａｄｓ／２０１５／０３／ＥＢ３２００−Ｄａｔａｓｈｅｅｔ．ｐｄｆ＞
【発明の概要】
【発明が解決しようとする課題】
【００３１】
以下の分析は、本発明によって与えられたものである。【００３２】
非特許文献１及び２に開示された技術では、パススルー技術を利用する仮想マシンに必要な数だけのＩ／Ｏデバイスを割り当てることができない場合があるという課題が存在する。以下に、その理由を説明する。【００３３】
Ｉ／Ｏデバイスは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック内で、ＢＤＦ番号で識別される。また、異なるバス番号を持つＰＣＩ−Ｅｘｐｒｅｓｓリンク同士を接続するブリッジデバイスにも、固有のＢＤＦ番号が割り振られる。ファンクション番号は、同一のＰＣＩ−Ｅｘｐｒｅｓｓデバイスが複数の機能（ファンクション）を持つ場合に、機能を区別するための番号である。そのため、Ｉ／Ｏデバイスという単位では、ＢＤＦ番号のうち、バス番号（Ｂ）とデバイス番号（Ｄ）で識別される。【００３４】
ＢＤＦ番号は、その取りうる値がＰＣＩ−Ｅｘｐｒｅｓｓの仕様で定められており、バス番号が０〜２５５の２５６個、デバイス番号が０〜３１の３２個である。そのため、１つのＰＣＩ−Ｅｘｐｒｅｓｓファブリックで最大で２５６×３２＝８１９２個のＰＣＩ−Ｅｘｐｒｅｓｓデバイスを収容可能である。【００３５】
しかし、仮に１台のサーバで１０００個の仮想マシンを稼働させ、各仮想マシンに１０個のＩ／Ｏデバイスをパススルー技術で割り当てる場合、Ｉ／ＯデバイスがＳＲ−ＩＯＶに対応していなければ、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックに収容可能なデバイス数以上のＩ／Ｏデバイスが必要になり、そのようなシステムを構成できないことになる。【００３６】
非特許文献１及び２に開示された技術は、１台のサーバ又はＰＣに搭載可能なＩ／Ｏデバイス数を増加させる技術であって、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックに接続可能なＩ／Ｏデバイス数を増加させる技術ではない。そのため、上記の課題を解決できない。ＰＣＩ−Ｅｘｐｒｅｓｓファブリックに限らず、接続されるＩ／Ｏデバイスの数が予め決められた仕様によって制限されるＰＣＩファブリックであれば、同じ課題が起こり得る。【００３７】
本発明は、上述した問題点に鑑みて創案されたものであって、予め仕様が決められたＰＣＩファブリックに接続するＩ／Ｏデバイスの数を増加させることを可能にしたコンピュータ、デバイス割当管理方法、及びコンピュータに実行させるためのプログラム記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００３８】
上記目的を達成するための本発明のコンピュータは、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを保持する記憶部と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する仮想マシンモニタと、
前記仮想マシンモニタによって特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、該仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するＩ／Ｏデバイスマネージャーと、
を有する構成である。【００３９】
また、本発明のデバイス割当管理方法は、コンピュータによるデバイス割当管理方法であって、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納し、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定し、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するものである。【００４０】
さらに、本発明のプログラム記録媒体は、コンピュータに、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する手順と、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるプログラムを記録する。
【発明の効果】
【００４１】
本発明によれば、ＰＣＩファブリックに予め決められた仕様に制限されず、接続可能なＩ／Ｏデバイス数を増加させることができる。
【図面の簡単な説明】
【００４２】
【図１】本発明の第１の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。
【図２】本発明の第１の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。
【図３】本発明の第１の実施形態に係るアドレス範囲テーブルの構成例を示したものである。
【図４】本発明の第１の実施形態に係るＢＤＦ番号対応テーブルの構成例を示したものである。
【図５】本発明の第１の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。
【図６】本発明の第１の実施形態に係るＭＡＣアドレステーブルの構成例を示したものである。
【図７】本発明の第１の実施形態に係るＩ／Ｏデバイス設定内容保持テーブルの構成例を示したものである。
【図８】本発明の第１の実施形態に係るＩ／Ｏデバイスリストの構成例を示したものである。
【図９】本発明の第１の実施形態に係るＭＡＣアドレス逆引きテーブルの構成例を示したものである。
【図１０】本発明の第１の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、Ｉ／Ｏデバイスマネージャー、Ｉ／Ｏ側ネットワークインタフェース、Ｉ／Ｏデバイスの動作を示したシーケンス図である。
【図１１】本発明の第１の実施形態に係る、仮想マシンからＩ／Ｏデバイスへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【図１２】本発明の第１の実施形態に係る、Ｉ／Ｏデバイスから仮想マシンへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【図１３】本発明の第２の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。
【図１４】本発明の第２の実施形態に係るＢＤＦ番号テーブルの構成例を示したものである。
【図１５】本発明の第２の実施形態に係るＩ／Ｏデバイス割当リストの構成例を示したものである。
【図１６】本発明の第２の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示したものである。
【図１７】本発明の第２の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、Ｉ／Ｏデバイスマネージャー、Ｉ／Ｏデバイスの動作を示したシーケンス図である。
【図１８】本発明の第２の実施形態に係る、仮想マシンからＩ／Ｏデバイスへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【図１９】本発明の第３の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。
【図２０】本発明の第４の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。
【図２１】本発明の第４の実施形態に係るグローバルＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。
【図２２】本発明の第４の実施形態に係るＩ／Ｏデバイスリストの構成例を示したものである。
【図２３】本発明の第４の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。
【図２４】ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの一例を示したものである。
【図２５】図２４に示したＰＣＩ−Ｅｘｐｒｅｓｓ  Ｒｏｏｔ  Ｃｏｍｐｌｅｘの内部の構成を簡易的に示したブロック図である。
【図２６】図２４に示したＰＣＩ−Ｅｘｐｒｅｓｓスイッチの内部の構成を簡易的に示したブロック図である。
【発明を実施するための形態】
【００４３】
本発明の実施形態について図面を参照して説明する。なお、この説明に付記する図面や参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。
【００４４】
［第１の実施形態］
［構成の説明］
図１は、本発明の第１の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図１を参照すると、コンピュータシステム１は、ハードウェア２と、仮想マシンモニタ３と、仮想マシン４と、Ｉ／Ｏデバイスマネージャー５と、Ｉ／Ｏ側ネットワークインタフェース６と、ネットワーク７と、Ｉ／Ｏデバイス８と、を有する。
【００４５】
本実施形態では、Ｉ／Ｏデバイス８はＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントであり、ネットワーク７はイーサネット（登録商標）であるとして説明を行うが、このことは本発明を、これらを必須要素とすることに限定することを意図するものではない。
【００４６】
ハードウェア２はコンピュータを構成する基本的な要素（不図示）であるＣＰＵ、メモリ、ディスク装置及びネットワークインタフェースカード（ＮＩＣ）２１を含む構成である。図１は、ハードウェア２において、ＣＰＵがプログラムを実行することで、仮想マシン４、Ｉ／Ｏデバイスマネージャー５及び仮想マシンモニタ３が仮想的に構成されることを表している。
【００４７】
仮想マシンモニタ３は、仮想マシン４に仮想的なハードウェアを提供し、仮想マシン４が仮想的なハードウェアを使用する際に、ハードウェア２のリソースを割り当てる機能を持つ。サーバ仮想化環境では、仮想マシンモニタ３を、Ｌｉｎｕｘ（登録商標）などの汎用ＯＳの上で稼働するソフトウェアとして実現する方法や、コンピュータ上で稼働するＯＳの機能も併せ持つ専用ソフトウェアとして実現する方法が存在する。前者の例としてはＫＶＭ（Ｋｅｒｎｅｌ−ｂａｓｅｄ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）が挙げられ、後者の例としてはＸｅｎＳｅｒｖｅｒやＶＭｗａｒｅが挙げられる。以下では、前者の構成をベースとして説明するが、このことは本発明をそのような構成のサーバ仮想化環境に限定することを意図するものではない。
【００４８】
仮想マシン４は、仮想マシンモニタ３の制御のもとで稼働する仮想計算機環境である。仮想マシンモニタ３から提供される仮想ハードウェア上にＯＳをインストールすることで、あたかも実計算機環境で稼働するＯＳのように利用することが可能となる。
【００４９】
仮想マシン４が、仮想計算機環境上の資源を利用する際には、仮想マシンモニタ３による制御が介入する。例えば、仮想マシン４の上で稼働するアプリケーションがメモリにアクセスする場合、まず、仮想マシン４の中で、仮想アドレス（ゲスト仮想アドレス（Ｇｕｅｓｔ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ））と物理アドレス（ゲスト物理アドレス（Ｇｕｅｓｔ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ））の変換が行われ、さらに、ゲスト物理アドレスを用いた仮想マシン４のメモリアクセスを仮想マシンモニタ３が検知し、そのゲスト物理アドレスを、仮想マシンモニタの仮想アドレス（ホスト仮想アドレス、Ｈｏｓｔ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ）、又は物理アドレス（ホスト物理アドレス、Ｈｏｓｔ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ）に変換する。ホスト仮想アドレスに変換した場合は、さらにホスト物理アドレスに変換される。このような変換を経て、仮想マシン４はメモリアクセスを行うことができる。
【００５０】
Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８を管理するモジュールである。Ｉ／Ｏデバイス８は、Ｉ／Ｏ側ネットワークインタフェース６、ネットワーク７及びＮＩＣ２１を介してＩ／Ｏデバイスマネージャー５と接続される。
【００５１】
Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８の初期設定や、Ｉ／Ｏデバイス８とのデータ転送リクエストの制御を行う。
【００５２】
Ｉ／Ｏデバイス８の初期設定とは、Ｉ／Ｏデバイス８が持つＢＡＲなどのＰＣＩコンフィギュレーション空間のレジスタへの値の設定を指す。
【００５３】
ＰＣＩ−Ｅｘｐｒｅｓｓの場合、Ｉ／Ｏデバイスマネージャー５とＩ／Ｏデバイス８とのデータ転送リクエストは、メモリリード／ライトリクエスト、Ｉ／Ｏリード／ライトリクエスト、メッセージリクエスト、コンプリーションの種別が存在する。これらにはそれぞれ特有のフォーマットがある。メモリリード／ライトリクエストは、メモリリードリクエスト及びメモリライトリクエストを意味する。Ｉ／Ｏリード／ライトリクエストは、Ｉ／Ｏリードリクエスト及びＩ／Ｏライトリクエストを意味する。
【００５４】
Ｉ／Ｏデバイスマネージャー５は、リクエストに応じて、それぞれのフォーマットに従ったパケット（ＴＬＰ（Ｔｒａｎｓａｃｔｉｏｎ  Ｌａｙｅｒ  Ｐｒｏｔｏｃｏｌ）パケット）の生成、ＴＬＰパケットのイーサネットフレームでのカプセル化、及びカプセル化したフレームの送信を行う。Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８から受け取るイーサネットフレームからＴＬＰパケットを取り出し、ＴＬＰパケットの内容を仮想マシンモニタ３に通知する。
【００５５】
なお、図１では、Ｉ／Ｏデバイスマネージャー５が仮想マシンモニタ３とは別の構成要素で示されているが、Ｉ／Ｏデバイスマネージャー５が仮想マシンモニタ３に含まれる構成にすることも可能である。
【００５６】
Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイス８をネットワーク７に接続するためのインタフェースである。Ｉ／Ｏ側ネットワークインタフェース６はＩ／Ｏデバイス８ごとに設けられている。本実施形態ではネットワーク７としてイーサネット（登録商標）を前提としているため、Ｉ／Ｏ側ネットワークインタフェース６は固有のＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスを持つ。
【００５７】
Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイスマネージャー５から送信されたイーサネットフレームから、ＴＬＰパケットを取り出す機能を有する。また、Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイス８からのＴＬＰパケットをイーサネットフレームでカプセル化してＩ／Ｏデバイスマネージャー５に送信する機能を有する。
【００５８】
Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイス８がＴＬＰパケットを送信できるようにするために、ＮＩＣ２１のＭＡＣアドレスを保持する機能を有する。さらに、Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイスマネージャー５側からの要求に応じて、接続されているＩ／Ｏデバイス８をリセット（初期化）することも可能である。
【００５９】
ネットワーク７は、汎用のコンピュータネットワークであり、本実施形態ではイーサネット（登録商標）である。ネットワーク７は、ケーブル及びスイッチで構成されている。
ネットワーク７は、ＮＩＣ２１と、Ｉ／Ｏ側ネットワークインタフェース６とを接続する。
【００６０】
Ｉ／Ｏデバイス８は、本来であれば、コンピュータの拡張バスに接続されるＩ／Ｏデバイスであり、本実施形態ではＰＣＩ−Ｅｘｐｒｅｓｓエンドポイントに相当する。Ｉ／Ｏデバイス８の例として、ＮＩＣ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）カード、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）コントローラ、サウンドカード、などが挙げられる。
【００６１】
Ｉ／Ｏデバイス８は、Ｉ／Ｏデバイスマネージャー５から初期設定される際に、ＢＤＦ番号が通知される。Ｉ／Ｏデバイス８は、Ｉ／Ｏ側ネットワークインタフェース６の識別子とＢＤＦ番号からなる組で識別される。
【００６２】
本実施形態では、Ｉ／Ｏ側ネットワークインタフェース６の識別子とは、ＭＡＣアドレスである。ネットワーク７がイーサネット（登録商標）以外のネットワークである場合、Ｉ／Ｏ側ネットワークインタフェース６をそのネットワークに対応したネットワークインタフェースとし、そのネットワークで定められた識別子をＩ／Ｏ側ネットワークインタフェース６の識別子とする。例えば、ネットワーク７がＩｎｆｉｎｉＢａｎｄの場合、Ｉ／Ｏ側ネットワークインタフェース６はＩｎｆｉｎｉＢａｎｄプロトコルに対応したネットワークインタフェースとなり、ＧＵＩＤ（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）という識別子を持つことになる。
【００６３】
次に、図１に示した仮想マシンモニタ３の構成について説明する。
【００６４】
図２は、本発明の第１の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図２を参照すると、仮想マシンモニタ３は、仮想マシンインタフェース３１、リクエスト発行先決定部３２、Ｉ／Ｏデバイス割当部３３、Ｉ／Ｏデバイスマネージャーインタフェース３４、アドレス範囲テーブル３５、ＢＤＦ番号対応テーブル３６、ＮＩＣドライバ３７、及びリソースファイル保持部３８を有する。
【００６５】
仮想マシンインタフェース３１は、仮想マシン４と仮想マシンモニタ３の間のデータのやり取りを行うためのインタフェースである。例えば、仮想マシンインタフェース３１は、仮想マシンモニタ３が仮想マシン４を起動する際、仮想マシン４に割り当てるリソースの情報を仮想マシンモニタ３から仮想マシン４に通知するために使用される。また、仮想マシンインタフェース３１は、仮想マシン４がＩ／Ｏデバイス８を利用する際、仮想マシン４から仮想マシンモニタ３がリクエストを受け取ったりするために使用される。
【００６６】
リクエスト発行先決定部３２は、仮想マシン４からＩ／Ｏデバイス８を利用する旨のリクエストを受け取ると、リクエストに含まれる情報に基づいて、リクエストの発行先が仮想マシンモニタ３によって管理されるＩ／Ｏデバイスか、Ｉ／Ｏデバイスマネージャー５によって管理されるＩ／Ｏデバイス８かを判断する。
【００６７】
ＰＣＩ−Ｅｘｐｒｅｓｓにおいては、Ｉ／Ｏデバイスへのアクセスは、ＢＤＦ番号を用いるか、メモリアドレスを用いて行われる。そのため、リクエスト発行先決定部３２は、仮想マシン４からＩ／Ｏデバイス８へのリクエスト種別に応じて、ＢＤＦ番号又はメモリアドレスに基づいて、仮想マシンモニタ３とＩ／Ｏデバイスマネージャー５のうち、どちらが管理するＩ／Ｏデバイスへのリクエストかを判断する。
【００６８】
Ｉ／Ｏデバイス割当部３３は、仮想マシン４に、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８を割り当てる機能を有する。
【００６９】
一般的に、仮想マシン４にＰＣＩパススルー技術でＩ／Ｏデバイスを割り当てる際、仮想マシンモニタ３が、ＰＣＩパススルー技術で割り当てるＩ／Ｏデバイスの識別子（ＢＤＦ番号など）を指定する。指定の方法は、コマンドラインのオプションで指定する、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）ツール上で操作を行う方法、などがある。Ｉ／Ｏデバイス割当部３３も、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８を仮想マシン４に割り当てる際、何らかの方法で、どの仮想マシン４に、どのような種類・スペックのＩ／Ｏデバイス８を割り当てるかという情報を、Ｉ／Ｏデバイス割当部３３の外部モジュール（不図示）より受け取る。
【００７０】
Ｉ／Ｏデバイス割当部３３は、外部モジュールより指定された種類・スペックのＩ／Ｏデバイス８を利用することができるかどうかを、Ｉ／Ｏデバイスマネージャー５に問い合わせる。Ｉ／Ｏデバイス割当部３３は、利用可能であることがＩ／Ｏデバイスマネージャー５から通知されると、仮想マシン４が起動する際に行うＩ／Ｏデバイスのサーチ時に、Ｉ／Ｏデバイスマネージャー５からの通知に含まれるＩ／Ｏデバイス８の識別子とリソース情報を用いてＩ／Ｏデバイス８の存在を仮想マシン４に通知する。
【００７１】
Ｉ／Ｏデバイスマネージャーインタフェース３４は、仮想マシンモニタ３とＩ／Ｏデバイスマネージャー５との間でデータのやり取りを行うためのインタフェースである。例えば、Ｉ／Ｏデバイスマネージャーインタフェース３４をソケットなどの通信インタフェースで実現することができる。例えば、Ｉ／Ｏデバイスマネージャーインタフェース３４は、仮想マシンモニタ３が、仮想マシン４に割り当てるＩ／Ｏデバイス８が利用可能かどうかをＩ／Ｏデバイスマネージャー５に問い合わせる際に使用される。また、Ｉ／Ｏデバイスマネージャーインタフェース３４は、仮想マシン４からのＩ／ＯデバイスへのリクエストがＩ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８宛だった場合に、リクエストを転送するために使用される。
【００７２】
図２に示したアドレス範囲テーブル３５について説明する。
【００７３】
アドレス範囲テーブル３５は、仮想マシン４に割り当てたＩ／Ｏデバイス８のＢＡＲに設定した情報を保持するテーブルである。アドレス範囲テーブル３５は、仮想マシン４ごとに設けられる。アドレス範囲テーブル３５は、仮想マシン４の起動時に、仮想マシン４がＩ／Ｏデバイス８のＢＡＲを設定する際に送受信されるデータを、仮想マシンモニタ３がトラップすることで、エントリが追加される。
【００７４】
図３は、本発明の第１の実施形態に係るアドレス範囲テーブルの構成例を示したものである。図３を参照すると、アドレス範囲テーブル３５は、開始アドレス、終了アドレス、物理ＢＤＦ番号及びＢＡＲ番号の情報が組として構成される。このテーブルにエントリが存在すると、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８へのアクセスがあったことを意味する。
【００７５】
アドレス範囲テーブル３５は、アドレス値を入力とし、そのアドレスが、開始アドレス以上、終了アドレス以下のアドレス範囲に該当する物理ＢＤＦ番号とＢＡＲ番号を出力とする。開始アドレスはＢＡＲに設定したアドレスであり、終了アドレスはそのＢＡＲを持つＩ／Ｏデバイス８が要求したサイズを開始アドレスに加算したアドレスである。物理ＢＤＦ番号とは、Ｉ／Ｏデバイスマネージャー５が、Ｉ／Ｏデバイス８のＢＡＲに設定したＢＤＦ番号のことである。これに対し、本明細書では、仮想マシン４が使用するＢＤＦ番号を仮想ＢＤＦ番号と称する。ＢＡＲ番号は、Ｉ／Ｏデバイス８が複数備えるＢＡＲの０〜５の番号を意味する。
【００７６】
図２に示したＢＤＦ番号対応テーブル３６について説明する。
【００７７】
ＢＤＦ番号対応テーブル３６は、仮想ＢＤＦ番号と物理ＢＤＦ番号の対応を保持するテーブルである。ＢＤＦ番号対応テーブル３６は、仮想マシン４ごとに設けられる。
【００７８】
ＢＤＦ番号対応テーブル３６は、仮想マシン４の起動時に、仮想マシン４がＩ／Ｏデバイス８のＰＣＩコンフィギュレーションレジスタを設定する際に送信されるデータを、仮想マシンモニタ３がトラップすることで、エントリが追加される。
【００７９】
図４は、本発明の第１の実施形態に係るＢＤＦ番号対応テーブルの構成例を示したものである。図４を参照すると、ＢＤＦ番号対応テーブル３６は、仮想ＢＤＦ番号と物理ＢＤＦ番号の情報が組として構成される。ＢＤＦ番号対応テーブル３６では、仮想ＢＤＦ番号を入力とし、物理ＢＤＦ番号を出力として得る。
【００８０】
図２に示したＮＩＣドライバ３７及びリソースファイル保持部３８について説明する。
【００８１】
ＮＩＣドライバ３７は、ＮＩＣ２１のドライバである。
【００８２】
リソースファイル保持部３８は、Ｉ／Ｏデバイスマネージャー５がＩ／Ｏデバイス８のＰＣＩコンフィギュレーションレジスタに設定した値を、リソースファイルとして保持する機能を有する。
【００８３】
リソースファイルは、仮想マシン４の識別子とＩ／Ｏデバイス８に割り当てた物理ＢＤＦ番号との組で管理される。リソースファイルのファイルの構成及びファイルフォーマットは、仮想マシンモニタ３のローカルに接続されたＩ／Ｏデバイスのリソースファイルのファイル構成及びファイルフォーマットに従ったものとすることが可能である。例えば、仮想マシンモニタ３がＬｉｎｕｘ（登録商標）ベースのシステムで構築されている場合、／ｓｙｓ／ｂｕｓ／ｐｃｉ／ｄｅｖｉｃｅｓ／＜ＢＤＦ番号＞ディレクトリ以下のファイル構成、ファイルフォーマットに従ったものとすることができる。
【００８４】
次に、図１に示したＩ／Ｏデバイスマネージャー５の構成を説明する。
【００８５】
図５は、本発明の第１の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。
【００８６】
図５を参照すると、Ｉ／Ｏデバイスマネージャー５は、仮想マシンモニタインタフェース５１と、Ｉ／Ｏデバイス設定部５２と、リクエスト制御部５３と、ＮＩＣドライバインタフェース５４と、ＭＡＣアドレステーブル５５と、Ｉ／Ｏデバイス設定内容保持テーブル５６と、Ｉ／Ｏデバイスリスト５７と、ＭＡＣアドレス逆引きテーブル５８と、を有する。
【００８７】
仮想マシンモニタインタフェース５１は、仮想マシンモニタ３とＩ／Ｏデバイスマネージャー５との間でデータのやり取りを行うためのインタフェースである。例えば、仮想マシンモニタインタフェース５１はソケットなどの通信インタフェースで実現することができる。
【００８８】
例えば、仮想マシンモニタインタフェース５１は、仮想マシンモニタ３が、仮想マシン４に割り当てるＩ／Ｏデバイス８が利用可能かどうかの問い合わせを仮想マシンモニタ３から受信する際に使用される。また、仮想マシンモニタインタフェース５１は、仮想マシンモニタ３を介して、仮想マシン４からのＩ／Ｏデバイス８宛のリクエストを受信するために使用される。
【００８９】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８の初期設定を行う機能を有する。Ｉ／Ｏデバイス８の初期設定とは、ＰＣＩコンフィギュレーションレジスタへの値の設定や、物理ＢＤＦ番号の割り当てを意味する。物理ＢＤＦ番号は、仮想マシン４ごとに独立した番号空間を持たせることができ、仮想マシン４間で同一の物理ＢＤＦ番号を使用するように設定することが可能である。
【００９０】
Ｉ／Ｏデバイス設定部５２は、仮想マシンモニタ３からのＩ／Ｏデバイス８が利用可能かどうかの問い合わせに応じて、Ｉ／Ｏデバイスリスト５７を検索し、条件にマッチするＩ／Ｏデバイス８の初期設定を行う。また、Ｉ／Ｏデバイス設定部５２は、初期設定内容を、ＭＡＣアドレステーブル５５、Ｉ／Ｏデバイス設定内容保持テーブル５６、及びＭＡＣアドレス逆引きテーブル５８に反映させる。
【００９１】
リクエスト制御部５３は、仮想マシンモニタ３を介して受ける、仮想マシン４からのＩ／Ｏデバイス８へのアクセス要求や、Ｉ／Ｏデバイス８からのリクエストを処理する機能を有する。リクエストとは、ＰＣＩ−Ｅｘｐｒｅｓｓで定義されている、Ｉ／Ｏリード／ライトリクエスト、メモリリード／ライトリクエスト、コンフィギュレーションリード／ライトリクエスト、メッセージリクエストである。
【００９２】
リクエスト制御部５３は、仮想マシンモニタ３を介して受ける、仮想マシン４からのアクセス要求をもとに、ＴＬＰパケットを構築し、そのＴＬＰパケットをペイロードとしたイーサネットフレームを構築する機能を有する。これらのパケット及びフレームのヘッダに設定するデータは、仮想マシンモニタ３を介して受ける、仮想マシン４からのアクセス要求に含まれる情報、及びＭＡＣアドレステーブル５５とＩ／Ｏデバイス設定内容保持テーブル５６が保持する情報から得られる。
【００９３】
また、リクエスト制御部５３は、Ｉ／Ｏデバイス８を送信元とするＴＬＰパケットをイーサネットフレームでカプセル化したフレームを受信すると、フレームのデカプセル化を行う機能を有する。また、リクエスト制御部５３は、取り出したＴＬＰパケットから、アクセス先のメモリアドレスなどの情報を取り出して仮想マシンモニタ３に転送する機能を有する。
【００９４】
ＮＩＣドライバインタフェース５４は、ＮＩＣドライバ３７にイーサネットフレームの送信要求を出すためのインタフェースであり、ＮＩＣドライバ３７からイーサネットフレームを受信するためのインタフェースである。例えば、このインタフェースは、Ｗｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘ（登録商標）などの汎用ＯＳが提供するインタフェースである。
【００９５】
ＭＡＣアドレステーブル５５について説明する。
【００９６】
ＭＡＣアドレステーブル５５は、仮想マシンの識別子と、物理ＢＤＦ番号と、その物理ＢＤＦ番号を持つＩ／Ｏデバイス８が接続されたＩ／Ｏ側ネットワークインタフェース６のＭＡＣアドレスとを対応付けた情報を保持するテーブルである。
【００９７】
図６は、本発明の第１の実施形態に係るＭＡＣアドレステーブルの構成例を示したものである。ＭＡＣアドレステーブル５５は、仮想マシンの識別子と物理ＢＤＦ番号を入力とし、ＭＡＣアドレスを出力する。
【００９８】
Ｉ／Ｏデバイス設定内容保持テーブル５６について説明する。
【００９９】
Ｉ／Ｏデバイス設定内容保持テーブル５６は、Ｉ／Ｏデバイス８のＰＣＩコンフィギュレーションレジスタに設定した値を保持するテーブルである。Ｉ／Ｏデバイス設定内容保持テーブル５６は、仮想マシン４ごとに設けられる。
【０１００】
図７は、本発明の第１の実施形態に係るＩ／Ｏデバイス設定内容保持テーブルの構成例を示したものである。Ｉ／Ｏデバイス設定内容保持テーブル５６は、物理ＢＤＦ番号とレジスタ番号を入力とし、入力された物理ＢＤＦ番号に対応するＩ／Ｏデバイス８について、入力されたレジスタ番号のレジスタに対する設定値を出力する。図７では、レジスタ番号をＢＡＲ０、ＢＡＲ１、のように、レジスタ名で記載しているが、レジスタ名で指定するほかに、各レジスタのＰＣＩコンフィギュレーションレジスタ内での番地を使用する方法も考えられる。
【０１０１】
図５に示したＩ／Ｏデバイスリスト５７について説明する。
【０１０２】
Ｉ／Ｏデバイスリスト５７は、Ｉ／Ｏデバイス８のデバイス種別及びスペックと、そのＩ／Ｏデバイス８が接続されているＩ／Ｏ側ネットワークインタフェース６のＭＡＣアドレスと、そのＩ／Ｏデバイス８の割当先の仮想マシン４の識別子との情報を組にして保持する機能を有する。
【０１０３】
図８は、本発明の第１の実施形態に係るＩ／Ｏデバイスリストの構成例を示したものである。Ｉ／Ｏデバイスリスト５７では、デバイス種別及びスペックを入力とし、ＭＡＣアドレスと、そのＩ／Ｏデバイス８の割り当て状況とを出力として得られる。
【０１０４】
デバイス種別とは、Ｉ／Ｏデバイス８の種類、すなわち、ＮＩＣ、ＧＰＵ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ディスクコントローラ、など、Ｉ／Ｏデバイス８の分類を示す情報である。
【０１０５】
スペックとは、そのＩ／Ｏデバイス８が持つ性能、メモリ容量、ディスク容量、などを示す情報である。例えば、ＮＩＣであれば転送速度、ＧＰＵであればＧＰＵのコアクロック数やメモリ容量、あるいはＧＰＵの世代、ＳＳＤであれば、容量やデータの読み書きの性能、などである。何の情報をスペックの欄に記載するかは、コンピュータシステム１の設計者、あるいは運用者が定義する。割当先の仮想マシン４の欄には、そのＩ／Ｏデバイス８が既に、いずれかの仮想マシン４に割り当て済みの場合は、仮想マシン４の識別子が、未割り当ての場合は、そのことを示す値が設定される。
【０１０６】
図５に示したＭＡＣアドレス逆引きテーブル５８について説明する。
【０１０７】
ＭＡＣアドレス逆引きテーブル５８は、ＭＡＣアドレスの情報を基に、そのＭＡＣアドレスを持つＩ／Ｏ側ネットワークインタフェース６に接続されたＩ／Ｏデバイス８を利用する仮想マシン４の識別子の情報を取得するためのテーブルである。
【０１０８】
図９は、本発明の第１の実施形態に係るＭＡＣアドレス逆引きテーブルの構成例を示したものである。ＭＡＣアドレス逆引きテーブル５８は、ＭＡＣアドレスを入力とし、仮想マシンの識別子を出力とする。
【０１０９】
なお、図２及び図５に示した各種テーブル及びリストはハードウェア２に設けられたメモリ等の記憶部（不図示）で保持され、リソースファイル保持部３８は記憶部の一部に相当する。このことは、後述する他の実施形態においても同様であり、その詳細な説明を省略する。
【０１１０】
［動作の説明］
次に、図面を参照して、本実施形態のコンピュータシステムの動作を説明する。
【０１１１】
はじめに、仮想マシン４を起動する際の、Ｉ／Ｏデバイス８の初期設定の方法を説明する。
【０１１２】
図１０は、本発明の第１の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、Ｉ／Ｏデバイスマネージャー、Ｉ／Ｏ側ネットワークインタフェース、Ｉ／Ｏデバイスの動作を示したシーケンス図である。
【０１１３】
まず、仮想マシンモニタ３に設けられたＩ／Ｏデバイス割当部３３が、仮想マシン４の動作に必要なＩ／Ｏデバイス８の有無を確認するために、仮想マシン４の識別子と、仮想マシン４に割り当てるＩ／Ｏデバイス８の種別及びスペックとを、Ｉ／Ｏデバイスマネージャー５に通知する（ステップＳ３０ａ）。
【０１１４】
Ｉ／Ｏデバイスマネージャー５に設けられたＩ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイスリスト５７を参照し、該当するＩ／Ｏデバイス８が利用可能かどうかを検索する（ステップＳ５０ａ）。Ｉ／Ｏデバイス設定部５２は、利用可能なデバイスが見つかった場合、Ｉ／Ｏデバイスリスト５７を参照し、利用可能なＩ／Ｏデバイス８に該当するエントリの、割当先仮想マシン４の識別子の欄に記載されているデフォルト値を、仮想マシンモニタ３から通知された仮想マシン４の識別子に変更する。
【０１１５】
Ｉ／Ｏデバイス設定部５２は、仮想マシン４に割り当てることのできるＩ／Ｏデバイス８が見つかった場合、そのＩ／Ｏデバイス８の初期設定を行う（ステップＳ５２ａ）。
【０１１６】
ステップＳ５２ａの初期設定の際、Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８に割り当てるＢＤＦ番号（物理ＢＤＦ番号）を決定し、仮想マシン４の識別子、物理ＢＤＦ番号及びＭＡＣアドレスの情報を組にしてＭＡＣアドレステーブル５５に登録する。また、Ｉ／Ｏデバイス設定部５２は、ＭＡＣアドレス及び仮想マシン４の識別子の情報を組にしてＭＡＣアドレス逆引きテーブル５８に登録する。ＭＡＣアドレスは、図１０のステップＳ５０ａにおいて、Ｉ／Ｏデバイス設定部５２がＩ／Ｏデバイスリスト５７にアクセスした際、Ｉ／Ｏデバイス設定部５２に読み出される。そして、Ｉ／Ｏデバイス設定部５２は、物理ＢＤＦ番号を使用したコンフィギュレーションリード／ライトリクエストのＴＬＰパケットを構築し、構築したＴＬＰパケットをペイロードとするイーサネットフレームを構築する。
【０１１７】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８のＰＣＩコンフィギュレーションレジスタのうち、ベンダーＩＤレジスタ及びクラスコードレジスタからの読み出し、ＢＡＲ、コマンドレジスタ、キャッシュラインサイズレジスタ及びレイテンシタイマレジスタへの値の設定を行う。これら読み書きされた情報は、仮想マシンモニタ３にＩ／Ｏデバイスの情報として渡すために、Ｉ／Ｏデバイス設定部５２に保持される。例えば、ＢＡＲに設定される情報には、そのＩ／Ｏデバイス８が要求するアドレス空間がＩ／Ｏ空間か、メモリ空間か、を示す情報と、そのＩ／Ｏデバイス８が要求する空間のサイズを示す情報とが含まれる。これらの情報は、仮想マシン４が起動時にＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定を行う際に必要となる。
【０１１８】
Ｉ／Ｏデバイス設定部５２がＩ／Ｏデバイス８に割り当てるＢＤＦ番号及びＢＡＲに設定する値（メモリ空間の範囲、Ｉ／Ｏ空間の範囲）は、同一の仮想マシン４に割り当てるＩ／Ｏデバイス８間で値が重ならなければ、任意の値を設定可能である。つまり、ＢＤＦ番号空間、メモリ空間、Ｉ／Ｏ空間は、仮想マシン４ごとに独立している。これは、Ｉ／Ｏデバイス設定部５２がＩ／Ｏデバイス８の識別に仮想マシン４の識別子を用いているためである。
【０１１９】
Ｉ／Ｏデバイス設定部５２は、ステップＳ５２ａの初期設定を行った後、ＮＩＣドライバインタフェース５４、ＮＩＣドライバ３７及びＮＩＣ２１を介して、Ｉ／Ｏデバイス８に対して、コンフィギュレーションライトリクエストのＴＬＰパケットをペイロードとするイーサネットフレーム送信する。
【０１２０】
Ｉ／Ｏ側ネットワークインタフェース６は、イーサネットフレームをＩ／Ｏデバイスマネージャー５から受信すると、イーサネットフレームのデカプセル化を行い、ＴＬＰパケットを取り出す。Ｉ／Ｏデバイス８は、ＴＬＰパケットに従ってリクエスト内容を処理すると、コンプリーションのＴＬＰパケットをＩ／Ｏデバイスマネージャー５宛に送信する（ステップＳ８０ａ）。
【０１２１】
このＴＬＰパケットは、Ｉ／Ｏ側ネットワークインタフェース６においてイーサネットフレームにカプセル化された後、ネットワーク７を介して、Ｉ／Ｏデバイスマネージャー５に転送される。ＮＩＣ２１のＭＡＣアドレスは、事前にＩ／Ｏ側ネットワークインタフェース６に設定されていてもよい。また、Ｉ／Ｏ側ネットワークインタフェース６がＩ／Ｏデバイスマネージャー５と認証のための通信を行う際に、通信相手となるＮＩＣ２１のＭＡＣアドレスがＩ／Ｏ側ネットワークインタフェース６に通知されてもよい。
【０１２２】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８へ発行したコンフィギュレーションライトリクエストに対するコンプリーションパケットを受信するたびに、そのレジスタに設定した値を、物理ＢＤＦ番号及びレジスタ番号とともに、Ｉ／Ｏデバイス設定内容保持テーブル５６に登録する（ステップＳ５３ａ）。
【０１２３】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８に割り当てるＢＤＦ番号について、バス番号ごとに１つ、仮想的なＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの設定情報を生成し、Ｉ／Ｏデバイス設定内容保持テーブル５６に登録する。これは、背景技術にて説明したように、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定の際には、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチデバイスなどのブリッジデバイスが検出されないと、下流のバスへのサーチが行われないためである。
【０１２４】
仮に、仮想的なＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの設定情報を生成しないとすると、仮想マシン４が起動時にＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定を行う際、下流のバスのサーチを行わないことになる。その結果、下流のバスのバス番号を付与したＩ／Ｏデバイス８が仮想マシン４から認識されなくなってしまう。
【０１２５】
ＰＣＩ−Ｅｘｐｒｅｓｓスイッチは、論理的にはＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの組み合わせであるため、本実施形態では、仮想的なＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの設定情報を生成する。この設定情報には、ＢＤＦ番号、ベンダーＩＤレジスタ、クラスコードレジスタ、ＢＡＲ、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタ、プライマリバスレジスタ、セカンダリバスレジスタ、サブオーディネートバスレジスタ、メモリベースアドレスレジスタ、Ｉ／Ｏベースアドレスレジスタ、メモリリミットアドレスレジスタ、及びＩ／Ｏリミットアドレスレジスタの情報が少なくとも含まれる。
【０１２６】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８へ発行したコンフィギュレーションライトリクエストに対する全てのコンプリーションパケットを受信すると、その設定内容を、仮想マシン４の識別子及び物理ＢＤＦ番号とともに、仮想マシンモニタ３へ通知する（ステップＳ５４ａ）。
【０１２７】
Ｉ／Ｏデバイス割当部３３は、図１０のステップＳ５４ａで通知された情報のうち、ＰＣＩコンフィギュレーションレジスタから読み出された値／書き込まれた値を、リソースファイルとして、リソースファイル保持部３８に保存する（ステップＳ３１ａ）。
【０１２８】
仮想マシンモニタ３は、仮想マシン４を起動する（ステップＳ３２ａ）。
【０１２９】
仮想マシン４は、起動する際に（仮想マシン４が認識する仮想的な）ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定処理を行う（ステップＳ４０ａ）。これを仮想マシンモニタ３がトラップし、仮想マシンモニタ３に設けられたリクエスト発行先決定部３２が、リソースファイル保持部３８が保持するＩ／Ｏデバイス８の設定情報に基づいて、初期設定処理に応答する。
【０１３０】
仮想マシン４は、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８だけでなく、仮想マシンモニタ３が用意する仮想的なデバイスや、ハードウェア２に設けられたＩ／ＯデバイスをＰＣＩパススルーで利用する場合がほとんどである。そのため、例えば、仮想マシンモニタ３は、これらの仮想的なデバイスやハードウェア２に設けられたＩ／Ｏデバイスの初期設定が全て完了したことを検知すると、その後に、Ｉ／Ｏデバイスマネージャー５によって管理されるＩ／Ｏデバイス８の初期設定を行う。
【０１３１】
ここで、仮想マシン４のＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定処理のトラップの方法について、例を用いて説明する。
【０１３２】
仮想マシン４がＩｎｔｅｌ社のｘ８６アーキテクチャに基づくプロセッサを仮想的なプロセッサとして使用している場合、ｉｎ／ｏｕｔ命令によってＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定を行う。このｉｎ／ｏｕｔ命令を仮想マシンモニタ３がトラップする。この命令がトラップされた後、リクエスト発行先決定部３２が、仮想マシン４のアクセス先のレジスタ番号を基に、リソースファイル保持部３８から関連する情報を取得する。そして、リクエスト発行先決定部３２は、ベンダーＩＤやクラスコードを仮想マシン４に通知する。また、リクエスト発行先決定部３２は、レイテンシタイマレジスタなど、Ｉ／Ｏデバイスマネージャー５が既に設定を行ったＩ／Ｏデバイス８の設定を、Ｉ／Ｏデバイス８に反映せずに、あたかもＩ／Ｏデバイス８の該当するレジスタに設定できたかのようにふるまったり、ＢＡＲの設定シーケンスをエミュレートしたりする。
【０１３３】
リクエスト発行先決定部３２は、このレイテンシタイマレジスタ番号の設定などの際に、仮想マシン４がＩ／Ｏデバイス８に設定しようとしたＢＤＦ番号（仮想ＢＤＦ番号）を、物理ＢＤＦ番号とともに、ＢＤＦ番号対応テーブル３６に登録する（ステップＳ３４ａ）。また、リクエスト発行先決定部３２は、ＢＡＲの設定シーケンスのエミュレートの際に、仮想マシン４がＩ／Ｏデバイス８のＢＡＲに設定しようとした値を開始アドレスとし、リソースファイルから読み出した、ＢＡＲが要求するサイズを開始アドレスに加算した値を終了アドレスとする。そして、リクエスト発行先決定部３２は、これらの開始アドレス及び終了アドレスを、物理ＢＤＦ番号及びＢＡＲ番号とともに、アドレス範囲テーブル３５に登録する（ステップＳ３４ａ）。
【０１３４】
一般に、ＰＣＩコンフィギュレーションレジスタの中には、ＯＳ又は仮想マシンの起動後に、Ｉ／Ｏデバイス８のドライバが設定するレジスタも存在する。そのようなレジスタへの設定に対しては、仮想マシンモニタ３に設けられたリクエスト発行先決定部３２が、リソースファイル保持部３８にその設定を反映させるとともに、Ｉ／Ｏデバイスマネージャー５に、Ｉ／Ｏデバイス８へのコンフィギュレーションリード／ライトリクエストの発行依頼を出す（ステップＳ３６ａ）。コンフィギュレーションリードリクエストの発行が必要かどうかは、設定先のレジスタの設定方法に依存する。コンフィギュレーションリードリクエストの発行が必要な場合、リクエスト発行先決定部３２は、仮想マシン４の識別子、対象のＩ／Ｏデバイス８の物理ＢＤＦ番号（ＢＤＦ番号対応テーブル３６より取得）及びアクセス種別を示す情報とともに、その発行依頼を出す。ここで言うアクセス種別とは、コンフィギュレーションリードリクエストか、コンフィギュレーションライトリクエストかという情報である。
【０１３５】
リクエスト発行先決定部３２は、仮想マシン４からのＰＣＩ−Ｅｘｐｒｅｓｓデバイスのサーチに対して、Ｉ／Ｏデバイスマネージャー５から渡されたリソースファイルのＩ／Ｏデバイス８、又はＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅを、物理ＢＤＦ番号の順に応答する。
このように、サーチに対して応答することで、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの下流に接続されたＩ／Ｏデバイス８まで初期設定が行われ得る。
【０１３６】
リクエスト発行先決定部３２は、仮想マシン４からのコンフィギュレーションリード／ライトリクエストが、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅへのコンフィギュレーションの場合、Ｉ／Ｏデバイスマネージャー５には、そのリクエストを通知せず、適切な値を仮想マシン４に返す。これは、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅが仮想的なデバイスであり、実際に設定を行う対象が存在しないためである。
【０１３７】
Ｉ／Ｏデバイスマネージャー５に設けられたリクエスト制御部５３は、仮想マシンモニタ３からリクエスト発行依頼を受け取ると、リクエスト発行依頼に基づいてＴＬＰパケットを構築する。そして、リクエスト制御部５３は、このＴＬＰパケットをペイロードとするイーサネットフレームを構築し、このイーサネットフレームをＩ／Ｏデバイス８に向けて送信する（ステップＳ５６ａ）。ＴＬＰパケット及びイーサネットフレームのヘッダに設定される、ＭＡＣアドレス及び物理ＢＤＦ番号などの情報は、仮想マシンモニタ３からのリクエストに含まれる情報、及び、この情報を用いてＭＡＣアドレステーブル５５を参照した結果から得られる。リクエスト制御部５３は、そのイーサネットフレームに対する、設定が正常に行われた旨の応答（コンプリーションＴＬＰパケット）がＩ／Ｏデバイス８から返って来るまで、このリクエスト内容を保持する。
【０１３８】
Ｉ／Ｏデバイス８は、Ｉ／Ｏ側ネットワークインタフェース６によってデカプセル化されたＴＬＰパケットをＩ／Ｏ側ネットワークインタフェース６から受信すると、そのパケットに記載されている内容に従ってＰＣＩコンフィギュレーションレジスタを設定する。
設定完了後に、Ｉ／Ｏデバイス８は、コンプリーションパケットをＩ／Ｏデバイスマネージャー５に向けて送信する（ステップＳ８２ａ）。
【０１３９】
リクエスト制御部５３は、Ｉ／Ｏデバイス８から送出されたコンプリーションパケットを受信すると、設定内容を物理ＢＤＦ番号及びレジスタ番号とともに、Ｉ／Ｏデバイス設定内容保持テーブル５６に登録する。そして、リクエスト制御部５３は、設定が完了した旨を仮想マシンモニタ３に通知する（ステップＳ５８ａ）。この通知には、少なくとも仮想マシン４の識別子及び物理ＢＤＦ番号が含まれ、仮想マシンモニタ３からのリクエストがコンフィギュレーションリードリクエストだった場合には、読み出されたデータも含まれる。仮想マシン４の識別子は、受信したコンプリーションパケットをカプセル化した際に付与されたイーサネットヘッダのソースＭＡＣアドレスを用いてＭＡＣアドレス逆引きテーブル５８を参照することで、得られる。
【０１４０】
リクエスト発行先決定部３２は、設定を完了した旨の通知をＩ／Ｏデバイスマネージャー５から受け取ると、設定が完了した旨又は読み出したデータを受信した旨を仮想マシン４に通知する（ステップＳ３８ａ）。
【０１４１】
次に、仮想マシン４がＩ／Ｏデバイス８にメモリリード／ライトリクエストを発行する場合の動作を説明する。
【０１４２】
図１１は、本発明の第１の実施形態に係る、仮想マシンからＩ／Ｏデバイスへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【０１４３】
仮想マシン４が、Ｉ／Ｏデバイス８のメモリ領域へアクセス要求を発行する（ステップＳ４０ｂ）。このアクセス要求は仮想マシンモニタ３にトラップされる。仮想マシンモニタ３は、仮想マシン４の識別子及びアクセス要求の種別（ここでは、メモリアクセス又はＩ／Ｏアクセスとする）と、アクセス先の情報（メモリアドレス）を仮想マシン４より得る。
【０１４４】
アクセス要求が仮想マシンモニタ３でトラップされることで、仮想マシンモニタ３に設けられたリクエスト発行先決定部３２に、仮想マシン４の識別子、アクセス要求の種別及びアクセス先の情報が仮想マシン４から渡される。リクエスト発行先決定部３２は、アクセス要求の種別から、そのアクセス要求がメモリアクセスであると判別する。そして、リクエスト発行先決定部３２は、仮想マシン４の識別子及びアクセス先の情報（メモリアドレス）を用いてアドレス範囲テーブル３５を参照し、物理ＢＤＦ番号及びＢＡＲ番号を得る（ステップＳ３０ｂ）。そして、リクエスト発行先決定部３２は、アドレス範囲テーブル３５の開始アドレスの値を用いて、アドレスのオフセット値を得る。アドレスオフセット値は、アクセス先の情報（メモリアドレス）から開始アドレスの値を引き算することで得られる。
【０１４５】
もし、アクセス種別が、Ｉ／Ｏデバイス８のＰＣＩコンフィギュレーションレジスタへの読み書きであった場合、仮想マシン４からは、仮想マシン４の識別子、アクセス要求の種別（コンフィギュレーション）、アクセス先の情報（仮想ＢＤＦ番号）及びアクセス先のレジスタ番号が、リクエスト発行先決定部３２に通知される。リクエスト発行先決定部３２は、仮想マシン４の識別子と仮想ＢＤＦ番号とを用いてＢＤＦ番号対応テーブル３６を参照し、物理ＢＤＦ番号を得る。
【０１４６】
リクエスト発行先決定部３２は、仮想マシン４の識別子、アクセス種別、物理ＢＤＦ番号、ＢＡＲ番号及びアドレスオフセット値をＩ／Ｏデバイスマネージャー５に通知する（ステップＳ３２ｂ）。
【０１４７】
Ｉ／Ｏデバイスマネージャー５に設けられたリクエスト制御部５３は、仮想マシンモニタ３から受け取った仮想マシン４の識別子と物理ＢＤＦ番号を用いて、ＭＡＣアドレステーブル５５を参照し、ＭＡＣアドレスを得る（ステップＳ５０ｂ）。
【０１４８】
リクエスト制御部５３は、物理ＢＤＦ番号とＢＡＲ番号を用いて、Ｉ／Ｏデバイス設定内容保持テーブル５６を参照し、アクセス対象のＢＡＲに設定された値を得る（ステップＳ５２ｂ）。リクエスト制御部５３は、ＢＡＲに設定された値にアドレスオフセット値を加えることで、アクセス先のアドレス値を得る。
【０１４９】
リクエスト制御部５３は、仮想マシンモニタ３から受け取った情報と、ＭＡＣアドレステーブル５５及びＩ／Ｏデバイス設定内容保持テーブル５６を参照して得たＭＡＣアドレス及びアクセス先のアドレス値を用いて、ＴＬＰパケットをペイロードとしたイーサネットフレームを構築する（ステップＳ５４ｂ）。
【０１５０】
リクエスト制御部５３は、構築したイーサネットフレームをＩ／Ｏデバイス８宛にネットワーク７を介して送信する（ステップＳ５６ｂ）。
【０１５１】
Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイスマネージャー５からイーサネットフレームを受信すると、イーサネットフレームをデカプセル化してＴＬＰパケットを得る。そして、Ｉ／Ｏ側ネットワークインタフェース６は、取得したＴＬＰパケットをＩ／Ｏデバイス８に渡す。Ｉ／Ｏデバイス８は、Ｉ／Ｏ側ネットワークインタフェース６からＴＬＰパケットを受信すると、リクエストを処理する（ステップＳ８０ｂ）。
【０１５２】
Ｉ／Ｏデバイス８は、リクエストの処理が完了すると、コンプリーションパケット（メモリリードリクエスト、Ｉ／Ｏリード／ライトリクエストの場合）のＴＬＰパケットを生成し、ＴＬＰパケットをＩ／Ｏデバイスマネージャー５宛で送信する（ステップＳ８２ｂ）。このＴＬＰパケットは、Ｉ／Ｏ側ネットワークインタフェース６によってイーサネットフレームにカプセル化される。
【０１５３】
リクエスト制御部５３は、Ｉ／Ｏデバイス８からコンプリーションパケットを受信すると、その旨を仮想マシンモニタ３に通知する（ステップＳ５８ｂ）。仮想マシン４で発行されたアクセス要求の基になるリクエストがメモリリードリクエスト又はＩ／Ｏリードリクエストの場合、読み出されたデータがコンプリーションパケットに格納されているため、読み出されたデータも仮想マシンモニタ３に渡される。
【０１５４】
仮想マシンモニタ３は、Ｉ／Ｏデバイス８からコンプリーションを受けた旨の情報をＩ／Ｏデバイスマネージャー５から受けると、その旨を仮想マシン４に通知する（ステップＳ３４ｂ）。仮想マシンモニタ３は、読み出されたデータもＩ／Ｏデバイスマネージャー５から受け取った場合、そのデータを適切なメモリ領域に格納する。適切なメモリ領域とは、例えば、仮想マシン４が読み出し先に指定したメモリ領域（ゲスト物理アドレス）に対応するホスト物理アドレスなどである。
【０１５５】
次に、Ｉ／Ｏデバイス８が仮想マシン４へメモリリード／ライトリクエストを発行した場合の動作を説明する。
【０１５６】
図１２は、本発明の第１の実施形態に係る、Ｉ／Ｏデバイスから仮想マシンへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【０１５７】
一般的には、Ｉ／Ｏデバイス８からのメモリリード／ライトリクエストはＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送にて行われる。しかし、本実施形態では、Ｉ／Ｏデバイス８からのメモリリード／ライトリクエストはＩ／Ｏデバイスマネージャー５でのハンドリングが必要なため、Ｉ／Ｏデバイス８が、ハードウェア２に設けられたメモリ（不図示）に直接アクセスすることはない。
【０１５８】
図１２を参照すると、まず、Ｉ／Ｏデバイス８は、メモリリード／ライトリクエストのＴＬＰパケットを生成する。続いて、そのＩ／Ｏデバイス８に接続されたＩ／Ｏ側ネットワークインタフェース６は、生成されたＴＬＰパケットのイーサネットフレームへのカプセル化を行う（ステップＳ８０ｃ）。カプセル化の際、Ｉ／Ｏ側ネットワークインタフェース６は、事前に取得し、保持していたＮＩＣ２１のＭＡＣアドレスをイーサネットフレームの宛先の情報として使用する。
【０１５９】
Ｉ／Ｏ側ネットワークインタフェース６は、図１２のステップＳ８０ｃで生成したイーサネットフレームを、Ｉ／Ｏデバイスマネージャー５に送信する（ステップＳ８２ｃ）。
【０１６０】
Ｉ／Ｏデバイスマネージャー５に設けられたリクエスト制御部５３は、リクエストの情報を含むイーサネットフレームをＩ／Ｏ側ネットワークインタフェース６から受信すると、イーサネットフレームに含まれるリクエストのデカプセル化を行う（ステップＳ５０ｃ）。それと同時に、リクエスト制御部５３は、イーサネットフレームの送信元を示すＭＡＣアドレスの値を用いて、ＭＡＣアドレス逆引きテーブル５８を参照し、仮想マシン４の識別子を得る（ステップＳ５２ｃ）。
【０１６１】
リクエスト制御部５３は、リクエストに含まれる宛先アドレス、図１２のステップＳ５２ｃで得た仮想マシン４の識別子、及び、読み出すデータサイズ又は書き込むデータサイズなどの情報を、仮想マシンモニタ３に通知する（ステップＳ５４ｃ）。リクエストがメモリライトリクエストの場合には、リクエスト制御部５３は、書き込み対象のデータも仮想マシンモニタ３に通知する。
【０１６２】
仮想マシンモニタ３は、リクエスト制御部５３から受け取った情報を基に、Ｉ／Ｏデバイス８からのリクエストを処理する（ステップＳ３０ｃ）。上述したように、一般的にはＩ／Ｏデバイス８からのメモリリード／ライトリクエストはＤＭＡ転送で行われるため、アクセス先のメモリアドレスをＩ／Ｏデバイス８に事前に通知する必要がある。この、リクエストに含まれる宛先アドレスの情報は、仮想マシン４が指定した物理アドレス（ゲスト物理アドレス）であり、仮想マシンモニタ３が割り当てた仮想的なメモリに対する物理アドレスであるため、実際の物理メモリの位置（ホスト物理アドレス）とは異なる。そのため、仮想マシンモニタ３は、ＩＯＭＭＵ（Ｉ／Ｏ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）を模した機能などで、ゲスト物理アドレスからホスト物理アドレスへのアドレス変換を行い、メモリアクセスを行う。
【０１６３】
このようにして、仮想マシン４に、仮想マシンモニタ３が管理するＢＤＦ番号空間とは異なるＢＤＦ番号空間で管理されたＩ／Ｏデバイス８を割り当て、利用できるようにすることができる。
【０１６４】
次に、仮想マシン４に割り当てたＩ／Ｏデバイス８を、仮想マシン４を起動したまま取り外す場合について説明する。
【０１６５】
まず、仮想マシン４が、対象のＩ／Ｏデバイス８を切り離す処理を仮想マシンモニタ３が検知し、Ｉ／Ｏデバイス割当部３３が、ＢＤＦ番号対応テーブル３６から物理ＢＤＦ番号を得る。
【０１６６】
そして、Ｉ／Ｏデバイス割当部３３が、対象のＩ／Ｏデバイス８のエントリを、仮想マシンの識別子と物理ＢＤＦ番号を用いて、アドレス範囲テーブル３５、ＢＤＦ番号対応テーブル３６及びリソースファイル保持部３８で特定し、特定したエントリを各テーブルから削除する。
【０１６７】
そして、Ｉ／Ｏデバイス割当部３３が、削除対象のＩ／Ｏデバイス８の物理ＢＤＦ番号と仮想マシンの識別子をＩ／Ｏデバイスマネージャー５に通知する。
【０１６８】
Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８の取り外しの通知を仮想マシンモニタ３から受け取る。Ｉ／Ｏデバイス設定部５２は、通知された仮想マシンの識別子と物理ＢＤＦ番号を基に、ＭＡＣアドレステーブル５５を参照し、対象のＩ／Ｏデバイス８が接続されたＩ／Ｏ側ネットワークインタフェース６のＭＡＣアドレスを取得する。そして、Ｉ／Ｏデバイス設定部５２が、ＭＡＣアドレステーブル５５から、対象のエントリを削除する。
【０１６９】
Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス設定内容保持テーブル５６から、仮想マシンの識別子と物理ＢＤＦ番号が一致するエントリを削除する。また、Ｉ／Ｏデバイス設定部５２は、ＭＡＣアドレス逆引きテーブル５８を、ＭＡＣアドレスを用いて参照し、ＭＡＣアドレスが一致するエントリを削除する。
【０１７０】
そして、Ｉ／Ｏデバイス設定部５２は、取り外し対象のＩ／Ｏデバイス８をリセットする旨の指示を含むリセット通知を、Ｉ／Ｏ側ネットワークインタフェース６に出す。また、Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイスリスト５７において、そのＩ／Ｏ側ネットワークインタフェース６とＭＡＣアドレスが一致するデバイスについて、Ｉ／Ｏデバイスリスト５７の割当先仮想マシンＩＤを「未割当」に変更する。
【０１７１】
Ｉ／Ｏ側ネットワークインタフェース６は、Ｉ／Ｏデバイスマネージャー５からＩ／Ｏデバイス８のリセット通知を受けると、Ｉ／Ｏデバイス８をリセットする。
【０１７２】
このようにして、仮想マシン４を稼働させつつ、Ｉ／Ｏデバイス８を取り外すことが可能となる。
【０１７３】
既に稼働中の仮想マシン４にＩ／Ｏデバイス８を追加する場合、図１０に示した手順の各ステップを実行することで、Ｉ／Ｏデバイス８を仮想マシン４に追加することができる。ただし、図１０に示した手順のうち、ステップＳ３２ａの処理内容を変更する必要がある。具体的には、ステップＳ３２ａの処理は、「仮想マシンの起動」ではなく、「Ｉ／Ｏデバイス８が追加されたことの通知」となる。このとき、仮想マシンモニタ３は、追加するＩ／Ｏデバイス８に割り当てられるＢＤＦ番号、ＢＡＲに設定するＩ／Ｏ空間及びメモリ空間が、同一の仮想マシン４が使用する他のＩ／Ｏデバイス８と同じにならないように設定する。つまり、仮想マシンモニタ３は、同一の仮想マシン４が使用する複数のＩ／Ｏデバイス間でＢＤＦ番号、ＢＡＲに設定するＩ／Ｏ空間及びメモリ空間が重ならないようにしている。
【０１７４】
このようにして、仮想マシン４を稼働させつつ、Ｉ／Ｏデバイス８を追加することが可能となる。
【０１７５】
次に、本実施形態の効果について説明する。
【０１７６】
本実施形態では、仮想マシン４に割り当てられたＩ／Ｏデバイス８が、仮想マシン４ごとに独立のＢＤＦ番号空間で管理される。この仮想マシン４ごとに独立したＢＤＦ番号空間と、仮想マシン４が使用するＢＤＦ番号との変換を仮想マシンモニタ３が行うことによって、仮想マシン４がＩ／Ｏデバイス８を利用することができる。これによって、１つ１つの仮想マシン４に、ＢＤＦ番号空間がサポートする最大数のＩ／Ｏデバイス８を提供することが可能になり、１台のサーバに多数の仮想マシン４が稼働している場合でも、Ｉ／Ｏデバイス８を必要な数だけ接続することが可能となる。
【０１７７】
［第２の実施形態］
次に、本発明の第２の実施形態について、図面を参照して詳細に説明する。なお、本発明の第１の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
【０１７８】
図１３は、本発明の第２の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図１３を参照すると、本実施形態の仮想マシンモニタ３は、図２に示した構成と比べると、ＢＤＦ番号対応テーブル３６及びリソースファイル保持部３８を有していないが、その代わりにＢＤＦ番号テーブル３６ｄ及びＩ／Ｏデバイス割当リスト３９を有する。
【０１７９】
ＢＤＦ番号テーブル３６ｄについて説明する。
【０１８０】
ＢＤＦ番号テーブル３６ｄは、仮想マシン４ごとに備えられ、仮想マシンに割り当てられたＩ／Ｏデバイス８のＢＤＦ番号を格納するテーブルである。
【０１８１】
図１４は、本発明の第２の実施形態に係るＢＤＦ番号テーブルの構成例を示したものである。図１４を参照すると、ＢＤＦ番号テーブル３６ｄは、ＢＤＦ番号をエントリとして登録する構成になっている。このＢＤＦ番号は、仮想マシン４が割り当てたＢＤＦ番号である。
【０１８２】
Ｉ／Ｏデバイス割当リスト３９について説明する。
【０１８３】
Ｉ／Ｏデバイス割当リスト３９は、これから起動する仮想マシン４に割り当てるＩ／Ｏデバイス８のベンダーＩＤとクラスコードを、仮想マシン４に認識させる順番に記載したリストである。
【０１８４】
図１５は、本発明の第２の実施形態に係るＩ／Ｏデバイス割当リストの構成例を示したものである。図１５を参照すると、Ｉ／Ｏデバイス割当リスト３９は、ベンダーＩＤとクラスコードの組から構成された情報のリストである。
【０１８５】
図１６は、本発明の第２の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。図１６を参照すると、本実施形態のＩ／Ｏデバイスマネージャー５は、図５に示した構成と比べると、Ｉ／Ｏデバイス設定内容保持テーブル５６を有していないが、その代わりにＩ／Ｏデバイス設定リスト５９を有している。
【０１８６】
Ｉ／Ｏデバイス設定リスト５９について説明する。
【０１８７】
Ｉ／Ｏデバイス設定リスト５９は、仮想マシンモニタ３から、Ｉ／Ｏデバイスの利用可否の問い合わせがあった際に、Ｉ／Ｏデバイスリスト５７に登録されているＩ／Ｏデバイス８から選択されたＩ／Ｏデバイス８のクラスコードとベンダーＩＤの組が登録されるリストである。
【０１８８】
次に、本実施形態のコンピュータシステムの動作を説明する。
【０１８９】
はじめに、仮想マシン４を起動する際の、Ｉ／Ｏデバイス８の初期設定の方法を説明する。
【０１９０】
図１７は、本発明の第２の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、Ｉ／Ｏデバイスマネージャー、Ｉ／Ｏデバイスの動作を示したシーケンス図である。
【０１９１】
図１７と図１０を比較すると、本実施形態では、Ｉ／Ｏデバイスマネージャー５が、仮想マシン４の起動前にＩ／Ｏデバイス８の設定・保存を行わない点が異なる（図１０のステップＳ５２ａ、ステップＳ８０ａ、ステップＳ５３ａ）。本実施形態では、Ｉ／Ｏデバイス８の設定が、仮想マシン４が起動時に行うＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定に合わせて行われる。
【０１９２】
図１７を参照すると、まず、仮想マシンモニタ３に設けられたＩ／Ｏデバイス割当部３３が、Ｉ／Ｏデバイスマネージャー５に、Ｉ／Ｏデバイス利用可否を問い合わせる（ステップＳ３０ｄ）。Ｉ／Ｏデバイス割当部３３は、複数のＩ／Ｏデバイスの利用可否を問い合わせる場合、Ｉ／Ｏデバイス８を仮想マシン４に認識させたい順番にソートしてＩ／Ｏデバイスマネージャー５に問い合わせる。
【０１９３】
Ｉ／Ｏデバイスマネージャー５に設けられたＩ／Ｏデバイス設定部５２は、仮想マシンモニタ３からのＩ／Ｏデバイス利用可否の問い合わせに対して、問い合わせに含まれる条件に該当するＩ／Ｏデバイス８があるか、Ｉ／Ｏデバイスリスト５７で検索する（ステップＳ５０ｄ）。
【０１９４】
Ｉ／Ｏデバイス設定部５２は、検索の結果、得られたＩ／Ｏデバイス８のベンダーＩＤとクラスコードを、仮想マシンモニタ３に通知する（ステップＳ５４ｄ）。ベンダーＩＤ及びクラスコードは、Ｉ／Ｏデバイスリスト５７にベンダーＩＤとクラスコードを登録するための拡張をした上で、事前にＩ／Ｏデバイスリスト５７に登録しておいてもよい。また、ベンダーＩＤ及びクラスコードは、仮想マシンモニタ３から問い合わせが来るたびに、検出されたＩ／Ｏデバイス８のベンダーＩＤとクラスコードをＩ／Ｏデバイス設定部５２が読み出してもよい（図１７は前者の場合を示したものである）。後者の場合、Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイスリスト５７から、該当するＭＡＣアドレスを取得し、ベンダーＩＤとクラスコードをそれぞれ読み出すＴＬＰパケット（コンフィギュレーションリードリクエスト）をペイロードとするイーサネットフレームを構築し、Ｉ／Ｏデバイス８へ送信する。Ｉ／Ｏデバイス設定部５２は、Ｉ／Ｏデバイス８からのコンプリーションのペイロード部から、ベンダーＩＤとクラスコードの値を得ることができる。複数のＩ／Ｏデバイス８に対して問い合わせが行われた場合、仮想マシンモニタ３への通知に含まれるベンダーＩＤとクラスコードは、仮想マシンモニタ３からの問い合わせに記載されたＩ／Ｏデバイスの順にソートされている。
【０１９５】
また、Ｉ／Ｏデバイス設定部５２は、仮想マシンモニタ３から問い合わせのあったデバイス数が、複数のバスに収容しなければならない数（＝３２以上）であった場合などに、仮想的なＰＣＩ−ＰＣＩ  ＢｒｉｄｇｅのベンダーＩＤとクラスコードを、バス番号を変更するタイミングで、仮想マシンモニタ３への通知に挿入する。バス番号を変更するタイミングとは、例えば、要求Ｉ／Ｏデバイス数が３２以上の場合に、３１個目ごとに、ＰＣＩ−ＰＣＩ  ＢｒｉｄｇｅのベンダーＩＤとクラスコードを挿入することが、例として挙げられる。また、通知の最初にＰＣＩ−ＰＣＩ  ＢｒｉｄｇｅのベンダーＩＤとクラスコードを挿入することで、仮想マシンモニタ３は、仮想マシン４にＩ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８を割り当てる際に、最初にＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅを認識させるため、それまでに仮想マシン４が認識したＩ／Ｏデバイスとは異なるバス番号から、Ｉ／Ｏデバイス８の初期設定処理が行われるようにすることができる。
【０１９６】
なお、この仮想的なＰＣＩ−ＰＣＩ  ＢｒｉｄｇｅのベンダーＩＤとクラスコードを、Ｉ／Ｏデバイス設定部５２から仮想マシンモニタ３への通知に挿入せずに、Ｉ／Ｏデバイス割当部３３が、Ｉ／Ｏデバイスマネージャー５から通知を受け取った後に、挿入することも可能である。この場合、仮想マシンモニタ３は、仮想マシンに何個の仮想的なデバイスを割り当てるかが、仮想マシン４の構成情報などから分かっているため、ＰＣＩ−ＰＣＩ  ＢｒｉｄｇｅのベンダーＩＤとクラスコードを、リストの適切な位置に挿入することができる。
【０１９７】
Ｉ／Ｏデバイス設定部５２は、仮想マシンモニタ３への通知を、挿入した仮想的なＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの情報を除いて、Ｉ／Ｏデバイス設定リスト５９に保持する。
【０１９８】
Ｉ／Ｏデバイス割当部３３は、Ｉ／Ｏデバイスマネージャー５から、仮想マシン４に割り当てるＩ／Ｏデバイス８のベンダーＩＤとクラスコードのリストを受け取ると、Ｉ／Ｏデバイス割当リスト３９に格納する（ステップＳ３１ｄ）。
【０１９９】
Ｉ／Ｏデバイス割当部３３は、仮想マシン４を起動する（ステップＳ３２ｄ）。
【０２００】
仮想マシン４が、ＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定を行う（ステップＳ４０ｄ）。
【０２０１】
仮想マシンモニタ３が、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８以外の全てのデバイスを割り当て終わった段階などで、リクエスト発行先決定部３２が、Ｉ／Ｏデバイス割当リスト３９に登録されているＩ／Ｏデバイス８の割り当て処理を行う（ステップＳ３６ｄ〜ステップＳ５８ｄ）。ステップＳ３６ｄからステップＳ５８ｄまでの手順を詳しく説明する。
【０２０２】
仮想マシンモニタ３は、仮想マシン４からのＩ／Ｏデバイス８への初期設定のためのアクセスをトラップすると、リクエスト発行先決定部３２が、トラップした際に取得した仮想マシン４の識別子とＢＤＦ番号を用いて、ＢＤＦ番号テーブル３６ｄを参照し、そのＢＤＦ番号を持つＩ／Ｏデバイスが、Ｉ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８か否かを判断する。そのＢＤＦ番号がＢＤＦ番号テーブル３６ｄに登録されていれば、そのＩ／ＯデバイスはＩ／Ｏデバイスマネージャー５が管理するＩ／Ｏデバイス８であることを意味する。
【０２０３】
次に、リクエスト発行先決定部３２は、Ｉ／Ｏデバイスマネージャー５に対して、ＰＣＩコンフィギュレーションレジスタの設定要求を発行する（ステップＳ３６ｄ）。リクエスト発行先決定部３２は、Ｉ／Ｏデバイスマネージャー５に対して、仮想マシンの識別子、アクセス種別及びアクセス先のＩ／Ｏデバイス８のＢＤＦ番号を通知する。
【０２０４】
また、リクエスト発行先決定部３２は、仮想マシン４からのＩ／Ｏデバイス８へのアクセス先がＢＡＲであり、ＢＡＲに対する読み出し要求があった場合、そのＢＤＦ番号とＢＡＲ番号を、そのＢＡＲへの設定が完了するまで保持する。また、仮想マシン４からのＰＣＩコンフィギュレーションレジスタへの設定要求がＢＡＲに対するもので、ＢＡＲに対する書き込み要求だった場合、リクエスト発行先決定部３２は、その書き込み対象のデータの内容を、ＢＤＦ番号及びＢＡＲ番号とともに組にして保持する。
【０２０５】
次に、Ｉ／Ｏデバイスマネージャー５に設けられたリクエスト制御部５３は、仮想マシンモニタ３からの通知に従って、Ｉ／Ｏデバイス８へコンフィギュレーションリード／ライトリクエストを発行し、Ｉ／Ｏデバイス８の設定を行う（ステップＳ５６ｄ）。リクエスト制御部５３は、仮想マシンの識別子とＢＤＦ番号を用いて、ＭＡＣアドレステーブル５５にアクセスし、リクエスト送信先のＭＡＣアドレスを得る。そして、リクエスト制御部５３は、取得したＭＡＣアドレス、仮想マシンモニタ３からの通知に含まれるアクセス種別、及びアクセス先のＩ／Ｏデバイス８のＢＤＦ番号から、ＴＬＰパケットをペイロードとするイーサネットフレームを構築する。そして、リクエスト制御部５３は、構築したイーサネットフレームをＩ／Ｏデバイス８へ送信する。
【０２０６】
Ｉ／Ｏデバイス８は、Ｉ／Ｏ側ネットワークインタフェース６によってデカプセル化されたＴＬＰパケット（コンフィギュレーションリード／ライト）をＩ／Ｏ側ネットワークインタフェース６を介して受け取る。そして、Ｉ／Ｏデバイス８は、ＴＬＰパケットに基づいてリクエストを処理し、コンプリーションのＴＬＰパケットをＩ／Ｏデバイスマネージャー５に送信する（ステップＳ８２ｄ）。コンプリーションＴＬＰパケットは、Ｉ／Ｏ側ネットワークインタフェース６でイーサネットフレームにカプセル化された後、Ｉ／Ｏデバイスマネージャー５に送信される。
【０２０７】
Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８からコンプリーションを受け取ると、その通知を仮想マシンモニタ３に通知する（ステップＳ５８ｄ）。仮想マシンモニタ３からの要求がＰＣＩコンフィギュレーションレジスタへの読み出し要求だった場合、その読み出し結果がコンプリーションＴＬＰパケットのペイロード部に含まれているため、Ｉ／Ｏデバイスマネージャー５は、その読み出し結果も仮想マシンモニタ３へ通知する。
【０２０８】
リクエスト発行先決定部３２は、仮想マシン４からのＰＣＩコンフィギュレーションレジスタへの設定要求がＢＡＲに対するもので、ＢＡＲに対する読み出し要求だった場合、その読み出したデータ（ＢＡＲが要求する空間のサイズ、空間の種別、など）を図１７のステップＳ３６ｄで保持していたＢＡＲ番号及びＢＤＦ番号とともに組にして保持する。
仮想マシン４からのＰＣＩコンフィギュレーションレジスタへの設定要求がＢＡＲに対するもので、ＢＡＲに対する書き込み要求だった場合（ＢＡＲのベースアドレスの設定）、コンプリーションの通知がなされた時点で、ＢＡＲへの設定が完了している。そのため、リクエスト発行先決定部３２は、開始アドレス（ＢＡＲに書き込んだ値）、終了アドレス（ＢＡＲに書き込んだ値にＢＡＲから読み出した値を加算した値）、ＢＤＦ番号及びＢＡＲ番号を、アドレス範囲テーブル３５に登録する（ステップＳ３７ｄ）。
【０２０９】
そして、リクエスト発行先決定部３２は、仮想マシン４へＰＣＩコンフィギュレーションレジスタへのリクエストが完了した旨を通知する（ステップＳ３８ｄ）。
【０２１０】
次に、仮想マシン４がＩ／Ｏデバイス８にメモリリード／ライトリクエストを発行する場合の動作を説明する。
【０２１１】
図１８は、本発明の第２の実施形態に係る、仮想マシンからＩ／Ｏデバイスへメモリリード／ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
【０２１２】
仮想マシン４がＩ／Ｏデバイス８へアクセス要求を発行すると（ステップＳ４０ｅ）、仮想マシンモニタ３に設けられたリクエスト発行先決定部３２は、仮想マシンの識別子及びアクセス要求の種別に応じて、アドレス値でアドレス範囲テーブル３５を参照（又はＢＤＦ番号でＢＤＦ番号テーブルを参照）し、エントリがテーブルに存在するかどうかを確認する（ステップＳ３０ｅ）。エントリが存在すれば、リクエスト発行先決定部３２は、そのアクセス要求がＩ／Ｏデバイス８へのアクセスであると判定する。
【０２１３】
リクエスト発行先決定部３２は、仮想マシンの識別子、アクセス種別、ＢＤＦ番号（又はアドレス値）及びアクセスするデータのサイズを、Ｉ／Ｏデバイスマネージャー５に通知する（ステップＳ３２ｅ）。
【０２１４】
Ｉ／Ｏデバイスマネージャー５に設けられたリクエスト制御部５３は、ＭＡＣアドレステーブル５５を参照し、仮想マシンの識別子及びＢＤＦ番号を用いてＭＡＣアドレスを取得する（ステップＳ５０ｅ）。
【０２１５】
リクエスト制御部５３は、図１８のステップＳ５０ｅで取得したＭＡＣアドレスと、仮想マシンモニタ３から通知された情報を用いて、ＴＬＰパケットをペイロードとするイーサネットフレームを生成する（ステップＳ５４ｅ）。
【０２１６】
リクエスト制御部５３は、図１８のステップＳ５４ｅで生成したイーサネットフレームを、Ｉ／Ｏデバイス８に送信する（ステップＳ５６ｅ）。
【０２１７】
Ｉ／Ｏデバイス８が、Ｉ／Ｏ側ネットワークインタフェース６によってデカプセル化されたＴＬＰパケットをＩ／Ｏ側ネットワークインタフェース６から受け取ると、ＴＬＰパケットに基づいてリクエストを処理する（ステップＳ８０ｅ）。
【０２１８】
リクエストがコンプリーションＴＬＰパケットを必要とするものであった場合、Ｉ／Ｏデバイス８は、コンプリーションＴＬＰパケットをＩ／Ｏデバイスマネージャー５に送信する（ステップＳ８２ｅ）。このＴＬＰパケットは、Ｉ／Ｏ側ネットワークインタフェース６でイーサネットフレームにカプセル化される。
【０２１９】
Ｉ／Ｏデバイスマネージャー５は、Ｉ／Ｏデバイス８からコンプリーションの通知を受けると、仮想マシン４の識別子とともに、コンプリーションの通知を受信した旨を仮想マシンモニタ３に通知する（ステップＳ５８ｅ）。仮想マシン４の識別子は、受信した通知（コンプリーションＴＬＰパケットをペイロードとしたイーサネットフレーム）のソースＭＡＣアドレスを用いて、ＭＡＣアドレス逆引きテーブル５８を参照することで得られる。
【０２２０】
仮想マシンモニタ３は、Ｉ／Ｏデバイスマネージャー５からコンプリーションの通知を受けると、通知に含まれる仮想マシン４の識別子を持つ仮想マシン４に、Ｉ／Ｏデバイス８へのアクセス要求が完了したことを通知する（ステップＳ３４ｅ）。
【０２２１】
なお、Ｉ／Ｏデバイス８から仮想マシン４へのメモリリード／ライトリクエストの処理は、第１の実施形態において図１２を参照して説明した処理と同様であるため、その詳細な説明を省略する。
【０２２２】
次に、本実施形態の効果について説明する。
【０２２３】
本実施形態では、仮想マシン４に割り当てられたＩ／Ｏデバイス８が、仮想マシン４ごとに独立のＢＤＦ番号空間で管理される。この独立のＢＤＦ番号空間の使い方は仮想マシン４が任意に決定できるため、仮想マシンモニタ３で、ＢＤＦ番号の変換や、アドレス値のオフセットの計算を行う必要がなくなる。これにより、１台のサーバに多数の仮想マシン４が稼働している場合でも、仮想マシンモニタ３の構成をシンプルにしつつ、Ｉ／Ｏデバイス８を必要な数だけ接続することが可能となる。
【０２２４】
［第３の実施形態］
次に、本発明の第３の実施形態について、図面を参照して詳細に説明する。なお、本発明の第１、第２の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
【０２２５】
図１９は、本発明の第３の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図１９を参照すると、コンピュータシステム１ａは、図１に示した構成と比べると、複数のＩ／Ｏ側ネットワークインタフェース６のうち、１つのＩ／Ｏ側ネットワークインタフェース６において、Ｉ／Ｏデバイス８の代わりにＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９が接続されている。さらに、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９にＩ／Ｏデバイス８が接続されている。
【０２２６】
ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９は、Ｉ／Ｏ側ネットワークインタフェース６の配下に複数のＩ／Ｏデバイス８を接続する場合に用いられる。ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９にもＩ／Ｏデバイス８と同様にＩ／Ｏデバイスマネージャー５からＢＤＦ番号が割り当てられる。図１９では、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９に接続されたＩ／Ｏデバイス８が２つの場合を示しているが、Ｉ／Ｏデバイス８の数は２つに限定されない。
【０２２７】
先に説明した通り、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９は、ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅ相当の機能を内部に持つ。そのため、図１９で示すコンピュータシステム１ａでは、ＰＣＩ−Ｅｘｐｒｅｓｓファブリック中に実ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅと、仮想マシン４に割り当てるＩ／Ｏデバイス８の個数などに応じて挿入される仮想的なＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅが存在することになる。
【０２２８】
そのため、本実施形態では、Ｉ／Ｏデバイス８を仮想マシン４に割り当てる処理を実行する場合、Ｉ／Ｏデバイスマネージャー５は、仮想マシンモニタ３に設定情報を渡す際（第１の実施形態における図１０のステップＳ５４ａに該当）、設定情報の仮想ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅのエントリに、仮想デバイスであることを示すフラグを付与する。あるいは、Ｉ／Ｏデバイスマネージャー５は、仮想マシンモニタ３にＩ／Ｏデバイスリストを渡す際（第２の実施形態における図１７のステップＳ５４ｄに該当）、Ｉ／Ｏデバイスリストの仮想ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅのエントリに、仮想デバイスであることを示すフラグを付与する。
【０２２９】
仮想マシンモニタ３は、仮想マシン４からの初期設定の信号を受信すると、設定情報又はＩ／Ｏデバイスリストに付与されたフラグを参照し、初期設定の対象が仮想ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅである場合、仮想マシン４からのＩ／Ｏデバイス８の初期設定の際の情報をＩ／Ｏデバイスマネージャー５に通知しない。また、仮想マシンモニタ３は、仮想マシン４からの初期設定の信号を受信すると、設定情報又はＩ／Ｏデバイスリストに付与されたフラグを参照し、初期設定の対象が実ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの場合、仮想マシン４から受け取った情報をＩ／Ｏデバイスマネージャー５に通知する。
【０２３０】
ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９に接続されているＩ／Ｏデバイス８は、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９の初期設定完了後、初期設定が行われる。具体的には、第１の実施形態の場合、Ｉ／Ｏデバイス割当部３３によってＩ／Ｏデバイス８は初期設定される。
第２の実施形態の場合、仮想マシン４によってＩ／Ｏデバイス８は初期設定される。これは、標準的なＰＣＩ−Ｅｘｐｒｅｓｓファブリックの初期設定の際の動作と同様の方法でも実現することができる。
【０２３１】
次に、本実施形態の効果について説明する。
【０２３２】
本実施形態では、異なるバス番号のＩ／Ｏデバイス８を仮想マシン４に認識させるために使用する仮想ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅに、仮想的なデバイスであることを示すフラグを付与する。これにより、仮想ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅと、実ＰＣＩ−ＰＣＩ  Ｂｒｉｄｇｅの識別が可能になり、Ｉ／Ｏ側ネットワークインタフェース６の先に、ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ９が接続され、その先に複数のＩ／Ｏデバイス８が接続されるようなシステムにも対応可能となる。
【０２３３】
［第４の実施形態］
次に、本発明の第４の実施形態について、図面を参照して詳細に説明する。なお、本発明の第１から第３の実施形態と同様の構成要素に対しては同一の符号を付し、詳細な説明を省略する。
【０２３４】
図２０は、本発明の第４の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図２０を参照すると、コンピュータシステム１ｂは、図１に示した構成に、グローバルＩ／Ｏデバイスマネージャー１０が追加された構成になっている。
【０２３５】
グローバルＩ／Ｏデバイスマネージャー１０は、Ｉ／Ｏデバイス８の種別及びスペックと、そのＩ／Ｏデバイス８に接続されたＩ／Ｏ側ネットワークインタフェース６のＭＡＣアドレスと、そのＩ／Ｏデバイス８の割当先の仮想マシンモニタ３の識別子と、そのＩ／Ｏデバイス８の割当先の仮想マシン４の識別子とを管理するためのＩ／Ｏデバイスリストを保持している。グローバルＩ／Ｏデバイスマネージャー１０は、ネットワーク７に接続されているハードウェア２で稼働する全ての仮想マシンモニタ３からの、Ｉ／Ｏデバイス８の割り当て要求に応じて、Ｉ／Ｏデバイス８の検索及び割り当てを行い、その情報をＩ／Ｏデバイスマネージャー５に通知する。Ｉ／Ｏデバイスリストについては、図２２を参照して説明する。
【０２３６】
図２０に示すグローバルＩ／Ｏデバイスマネージャー１０について説明する。
【０２３７】
図２１は、本発明の第４の実施形態に係るグローバルＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。図２１を参照すると、グローバルＩ／Ｏデバイスマネージャー１０は、Ｉ／Ｏデバイス設定部５２と、Ｉ／Ｏデバイスリスト５７とを有する。Ｉ／Ｏデバイス設定部５２は、ネットワーク７を介して、図２０に示した仮想マシンモニタ３及びＩ／Ｏデバイスマネージャー５と接続される。
【０２３８】
図２１に示したＩ／Ｏデバイスリスト５７について説明する。
【０２３９】
図２２は、本発明の第４の実施形態に係るＩ／Ｏデバイスリストの構成例を示したものである。本実施形態のＩ／Ｏデバイスリスト５７は、Ｉ／Ｏデバイス８の種別及びスペックと、そのＩ／Ｏデバイス８に接続されたＩ／Ｏ側ネットワークインタフェース６のＭＡＣアドレスと、そのＩ／Ｏデバイス８の割当先の仮想マシンモニタ３の識別子と、そのＩ／Ｏデバイス８の割当先の仮想マシン４の識別子とを管理する。
【０２４０】
図２０に示したＩ／Ｏデバイスマネージャー５について説明する。
【０２４１】
図２３は、本発明の第４の実施形態に係るＩ／Ｏデバイスマネージャーの一構成例を示すブロック図である。本実施形態のＩ／Ｏデバイスマネージャー５は、第１の実施形態で説明したＩ／Ｏデバイスマネージャー５の構成のうち、Ｉ／Ｏデバイスリスト５７及びＩ／Ｏデバイス設定部５２を除いた構成となっている。
【０２４２】
次に、本実施形態のコンピュータシステムの動作を説明する。
【０２４３】
グローバルＩ／Ｏデバイスマネージャー１０に設けられたＩ／Ｏデバイス設定部５２は、仮想マシンモニタ３からＩ／Ｏデバイス利用可否の問い合わせ（図１０のステップＳ３０ａ、図１７のステップＳ３０ｄ）を受信すると、Ｉ／Ｏデバイスリスト５７を検索する（図１０のステップＳ５０ａ、図１７のステップＳ５０ｄ）。続いて、Ｉ／Ｏデバイス設定部５２は、問い合わせに含まれるスペックの条件を満たすＩ／Ｏデバイス８の情報を、問い合わせ元の仮想マシンモニタ３と同一のハードウェアで稼働するＩ／Ｏデバイスマネージャー５に通知する（図１０のステップＳ５４ａの通知のみ、図１７のステップＳ５４ｄ）。問い合わせには、第１〜第３の実施形態で説明した情報に加え、問い合わせ元の仮想マシンモニタ３の識別子も含まれている。
【０２４４】
Ｉ／Ｏデバイスマネージャー５は、グローバルＩ／Ｏデバイスマネージャー１０からの通知に従って、Ｉ／Ｏデバイスの初期設定（図１０のステップＳ５２ａ〜ステップＳ５３ａ）を行う。また、グローバルＩ／Ｏデバイスマネージャー１０が直接仮想マシンモニタ３に通知することも考えられる。この場合、仮想マシンモニタ３は、グローバルＩ／Ｏデバイスマネージャー１０からの通知に基づいて、Ｉ／Ｏデバイス８の情報を登録する（図１７のステップＳ３１ｄ）。
【０２４５】
次に、本実施形態の効果について説明する。
【０２４６】
本実施形態では、Ｉ／Ｏデバイス８を一元的に管理するグローバルＩ／Ｏデバイスマネージャー１０を備える。これにより、複数のハードウェア２が接続されたネットワーク７においても、Ｉ／Ｏデバイス８を各仮想マシンモニタ３上で稼働する仮想マシン４に割り当てられるようになる。
【０２４７】
本実施形態のコンピュータは、以下のような構成であってもよい。
【０２４８】
（付記１）
コンピュータであって、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを保持する記憶部と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する仮想マシンモニタと、
前記仮想マシンモニタによって特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、該仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するＩ／Ｏデバイスマネージャーと、
を有するコンピュータ。
【０２４９】
（付記２）
付記１に記載のコンピュータにおいて、
前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記Ｉ／Ｏデバイスマネージャーは、前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
前記仮想マシンモニタは、前記Ｉ／Ｏデバイスマネージャーから通知された、前記Ｉ／Ｏデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
【０２５０】
（付記３）
付記２に記載のコンピュータにおいて、
前記記憶部は、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記Ｉ／Ｏデバイスマネージャーによって付与された前記識別子との情報を対応づけて保持する番号対応テーブルをさらに有し、
前記仮想マシンモニタは、前記仮想マシンから前記Ｉ／Ｏデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該Ｉ／Ｏデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定し、特定した前記識別子の情報を含む前記アクセス要求を前記Ｉ／Ｏデバイスマネージャーに通知する、コンピュータ。
【０２５１】
（付記４）
付記１に記載のコンピュータにおいて、
前記記憶部は、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、
前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を前記Ｉ／Ｏデバイスマネージャーに通知し、
前記Ｉ／Ｏデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該Ｉ／Ｏデバイスに対して初期設定を実行する、コンピュータ。
【０２５２】
（付記５）
付記３または４に記載のコンピュータにおいて、
前記記憶部は、前記インタフェースのインタフェース識別子と、該インタフェースに接続されたＩ／Ｏデバイスが割り当てられた前記仮想マシンの識別子とを対応づけて保持するアドレス逆引きテーブルをさらに有し、
前記Ｉ／Ｏデバイスマネージャーは、前記仮想マシンモニタを介して前記Ｉ／Ｏデバイスへのアクセス要求又は設定要求を前記仮想マシンから受け付けると、その要求に含まれる情報を用いて、該Ｉ／Ｏデバイスが属するファブリックの仕様にしたがってパケットを構築し、前記ネットワークの仕様に基づいて該パケットをカプセル化したフレームを該Ｉ／Ｏデバイス宛に前記ネットワーク及び前記インタフェースを介して送信し、
前記Ｉ／Ｏデバイスマネージャーは、前記Ｉ／Ｏデバイスから前記インタフェース及び前記ネットワークを介してフレームを受信すると、前記ネットワークの仕様に基づいて該フレームのパケットをデカプセル化し、デカプセル化後のパケットから送信元を示すインタフェース識別子を読み出し、前記アドレス逆引きテーブルを参照し、該インタフェース識別子に対応して登録されている前記仮想マシンの識別子を読み出し、該識別子で特定される仮想マシン宛にパケットを送信する、コンピュータ。
【０２５３】
（付記６）
付記２または４に記載のコンピュータにおいて、
前記Ｉ／Ｏデバイスマネージャーは、前記Ｉ／Ｏデバイスが属するファブリックの仕様に基づいて、仮想的なデバイスの情報を前記Ｉ／Ｏデバイスリストに挿入する、コンピュータ。
【０２５４】
（付記７）
付記６に記載のコンピュータにおいて、
前記Ｉ／Ｏデバイスマネージャーは、前記仮想的なデバイスの情報を前記Ｉ／Ｏデバイスリストに挿入した場合に、該仮想的なデバイスのエントリに仮想的なデバイスであることを示す情報を付与し、
前記仮想マシンモニタは、前記仮想マシンから初期設定の信号を受け取っても、前記仮想的なデバイスであることを示す情報が付与されたデバイスの情報を通知しない、コンピュータ。
【０２５５】
（付記８）
仮想マシンの動作に必要なＩ／Ｏデバイスを特定する仮想マシンモニタを含み、それぞれ異なる仮想マシンが動作する複数のコンピュータと、
前記複数のコンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを保持する記憶部、及び前記仮想マシンモニタによって特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストで検索し、割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、予め決められた仕様に基づいて該Ｉ／Ｏデバイスに識別子を付与して該仮想マシンモニタの識別子及び該仮想マシンの識別子とともに前記Ｉ／Ｏデバイスリストに登録するデバイス設定部を含むグローバルＩ／Ｏデバイスマネージャーと、
を有するコンピュータシステム。
【０２５６】
本実施形態のデバイス割当管理方法は、以下のような構成であってもよい。
【０２５７】
（付記９）
コンピュータによるデバイス割当管理方法であって、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納し、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定し、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定し、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する、デバイス割当管理方法。
【０２５８】
（付記１０）
付記９に記載のデバイス割当管理方法において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新し、
前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を保持し、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
【０２５９】
（付記１１）
付記１０に記載のデバイス割当管理方法において、
前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記Ｉ／Ｏデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納し、
前記仮想マシンから前記Ｉ／Ｏデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該Ｉ／Ｏデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する、デバイス割当管理方法。
【０２６０】
（付記１２）
付記９に記載のデバイス割当管理方法において、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定し、
前記設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を読み出し、
読み出した前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
特定したインタフェース識別子を持つインタフェースを介して前記Ｉ／Ｏデバイスに対して初期設定を実行する、デバイス割当管理方法。
【０２６１】
本実施形態のプログラムは、以下のような構成であってもよい。
【０２６２】
（付記１３）
コンピュータに、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する手順と、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラム。
【０２６３】
（付記１４）
付記１３に記載のプログラムにおいて、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新する手順と、
前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに有するプログラム。
【０２６４】
（付記１５）
付記１４に記載のプログラムにおいて、
前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記Ｉ／Ｏデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納する手順と、
前記仮想マシンから前記Ｉ／Ｏデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該Ｉ／Ｏデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する手順とをさらに有するプログラム。
【０２６５】
（付記１６）
付記１３に記載のプログラムにおいて、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定する手順と、
前記設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を読み出す手順と、
読み出した前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
特定したインタフェース識別子を持つインタフェースを介して前記Ｉ／Ｏデバイスに対して初期設定を実行する手順とをさらに有するプログラム。
【産業上の利用可能性】
【０２６６】
本発明を、サーバ仮想化技術を利用しているコンピュータシステムにおいて、多数の仮想マシンに対して、Ｉ／Ｏデバイスのハードウェア機能を利用させる用途に適用できる。【０２６７】
この出願は、２０１５年１０月２２日に出願された日本出願特願２０１５−２０８１１４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０２６８】
１、１ａ、１ｂ    コンピュータシステム
２    ハードウェア
３    仮想マシンモニタ（ＶＭＭ）
４    仮想マシン（ＶＭ）
５    Ｉ／Ｏデバイスマネージャー
６    Ｉ／Ｏ側ネットワークインタフェース
７    ネットワーク
８    Ｉ／Ｏデバイス
９    ＰＣＩ−Ｅｘｐｒｅｓｓスイッチ
１０    グローバルＩ／Ｏデバイスマネージャー
２１    ネットワークインタフェースカード（ＮＩＣ）
３１    仮想マシンインタフェース
３２    リクエスト発行先決定部
３３    Ｉ／Ｏデバイス割当部
３４    Ｉ／Ｏデバイスマネージャーインタフェース
３５    アドレス範囲テーブル
３６    ＢＤＦ番号対応テーブル
３６ｄ    ＢＤＦ番号テーブル
３７    ＮＩＣドライバ
３８    リソースファイル保持部
３９    Ｉ／Ｏデバイス割当リスト
５１    仮想マシンモニタインタフェース
５２    Ｉ／Ｏデバイス設定部
５３    リクエスト制御部
５４    ＮＩＣドライバインタフェース
５５    ＭＡＣアドレステーブル
５６    Ｉ／Ｏデバイス設定内容保持テーブル
５７    Ｉ／Ｏデバイスリスト
５８    ＭＡＣアドレス逆引きテーブル
５９    Ｉ／Ｏデバイス設定リスト
【図１】
2017068770.tif 000003
【図２】
2017068770.tif 000004
【図３】
2017068770.tif 000005
【図４】
2017068770.tif 000006
【図５】
2017068770.tif 000007
【図６】
2017068770.tif 000008
【図７】
2017068770.tif 000009
【図８】
2017068770.tif 000010
【図９】
2017068770.tif 000011
【図１０】
2017068770.tif 000012
【図１１】
2017068770.tif 000013
【図１２】
2017068770.tif 000014
【図１３】
2017068770.tif 000015
【図１４】
2017068770.tif 000016
【図１５】
2017068770.tif 000017
【図１６】
2017068770.tif 000018
【図１７】
2017068770.tif 000019
【図１８】
2017068770.tif 000020
【図１９】
2017068770.tif 000021
【図２０】
2017068770.tif 000022
【図２１】
2017068770.tif 000023
【図２２】
2017068770.tif 000024
【図２３】
2017068770.tif 000025
【図２４】
2017068770.tif 000026
【図２５】
2017068770.tif 000027
【図２６】
2017068770.tif 000028
【手続補正書】
【提出日】平成30年4月9日(2018.4.9)
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、計算機のＩ／Ｏファブリックを管理する技術に関する。特に、本発明は、計算機の筐体に収容できない数のＩ／Ｏデバイスをネットワーク越しに接続するコンピュータ、デバイス割当管理方法及びプログラムに関する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
本発明は、上述した問題点に鑑みて創案されたものであって、予め仕様が決められたＰＣＩファブリックに接続するＩ／Ｏデバイスの数を増加させることを可能にしたコンピュータ、デバイス割当管理方法、及びコンピュータに実行させるためのプログラムを提供することを目的とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
さらに、本発明のプログラムは、コンピュータに、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する手順と、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させる。
【手続補正５】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項７
【補正方法】変更
【補正の内容】
【請求項７】
コンピュータに、
前記コンピュータとネットワークを介して接続されたＩ／Ｏデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのＩ／Ｏデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なＩ／Ｏデバイスを特定する手順と、
特定されたＩ／Ｏデバイスが前記仮想マシンに割り当て可能か否かを前記Ｉ／Ｏデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なＩ／Ｏデバイスがあると、該仮想マシンに該Ｉ／Ｏデバイスを割り当て、該Ｉ／Ｏデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラム。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項８
【補正方法】変更
【補正の内容】
【請求項８】
請求項７に記載のプログラムにおいて、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記プログラムは、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
前記仮想マシンに前記Ｉ／Ｏデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該Ｉ／Ｏデバイスの前記識別子を用いて前記Ｉ／Ｏデバイスリスト及び前記アドレステーブルを更新する手順と、
前記仮想マシンの起動前に、該仮想マシンに割り当てたＩ／Ｏデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記Ｉ／Ｏデバイスに対する初期設定の信号をトラップすると、保持した、前記Ｉ／Ｏデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに前記コンピュータに実行させるプログラム。
【手続補正７】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項９
【補正方法】変更
【補正の内容】
【請求項９】
請求項７に記載のプログラムにおいて、
前記Ｉ／Ｏデバイスリストは、前記Ｉ／Ｏデバイスの種別及びスペックと、該Ｉ／Ｏデバイスに接続されたインタフェースの前記インタフェース識別子と、該Ｉ／Ｏデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記Ｉ／Ｏデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記プログラムは、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子、及び該Ｉ／Ｏデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記Ｉ／Ｏデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスであるか否かを判定する手順と、
前記設定要求の対象が前記番号テーブルに登録されたＩ／Ｏデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの前記識別子を読み出す手順と、
読み出した前記仮想マシンの識別子及び前記Ｉ／Ｏデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
特定したインタフェース識別子を持つインタフェースを介して前記Ｉ／Ｏデバイスに対して初期設定を実行する手順とをさらに前記コンピュータに実行させるプログラム。
【国際調査報告】
2017068770.tif 000029
2017068770.tif 000030
2017068770.tif 000031
2017068770.tif 000032