JP6753412B2 - コンピュータ、デバイス割当管理方法及びプログラム - Google Patents

コンピュータ、デバイス割当管理方法及びプログラム Download PDF

Info

Publication number
JP6753412B2
JP6753412B2 JP2017546403A JP2017546403A JP6753412B2 JP 6753412 B2 JP6753412 B2 JP 6753412B2 JP 2017546403 A JP2017546403 A JP 2017546403A JP 2017546403 A JP2017546403 A JP 2017546403A JP 6753412 B2 JP6753412 B2 JP 6753412B2
Authority
JP
Japan
Prior art keywords
virtual machine
identifier
assigned
interface
pci
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017546403A
Other languages
English (en)
Other versions
JPWO2017068770A1 (ja
Inventor
聡 辻
聡 辻
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Publication of JPWO2017068770A1 publication Critical patent/JPWO2017068770A1/ja
Application granted granted Critical
Publication of JP6753412B2 publication Critical patent/JP6753412B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、計算機のI/Oファブリックを管理する技術に関する。特に、本発明は、計算機の筐体に収容できない数のI/Oデバイスをネットワーク越しに接続するコンピュータ、デバイス割当管理方法及びプログラムに関する。
サーバ仮想化技術によって、1台の計算機に複数の独立したOS(Operating System)を仮想マシン(VM:Virtual Machine)として動かし、1台の計算機をあたかも複数の計算機として使用できるようになった。1台のサーバに搭載されるCPU(Central Processing Unit)コア数及びメモリ量の増加により、1台のサーバ上で稼働する仮想マシン数は増加し、場合によっては、1台のサーバ上で100を超す仮想マシンを稼働させることもある。
このようなサーバ仮想化技術では、各仮想マシンに仮想的なハードウェア、すなわち仮想的なCPU、メモリ、ディスク装置、I/Oデバイス、などを提供し、各仮想マシンはあたかも実ハードウェアであるかのように、これらの仮想的なハードウェアを利用する。
そのため、各仮想マシンが仮想的なハードウェアを利用する場合、サーバ仮想化技術の主要な構成要素の1つであるハイパーバイザ、あるいは仮想マシンモニタ(VMM:Virtual Machine Monitor)と呼ばれる管理プログラムが、仮想マシンのハードウェアへのアクセスをトラップし、実ハードウェアのリソースへの適切なアクセスを行う。そのため、仮想マシンが何らかの処理を行う場合、仮想マシンモニタのオーバヘッドが加わるため、一般に実ハードウェア上で稼働するOSよりも、仮想マシンの方が性能が低くなる。
オーバヘッドを回避するために、仮想マシンに実ハードウェアリソースを直接割り当てる技術が提案され、実現されている。その技術の1つがPCI(Peripheral Component Interconnect)パススルーである。PCIパススルーでは、特定の仮想マシンに、PCIバス又はPCI−Expressファブリックに接続されたI/Oデバイスへの直接のアクセスを可能にし、仮想マシンモニタのオーバヘッドを削減できる。以下に、PCIパススルー技術について説明するが、本明細書では、I/OデバイスをPCI−Expressにおけるエンドポイントを指すものとする。
しかし、PCIパススルーでは、対象のI/Oデバイスが特定の仮想マシンに占有されてしまうため、他の仮想マシンからは利用できないという課題がある。そこで、1つのI/Oデバイスを複数の仮想マシンから直接アクセス可能にする技術が提案された。それがSR−IOV(Single Root−I/O Virtualization)である。SR−IOVに対応したI/Oデバイスは、複数のホストインタフェースを備え、各ホストインタフェースを仮想マシンに割り当てることで、複数の仮想マシンから単一のI/Oデバイスの共有を可能にしている。SR−IOVはイーサネット(登録商標)用NIC(Network Interface Controller)に採用される例が多く、NIC以外のI/Oデバイス、例えばディスクコントローラやグラフィックスカードに採用される例はまれである。
PCIパススルー及びSR−IOV(以下では、これらの技術を「パススルー技術」と総称する)のメリットは性能面だけでなく、I/Oデバイスのハードウェアが備える機能を仮想マシンが利用できるようになるという、機能面のメリットも存在する。仮想マシンが通常使用する仮想的なハードウェアは、世代の古いハードウェアを模したものが多く、一般的にシンプルな機能のみを備えている。例えばハイエンドなイーサネット(登録商標)用NICが備えるようなTCP(Transmission Control Protocol)のオフロード機能などは利用できない。PCIパススルー技術では、I/Oデバイスを直接仮想マシンに割り当てるため、仮想マシンはこのようなオフロード機能を利用することができるようになる。
ここで、図24を用いて、PCI−Expressファブリックの初期設定について説明する。図24はPCI−Expressファブリックの一例を示したものである。
図24に示すように、PCI−Expressファブリック200は、PCI−Express Root Complex201をファブリックの根本(Root)として、PCI−Express Root Complex201、PCI−Expressエンドポイント202〜207、及びPCI−Expressスイッチ208〜209がPCI−Expressリンク210〜217を介して接続された構成である。
本明細書では、PCI−Express Root Complex、PCI−Expressエンドポイント、PCI−Expressスイッチを総称してPCI−Expressデバイスと称する。なお、以下に説明する初期設定方法は、一般的なPC(Personal Computer)と、Linux(登録商標)などの汎用OSで行われている方法であるが、これ以外の初期設定方法も可能である。
まず、PCに電源が投入されると、BIOS(Basic Input/Output System)又はOSがPCI−Expressファブリック200内のサーチを行う。このサーチは、PCI−Expressファブリック200内の全てのPCI−Expressデバイスを検出し、設定を行うために行われる。PCI−Expressでは、PCI−ExpressデバイスはBDF(Bus、Device、Function)という3つの番号(バス番号(0〜255)、デバイス番号(0〜31)、ファンクション番号(0〜7))で識別される。なお、ファンクション番号は、同一のPCI−Expressデバイスが複数の機能を備えている場合に、各機能を識別できるようにするために使用される番号である。
ここで、PCI−Express Root Complex201と、PCI−Expressスイッチ208〜209について説明する。
図25は、PCI−Express Root Complex201の内部の構成を簡易的に示したブロック図である。
図25を参照すると、PCI−Express Root Complex201は、PCI Compatible Host Bridge Deviceと、PCI−PCI Bridge(Root PCI−Express Port)と、Root Complex Register Block(ただしOptional)とを有する。
これらの接続のために、PCI−Express Root Complexは、内部でバス番号を1つ消費する。PCI−Express Root Complexは、PCI−Expressファブリックの根本(Root)に位置するデバイスであるため、消費するバス番号は「0」である。
図26は、PCI−Expressスイッチ208〜209の内部の構成を簡易的に示したブロック図である。
図26を参照すると、PCI−Expressスイッチ208〜209は、PCI−PCI Bridge(Upstream PCI−Express Port、上流ポート)と、PCI−PCI Bridge(Downstream PCI−Express Port、下流ポート)とを有する。これらの接続のために、PCI−Expressスイッチ208〜209は、内部でバス番号を1つ消費する。ここで、上流とは、PCI−Expressファブリック上で、PCI−Express Root Complex201側に近づく方向を意味する。下流とは、PCI−Expressファブリック上で、PCI−Express Root Complex201から離れる方向を意味する。図26は、下流ポートが2本の場合を示しているが、下流ポートが3本であってもよい。
PCI−Expressでは、PCI−Expressデバイス間はバス接続ではなく、スイッチによるPoint−to−Point接続であるため、PCI−Express Root Complex201のPCI−to−PCI Bridge、又はPCI−Expressスイッチの208〜209の各PCI−PCI Bridge(Downstream PCI−Express Port)に、1つだけPCI−Expressエンドポイント、又はPCI−Expressスイッチが接続され、各リンクに異なるバス番号が割り当てられる。
サーチの際には、バス番号0からサーチを行っていく。BIOS又はOSなどの初期設定プログラムは、バス番号0の各デバイス番号宛に、PCI−ExpressデバイスのベンダーID(IDentification)を読み出す処理を行う。ベンダーIDは、PCI−ExpressデバイスのPCIコンフィギュレーション空間と呼ばれるレジスタ群に保存されている。この値が0xFFFF(0xは16進数を示すプレフィックス)でなければ、何らかのPCI−Expressデバイスが接続されていることを示す。
次に、何らかのPCI−Expressデバイスが接続されていることを検出すると(図24のPCI−Expressエンドポイント202〜203、PCI−Expressスイッチ208)、初期設定プログラムは、そのPCI−Expressデバイスに対して、クラスコードの読み出しを実行する。クラスコードもPCIコンフィギュレーション空間に保存されている。クラスコードによって、そのPCI−Expressデバイスが映像出力用のデバイスなのか、など、そのデバイスの種別が分かる。クラスコードがPCI−Expressスイッチなど、異なるバス番号のリンク間を接続するデバイスの場合、現在サーチしているバス番号の下流にさらにPCI−Expressデバイスが存在する可能性があることが分かる。
次に、検出したPCI−ExpressデバイスがPCI−Expressエンドポイントの場合(図24のPCI−Expressエンドポイント202〜203)、初期設定プログラムは、そのPCI−Expressエンドポイントに、I/O領域、メモリ領域の割り当てを行う。この割り当ては、PCI−ExpressデバイスのPCIコンフィギュレーション空間が備えるBAR(Base Address Register)の設定を行うことで実現される。
PCI−ExpressエンドポイントのBARは最大で0〜5の6つが備えられており、PCI−Expressエンドポイントが必要とするI/O領域、メモリ領域の情報を保持する。初期設定プログラムは、BAR0に対して、0xFFFFFFFFを書き込み、BAR0の値を読み出す。すると、読み出した値によって、I/O領域とメモリ領域のどちらを要求しているか、どのくらいのサイズの領域を必要としているか、などが判明する。初期設定プログラムは、その要求に従って、BAR0にベースアドレスを書き込む。このベースアドレスから、ベースアドレスにPCI−Expressエンドポイントが要求したサイズを加算した値までが、このPCI−Expressエンドポイントに割り当てられたI/O領域、又はメモリ領域である。BARの設定は、PCI−Expressエンドポイント間で重ならないように設定される。初期設定プログラムは、BAR1〜5に対しても、同様の処理を行う。さらに、初期設定プログラムは、PCIコンフィギュレーション空間のコマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定も行う。
次に、検出したPCI−Expressデバイスが、PCI−Express Root ComplexやPCI−Expressスイッチのようなブリッジデバイスの場合(図24のPCI−Expressスイッチ208)、初期設定プログラムは、まず、PCI−Expressエンドポイントと同様にBARの設定を行う。ブリッジデバイスの場合、BARは最大で0〜1の2つである。
そして、初期設定プログラムは、ブリッジデバイスのPCIコンフィギュレーション空間の、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定を行う。さらに、プライマリバス番号レジスタ、セカンダリバス番号レジスタ、サブオーディネートバス番号レジスタの設定を行う。プライマリバス番号とは、自ブリッジデバイスの上流側に存在するバスの番号を指し、セカンダリバス番号とは、自ブリッジデバイスの下流側に存在するバスの番号を指す。サブオーディネートバス番号とは、自ブリッジデバイスの下流に存在するリンクのうち、最大のバス番号を持つリンクのバス番号を示す。この時点では、全デバイスの検出を完了していないため、サブオーディネート番号は、最大の値である0xFFが設定される。
そして、初期設定プログラムは、メモリベースアドレスレジスタ、I/Oベースアドレスレジスタの設定を行う。メモリベースアドレスレジスタは、セカンダリバス側に割り当てるメモリ空間の開始アドレス、I/Oベースアドレスレジスタは、セカンダリバス側に割り当てるI/O空間の開始アドレスを示す。
続けて、初期設定プログラムは、このデバイスの下流に接続されているPCI−Expressデバイスのサーチを行う。下流側のサーチを再帰的に行い、完了すると、PCI−Expressスイッチ209、208の順で、最終的なサブオーディネートバス番号が決まる。また、メモリリミットアドレス、I/Oリミットアドレスの値も決まり、これらをPCIコンフィギュレーションレジスタの適切な位置に格納する。メモリリミットアドレスは、セカンダリバス側に割り当てるメモリ空間のサイズであり、I/Oリミットアドレスは、セカンダリバス側に割り当てるI/O空間のサイズである。初期設定プログラムは、下流側を再帰的にサーチする際に、各リンクに存在するデバイスに設定したBARの設定値を保持することで、各リンクに割り当てたメモリ空間、I/O空間のサイズを算出することができる。これにより、上流側のブリッジデバイスでのメモリリミットアドレス、I/Oリミットアドレスの値を求める。
このようにして、初期設定プログラムは、PCI−Expressファブリックの設定を完了する。図24に示すPCI−Expressファブリック200では、まず、初期設定プログラムは、PCI−Express Root Complex201の設定を行う。続いて、初期設定プログラムは、PCI−Expressエンドポイント202、PCI−Expressエンドポイント203、PCI−Expressスイッチ208、PCI−Expressエンドポイント204、PCI−Expressスイッチ209、PCI−Expressエンドポイント206、PCI−Expressエンドポイント207、PCI−Expressスイッチ209の順で設定を行っていく。最後のPCI−Expressスイッチ209の設定では、I/Oリミットアドレス、メモリリミットアドレス、サブオーディネート番号を設定する。続いて、初期設定プログラムは、PCI−Expressエンドポイント205、PCI−Expressスイッチ208の順で設定を行っていく。PCI−Expressスイッチ208の設定では、I/Oリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。その後、初期設定プログラムは、PCI−Express Root Complex201について、I/Oリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。
PCI−Expressの場合、PCI−ExpressデバイスのPCIコンフィギュレーション空間に対して初期設定プログラムがアクセスするとき、初期設定プログラムは、コンフィギュレーションリードリクエスト又はコンフィギュレーションライトリクエストを発行する。これらのリクエストでは、宛先のデバイスを識別する情報として、BDF番号が書き込まれている。PCI−Expressデバイス側は、コンフィギュレーションライトリクエストに含まれる宛先BDF番号を、自身のBDF番号として保持する。
このBDF番号は、PCI−Expressデバイス側からメモリリードリクエストやメモリライトリクエストなどのリクエストが発行される際に、送信元のPCI−Expressデバイスを示す情報として、リクエストに書き込まれる。
今後、1台のサーバで稼働する仮想マシン数が漸増し、それぞれの仮想マシンに1つ以上のI/OデバイスをPCIパススルーやSR−IOVで割り当てようとすると、サーバやPCの筐体に必要な数のI/Oデバイスを設けることができなくなると予想される。一般に、2U(筺体の厚みが8.89cm)のサーバであれば、5〜6個のI/Oデバイスを装着できるが、装着できるI/Oデバイスの数は仮想マシンの数に比べるとあまりにも少ない。
上述した状況に対して、PC又はサーバに予め設けられたPCI−Expressスロットの数よりも多い数のI/Oデバイスを接続可能にした技術が開発されている。具体的には、サーバ又はPCの筐体内にのみ存在していたPCI−Expressファブリックを筐体外に延長し、ケーブルとスイッチで、I/Oデバイスが装着されたI/OボックスとPC又はサーバとを接続することで、PCI−Expressスロットの数よりも多い数のI/Oデバイスを接続可能にしている。このような技術に基づく製品が非特許文献1及び非特許文献2に開示されている。
非特許文献1に開示された技術は、PCI−Expressスイッチの上流側の機能を模したI/Oカードと、下流側の機能を模したI/O拡張ボックスと、それらを接続するイーサネット(登録商標)とで、PCI−Expressファブリックを筐体外に延長するものである。非特許文献2に開示された技術は、PCI−Expressの信号を延長するI/Oカードとケーブルで、PCI−Expressファブリックを筐体外に延長するものである。
"ExpEther Products",[online],ExpEther Consortium,[2015年10月13日検索],インターネット<URL:http://www.expether.org/eproduct.html> "MAGMA ExpresBox3200",[online],MAGMA社,[2015年10月13日検索],インターネット<URL:http://magma.com/back−office/wp−content/uploads/2015/03/EB3200−Datasheet.pdf>
以下の分析は、本発明によって与えられたものである。
非特許文献1及び2に開示された技術では、パススルー技術を利用する仮想マシンに必要な数だけのI/Oデバイスを割り当てることができない場合があるという課題が存在する。以下に、その理由を説明する。
I/Oデバイスは、PCI−Expressファブリック内で、BDF番号で識別される。また、異なるバス番号を持つPCI−Expressリンク同士を接続するブリッジデバイスにも、固有のBDF番号が割り振られる。ファンクション番号は、同一のPCI−Expressデバイスが複数の機能(ファンクション)を持つ場合に、機能を区別するための番号である。そのため、I/Oデバイスという単位では、BDF番号のうち、バス番号(B)とデバイス番号(D)で識別される。
BDF番号は、その取りうる値がPCI−Expressの仕様で定められており、バス番号が0〜255の256個、デバイス番号が0〜31の32個である。そのため、1つのPCI−Expressファブリックで最大で256×32=8192個のPCI−Expressデバイスを収容可能である。
しかし、仮に1台のサーバで1000個の仮想マシンを稼働させ、各仮想マシンに10個のI/Oデバイスをパススルー技術で割り当てる場合、I/OデバイスがSR−IOVに対応していなければ、PCI−Expressファブリックに収容可能なデバイス数以上のI/Oデバイスが必要になり、そのようなシステムを構成できないことになる。
非特許文献1及び2に開示された技術は、1台のサーバ又はPCに搭載可能なI/Oデバイス数を増加させる技術であって、PCI−Expressファブリックに接続可能なI/Oデバイス数を増加させる技術ではない。そのため、上記の課題を解決できない。PCI−Expressファブリックに限らず、接続されるI/Oデバイスの数が予め決められた仕様によって制限されるPCIファブリックであれば、同じ課題が起こり得る。
本発明は、上述した問題点に鑑みて創案されたものであって、予め仕様が決められたPCIファブリックに接続するI/Oデバイスの数を増加させることを可能にしたコンピュータ、デバイス割当管理方法、及びコンピュータに実行させるためのプログラムを提供することを目的とする。
上記目的を達成するための本発明のコンピュータは、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
を有する構成である。
また、本発明のデバイス割当管理方法は、コンピュータによるデバイス割当管理方法であって、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納し、
前記仮想マシンの動作に必要なI/Oデバイスを特定し、
特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するものである。
さらに、本発明のプログラムは、コンピュータに、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させ
本発明によれば、PCIファブリックに予め決められた仕様に制限されず、接続可能なI/Oデバイス数を増加させることができる。
本発明の第1の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第1の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。 本発明の第1の実施形態に係るアドレス範囲テーブルの構成例を示したものである。 本発明の第1の実施形態に係るBDF番号対応テーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。 本発明の第1の実施形態に係るMACアドレステーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイス設定内容保持テーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイスリストの構成例を示したものである。 本発明の第1の実施形態に係るMACアドレス逆引きテーブルの構成例を示したものである。 本発明の第1の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/O側ネットワークインタフェース、I/Oデバイスの動作を示したシーケンス図である。 本発明の第1の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第1の実施形態に係る、I/Oデバイスから仮想マシンへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第2の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。 本発明の第2の実施形態に係るBDF番号テーブルの構成例を示したものである。 本発明の第2の実施形態に係るI/Oデバイス割当リストの構成例を示したものである。 本発明の第2の実施形態に係るI/Oデバイスマネージャーの一構成例を示したものである。 本発明の第2の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/Oデバイスの動作を示したシーケンス図である。 本発明の第2の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第3の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第4の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第4の実施形態に係るグローバルI/Oデバイスマネージャーの一構成例を示すブロック図である。 本発明の第4の実施形態に係るI/Oデバイスリストの構成例を示したものである。 本発明の第4の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。 PCI−Expressファブリックの一例を示したものである。 図24に示したPCI−Express Root Complexの内部の構成を簡易的に示したブロック図である。 図24に示したPCI−Expressスイッチの内部の構成を簡易的に示したブロック図である。
本発明の実施形態について図面を参照して説明する。なお、この説明に付記する図面や参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。
[第1の実施形態]
[構成の説明]
図1は、本発明の第1の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図1を参照すると、コンピュータシステム1は、ハードウェア2と、仮想マシンモニタ3と、仮想マシン4と、I/Oデバイスマネージャー5と、I/O側ネットワークインタフェース6と、ネットワーク7と、I/Oデバイス8と、を有する。
本実施形態では、I/Oデバイス8はPCI−Expressエンドポイントであり、ネットワーク7はイーサネット(登録商標)であるとして説明を行うが、このことは本発明を、これらを必須要素とすることに限定することを意図するものではない。
ハードウェア2はコンピュータを構成する基本的な要素(不図示)であるCPU、メモリ、ディスク装置及びネットワークインタフェースカード(NIC)21を含む構成である。図1は、ハードウェア2において、CPUがプログラムを実行することで、仮想マシン4、I/Oデバイスマネージャー5及び仮想マシンモニタ3が仮想的に構成されることを表している。
仮想マシンモニタ3は、仮想マシン4に仮想的なハードウェアを提供し、仮想マシン4が仮想的なハードウェアを使用する際に、ハードウェア2のリソースを割り当てる機能を持つ。サーバ仮想化環境では、仮想マシンモニタ3を、Linux(登録商標)などの汎用OSの上で稼働するソフトウェアとして実現する方法や、コンピュータ上で稼働するOSの機能も併せ持つ専用ソフトウェアとして実現する方法が存在する。前者の例としてはKVM(Kernel−based Virtual Machine)が挙げられ、後者の例としてはXenServerやVMwareが挙げられる。以下では、前者の構成をベースとして説明するが、このことは本発明をそのような構成のサーバ仮想化環境に限定することを意図するものではない。
仮想マシン4は、仮想マシンモニタ3の制御のもとで稼働する仮想計算機環境である。仮想マシンモニタ3から提供される仮想ハードウェア上にOSをインストールすることで、あたかも実計算機環境で稼働するOSのように利用することが可能となる。
仮想マシン4が、仮想計算機環境上の資源を利用する際には、仮想マシンモニタ3による制御が介入する。例えば、仮想マシン4の上で稼働するアプリケーションがメモリにアクセスする場合、まず、仮想マシン4の中で、仮想アドレス(ゲスト仮想アドレス(Guest Virtual Address))と物理アドレス(ゲスト物理アドレス(Guest Physical Address))の変換が行われ、さらに、ゲスト物理アドレスを用いた仮想マシン4のメモリアクセスを仮想マシンモニタ3が検知し、そのゲスト物理アドレスを、仮想マシンモニタの仮想アドレス(ホスト仮想アドレス、Host Virtual Address)、又は物理アドレス(ホスト物理アドレス、Host Physical Address)に変換する。ホスト仮想アドレスに変換した場合は、さらにホスト物理アドレスに変換される。このような変換を経て、仮想マシン4はメモリアクセスを行うことができる。
I/Oデバイスマネージャー5は、I/Oデバイス8を管理するモジュールである。I/Oデバイス8は、I/O側ネットワークインタフェース6、ネットワーク7及びNIC21を介してI/Oデバイスマネージャー5と接続される。
I/Oデバイスマネージャー5は、I/Oデバイス8の初期設定や、I/Oデバイス8とのデータ転送リクエストの制御を行う。
I/Oデバイス8の初期設定とは、I/Oデバイス8が持つBARなどのPCIコンフィギュレーション空間のレジスタへの値の設定を指す。
PCI−Expressの場合、I/Oデバイスマネージャー5とI/Oデバイス8とのデータ転送リクエストは、メモリリード/ライトリクエスト、I/Oリード/ライトリクエスト、メッセージリクエスト、コンプリーションの種別が存在する。これらにはそれぞれ特有のフォーマットがある。メモリリード/ライトリクエストは、メモリリードリクエスト及びメモリライトリクエストを意味する。I/Oリード/ライトリクエストは、I/Oリードリクエスト及びI/Oライトリクエストを意味する。
I/Oデバイスマネージャー5は、リクエストに応じて、それぞれのフォーマットに従ったパケット(TLP(Transaction Layer Protocol)パケット)の生成、TLPパケットのイーサネットフレームでのカプセル化、及びカプセル化したフレームの送信を行う。I/Oデバイスマネージャー5は、I/Oデバイス8から受け取るイーサネットフレームからTLPパケットを取り出し、TLPパケットの内容を仮想マシンモニタ3に通知する。
なお、図1では、I/Oデバイスマネージャー5が仮想マシンモニタ3とは別の構成要素で示されているが、I/Oデバイスマネージャー5が仮想マシンモニタ3に含まれる構成にすることも可能である。
I/O側ネットワークインタフェース6は、I/Oデバイス8をネットワーク7に接続するためのインタフェースである。I/O側ネットワークインタフェース6はI/Oデバイス8ごとに設けられている。本実施形態ではネットワーク7としてイーサネット(登録商標)を前提としているため、I/O側ネットワークインタフェース6は固有のMAC(Media Access Control)アドレスを持つ。
I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5から送信されたイーサネットフレームから、TLPパケットを取り出す機能を有する。また、I/O側ネットワークインタフェース6は、I/Oデバイス8からのTLPパケットをイーサネットフレームでカプセル化してI/Oデバイスマネージャー5に送信する機能を有する。
I/O側ネットワークインタフェース6は、I/Oデバイス8がTLPパケットを送信できるようにするために、NIC21のMACアドレスを保持する機能を有する。さらに、I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5側からの要求に応じて、接続されているI/Oデバイス8をリセット(初期化)することも可能である。
ネットワーク7は、汎用のコンピュータネットワークであり、本実施形態ではイーサネット(登録商標)である。ネットワーク7は、ケーブル及びスイッチで構成されている。
ネットワーク7は、NIC21と、I/O側ネットワークインタフェース6とを接続する。
I/Oデバイス8は、本来であれば、コンピュータの拡張バスに接続されるI/Oデバイスであり、本実施形態ではPCI−Expressエンドポイントに相当する。I/Oデバイス8の例として、NIC、GPU(Graphics Processing Unit)カード、RAID(Redundant Arrays of Independent Disks)コントローラ、サウンドカード、などが挙げられる。
I/Oデバイス8は、I/Oデバイスマネージャー5から初期設定される際に、BDF番号が通知される。I/Oデバイス8は、I/O側ネットワークインタフェース6の識別子とBDF番号からなる組で識別される。
本実施形態では、I/O側ネットワークインタフェース6の識別子とは、MACアドレスである。ネットワーク7がイーサネット(登録商標)以外のネットワークである場合、I/O側ネットワークインタフェース6をそのネットワークに対応したネットワークインタフェースとし、そのネットワークで定められた識別子をI/O側ネットワークインタフェース6の識別子とする。例えば、ネットワーク7がInfiniBandの場合、I/O側ネットワークインタフェース6はInfiniBandプロトコルに対応したネットワークインタフェースとなり、GUID(Globally Unique Identifier)という識別子を持つことになる。
次に、図1に示した仮想マシンモニタ3の構成について説明する。
図2は、本発明の第1の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図2を参照すると、仮想マシンモニタ3は、仮想マシンインタフェース31、リクエスト発行先決定部32、I/Oデバイス割当部33、I/Oデバイスマネージャーインタフェース34、アドレス範囲テーブル35、BDF番号対応テーブル36、NICドライバ37、及びリソースファイル保持部38を有する。
仮想マシンインタフェース31は、仮想マシン4と仮想マシンモニタ3の間のデータのやり取りを行うためのインタフェースである。例えば、仮想マシンインタフェース31は、仮想マシンモニタ3が仮想マシン4を起動する際、仮想マシン4に割り当てるリソースの情報を仮想マシンモニタ3から仮想マシン4に通知するために使用される。また、仮想マシンインタフェース31は、仮想マシン4がI/Oデバイス8を利用する際、仮想マシン4から仮想マシンモニタ3がリクエストを受け取ったりするために使用される。
リクエスト発行先決定部32は、仮想マシン4からI/Oデバイス8を利用する旨のリクエストを受け取ると、リクエストに含まれる情報に基づいて、リクエストの発行先が仮想マシンモニタ3によって管理されるI/Oデバイスか、I/Oデバイスマネージャー5によって管理されるI/Oデバイス8かを判断する。
PCI−Expressにおいては、I/Oデバイスへのアクセスは、BDF番号を用いるか、メモリアドレスを用いて行われる。そのため、リクエスト発行先決定部32は、仮想マシン4からI/Oデバイス8へのリクエスト種別に応じて、BDF番号又はメモリアドレスに基づいて、仮想マシンモニタ3とI/Oデバイスマネージャー5のうち、どちらが管理するI/Oデバイスへのリクエストかを判断する。
I/Oデバイス割当部33は、仮想マシン4に、I/Oデバイスマネージャー5が管理するI/Oデバイス8を割り当てる機能を有する。
一般的に、仮想マシン4にPCIパススルー技術でI/Oデバイスを割り当てる際、仮想マシンモニタ3が、PCIパススルー技術で割り当てるI/Oデバイスの識別子(BDF番号など)を指定する。指定の方法は、コマンドラインのオプションで指定する、GUI(Graphical User Interface)ツール上で操作を行う方法、などがある。I/Oデバイス割当部33も、I/Oデバイスマネージャー5が管理するI/Oデバイス8を仮想マシン4に割り当てる際、何らかの方法で、どの仮想マシン4に、どのような種類・スペックのI/Oデバイス8を割り当てるかという情報を、I/Oデバイス割当部33の外部モジュール(不図示)より受け取る。
I/Oデバイス割当部33は、外部モジュールより指定された種類・スペックのI/Oデバイス8を利用することができるかどうかを、I/Oデバイスマネージャー5に問い合わせる。I/Oデバイス割当部33は、利用可能であることがI/Oデバイスマネージャー5から通知されると、仮想マシン4が起動する際に行うI/Oデバイスのサーチ時に、I/Oデバイスマネージャー5からの通知に含まれるI/Oデバイス8の識別子とリソース情報を用いてI/Oデバイス8の存在を仮想マシン4に通知する。
I/Oデバイスマネージャーインタフェース34は、仮想マシンモニタ3とI/Oデバイスマネージャー5との間でデータのやり取りを行うためのインタフェースである。例えば、I/Oデバイスマネージャーインタフェース34をソケットなどの通信インタフェースで実現することができる。例えば、I/Oデバイスマネージャーインタフェース34は、仮想マシンモニタ3が、仮想マシン4に割り当てるI/Oデバイス8が利用可能かどうかをI/Oデバイスマネージャー5に問い合わせる際に使用される。また、I/Oデバイスマネージャーインタフェース34は、仮想マシン4からのI/OデバイスへのリクエストがI/Oデバイスマネージャー5が管理するI/Oデバイス8宛だった場合に、リクエストを転送するために使用される。
図2に示したアドレス範囲テーブル35について説明する。
アドレス範囲テーブル35は、仮想マシン4に割り当てたI/Oデバイス8のBARに設定した情報を保持するテーブルである。アドレス範囲テーブル35は、仮想マシン4ごとに設けられる。アドレス範囲テーブル35は、仮想マシン4の起動時に、仮想マシン4がI/Oデバイス8のBARを設定する際に送受信されるデータを、仮想マシンモニタ3がトラップすることで、エントリが追加される。
図3は、本発明の第1の実施形態に係るアドレス範囲テーブルの構成例を示したものである。図3を参照すると、アドレス範囲テーブル35は、開始アドレス、終了アドレス、物理BDF番号及びBAR番号の情報が組として構成される。このテーブルにエントリが存在すると、I/Oデバイスマネージャー5が管理するI/Oデバイス8へのアクセスがあったことを意味する。
アドレス範囲テーブル35は、アドレス値を入力とし、そのアドレスが、開始アドレス以上、終了アドレス以下のアドレス範囲に該当する物理BDF番号とBAR番号を出力とする。開始アドレスはBARに設定したアドレスであり、終了アドレスはそのBARを持つI/Oデバイス8が要求したサイズを開始アドレスに加算したアドレスである。物理BDF番号とは、I/Oデバイスマネージャー5が、I/Oデバイス8のBARに設定したBDF番号のことである。これに対し、本明細書では、仮想マシン4が使用するBDF番号を仮想BDF番号と称する。BAR番号は、I/Oデバイス8が複数備えるBARの0〜5の番号を意味する。
図2に示したBDF番号対応テーブル36について説明する。
BDF番号対応テーブル36は、仮想BDF番号と物理BDF番号の対応を保持するテーブルである。BDF番号対応テーブル36は、仮想マシン4ごとに設けられる。
BDF番号対応テーブル36は、仮想マシン4の起動時に、仮想マシン4がI/Oデバイス8のPCIコンフィギュレーションレジスタを設定する際に送信されるデータを、仮想マシンモニタ3がトラップすることで、エントリが追加される。
図4は、本発明の第1の実施形態に係るBDF番号対応テーブルの構成例を示したものである。図4を参照すると、BDF番号対応テーブル36は、仮想BDF番号と物理BDF番号の情報が組として構成される。BDF番号対応テーブル36では、仮想BDF番号を入力とし、物理BDF番号を出力として得る。
図2に示したNICドライバ37及びリソースファイル保持部38について説明する。
NICドライバ37は、NIC21のドライバである。
リソースファイル保持部38は、I/Oデバイスマネージャー5がI/Oデバイス8のPCIコンフィギュレーションレジスタに設定した値を、リソースファイルとして保持する機能を有する。
リソースファイルは、仮想マシン4の識別子とI/Oデバイス8に割り当てた物理BDF番号との組で管理される。リソースファイルのファイルの構成及びファイルフォーマットは、仮想マシンモニタ3のローカルに接続されたI/Oデバイスのリソースファイルのファイル構成及びファイルフォーマットに従ったものとすることが可能である。例えば、仮想マシンモニタ3がLinux(登録商標)ベースのシステムで構築されている場合、/sys/bus/pci/devices/<BDF番号>ディレクトリ以下のファイル構成、ファイルフォーマットに従ったものとすることができる。
次に、図1に示したI/Oデバイスマネージャー5の構成を説明する。
図5は、本発明の第1の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。
図5を参照すると、I/Oデバイスマネージャー5は、仮想マシンモニタインタフェース51と、I/Oデバイス設定部52と、リクエスト制御部53と、NICドライバインタフェース54と、MACアドレステーブル55と、I/Oデバイス設定内容保持テーブル56と、I/Oデバイスリスト57と、MACアドレス逆引きテーブル58と、を有する。
仮想マシンモニタインタフェース51は、仮想マシンモニタ3とI/Oデバイスマネージャー5との間でデータのやり取りを行うためのインタフェースである。例えば、仮想マシンモニタインタフェース51はソケットなどの通信インタフェースで実現することができる。
例えば、仮想マシンモニタインタフェース51は、仮想マシンモニタ3が、仮想マシン4に割り当てるI/Oデバイス8が利用可能かどうかの問い合わせを仮想マシンモニタ3から受信する際に使用される。また、仮想マシンモニタインタフェース51は、仮想マシンモニタ3を介して、仮想マシン4からのI/Oデバイス8宛のリクエストを受信するために使用される。
I/Oデバイス設定部52は、I/Oデバイス8の初期設定を行う機能を有する。I/Oデバイス8の初期設定とは、PCIコンフィギュレーションレジスタへの値の設定や、物理BDF番号の割り当てを意味する。物理BDF番号は、仮想マシン4ごとに独立した番号空間を持たせることができ、仮想マシン4間で同一の物理BDF番号を使用するように設定することが可能である。
I/Oデバイス設定部52は、仮想マシンモニタ3からのI/Oデバイス8が利用可能かどうかの問い合わせに応じて、I/Oデバイスリスト57を検索し、条件にマッチするI/Oデバイス8の初期設定を行う。また、I/Oデバイス設定部52は、初期設定内容を、MACアドレステーブル55、I/Oデバイス設定内容保持テーブル56、及びMACアドレス逆引きテーブル58に反映させる。
リクエスト制御部53は、仮想マシンモニタ3を介して受ける、仮想マシン4からのI/Oデバイス8へのアクセス要求や、I/Oデバイス8からのリクエストを処理する機能を有する。リクエストとは、PCI−Expressで定義されている、I/Oリード/ライトリクエスト、メモリリード/ライトリクエスト、コンフィギュレーションリード/ライトリクエスト、メッセージリクエストである。
リクエスト制御部53は、仮想マシンモニタ3を介して受ける、仮想マシン4からのアクセス要求をもとに、TLPパケットを構築し、そのTLPパケットをペイロードとしたイーサネットフレームを構築する機能を有する。これらのパケット及びフレームのヘッダに設定するデータは、仮想マシンモニタ3を介して受ける、仮想マシン4からのアクセス要求に含まれる情報、及びMACアドレステーブル55とI/Oデバイス設定内容保持テーブル56が保持する情報から得られる。
また、リクエスト制御部53は、I/Oデバイス8を送信元とするTLPパケットをイーサネットフレームでカプセル化したフレームを受信すると、フレームのデカプセル化を行う機能を有する。また、リクエスト制御部53は、取り出したTLPパケットから、アクセス先のメモリアドレスなどの情報を取り出して仮想マシンモニタ3に転送する機能を有する。
NICドライバインタフェース54は、NICドライバ37にイーサネットフレームの送信要求を出すためのインタフェースであり、NICドライバ37からイーサネットフレームを受信するためのインタフェースである。例えば、このインタフェースは、Windows(登録商標)やLinux(登録商標)などの汎用OSが提供するインタフェースである。
MACアドレステーブル55について説明する。
MACアドレステーブル55は、仮想マシンの識別子と、物理BDF番号と、その物理BDF番号を持つI/Oデバイス8が接続されたI/O側ネットワークインタフェース6のMACアドレスとを対応付けた情報を保持するテーブルである。
図6は、本発明の第1の実施形態に係るMACアドレステーブルの構成例を示したものである。MACアドレステーブル55は、仮想マシンの識別子と物理BDF番号を入力とし、MACアドレスを出力する。
I/Oデバイス設定内容保持テーブル56について説明する。
I/Oデバイス設定内容保持テーブル56は、I/Oデバイス8のPCIコンフィギュレーションレジスタに設定した値を保持するテーブルである。I/Oデバイス設定内容保持テーブル56は、仮想マシン4ごとに設けられる。
図7は、本発明の第1の実施形態に係るI/Oデバイス設定内容保持テーブルの構成例を示したものである。I/Oデバイス設定内容保持テーブル56は、物理BDF番号とレジスタ番号を入力とし、入力された物理BDF番号に対応するI/Oデバイス8について、入力されたレジスタ番号のレジスタに対する設定値を出力する。図7では、レジスタ番号をBAR0、BAR1、のように、レジスタ名で記載しているが、レジスタ名で指定するほかに、各レジスタのPCIコンフィギュレーションレジスタ内での番地を使用する方法も考えられる。
図5に示したI/Oデバイスリスト57について説明する。
I/Oデバイスリスト57は、I/Oデバイス8のデバイス種別及びスペックと、そのI/Oデバイス8が接続されているI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシン4の識別子との情報を組にして保持する機能を有する。
図8は、本発明の第1の実施形態に係るI/Oデバイスリストの構成例を示したものである。I/Oデバイスリスト57では、デバイス種別及びスペックを入力とし、MACアドレスと、そのI/Oデバイス8の割り当て状況とを出力として得られる。
デバイス種別とは、I/Oデバイス8の種類、すなわち、NIC、GPU、SSD(Solid State Drive)、ディスクコントローラ、など、I/Oデバイス8の分類を示す情報である。
スペックとは、そのI/Oデバイス8が持つ性能、メモリ容量、ディスク容量、などを示す情報である。例えば、NICであれば転送速度、GPUであればGPUのコアクロック数やメモリ容量、あるいはGPUの世代、SSDであれば、容量やデータの読み書きの性能、などである。何の情報をスペックの欄に記載するかは、コンピュータシステム1の設計者、あるいは運用者が定義する。割当先の仮想マシン4の欄には、そのI/Oデバイス8が既に、いずれかの仮想マシン4に割り当て済みの場合は、仮想マシン4の識別子が、未割り当ての場合は、そのことを示す値が設定される。
図5に示したMACアドレス逆引きテーブル58について説明する。
MACアドレス逆引きテーブル58は、MACアドレスの情報を基に、そのMACアドレスを持つI/O側ネットワークインタフェース6に接続されたI/Oデバイス8を利用する仮想マシン4の識別子の情報を取得するためのテーブルである。
図9は、本発明の第1の実施形態に係るMACアドレス逆引きテーブルの構成例を示したものである。MACアドレス逆引きテーブル58は、MACアドレスを入力とし、仮想マシンの識別子を出力とする。
なお、図2及び図5に示した各種テーブル及びリストはハードウェア2に設けられたメモリ等の記憶部(不図示)で保持され、リソースファイル保持部38は記憶部の一部に相当する。このことは、後述する他の実施形態においても同様であり、その詳細な説明を省略する。
[動作の説明]
次に、図面を参照して、本実施形態のコンピュータシステムの動作を説明する。
はじめに、仮想マシン4を起動する際の、I/Oデバイス8の初期設定の方法を説明する。
図10は、本発明の第1の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/O側ネットワークインタフェース、I/Oデバイスの動作を示したシーケンス図である。
まず、仮想マシンモニタ3に設けられたI/Oデバイス割当部33が、仮想マシン4の動作に必要なI/Oデバイス8の有無を確認するために、仮想マシン4の識別子と、仮想マシン4に割り当てるI/Oデバイス8の種別及びスペックとを、I/Oデバイスマネージャー5に通知する(ステップS30a)。
I/Oデバイスマネージャー5に設けられたI/Oデバイス設定部52は、I/Oデバイスリスト57を参照し、該当するI/Oデバイス8が利用可能かどうかを検索する(ステップS50a)。I/Oデバイス設定部52は、利用可能なデバイスが見つかった場合、I/Oデバイスリスト57を参照し、利用可能なI/Oデバイス8に該当するエントリの、割当先仮想マシン4の識別子の欄に記載されているデフォルト値を、仮想マシンモニタ3から通知された仮想マシン4の識別子に変更する。
I/Oデバイス設定部52は、仮想マシン4に割り当てることのできるI/Oデバイス8が見つかった場合、そのI/Oデバイス8の初期設定を行う(ステップS52a)。
ステップS52aの初期設定の際、I/Oデバイス設定部52は、I/Oデバイス8に割り当てるBDF番号(物理BDF番号)を決定し、仮想マシン4の識別子、物理BDF番号及びMACアドレスの情報を組にしてMACアドレステーブル55に登録する。また、I/Oデバイス設定部52は、MACアドレス及び仮想マシン4の識別子の情報を組にしてMACアドレス逆引きテーブル58に登録する。MACアドレスは、図10のステップS50aにおいて、I/Oデバイス設定部52がI/Oデバイスリスト57にアクセスした際、I/Oデバイス設定部52に読み出される。そして、I/Oデバイス設定部52は、物理BDF番号を使用したコンフィギュレーションリード/ライトリクエストのTLPパケットを構築し、構築したTLPパケットをペイロードとするイーサネットフレームを構築する。
I/Oデバイス設定部52は、I/Oデバイス8のPCIコンフィギュレーションレジスタのうち、ベンダーIDレジスタ及びクラスコードレジスタからの読み出し、BAR、コマンドレジスタ、キャッシュラインサイズレジスタ及びレイテンシタイマレジスタへの値の設定を行う。これら読み書きされた情報は、仮想マシンモニタ3にI/Oデバイスの情報として渡すために、I/Oデバイス設定部52に保持される。例えば、BARに設定される情報には、そのI/Oデバイス8が要求するアドレス空間がI/O空間か、メモリ空間か、を示す情報と、そのI/Oデバイス8が要求する空間のサイズを示す情報とが含まれる。これらの情報は、仮想マシン4が起動時にPCI−Expressファブリックの初期設定を行う際に必要となる。
I/Oデバイス設定部52がI/Oデバイス8に割り当てるBDF番号及びBARに設定する値(メモリ空間の範囲、I/O空間の範囲)は、同一の仮想マシン4に割り当てるI/Oデバイス8間で値が重ならなければ、任意の値を設定可能である。つまり、BDF番号空間、メモリ空間、I/O空間は、仮想マシン4ごとに独立している。これは、I/Oデバイス設定部52がI/Oデバイス8の識別に仮想マシン4の識別子を用いているためである。
I/Oデバイス設定部52は、ステップS52aの初期設定を行った後、NICドライバインタフェース54、NICドライバ37及びNIC21を介して、I/Oデバイス8に対して、コンフィギュレーションライトリクエストのTLPパケットをペイロードとするイーサネットフレーム送信する。
I/O側ネットワークインタフェース6は、イーサネットフレームをI/Oデバイスマネージャー5から受信すると、イーサネットフレームのデカプセル化を行い、TLPパケットを取り出す。I/Oデバイス8は、TLPパケットに従ってリクエスト内容を処理すると、コンプリーションのTLPパケットをI/Oデバイスマネージャー5宛に送信する(ステップS80a)。
このTLPパケットは、I/O側ネットワークインタフェース6においてイーサネットフレームにカプセル化された後、ネットワーク7を介して、I/Oデバイスマネージャー5に転送される。NIC21のMACアドレスは、事前にI/O側ネットワークインタフェース6に設定されていてもよい。また、I/O側ネットワークインタフェース6がI/Oデバイスマネージャー5と認証のための通信を行う際に、通信相手となるNIC21のMACアドレスがI/O側ネットワークインタフェース6に通知されてもよい。
I/Oデバイス設定部52は、I/Oデバイス8へ発行したコンフィギュレーションライトリクエストに対するコンプリーションパケットを受信するたびに、そのレジスタに設定した値を、物理BDF番号及びレジスタ番号とともに、I/Oデバイス設定内容保持テーブル56に登録する(ステップS53a)。
I/Oデバイス設定部52は、I/Oデバイス8に割り当てるBDF番号について、バス番号ごとに1つ、仮想的なPCI−PCI Bridgeの設定情報を生成し、I/Oデバイス設定内容保持テーブル56に登録する。これは、背景技術にて説明したように、PCI−Expressファブリックの初期設定の際には、PCI−Expressスイッチデバイスなどのブリッジデバイスが検出されないと、下流のバスへのサーチが行われないためである。
仮に、仮想的なPCI−PCI Bridgeの設定情報を生成しないとすると、仮想マシン4が起動時にPCI−Expressファブリックの初期設定を行う際、下流のバスのサーチを行わないことになる。その結果、下流のバスのバス番号を付与したI/Oデバイス8が仮想マシン4から認識されなくなってしまう。
PCI−Expressスイッチは、論理的にはPCI−PCI Bridgeの組み合わせであるため、本実施形態では、仮想的なPCI−PCI Bridgeの設定情報を生成する。この設定情報には、BDF番号、ベンダーIDレジスタ、クラスコードレジスタ、BAR、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタ、プライマリバスレジスタ、セカンダリバスレジスタ、サブオーディネートバスレジスタ、メモリベースアドレスレジスタ、I/Oベースアドレスレジスタ、メモリリミットアドレスレジスタ、及びI/Oリミットアドレスレジスタの情報が少なくとも含まれる。
I/Oデバイス設定部52は、I/Oデバイス8へ発行したコンフィギュレーションライトリクエストに対する全てのコンプリーションパケットを受信すると、その設定内容を、仮想マシン4の識別子及び物理BDF番号とともに、仮想マシンモニタ3へ通知する(ステップS54a)。
I/Oデバイス割当部33は、図10のステップS54aで通知された情報のうち、PCIコンフィギュレーションレジスタから読み出された値/書き込まれた値を、リソースファイルとして、リソースファイル保持部38に保存する(ステップS31a)。
仮想マシンモニタ3は、仮想マシン4を起動する(ステップS32a)。
仮想マシン4は、起動する際に(仮想マシン4が認識する仮想的な)PCI−Expressファブリックの初期設定処理を行う(ステップS40a)。これを仮想マシンモニタ3がトラップし、仮想マシンモニタ3に設けられたリクエスト発行先決定部32が、リソースファイル保持部38が保持するI/Oデバイス8の設定情報に基づいて、初期設定処理に応答する。
仮想マシン4は、I/Oデバイスマネージャー5が管理するI/Oデバイス8だけでなく、仮想マシンモニタ3が用意する仮想的なデバイスや、ハードウェア2に設けられたI/OデバイスをPCIパススルーで利用する場合がほとんどである。そのため、例えば、仮想マシンモニタ3は、これらの仮想的なデバイスやハードウェア2に設けられたI/Oデバイスの初期設定が全て完了したことを検知すると、その後に、I/Oデバイスマネージャー5によって管理されるI/Oデバイス8の初期設定を行う。
ここで、仮想マシン4のPCI−Expressファブリックの初期設定処理のトラップの方法について、例を用いて説明する。
仮想マシン4がIntel社のx86アーキテクチャに基づくプロセッサを仮想的なプロセッサとして使用している場合、in/out命令によってPCI−Expressファブリックの初期設定を行う。このin/out命令を仮想マシンモニタ3がトラップする。この命令がトラップされた後、リクエスト発行先決定部32が、仮想マシン4のアクセス先のレジスタ番号を基に、リソースファイル保持部38から関連する情報を取得する。そして、リクエスト発行先決定部32は、ベンダーIDやクラスコードを仮想マシン4に通知する。また、リクエスト発行先決定部32は、レイテンシタイマレジスタなど、I/Oデバイスマネージャー5が既に設定を行ったI/Oデバイス8の設定を、I/Oデバイス8に反映せずに、あたかもI/Oデバイス8の該当するレジスタに設定できたかのようにふるまったり、BARの設定シーケンスをエミュレートしたりする。
リクエスト発行先決定部32は、このレイテンシタイマレジスタ番号の設定などの際に、仮想マシン4がI/Oデバイス8に設定しようとしたBDF番号(仮想BDF番号)を、物理BDF番号とともに、BDF番号対応テーブル36に登録する(ステップS34a)。また、リクエスト発行先決定部32は、BARの設定シーケンスのエミュレートの際に、仮想マシン4がI/Oデバイス8のBARに設定しようとした値を開始アドレスとし、リソースファイルから読み出した、BARが要求するサイズを開始アドレスに加算した値を終了アドレスとする。そして、リクエスト発行先決定部32は、これらの開始アドレス及び終了アドレスを、物理BDF番号及びBAR番号とともに、アドレス範囲テーブル35に登録する(ステップS34a)。
一般に、PCIコンフィギュレーションレジスタの中には、OS又は仮想マシンの起動後に、I/Oデバイス8のドライバが設定するレジスタも存在する。そのようなレジスタへの設定に対しては、仮想マシンモニタ3に設けられたリクエスト発行先決定部32が、リソースファイル保持部38にその設定を反映させるとともに、I/Oデバイスマネージャー5に、I/Oデバイス8へのコンフィギュレーションリード/ライトリクエストの発行依頼を出す(ステップS36a)。コンフィギュレーションリードリクエストの発行が必要かどうかは、設定先のレジスタの設定方法に依存する。コンフィギュレーションリードリクエストの発行が必要な場合、リクエスト発行先決定部32は、仮想マシン4の識別子、対象のI/Oデバイス8の物理BDF番号(BDF番号対応テーブル36より取得)及びアクセス種別を示す情報とともに、その発行依頼を出す。ここで言うアクセス種別とは、コンフィギュレーションリードリクエストか、コンフィギュレーションライトリクエストかという情報である。
リクエスト発行先決定部32は、仮想マシン4からのPCI−Expressデバイスのサーチに対して、I/Oデバイスマネージャー5から渡されたリソースファイルのI/Oデバイス8、又はPCI−PCI Bridgeを、物理BDF番号の順に応答する。
このように、サーチに対して応答することで、PCI−PCI Bridgeの下流に接続されたI/Oデバイス8まで初期設定が行われ得る。
リクエスト発行先決定部32は、仮想マシン4からのコンフィギュレーションリード/ライトリクエストが、PCI−PCI Bridgeへのコンフィギュレーションの場合、I/Oデバイスマネージャー5には、そのリクエストを通知せず、適切な値を仮想マシン4に返す。これは、PCI−PCI Bridgeが仮想的なデバイスであり、実際に設定を行う対象が存在しないためである。
I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3からリクエスト発行依頼を受け取ると、リクエスト発行依頼に基づいてTLPパケットを構築する。そして、リクエスト制御部53は、このTLPパケットをペイロードとするイーサネットフレームを構築し、このイーサネットフレームをI/Oデバイス8に向けて送信する(ステップS56a)。TLPパケット及びイーサネットフレームのヘッダに設定される、MACアドレス及び物理BDF番号などの情報は、仮想マシンモニタ3からのリクエストに含まれる情報、及び、この情報を用いてMACアドレステーブル55を参照した結果から得られる。リクエスト制御部53は、そのイーサネットフレームに対する、設定が正常に行われた旨の応答(コンプリーションTLPパケット)がI/Oデバイス8から返って来るまで、このリクエスト内容を保持する。
I/Oデバイス8は、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケットをI/O側ネットワークインタフェース6から受信すると、そのパケットに記載されている内容に従ってPCIコンフィギュレーションレジスタを設定する。
設定完了後に、I/Oデバイス8は、コンプリーションパケットをI/Oデバイスマネージャー5に向けて送信する(ステップS82a)。
リクエスト制御部53は、I/Oデバイス8から送出されたコンプリーションパケットを受信すると、設定内容を物理BDF番号及びレジスタ番号とともに、I/Oデバイス設定内容保持テーブル56に登録する。そして、リクエスト制御部53は、設定が完了した旨を仮想マシンモニタ3に通知する(ステップS58a)。この通知には、少なくとも仮想マシン4の識別子及び物理BDF番号が含まれ、仮想マシンモニタ3からのリクエストがコンフィギュレーションリードリクエストだった場合には、読み出されたデータも含まれる。仮想マシン4の識別子は、受信したコンプリーションパケットをカプセル化した際に付与されたイーサネットヘッダのソースMACアドレスを用いてMACアドレス逆引きテーブル58を参照することで、得られる。
リクエスト発行先決定部32は、設定を完了した旨の通知をI/Oデバイスマネージャー5から受け取ると、設定が完了した旨又は読み出したデータを受信した旨を仮想マシン4に通知する(ステップS38a)。
次に、仮想マシン4がI/Oデバイス8にメモリリード/ライトリクエストを発行する場合の動作を説明する。
図11は、本発明の第1の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
仮想マシン4が、I/Oデバイス8のメモリ領域へアクセス要求を発行する(ステップS40b)。このアクセス要求は仮想マシンモニタ3にトラップされる。仮想マシンモニタ3は、仮想マシン4の識別子及びアクセス要求の種別(ここでは、メモリアクセス又はI/Oアクセスとする)と、アクセス先の情報(メモリアドレス)を仮想マシン4より得る。
アクセス要求が仮想マシンモニタ3でトラップされることで、仮想マシンモニタ3に設けられたリクエスト発行先決定部32に、仮想マシン4の識別子、アクセス要求の種別及びアクセス先の情報が仮想マシン4から渡される。リクエスト発行先決定部32は、アクセス要求の種別から、そのアクセス要求がメモリアクセスであると判別する。そして、リクエスト発行先決定部32は、仮想マシン4の識別子及びアクセス先の情報(メモリアドレス)を用いてアドレス範囲テーブル35を参照し、物理BDF番号及びBAR番号を得る(ステップS30b)。そして、リクエスト発行先決定部32は、アドレス範囲テーブル35の開始アドレスの値を用いて、アドレスのオフセット値を得る。アドレスオフセット値は、アクセス先の情報(メモリアドレス)から開始アドレスの値を引き算することで得られる。
もし、アクセス種別が、I/Oデバイス8のPCIコンフィギュレーションレジスタへの読み書きであった場合、仮想マシン4からは、仮想マシン4の識別子、アクセス要求の種別(コンフィギュレーション)、アクセス先の情報(仮想BDF番号)及びアクセス先のレジスタ番号が、リクエスト発行先決定部32に通知される。リクエスト発行先決定部32は、仮想マシン4の識別子と仮想BDF番号とを用いてBDF番号対応テーブル36を参照し、物理BDF番号を得る。
リクエスト発行先決定部32は、仮想マシン4の識別子、アクセス種別、物理BDF番号、BAR番号及びアドレスオフセット値をI/Oデバイスマネージャー5に通知する(ステップS32b)。
I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3から受け取った仮想マシン4の識別子と物理BDF番号を用いて、MACアドレステーブル55を参照し、MACアドレスを得る(ステップS50b)。
リクエスト制御部53は、物理BDF番号とBAR番号を用いて、I/Oデバイス設定内容保持テーブル56を参照し、アクセス対象のBARに設定された値を得る(ステップS52b)。リクエスト制御部53は、BARに設定された値にアドレスオフセット値を加えることで、アクセス先のアドレス値を得る。
リクエスト制御部53は、仮想マシンモニタ3から受け取った情報と、MACアドレステーブル55及びI/Oデバイス設定内容保持テーブル56を参照して得たMACアドレス及びアクセス先のアドレス値を用いて、TLPパケットをペイロードとしたイーサネットフレームを構築する(ステップS54b)。
リクエスト制御部53は、構築したイーサネットフレームをI/Oデバイス8宛にネットワーク7を介して送信する(ステップS56b)。
I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5からイーサネットフレームを受信すると、イーサネットフレームをデカプセル化してTLPパケットを得る。そして、I/O側ネットワークインタフェース6は、取得したTLPパケットをI/Oデバイス8に渡す。I/Oデバイス8は、I/O側ネットワークインタフェース6からTLPパケットを受信すると、リクエストを処理する(ステップS80b)。
I/Oデバイス8は、リクエストの処理が完了すると、コンプリーションパケット(メモリリードリクエスト、I/Oリード/ライトリクエストの場合)のTLPパケットを生成し、TLPパケットをI/Oデバイスマネージャー5宛で送信する(ステップS82b)。このTLPパケットは、I/O側ネットワークインタフェース6によってイーサネットフレームにカプセル化される。
リクエスト制御部53は、I/Oデバイス8からコンプリーションパケットを受信すると、その旨を仮想マシンモニタ3に通知する(ステップS58b)。仮想マシン4で発行されたアクセス要求の基になるリクエストがメモリリードリクエスト又はI/Oリードリクエストの場合、読み出されたデータがコンプリーションパケットに格納されているため、読み出されたデータも仮想マシンモニタ3に渡される。
仮想マシンモニタ3は、I/Oデバイス8からコンプリーションを受けた旨の情報をI/Oデバイスマネージャー5から受けると、その旨を仮想マシン4に通知する(ステップS34b)。仮想マシンモニタ3は、読み出されたデータもI/Oデバイスマネージャー5から受け取った場合、そのデータを適切なメモリ領域に格納する。適切なメモリ領域とは、例えば、仮想マシン4が読み出し先に指定したメモリ領域(ゲスト物理アドレス)に対応するホスト物理アドレスなどである。
次に、I/Oデバイス8が仮想マシン4へメモリリード/ライトリクエストを発行した場合の動作を説明する。
図12は、本発明の第1の実施形態に係る、I/Oデバイスから仮想マシンへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
一般的には、I/Oデバイス8からのメモリリード/ライトリクエストはDMA(Direct Memory Access)転送にて行われる。しかし、本実施形態では、I/Oデバイス8からのメモリリード/ライトリクエストはI/Oデバイスマネージャー5でのハンドリングが必要なため、I/Oデバイス8が、ハードウェア2に設けられたメモリ(不図示)に直接アクセスすることはない。
図12を参照すると、まず、I/Oデバイス8は、メモリリード/ライトリクエストのTLPパケットを生成する。続いて、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6は、生成されたTLPパケットのイーサネットフレームへのカプセル化を行う(ステップS80c)。カプセル化の際、I/O側ネットワークインタフェース6は、事前に取得し、保持していたNIC21のMACアドレスをイーサネットフレームの宛先の情報として使用する。
I/O側ネットワークインタフェース6は、図12のステップS80cで生成したイーサネットフレームを、I/Oデバイスマネージャー5に送信する(ステップS82c)。
I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、リクエストの情報を含むイーサネットフレームをI/O側ネットワークインタフェース6から受信すると、イーサネットフレームに含まれるリクエストのデカプセル化を行う(ステップS50c)。それと同時に、リクエスト制御部53は、イーサネットフレームの送信元を示すMACアドレスの値を用いて、MACアドレス逆引きテーブル58を参照し、仮想マシン4の識別子を得る(ステップS52c)。
リクエスト制御部53は、リクエストに含まれる宛先アドレス、図12のステップS52cで得た仮想マシン4の識別子、及び、読み出すデータサイズ又は書き込むデータサイズなどの情報を、仮想マシンモニタ3に通知する(ステップS54c)。リクエストがメモリライトリクエストの場合には、リクエスト制御部53は、書き込み対象のデータも仮想マシンモニタ3に通知する。
仮想マシンモニタ3は、リクエスト制御部53から受け取った情報を基に、I/Oデバイス8からのリクエストを処理する(ステップS30c)。上述したように、一般的にはI/Oデバイス8からのメモリリード/ライトリクエストはDMA転送で行われるため、アクセス先のメモリアドレスをI/Oデバイス8に事前に通知する必要がある。この、リクエストに含まれる宛先アドレスの情報は、仮想マシン4が指定した物理アドレス(ゲスト物理アドレス)であり、仮想マシンモニタ3が割り当てた仮想的なメモリに対する物理アドレスであるため、実際の物理メモリの位置(ホスト物理アドレス)とは異なる。そのため、仮想マシンモニタ3は、IOMMU(I/O Memory Management Unit)を模した機能などで、ゲスト物理アドレスからホスト物理アドレスへのアドレス変換を行い、メモリアクセスを行う。
このようにして、仮想マシン4に、仮想マシンモニタ3が管理するBDF番号空間とは異なるBDF番号空間で管理されたI/Oデバイス8を割り当て、利用できるようにすることができる。
次に、仮想マシン4に割り当てたI/Oデバイス8を、仮想マシン4を起動したまま取り外す場合について説明する。
まず、仮想マシン4が、対象のI/Oデバイス8を切り離す処理を仮想マシンモニタ3が検知し、I/Oデバイス割当部33が、BDF番号対応テーブル36から物理BDF番号を得る。
そして、I/Oデバイス割当部33が、対象のI/Oデバイス8のエントリを、仮想マシンの識別子と物理BDF番号を用いて、アドレス範囲テーブル35、BDF番号対応テーブル36及びリソースファイル保持部38で特定し、特定したエントリを各テーブルから削除する。
そして、I/Oデバイス割当部33が、削除対象のI/Oデバイス8の物理BDF番号と仮想マシンの識別子をI/Oデバイスマネージャー5に通知する。
I/Oデバイスマネージャー5は、I/Oデバイス8の取り外しの通知を仮想マシンモニタ3から受け取る。I/Oデバイス設定部52は、通知された仮想マシンの識別子と物理BDF番号を基に、MACアドレステーブル55を参照し、対象のI/Oデバイス8が接続されたI/O側ネットワークインタフェース6のMACアドレスを取得する。そして、I/Oデバイス設定部52が、MACアドレステーブル55から、対象のエントリを削除する。
I/Oデバイス設定部52は、I/Oデバイス設定内容保持テーブル56から、仮想マシンの識別子と物理BDF番号が一致するエントリを削除する。また、I/Oデバイス設定部52は、MACアドレス逆引きテーブル58を、MACアドレスを用いて参照し、MACアドレスが一致するエントリを削除する。
そして、I/Oデバイス設定部52は、取り外し対象のI/Oデバイス8をリセットする旨の指示を含むリセット通知を、I/O側ネットワークインタフェース6に出す。また、I/Oデバイス設定部52は、I/Oデバイスリスト57において、そのI/O側ネットワークインタフェース6とMACアドレスが一致するデバイスについて、I/Oデバイスリスト57の割当先仮想マシンIDを「未割当」に変更する。
I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5からI/Oデバイス8のリセット通知を受けると、I/Oデバイス8をリセットする。
このようにして、仮想マシン4を稼働させつつ、I/Oデバイス8を取り外すことが可能となる。
既に稼働中の仮想マシン4にI/Oデバイス8を追加する場合、図10に示した手順の各ステップを実行することで、I/Oデバイス8を仮想マシン4に追加することができる。ただし、図10に示した手順のうち、ステップS32aの処理内容を変更する必要がある。具体的には、ステップS32aの処理は、「仮想マシンの起動」ではなく、「I/Oデバイス8が追加されたことの通知」となる。このとき、仮想マシンモニタ3は、追加するI/Oデバイス8に割り当てられるBDF番号、BARに設定するI/O空間及びメモリ空間が、同一の仮想マシン4が使用する他のI/Oデバイス8と同じにならないように設定する。つまり、仮想マシンモニタ3は、同一の仮想マシン4が使用する複数のI/Oデバイス間でBDF番号、BARに設定するI/O空間及びメモリ空間が重ならないようにしている。
このようにして、仮想マシン4を稼働させつつ、I/Oデバイス8を追加することが可能となる。
次に、本実施形態の効果について説明する。
本実施形態では、仮想マシン4に割り当てられたI/Oデバイス8が、仮想マシン4ごとに独立のBDF番号空間で管理される。この仮想マシン4ごとに独立したBDF番号空間と、仮想マシン4が使用するBDF番号との変換を仮想マシンモニタ3が行うことによって、仮想マシン4がI/Oデバイス8を利用することができる。これによって、1つ1つの仮想マシン4に、BDF番号空間がサポートする最大数のI/Oデバイス8を提供することが可能になり、1台のサーバに多数の仮想マシン4が稼働している場合でも、I/Oデバイス8を必要な数だけ接続することが可能となる。
[第2の実施形態]
次に、本発明の第2の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
図13は、本発明の第2の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図13を参照すると、本実施形態の仮想マシンモニタ3は、図2に示した構成と比べると、BDF番号対応テーブル36及びリソースファイル保持部38を有していないが、その代わりにBDF番号テーブル36d及びI/Oデバイス割当リスト39を有する。
BDF番号テーブル36dについて説明する。
BDF番号テーブル36dは、仮想マシン4ごとに備えられ、仮想マシンに割り当てられたI/Oデバイス8のBDF番号を格納するテーブルである。
図14は、本発明の第2の実施形態に係るBDF番号テーブルの構成例を示したものである。図14を参照すると、BDF番号テーブル36dは、BDF番号をエントリとして登録する構成になっている。このBDF番号は、仮想マシン4が割り当てたBDF番号である。
I/Oデバイス割当リスト39について説明する。
I/Oデバイス割当リスト39は、これから起動する仮想マシン4に割り当てるI/Oデバイス8のベンダーIDとクラスコードを、仮想マシン4に認識させる順番に記載したリストである。
図15は、本発明の第2の実施形態に係るI/Oデバイス割当リストの構成例を示したものである。図15を参照すると、I/Oデバイス割当リスト39は、ベンダーIDとクラスコードの組から構成された情報のリストである。
図16は、本発明の第2の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。図16を参照すると、本実施形態のI/Oデバイスマネージャー5は、図5に示した構成と比べると、I/Oデバイス設定内容保持テーブル56を有していないが、その代わりにI/Oデバイス設定リスト59を有している。
I/Oデバイス設定リスト59について説明する。
I/Oデバイス設定リスト59は、仮想マシンモニタ3から、I/Oデバイスの利用可否の問い合わせがあった際に、I/Oデバイスリスト57に登録されているI/Oデバイス8から選択されたI/Oデバイス8のクラスコードとベンダーIDの組が登録されるリストである。
次に、本実施形態のコンピュータシステムの動作を説明する。
はじめに、仮想マシン4を起動する際の、I/Oデバイス8の初期設定の方法を説明する。
図17は、本発明の第2の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/Oデバイスの動作を示したシーケンス図である。
図17と図10を比較すると、本実施形態では、I/Oデバイスマネージャー5が、仮想マシン4の起動前にI/Oデバイス8の設定・保存を行わない点が異なる(図10のステップS52a、ステップS80a、ステップS53a)。本実施形態では、I/Oデバイス8の設定が、仮想マシン4が起動時に行うPCI−Expressファブリックの初期設定に合わせて行われる。
図17を参照すると、まず、仮想マシンモニタ3に設けられたI/Oデバイス割当部33が、I/Oデバイスマネージャー5に、I/Oデバイス利用可否を問い合わせる(ステップS30d)。I/Oデバイス割当部33は、複数のI/Oデバイスの利用可否を問い合わせる場合、I/Oデバイス8を仮想マシン4に認識させたい順番にソートしてI/Oデバイスマネージャー5に問い合わせる。
I/Oデバイスマネージャー5に設けられたI/Oデバイス設定部52は、仮想マシンモニタ3からのI/Oデバイス利用可否の問い合わせに対して、問い合わせに含まれる条件に該当するI/Oデバイス8があるか、I/Oデバイスリスト57で検索する(ステップS50d)。
I/Oデバイス設定部52は、検索の結果、得られたI/Oデバイス8のベンダーIDとクラスコードを、仮想マシンモニタ3に通知する(ステップS54d)。ベンダーID及びクラスコードは、I/Oデバイスリスト57にベンダーIDとクラスコードを登録するための拡張をした上で、事前にI/Oデバイスリスト57に登録しておいてもよい。また、ベンダーID及びクラスコードは、仮想マシンモニタ3から問い合わせが来るたびに、検出されたI/Oデバイス8のベンダーIDとクラスコードをI/Oデバイス設定部52が読み出してもよい(図17は前者の場合を示したものである)。後者の場合、I/Oデバイス設定部52は、I/Oデバイスリスト57から、該当するMACアドレスを取得し、ベンダーIDとクラスコードをそれぞれ読み出すTLPパケット(コンフィギュレーションリードリクエスト)をペイロードとするイーサネットフレームを構築し、I/Oデバイス8へ送信する。I/Oデバイス設定部52は、I/Oデバイス8からのコンプリーションのペイロード部から、ベンダーIDとクラスコードの値を得ることができる。複数のI/Oデバイス8に対して問い合わせが行われた場合、仮想マシンモニタ3への通知に含まれるベンダーIDとクラスコードは、仮想マシンモニタ3からの問い合わせに記載されたI/Oデバイスの順にソートされている。
また、I/Oデバイス設定部52は、仮想マシンモニタ3から問い合わせのあったデバイス数が、複数のバスに収容しなければならない数(=32以上)であった場合などに、仮想的なPCI−PCI BridgeのベンダーIDとクラスコードを、バス番号を変更するタイミングで、仮想マシンモニタ3への通知に挿入する。バス番号を変更するタイミングとは、例えば、要求I/Oデバイス数が32以上の場合に、31個目ごとに、PCI−PCI BridgeのベンダーIDとクラスコードを挿入することが、例として挙げられる。また、通知の最初にPCI−PCI BridgeのベンダーIDとクラスコードを挿入することで、仮想マシンモニタ3は、仮想マシン4にI/Oデバイスマネージャー5が管理するI/Oデバイス8を割り当てる際に、最初にPCI−PCI Bridgeを認識させるため、それまでに仮想マシン4が認識したI/Oデバイスとは異なるバス番号から、I/Oデバイス8の初期設定処理が行われるようにすることができる。
なお、この仮想的なPCI−PCI BridgeのベンダーIDとクラスコードを、I/Oデバイス設定部52から仮想マシンモニタ3への通知に挿入せずに、I/Oデバイス割当部33が、I/Oデバイスマネージャー5から通知を受け取った後に、挿入することも可能である。この場合、仮想マシンモニタ3は、仮想マシンに何個の仮想的なデバイスを割り当てるかが、仮想マシン4の構成情報などから分かっているため、PCI−PCI BridgeのベンダーIDとクラスコードを、リストの適切な位置に挿入することができる。
I/Oデバイス設定部52は、仮想マシンモニタ3への通知を、挿入した仮想的なPCI−PCI Bridgeの情報を除いて、I/Oデバイス設定リスト59に保持する。
I/Oデバイス割当部33は、I/Oデバイスマネージャー5から、仮想マシン4に割り当てるI/Oデバイス8のベンダーIDとクラスコードのリストを受け取ると、I/Oデバイス割当リスト39に格納する(ステップS31d)。
I/Oデバイス割当部33は、仮想マシン4を起動する(ステップS32d)。
仮想マシン4が、PCI−Expressファブリックの初期設定を行う(ステップS40d)。
仮想マシンモニタ3が、I/Oデバイスマネージャー5が管理するI/Oデバイス8以外の全てのデバイスを割り当て終わった段階などで、リクエスト発行先決定部32が、I/Oデバイス割当リスト39に登録されているI/Oデバイス8の割り当て処理を行う(ステップS36d〜ステップS58d)。ステップS36dからステップS58dまでの手順を詳しく説明する。
仮想マシンモニタ3は、仮想マシン4からのI/Oデバイス8への初期設定のためのアクセスをトラップすると、リクエスト発行先決定部32が、トラップした際に取得した仮想マシン4の識別子とBDF番号を用いて、BDF番号テーブル36dを参照し、そのBDF番号を持つI/Oデバイスが、I/Oデバイスマネージャー5が管理するI/Oデバイス8か否かを判断する。そのBDF番号がBDF番号テーブル36dに登録されていれば、そのI/OデバイスはI/Oデバイスマネージャー5が管理するI/Oデバイス8であることを意味する。
次に、リクエスト発行先決定部32は、I/Oデバイスマネージャー5に対して、PCIコンフィギュレーションレジスタの設定要求を発行する(ステップS36d)。リクエスト発行先決定部32は、I/Oデバイスマネージャー5に対して、仮想マシンの識別子、アクセス種別及びアクセス先のI/Oデバイス8のBDF番号を通知する。
また、リクエスト発行先決定部32は、仮想マシン4からのI/Oデバイス8へのアクセス先がBARであり、BARに対する読み出し要求があった場合、そのBDF番号とBAR番号を、そのBARへの設定が完了するまで保持する。また、仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する書き込み要求だった場合、リクエスト発行先決定部32は、その書き込み対象のデータの内容を、BDF番号及びBAR番号とともに組にして保持する。
次に、I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3からの通知に従って、I/Oデバイス8へコンフィギュレーションリード/ライトリクエストを発行し、I/Oデバイス8の設定を行う(ステップS56d)。リクエスト制御部53は、仮想マシンの識別子とBDF番号を用いて、MACアドレステーブル55にアクセスし、リクエスト送信先のMACアドレスを得る。そして、リクエスト制御部53は、取得したMACアドレス、仮想マシンモニタ3からの通知に含まれるアクセス種別、及びアクセス先のI/Oデバイス8のBDF番号から、TLPパケットをペイロードとするイーサネットフレームを構築する。そして、リクエスト制御部53は、構築したイーサネットフレームをI/Oデバイス8へ送信する。
I/Oデバイス8は、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケット(コンフィギュレーションリード/ライト)をI/O側ネットワークインタフェース6を介して受け取る。そして、I/Oデバイス8は、TLPパケットに基づいてリクエストを処理し、コンプリーションのTLPパケットをI/Oデバイスマネージャー5に送信する(ステップS82d)。コンプリーションTLPパケットは、I/O側ネットワークインタフェース6でイーサネットフレームにカプセル化された後、I/Oデバイスマネージャー5に送信される。
I/Oデバイスマネージャー5は、I/Oデバイス8からコンプリーションを受け取ると、その通知を仮想マシンモニタ3に通知する(ステップS58d)。仮想マシンモニタ3からの要求がPCIコンフィギュレーションレジスタへの読み出し要求だった場合、その読み出し結果がコンプリーションTLPパケットのペイロード部に含まれているため、I/Oデバイスマネージャー5は、その読み出し結果も仮想マシンモニタ3へ通知する。
リクエスト発行先決定部32は、仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する読み出し要求だった場合、その読み出したデータ(BARが要求する空間のサイズ、空間の種別、など)を図17のステップS36dで保持していたBAR番号及びBDF番号とともに組にして保持する。
仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する書き込み要求だった場合(BARのベースアドレスの設定)、コンプリーションの通知がなされた時点で、BARへの設定が完了している。そのため、リクエスト発行先決定部32は、開始アドレス(BARに書き込んだ値)、終了アドレス(BARに書き込んだ値にBARから読み出した値を加算した値)、BDF番号及びBAR番号を、アドレス範囲テーブル35に登録する(ステップS37d)。
そして、リクエスト発行先決定部32は、仮想マシン4へPCIコンフィギュレーションレジスタへのリクエストが完了した旨を通知する(ステップS38d)。
次に、仮想マシン4がI/Oデバイス8にメモリリード/ライトリクエストを発行する場合の動作を説明する。
図18は、本発明の第2の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
仮想マシン4がI/Oデバイス8へアクセス要求を発行すると(ステップS40e)、仮想マシンモニタ3に設けられたリクエスト発行先決定部32は、仮想マシンの識別子及びアクセス要求の種別に応じて、アドレス値でアドレス範囲テーブル35を参照(又はBDF番号でBDF番号テーブルを参照)し、エントリがテーブルに存在するかどうかを確認する(ステップS30e)。エントリが存在すれば、リクエスト発行先決定部32は、そのアクセス要求がI/Oデバイス8へのアクセスであると判定する。
リクエスト発行先決定部32は、仮想マシンの識別子、アクセス種別、BDF番号(又はアドレス値)及びアクセスするデータのサイズを、I/Oデバイスマネージャー5に通知する(ステップS32e)。
I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、MACアドレステーブル55を参照し、仮想マシンの識別子及びBDF番号を用いてMACアドレスを取得する(ステップS50e)。
リクエスト制御部53は、図18のステップS50eで取得したMACアドレスと、仮想マシンモニタ3から通知された情報を用いて、TLPパケットをペイロードとするイーサネットフレームを生成する(ステップS54e)。
リクエスト制御部53は、図18のステップS54eで生成したイーサネットフレームを、I/Oデバイス8に送信する(ステップS56e)。
I/Oデバイス8が、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケットをI/O側ネットワークインタフェース6から受け取ると、TLPパケットに基づいてリクエストを処理する(ステップS80e)。
リクエストがコンプリーションTLPパケットを必要とするものであった場合、I/Oデバイス8は、コンプリーションTLPパケットをI/Oデバイスマネージャー5に送信する(ステップS82e)。このTLPパケットは、I/O側ネットワークインタフェース6でイーサネットフレームにカプセル化される。
I/Oデバイスマネージャー5は、I/Oデバイス8からコンプリーションの通知を受けると、仮想マシン4の識別子とともに、コンプリーションの通知を受信した旨を仮想マシンモニタ3に通知する(ステップS58e)。仮想マシン4の識別子は、受信した通知(コンプリーションTLPパケットをペイロードとしたイーサネットフレーム)のソースMACアドレスを用いて、MACアドレス逆引きテーブル58を参照することで得られる。
仮想マシンモニタ3は、I/Oデバイスマネージャー5からコンプリーションの通知を受けると、通知に含まれる仮想マシン4の識別子を持つ仮想マシン4に、I/Oデバイス8へのアクセス要求が完了したことを通知する(ステップS34e)。
なお、I/Oデバイス8から仮想マシン4へのメモリリード/ライトリクエストの処理は、第1の実施形態において図12を参照して説明した処理と同様であるため、その詳細な説明を省略する。
次に、本実施形態の効果について説明する。
本実施形態では、仮想マシン4に割り当てられたI/Oデバイス8が、仮想マシン4ごとに独立のBDF番号空間で管理される。この独立のBDF番号空間の使い方は仮想マシン4が任意に決定できるため、仮想マシンモニタ3で、BDF番号の変換や、アドレス値のオフセットの計算を行う必要がなくなる。これにより、1台のサーバに多数の仮想マシン4が稼働している場合でも、仮想マシンモニタ3の構成をシンプルにしつつ、I/Oデバイス8を必要な数だけ接続することが可能となる。
[第3の実施形態]
次に、本発明の第3の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1、第2の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
図19は、本発明の第3の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図19を参照すると、コンピュータシステム1aは、図1に示した構成と比べると、複数のI/O側ネットワークインタフェース6のうち、1つのI/O側ネットワークインタフェース6において、I/Oデバイス8の代わりにPCI−Expressスイッチ9が接続されている。さらに、PCI−Expressスイッチ9にI/Oデバイス8が接続されている。
PCI−Expressスイッチ9は、I/O側ネットワークインタフェース6の配下に複数のI/Oデバイス8を接続する場合に用いられる。PCI−Expressスイッチ9にもI/Oデバイス8と同様にI/Oデバイスマネージャー5からBDF番号が割り当てられる。図19では、PCI−Expressスイッチ9に接続されたI/Oデバイス8が2つの場合を示しているが、I/Oデバイス8の数は2つに限定されない。
先に説明した通り、PCI−Expressスイッチ9は、PCI−PCI Bridge相当の機能を内部に持つ。そのため、図19で示すコンピュータシステム1aでは、PCI−Expressファブリック中に実PCI−PCI Bridgeと、仮想マシン4に割り当てるI/Oデバイス8の個数などに応じて挿入される仮想的なPCI−PCI Bridgeが存在することになる。
そのため、本実施形態では、I/Oデバイス8を仮想マシン4に割り当てる処理を実行する場合、I/Oデバイスマネージャー5は、仮想マシンモニタ3に設定情報を渡す際(第1の実施形態における図10のステップS54aに該当)、設定情報の仮想PCI−PCI Bridgeのエントリに、仮想デバイスであることを示すフラグを付与する。あるいは、I/Oデバイスマネージャー5は、仮想マシンモニタ3にI/Oデバイスリストを渡す際(第2の実施形態における図17のステップS54dに該当)、I/Oデバイスリストの仮想PCI−PCI Bridgeのエントリに、仮想デバイスであることを示すフラグを付与する。
仮想マシンモニタ3は、仮想マシン4からの初期設定の信号を受信すると、設定情報又はI/Oデバイスリストに付与されたフラグを参照し、初期設定の対象が仮想PCI−PCI Bridgeである場合、仮想マシン4からのI/Oデバイス8の初期設定の際の情報をI/Oデバイスマネージャー5に通知しない。また、仮想マシンモニタ3は、仮想マシン4からの初期設定の信号を受信すると、設定情報又はI/Oデバイスリストに付与されたフラグを参照し、初期設定の対象が実PCI−PCI Bridgeの場合、仮想マシン4から受け取った情報をI/Oデバイスマネージャー5に通知する。
PCI−Expressスイッチ9に接続されているI/Oデバイス8は、PCI−Expressスイッチ9の初期設定完了後、初期設定が行われる。具体的には、第1の実施形態の場合、I/Oデバイス割当部33によってI/Oデバイス8は初期設定される。
第2の実施形態の場合、仮想マシン4によってI/Oデバイス8は初期設定される。これは、標準的なPCI−Expressファブリックの初期設定の際の動作と同様の方法でも実現することができる。
次に、本実施形態の効果について説明する。
本実施形態では、異なるバス番号のI/Oデバイス8を仮想マシン4に認識させるために使用する仮想PCI−PCI Bridgeに、仮想的なデバイスであることを示すフラグを付与する。これにより、仮想PCI−PCI Bridgeと、実PCI−PCI Bridgeの識別が可能になり、I/O側ネットワークインタフェース6の先に、PCI−Expressスイッチ9が接続され、その先に複数のI/Oデバイス8が接続されるようなシステムにも対応可能となる。
[第4の実施形態]
次に、本発明の第4の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1から第3の実施形態と同様の構成要素に対しては同一の符号を付し、詳細な説明を省略する。
図20は、本発明の第4の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図20を参照すると、コンピュータシステム1bは、図1に示した構成に、グローバルI/Oデバイスマネージャー10が追加された構成になっている。
グローバルI/Oデバイスマネージャー10は、I/Oデバイス8の種別及びスペックと、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシンモニタ3の識別子と、そのI/Oデバイス8の割当先の仮想マシン4の識別子とを管理するためのI/Oデバイスリストを保持している。グローバルI/Oデバイスマネージャー10は、ネットワーク7に接続されているハードウェア2で稼働する全ての仮想マシンモニタ3からの、I/Oデバイス8の割り当て要求に応じて、I/Oデバイス8の検索及び割り当てを行い、その情報をI/Oデバイスマネージャー5に通知する。I/Oデバイスリストについては、図22を参照して説明する。
図20に示すグローバルI/Oデバイスマネージャー10について説明する。
図21は、本発明の第4の実施形態に係るグローバルI/Oデバイスマネージャーの一構成例を示すブロック図である。図21を参照すると、グローバルI/Oデバイスマネージャー10は、I/Oデバイス設定部52と、I/Oデバイスリスト57とを有する。I/Oデバイス設定部52は、ネットワーク7を介して、図20に示した仮想マシンモニタ3及びI/Oデバイスマネージャー5と接続される。
図21に示したI/Oデバイスリスト57について説明する。
図22は、本発明の第4の実施形態に係るI/Oデバイスリストの構成例を示したものである。本実施形態のI/Oデバイスリスト57は、I/Oデバイス8の種別及びスペックと、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシンモニタ3の識別子と、そのI/Oデバイス8の割当先の仮想マシン4の識別子とを管理する。
図20に示したI/Oデバイスマネージャー5について説明する。
図23は、本発明の第4の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。本実施形態のI/Oデバイスマネージャー5は、第1の実施形態で説明したI/Oデバイスマネージャー5の構成のうち、I/Oデバイスリスト57及びI/Oデバイス設定部52を除いた構成となっている。
次に、本実施形態のコンピュータシステムの動作を説明する。
グローバルI/Oデバイスマネージャー10に設けられたI/Oデバイス設定部52は、仮想マシンモニタ3からI/Oデバイス利用可否の問い合わせ(図10のステップS30a、図17のステップS30d)を受信すると、I/Oデバイスリスト57を検索する(図10のステップS50a、図17のステップS50d)。続いて、I/Oデバイス設定部52は、問い合わせに含まれるスペックの条件を満たすI/Oデバイス8の情報を、問い合わせ元の仮想マシンモニタ3と同一のハードウェアで稼働するI/Oデバイスマネージャー5に通知する(図10のステップS54aの通知のみ、図17のステップS54d)。問い合わせには、第1〜第3の実施形態で説明した情報に加え、問い合わせ元の仮想マシンモニタ3の識別子も含まれている。
I/Oデバイスマネージャー5は、グローバルI/Oデバイスマネージャー10からの通知に従って、I/Oデバイスの初期設定(図10のステップS52a〜ステップS53a)を行う。また、グローバルI/Oデバイスマネージャー10が直接仮想マシンモニタ3に通知することも考えられる。この場合、仮想マシンモニタ3は、グローバルI/Oデバイスマネージャー10からの通知に基づいて、I/Oデバイス8の情報を登録する(図17のステップS31d)。
次に、本実施形態の効果について説明する。
本実施形態では、I/Oデバイス8を一元的に管理するグローバルI/Oデバイスマネージャー10を備える。これにより、複数のハードウェア2が接続されたネットワーク7においても、I/Oデバイス8を各仮想マシンモニタ3上で稼働する仮想マシン4に割り当てられるようになる。
本実施形態のコンピュータは、以下のような構成であってもよい。
(付記1)
コンピュータであって、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
を有するコンピュータ。
(付記2)
付記1に記載のコンピュータにおいて、
前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記I/Oデバイスマネージャーは、前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
前記仮想マシンモニタは、前記I/Oデバイスマネージャーから通知された、前記I/Oデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
(付記3)
付記2に記載のコンピュータにおいて、
前記記憶部は、前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスマネージャーによって付与された前記識別子との情報を対応づけて保持する番号対応テーブルをさらに有し、
前記仮想マシンモニタは、前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定し、特定した前記識別子の情報を含む前記アクセス要求を前記I/Oデバイスマネージャーに通知する、コンピュータ。
(付記4)
付記1に記載のコンピュータにおいて、
前記記憶部は、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、
前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を前記I/Oデバイスマネージャーに通知し、
前記I/Oデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該I/Oデバイスに対して初期設定を実行する、コンピュータ。
(付記5)
付記3または4に記載のコンピュータにおいて、
前記記憶部は、前記インタフェースのインタフェース識別子と、該インタフェースに接続されたI/Oデバイスが割り当てられた前記仮想マシンの識別子とを対応づけて保持するアドレス逆引きテーブルをさらに有し、
前記I/Oデバイスマネージャーは、前記仮想マシンモニタを介して前記I/Oデバイスへのアクセス要求又は設定要求を前記仮想マシンから受け付けると、その要求に含まれる情報を用いて、該I/Oデバイスが属するファブリックの仕様にしたがってパケットを構築し、前記ネットワークの仕様に基づいて該パケットをカプセル化したフレームを該I/Oデバイス宛に前記ネットワーク及び前記インタフェースを介して送信し、
前記I/Oデバイスマネージャーは、前記I/Oデバイスから前記インタフェース及び前記ネットワークを介してフレームを受信すると、前記ネットワークの仕様に基づいて該フレームのパケットをデカプセル化し、デカプセル化後のパケットから送信元を示すインタフェース識別子を読み出し、前記アドレス逆引きテーブルを参照し、該インタフェース識別子に対応して登録されている前記仮想マシンの識別子を読み出し、該識別子で特定される仮想マシン宛にパケットを送信する、コンピュータ。
(付記6)
付記2または4に記載のコンピュータにおいて、
前記I/Oデバイスマネージャーは、前記I/Oデバイスが属するファブリックの仕様に基づいて、仮想的なデバイスの情報を前記I/Oデバイスリストに挿入する、コンピュータ。
(付記7)
付記6に記載のコンピュータにおいて、
前記I/Oデバイスマネージャーは、前記仮想的なデバイスの情報を前記I/Oデバイスリストに挿入した場合に、該仮想的なデバイスのエントリに仮想的なデバイスであることを示す情報を付与し、
前記仮想マシンモニタは、前記仮想マシンから初期設定の信号を受け取っても、前記仮想的なデバイスであることを示す情報が付与されたデバイスの情報を通知しない、コンピュータ。
(付記8)
仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタを含み、それぞれ異なる仮想マシンが動作する複数のコンピュータと、
前記複数のコンピュータとネットワークを介して接続されたI/Oデバイスについて、前記仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部、及び前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストで検索し、割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、予め決められた仕様に基づいて該I/Oデバイスに識別子を付与して該仮想マシンモニタの識別子及び該仮想マシンの識別子とともに前記I/Oデバイスリストに登録するデバイス設定部を含むグローバルI/Oデバイスマネージャーと、
を有するコンピュータシステム。
本実施形態のデバイス割当管理方法は、以下のような構成であってもよい。
(付記9)
コンピュータによるデバイス割当管理方法であって、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納し、
前記仮想マシンの動作に必要なI/Oデバイスを特定し、
特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する、デバイス割当管理方法。
(付記10)
付記9に記載のデバイス割当管理方法において、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、
前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持し、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
(付記11)
付記10に記載のデバイス割当管理方法において、
前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納し、
前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する、デバイス割当管理方法。
(付記12)
付記9に記載のデバイス割当管理方法において、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、
前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出し、
読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する、デバイス割当管理方法。
本実施形態のプログラムは、以下のような構成であってもよい。
(付記13)
コンピュータに、
前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納する手順と、
前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラム。
(付記14)
付記13に記載のプログラムにおいて、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新する手順と、
前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに有するプログラム。
(付記15)
付記14に記載のプログラムにおいて、
前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納する手順と、
前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する手順とをさらに有するプログラム。
(付記16)
付記13に記載のプログラムにおいて、
前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定する手順と、
前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出す手順と、
読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する手順とをさらに有するプログラム。
本発明を、サーバ仮想化技術を利用しているコンピュータシステムにおいて、多数の仮想マシンに対して、I/Oデバイスのハードウェア機能を利用させる用途に適用できる。
この出願は、2015年10月22日に出願された日本出願特願2015−208114を基礎とする優先権を主張し、その開示の全てをここに取り込む。
1、1a、1b コンピュータシステム
2 ハードウェア
3 仮想マシンモニタ(VMM)
4 仮想マシン(VM)
5 I/Oデバイスマネージャー
6 I/O側ネットワークインタフェース
7 ネットワーク
8 I/Oデバイス
9 PCI−Expressスイッチ
10 グローバルI/Oデバイスマネージャー
21 ネットワークインタフェースカード(NIC)
31 仮想マシンインタフェース
32 リクエスト発行先決定部
33 I/Oデバイス割当部
34 I/Oデバイスマネージャーインタフェース
35 アドレス範囲テーブル
36 BDF番号対応テーブル
36d BDF番号テーブル
37 NICドライバ
38 リソースファイル保持部
39 I/Oデバイス割当リスト
51 仮想マシンモニタインタフェース
52 I/Oデバイス設定部
53 リクエスト制御部
54 NICドライバインタフェース
55 MACアドレステーブル
56 I/Oデバイス設定内容保持テーブル
57 I/Oデバイスリスト
58 MACアドレス逆引きテーブル
59 I/Oデバイス設定リスト

Claims (6)

  1. コンピュータであって、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
    前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
    前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
    を有し
    前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
    前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
    前記I/Oデバイスマネージャーは、前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
    前記仮想マシンモニタは、前記I/Oデバイスマネージャーから通知された、前記I/Oデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
  2. コンピュータであって、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
    前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと
    前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
    を有し、
    前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
    前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
    前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
    前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を前記I/Oデバイスマネージャーに通知し、
    前記I/Oデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該I/Oデバイスに対して初期設定を実行する、コンピュータ。
  3. コンピュータによるデバイス割当管理方法であって、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのものであり、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの識別子であるインタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであるI/Oデバイスリストを記憶部に格納し、
    前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの前記インタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
    前記仮想マシンの動作に必要なI/Oデバイスを特定し、
    特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
    前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、
    前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録し、
    前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持し、
    前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
  4. コンピュータによるデバイス割当管理方法であって、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのものであり、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの識別子であるインタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであるI/Oデバイスリストを記憶部に格納し、
    前記仮想マシンの識別子、該仮想マシンに割り当てられたものであり、該仮想マシンによって付与されたものである前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの前記インタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
    前記仮想マシンの動作に必要なI/Oデバイスを特定し、
    特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
    前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録し、
    前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、
    前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出し、
    読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
    特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する、デバイス割当管理方法。
  5. コンピュータに、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのものであり、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの識別子であるインタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであるI/Oデバイスリストを記憶部に格納する手順と、
    前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの前記インタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
    前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
    特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
    前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順と、
    前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
    前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順を実行させるためのプログラム。
  6. コンピュータに、
    前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのものであり、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの識別子であるインタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであるI/Oデバイスリストを記憶部に格納する手順と、
    前記仮想マシンの識別子、該仮想マシンに割り当てられたものであり、該仮想マシンによって付与されたものである前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの前記インタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納する手順と、
    前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
    特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
    前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順と、
    前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定する手順と、
    前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出す手順と、
    読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
    特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する手順を実行させるためのプログラム。
JP2017546403A 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム Active JP6753412B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2015208114 2015-10-22
JP2015208114 2015-10-22
PCT/JP2016/004595 WO2017068770A1 (ja) 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム記録媒体

Publications (2)

Publication Number Publication Date
JPWO2017068770A1 JPWO2017068770A1 (ja) 2018-08-23
JP6753412B2 true JP6753412B2 (ja) 2020-09-09

Family

ID=58557347

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017546403A Active JP6753412B2 (ja) 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム

Country Status (3)

Country Link
US (1) US10684880B2 (ja)
JP (1) JP6753412B2 (ja)
WO (1) WO2017068770A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10356131B2 (en) * 2016-12-09 2019-07-16 Nutanix, Inc. Service chaining for multiple uplink bridges
US11089066B2 (en) 2016-12-09 2021-08-10 Nutanix, Inc. System and method for dynamic medium access control (MAC) relating to a virtualization environment
JP2019114025A (ja) * 2017-12-22 2019-07-11 コニカミノルタ株式会社 情報処理装置、情報処理方法および情報処理プログラム
US10684976B1 (en) * 2018-07-09 2020-06-16 American Megatrends International, Llc Automatic bus resource adjustment in a multiple root bridge computing system
US10942670B2 (en) * 2018-12-06 2021-03-09 Vmware, Inc. Direct access flash transition layer
US11119801B2 (en) 2019-03-28 2021-09-14 International Business Machines Corporation Migrating virtual machines across commonly connected storage providers
CN110221867A (zh) * 2019-05-31 2019-09-10 湖北三江航天万峰科技发展有限公司 一种xp系统下脉冲i/o功能卡通信驱动系统及方法
US11023402B2 (en) * 2019-07-02 2021-06-01 National Instruments Corporation Switch pruning in a switch fabric bus chassis
US11558296B2 (en) * 2020-09-18 2023-01-17 Serialtek, Llc Transaction analyzer for peripheral bus traffic
JP7153942B2 (ja) * 2020-08-17 2022-10-17 ラトナ株式会社 情報処理装置、方法、コンピュータプログラム、及び、記録媒体
CN113127099B (zh) * 2021-05-12 2024-04-12 北京奇艺世纪科技有限公司 服务器配置方法、装置、设备及存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3490212B2 (ja) 1996-04-08 2004-01-26 株式会社日立製作所 情報処理装置の入出力チャネル拡張方法
US7467381B2 (en) * 2003-12-16 2008-12-16 Intel Corporation Resource partitioning and direct access utilizing hardware support for virtualization
JP4295783B2 (ja) 2006-12-13 2009-07-15 株式会社日立製作所 計算機、仮想デバイスの制御方法
JP5018252B2 (ja) * 2007-06-06 2012-09-05 株式会社日立製作所 デバイス割り当て変更方法
US20100169884A1 (en) * 2008-12-31 2010-07-01 Zohar Bogin Injecting transactions to support the virtualization of a physical device controller
JP5639913B2 (ja) * 2011-02-02 2014-12-10 株式会社日立製作所 計算機システム、及びその制御方法
US8694995B2 (en) * 2011-12-14 2014-04-08 International Business Machines Corporation Application initiated negotiations for resources meeting a performance parameter in a virtualized computing environment
JP5928197B2 (ja) * 2012-06-29 2016-06-01 富士通株式会社 ストレージシステム管理プログラム及びストレージシステム管理装置
US8930668B2 (en) * 2012-11-15 2015-01-06 Bank Of America Corporation Storage black box
US9832078B2 (en) * 2015-01-06 2017-11-28 Netapp, Inc. Stateless resource management
US10437642B2 (en) * 2015-04-22 2019-10-08 Hitachi, Ltd. Management system for computer system

Also Published As

Publication number Publication date
WO2017068770A1 (ja) 2017-04-27
JPWO2017068770A1 (ja) 2018-08-23
US10684880B2 (en) 2020-06-16
US20180321964A1 (en) 2018-11-08

Similar Documents

Publication Publication Date Title
JP6753412B2 (ja) コンピュータ、デバイス割当管理方法及びプログラム
US9804988B1 (en) Device full memory access through standard PCI express bus
WO2015194534A1 (ja) スイッチ装置とコンピュータシステムと方法並びにプログラム
JP5362980B2 (ja) データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(ソケット接続および共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法)
JP5763873B2 (ja) データ処理システムの複数のルート複合体間の通信のために共用メモリを初期設定するための方法、コンピュータ・プログラム、およびデータ処理システム
JP5305848B2 (ja) データ処理システム内で入出力(i/o)仮想化を管理するための方法およびデータ処理システムならびにコンピュータ・プログラム
US9411654B2 (en) Managing configuration and operation of an adapter as a virtual peripheral component interconnect root to expansion read-only memory emulation
US10509758B1 (en) Emulated switch with hot-plugging
US9531668B2 (en) Micro server, method of allocating MAC address, and computer readable recording medium
JP2008152786A (ja) データ処理システム内で1つまたは複数のエンドポイントの第1の物理機能から第2の物理機能に仮想機能を移行するための方法、プログラム、およびシステム(単一ルート・ステートレス仮想機能の移行のためのシステムおよび方法)
JP2008152787A (ja) データ処理システム内で実行中の通信ファブリックにコンポーネントをホット・プラグするための方法、プログラム、およびシステム(実行中のPCIeファブリックにおける新しいコンポーネントのホット・プラグ/除去のためのシステムおよび方法)
JP2011517497A (ja) Pcieのsr−iov機能をレガシー機能として現出するように変換するシステム及び方法
WO2015145983A1 (ja) コンピュータシステム、データ処理装置、バスデータ転送方法、および、コンピュータ可読記録媒体
US11983136B2 (en) PCIe device and operating method thereof
US11995019B2 (en) PCIe device with changeable function types and operating method thereof
KR101575070B1 (ko) 디바이스 기능에 대한 액세스를 제공하기 위한 장치, 시스템 및 방법
JP6094575B2 (ja) I/oデバイス共有システムおよびi/oデバイス共有方法
CN115203110A (zh) PCIe功能及其操作方法
CN113778934B (zh) 基于PCIe的高速实时传输系统
JP6965943B2 (ja) 構成管理装置、構成管理システム、構成管理方法、および、構成管理プログラム
JP2020198007A (ja) 情報処理装置、情報処理システムおよび情報処理プログラム
CN101676894A (zh) 面向集中地址译码的非pci片上总线的pci虚拟化装置及方法
JP4780333B2 (ja) データプリフェッチデバイス、データプリフェッチ方法およびデータプリフェッチプログラム
KR20230142095A (ko) 인터페이스 디바이스 및 그 동작 방법
JPWO2019124450A1 (ja) 入出力実行装置、デバイス仮想化システム、入出力実行方法、および、プログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180409

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190913

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200519

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200630

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200721

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200803

R150 Certificate of patent or registration of utility model

Ref document number: 6753412

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150