【文献】
VMwareやHyper-Vに加え、Virtage,アイティメディア,2010年 2月15日,URL,http://www.itmedia.co.jp/enterprise/articles/1002/15/news001.html
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【0016】
図1は、本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェア上にファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【0017】
本実施例では、統合ストレージ装置を構成するために仮想化ソフトウェアの非管理下のOSとしてブロックOS130と、仮想化ソフトウェア上のゲストOSとしてファイルサーバOS160(以下、ファイルOSとする)を同一のハードウェア上で独立して稼働させ、前記ファイルOSから発行されたストレージ制御コマンドを前記ブロックOSが処理し、その後、前記ブロックOSが割込みを利用してコマンド完了の通知を前記ファイルOSへ行う例を説明する。
【0018】
なお本実施例はあくまでも本発明を適用した一例であり、同様にして仮想化ソフトウェアの非管理OSからゲストOSへ割込みを発生させる場合においても本発明を容易に適用可能であることは言うまでもない。
【0019】
<1. ハードウェア構成>
本発明を実施する統合ストレージ装置のハードウェア構成例について、
図1を参照しながら説明する。物理計算機110はハードウェアリソースとしてCPUリソース111と、メモリリソース112と、通信とデータの送受信を行うI/Oリソース117とを有する。
【0020】
CPUリソース111はマルチプロセッサ構成もしくはマルチコアCPUを利用して複数のCPUコアから構成される。各CPUコアは仮想化支援機能(例えばIntel社 VT-x機能)を有し、仮想化支援機能を有効(VMX ON)に設定したコアの物理CPUコアグループB114と、仮想化支援機能を無効(VMX OFF)に設定したコアの物理CPUコアグループA113と、に分類される。
【0021】
ここで、各CPUリソース111の物理CPUコアは、仮想化支援機能が有効(以下では仮想化ONモード)または無効(仮想化OFF)モードの区別を有する。さらに仮想化ONモードでは前記非特許文献1に記載されているように、仮想化支援機能の割込み支援機能(前記非特許文献1ではPosted Interrupt Processing)が有効になる。以下実施例では、Posted Interrupt Processingの利用を想定する。
【0022】
メモリリソース112は、ブロックOS130に割り当てられるメモリグループA115aおよび仮想化ソフトウェアとしてのVMM(Virtual Machine Monitor)140に割り当てられるメモリグループB115bから構成される。メモリグループA115aは物理CPUコアグループA113からアクセスされる。メモリグループB115bは物理CPUコアグループB114からアクセスされ、さらにメモリグループB115bの一部はファイルOS160から利用される。また、メモリグループB115bのうちVMM140に割り当てられるメモリ領域の一部は、ブロックOS130から直接アクセス可能なる共有メモリ領域116を含む。
【0023】
I/Oリソース117は、ネットワーク(図示省略)を介して計算機(図示省略)と通信を行うNIC(Network Interface Card)118と、図示しないSAN(Storage Area Network)を介してデータやプログラムを格納するストレージデバイス120とデータの送受信を行うHBA(Host Bus Adapter)119と、を含む。なお、NIC118及びHBA119は、PCI(Peripheral Component Interfaces)仕様に基づくI/Oデバイスである。
【0024】
<2.ソフトウェア構成>
次に、物理計算機110上で実行されるソフトウェアの構成の主要部について、
図1を参照しながら詳述する。
【0025】
物理計算機110上では、ブロックOS130と、仮想化ソフトウェアとしてのVMM140がシステムソフトウェアとして独立してそれぞれ稼働する。なお、ブロックOS130はSAN等を介してHDD等をセクタ単位でアクセスするOSである。また、ファイル(ファイルサーバ)OS160は、LANに接続されてファイル単位でデータを管理するOSである。
【0026】
ブロックOS130は、物理計算機110のハードウェアを直接制御できるネイティヴパーティション101で稼働し、ファイルOS160は、VMM140が管理するゲストパーティション102で稼働する。
【0027】
ブロックOS130は、ストレージ制御コマンド192を実行するコマンド処理部131と、物理CPUコア(またはプロセッサコア)間の割込みを制御するIPI(Inter Processor Interrupt)制御部132とを有する。
【0028】
コマンド処理部131は、ファイルOS160から送られるストレージ制御コマンド192をブロックOS130が処理するためのオブジェクトである。コマンド処理部131は、受け付けたストレージ制御コマンド192に応じてHBA119を介してストレージデバイス120にアクセスして受け付けたコマンドを実行する。コマンド処理部131は、ストレージ制御コマンド192に対する実行結果を取得してから、ファイルOS160に対してコマンド完了通知のための割込み要求133をIPI制御部132に依頼する。なお、本実施例では、ブロックOS130を実行する物理CPUコアグループA113のうちのひとつの物理CPUコアから、VMM140を実行する物理CPUコアグループB114のうちのひとつの物理CPUコアへの割込みとなるため、IPIを用いる。なお、以下の説明では、物理CPUコアグループA113に所属するコアを物理CPUコアAとし、物理CPUコアグループB114に所属するコアを物理CPUコアBとする。
【0029】
IPI制御部132は、コマンド処理部131からの割込み要求133の転送対象となるファイルOS160に割り当てられた仮想CPU151に対して、物理IPI195を発行する。なお、コマンド処理部131がIPI制御部132の機能を有する構成であっても構わない。
【0030】
VMM140は、物理計算機110から割り当てられた物理リソースを利用して仮想計算機150を生成する。仮想計算機150はVMM140により複数生成することができ、全ての仮想計算機150はゲストパーティション102に属する。仮想計算機150が有する仮想CPU151の実行ステートは、VMM140が保持する仮想マシン管理情報であるVMCS(Virtual Machine Control Structure)145により保持される。なお、VMCS145の詳細については、上記非特許文献1に記載されているとおりである。
【0031】
仮想計算機150は1つ以上の仮想CPU151と、ゲストメモリ152と、割込み対象となる仮想PCIデバイス153とから構成され、その他必要に応じて他デバイスを保持してもよい。
【0032】
仮想CPU151は、VMM140によって物理CPUコアグループB114のうちの1以上の物理CPUコアBが割り当てられる。ゲストメモリ152は、VMM140によってメモリグループB115bの一部が割り当てられ、ゲストOSは仮想計算機150上の物理メモリであるかのように扱うことができる。仮想PCIデバイス153は、PCI仕様に基づくソフトウェアで実装されたHBA119として機能する仮想デバイスであり、PCI Local Bus Specification Revision 3.0(PCI SIG発行、2002年8月12日)に記載のPCI仕様に基づくPCIコンフィグ空間154と、MSI−X(Message Signal Interrupt-X)領域155を有する。
【0033】
MSI−X領域155は、割込みベクタを通知するための(Guest Vector)番号156および仮想CPU LAPIC(Local Advanced Programmable Interrupt Controller)ID157を保持し、必要であればMSI−X仕様に基づきその他のデータを有してもよい。
【0034】
また、仮想PCIデバイス153が保持するデータはゲストメモリ152上に展開され、VMM140によりデータ更新がトラップされる。本実施例はストレージデバイス120を対象としているためHBA119を仮想PCIデバイス153とする例を示すが、本発明はNIC118等の他種の仮想PCIデバイスにも応用可能である。
【0035】
ファイルOS160は仮想計算機150上で稼働するオペレーティングシステムであり、仮想PCIデバイスドライバ161を有し、仮想PCIデバイスドライバ161を利用して仮想PCIデバイス153を制御する。本実施例において、仮想PCIデバイス153は、VMM140が物理的なPCIデバイスであるHBA119を仮想化したデバイスである。
【0036】
またファイルOS160は、仮想CPU151への仮想割込み(または論理割込み)197として受信されるブロックOS130からの制御完了割込みを契機として、ブロックOS130へ送信したストレージ制御コマンド発行192に対するストレージ制御コマンドの実行結果を受信する。
【0037】
さらにVMM140は、仮想−物理CPU関係テーブル141を有し、仮想計算機150に割り当てた物理CPUコアグループB114の物理CPUコアBと、仮想CPU151との関係を管理する。
【0038】
また、VMM140は割込みパス記述テーブル142を有し、仮想計算機150の割込み情報を管理する。割込みパス記述テーブル142は、後述するように、ファイルOS160が使用する仮想及び物理リソースに関する情報を格納する情報読み出し領域143と、ブロックOS130がCPUリソース111による割込み支援を利用するために必要な情報を書き出す情報書き出し領域144を含む。
【0039】
仮想−物理CPU関係テーブル141および割込みパス記述テーブル142は、メモリグループB115b上に保持されるが、特に割込みパス記述テーブル142はブロックOS130からアクセス出来るよう、共有メモリ領域116に保持される。
【0040】
また、物理計算機110の起動は、まず、物理CPUコアグループA113がブロックOS130をメモリグループA115aにロードして、物理CPUコアグループA113がブロックOS130を起動する。次に、ブロックOS130がメモリグループB115bにVMM140をロードして、物理CPUコアグループB114をVMM140に割り当てて起動させる。そして、VMM140がメモリグループB115bの一部と、物理CPUコアグループB114の一部を仮想計算機150に割り当てて、ゲストメモリ152と仮想CPU151でファイルOS160を起動させる。
【0041】
そして、VMM140は、VMM140とブロックOS130が相互に読み書き可能な共有メモリ領域116をメモリグループB115bの一部に設定して、この共有メモリ領域116には、ファイルOS160への論理割込みと物理割込みの対応関係を含む割込みパス記述テーブル(割込みパス情報)142を配置する。
【0042】
図2は、VMM140が保持する仮想−物理CPU関係テーブル141の一例である。仮想−物理CPU関係テーブル141は、VMM140が管理する割込み関係に特化したCPUスケジューリング情報の一部である。
【0043】
仮想−物理CPU関係テーブル141は、ファイルOS160が稼働するゲストパーティション102の識別子を格納するパーティション番号210と、ゲストパーティション102が利用する仮想CPU151のLAPIC ID220と、当該仮想CPU151に割り当てられた物理CPUコアグループB114の物理CPUコアBのLAPIC ID230とを含む。
【0044】
図示の例では、ファイルOS160が稼働するゲストパーティション番号210=「0」には、LAPICのIDが「0」〜「3」の4つの仮想CPU151が割り当てられる。そして、これらの仮想CPU151には、物理CPUコアグループB114のLAPICのIDが「1」〜「4」の物理CPUコアBが割り当てられていることを示す。なお、ゲストパーティション番号210=「1」は、
図1では表示していないゲストパーティション番号である。
【0045】
なお、物理CPUコアLAPIC ID230及び仮想CPU LAPIC ID220は、VMM140が所定のタイミング(例えば、ポーリング等)で取得した値である。また、物理CPUコアLAPIC ID230は、物理CPUコアBの割り込み制御部の識別子であり、仮想CPU LAPIC ID220は、仮想CPU151の割り込み制御部の識別子である。
【0046】
図3は、VMM140がメモリグループB115bの共有メモリ領域116に保持する割込みパス記述テーブル142の一例である。
【0047】
割込みパス記述テーブル142は、情報読み出し領域143と、情報書き出し領域144とを含む。情報読み出し領域143は、ファイルOS160が稼働するゲストパーティション102の識別子を格納するゲストパーティション番号310と、ファイルOS160が利用する仮想PCIデバイス153の識別子を格納する仮想PCIデバイス番号320と、各仮想PCIデバイスに関連づけられた物理CPUコアBのLAPICの識別子を格納するLAPIC ID330と、通知ベクタ(Notification Vector)番号331と、ゲストベクタ(Guest Vector)番号332と、物理CPUコアグループB114内の各物理CPUコアBのLAPIC ID340と、物理CPUコアグループB114内の各物理CPUコアBが有するPID(Posted-Interrupt Descriptor)350と、PID350が保持されているメモリアドレスを格納するPIDアドレス360とを含む。なお、通知ベクタ番号331とPIDアドレス360については、前記非特許文献1の第29−13頁、14頁に記載されているとおりであり、VMCS145に含まれる値のひとつである。
【0048】
通知ベクタ番号331は、前記非特許文献1の第24−13頁に記載されるとおり、VMCS145に含まれる値のひとつであり、物理割込み(物理IPI195)の通知先の物理CPUコアBで、仮想CPU151に対する仮想割込み197(
図1参照)を発生させるための情報を含む。
【0049】
Posted Interruptでは、物理IPI195に通知ベクタを付加することで、物理IPI195を受信した物理CPUコアBに、PID350を参照させて、仮想CPU151に対する仮想割込み197に、論理割り込み先を指定するPIR(Posted-Interrupt Requests)ビットマップ370の値の割り込みベクタを付加させる。
【0050】
ゲストベクタ番号332は、上述したPCI規格のMSI−Xに準拠するものでファイルOS160が仮想PCIデバイス153にアクセスしたときに、VMM140がフックすること等により取得した値である。ゲストベクタ番号332には、
図1に示した仮想PCIデバイス153のゲストベクタ番号156の値がVMM140によって設定される。
【0051】
ここで、Posted Interruptの概要は、インテル社製のプロセッサに搭載された仮想化環境用のプロセッサ間割込みの支援機能で、前記非特許文献1に記載のVT−x: Virtualization Technology for Xeonを拡張した割込み支援機能である。Posted Interruptは、同一の仮想化ソフトウェア上で複数のゲストOSが稼働している状態で、ゲストOSから他のゲストOSへ割込みをかける際にVMM140(仮想化ソフトウェア)を経由せずに、割込みを高速に通知する仮想化環境の割込み支援機能である。
【0052】
Posted Interruptを受けた物理CPUコアBは、対応する仮想CPU151に対して情報読み出し領域143のゲストベクタ番号332で指定されたゲストOS(ファイルOS160)割込みハンドラを起動させる。
【0053】
これにより物理IPI195を受信した物理CPUコアBは、従来例のように仮想化ソフトウェア(VMM140)で割込みハンドラを起動することなく、直接仮想CPU151からゲストOS(ファイルOS160)の割込みハンドラを起動させることができ、仮想化環境における割込み処理を高速化するものである。
【0054】
また、情報書き出し領域144は、IPI制御部132が物理CPUによる割込み支援機能を利用するために必要な情報を書き出す領域であり、PID350を含む。PID350は、PIRビットマップ(以下、割り込み要求ビットマップ)370と、発行済み通知(図中ON=Outstanding Notification)ビット371の情報を含む。なお、PIR(割込み要求)ビットマップ370の詳細な構成については、上述の非特許文献1の第29−13頁、14頁に記載されている。
【0055】
割り込み要求ビットマップ370は、ファイルOS160の論理割り込み先を指定する割り込みベクタを含む。また、発行済み通知ビット371は、物理IPI195を生成したことを示し、物理IPI195の生成の際に設定される。
【0056】
上記のように、情報読み出し領域143と、情報書き出し領域144を含む割込みパス記述テーブル142を、VMM140とブロックOS130が相互に読み書き可能な共有メモリ領域116に格納し、Posted Interruptに関する情報を格納しておく。そして、ブロックOS130がパス記述テーブル142を利用することで、VMM140の管理外のブロックOS130から、VMM140の管理下のゲストOSであるファイルOS160に直接プロセッサ間割込み(IPI)を通知することができるのである。
【0057】
なお、ゲストパーティション番号310と、仮想PCIデバイス番号320と、物理CPUコアLAPIC ID330と、通知ベクタ番号331は、VMM140が設定した値である。また、ゲストベクタ番号332は、ゲストOS(ファイルOS160)が設定した値である。
【0058】
図4は、ブロックOS130のコマンド処理部131が生成する割込み要求133の一例である。割込み要求133は、コマンドがどの仮想PCIデバイスに対応するものなのかを一意に区別するため、ファイルOS160が実行されているゲストパーティションの識別子を格納するパーティション番号410と、ファイルOS160に割り当てられている仮想PCIデバイス153の識別子を格納する仮想PCIデバイス番号420とを含む。
【0059】
図示の例では、ゲストパーティション番号が0で、仮想PCIデバイス番号が1に対応する仮想CPU151への割込み要求133の例を示す。
【0060】
<3.VMMによる割込み情報の初期化および更新処理>
次に、VMM140が行う割込みパス記述テーブル142の初期化および更新処理の一例について、以下フローチャートを参照しながら説明する。
【0061】
図5は、仮想計算機150がVMM140によって生成される際に、VMM140による仮想PCIデバイス153の構成後に割込みパス記述テーブル142を初期化する処理の一例を示すフローチャートである。この処理は、仮想計算機150が生成されるときに実行される。
【0062】
VMM140は、仮想計算機150の生成時に割込みパス記述テーブル142を保持可能なデータ領域を共有メモリ領域116上に確保する(S510)。すなわち、VMM140は、
図3に示した情報読み出し領域143と、情報書き出し領域144と、PID350を格納する領域を、メモリグループB115bの共有メモリ領域116に確保する。
【0063】
続けて、VMM140は、仮想計算機150に割り当てる仮想CPU151に対応する物理CPUコアグループB114内の物理CPUコアBの通知ベクタ番号(当該仮想PCIデバイスへの割込みに対する識別子となる任意値)を、割込みパス記述テーブル142の通知ベクタ番号331へ設定する(S520)。
【0064】
そして、VMM140は、仮想計算機150が有する仮想CPU151に利用される物理CPUコアグループB114内の物理CPUコアBのLAPIC ID340に対応するPID350のメモリアドレスをPIDアドレス360へ登録する(S530)。
【0065】
次に、VMM140は、情報読み出し領域143の物理CPUコアLAPIC ID330にリストされた物理CPUコアLAPIC IDを、物理CPUコアLAPIC ID340中で特定する(S540)。
【0066】
その後、ステップS540で特定した物理CPUコアLAPIC IDに対応するPIDアドレス360を、VMCS145へ設定する(S550)。
【0067】
最後に、ステップS520で設定した通知ベクタ番号値をVMCS145へ設定する(S560)。
【0068】
VMM140は、上記ステップS510からステップS550の処理を、仮想計算機150に割り当てられた仮想PCIデバイス153の数の分だけ実施する。
【0069】
図6は、VMM140が仮想計算機150の仮想CPU151のスケジューリングを行う際に、VMM140による割込みパス記述テーブル142を更新する処理の一例を示すフローチャートである。この処理は、仮想CPU151に割り当てる物理CPUコアBを変更する際に実行される。または、VMM140が、仮想計算機150の生成、停止などを行うときに実行される。
【0070】
VMM140は、仮想−物理CPU関係テーブル141を参照し、仮想−物理CPU関係テーブル141の仮想CPUコアLAPIC ID220に対応する物理CPUコアLAPIC ID230が変更されたか否かを判定する(S610)。
【0071】
変更された場合、VMM140は、変更後の物理CPUコアLAPIC ID230を、情報読み出し領域143内の物理CPUコアLAPIC ID330に再設定し(S611)、ステップS611で更新した物理CPUコア LAPIC IDに対応するPIDアドレス360をVMCS145へ再設定する(S612)。
【0072】
以上の処理により、仮想CPUコアLAPIC ID220に割り当てられた物理CPUコアLAPIC ID230が変更されると、VMM140は、割込みパス記述テーブル142の情報読み出し領域143と、VMCS145の値を更新する。
【0073】
<4.ファイルOSによる割込み情報変更時の処理>
図7は、ファイルOS160の起動、もしくはファイルOS160により実施される仮想PCIデバイス153に対するMSI−X155のデータ更新191に基づいて、VMM140が割込みパス記述テーブル142を更新する処理の一例を示すフローチャートである。本フローチャートは、ファイルOS160によるMSI−X領域155へのアクセスをVMM140がトラップしたことを契機に、VMM140によって実施される。
【0074】
VMM140は、MSI−X領域155のデータ更新191が発生した場合、MSI−X領域155中の割込みベクタを示すゲストベクタ番号156が変更されたかを否かを、情報読み出し領域143中のゲストベクタ番号332とゲストベクタ番号156の比較で判定する(S710)。ゲストベクタ番号332が変更された場合は、ステップS711へ進んで、VMM140は、割込みパス記述テーブル142の情報読み出し領域143でゲストベクタ番号332を更新する。
【0075】
続けて、VMM140は、MSI−X領域155中の仮想CPU LAPIC ID157が変更されたか否かを判定する(S720)。本判定では、MSI−X領域155中の仮想CPU LAPIC ID157に対応する物理CPU LAPIC ID230の値を仮想−物理CPU関係テーブル141から取得する。そして、VMM140は取得した物理CPU LAPIC ID230が情報読み出し領域143中の物理CPUコアLAPIC ID330と等しいか否かを判定する。
【0076】
VMM140は、仮想CPU LAPIC ID157が変更されたと判定すると、ステップS721へ進む。一方、変更が無い場合には当該処理を終了する。
【0077】
変更された場合、VMM140は変化前後の仮想−物理CPU関係テーブル141および割込みパス記述テーブル142を比較して、変更された仮想CPU LAPIC ID157へ仮想割込み197を発生させる仮想PCIデバイス番号320を算出する(S721)。
【0078】
そして、VMM140は仮想−物理CPU関係テーブル141から変更後の仮想CPU LAPIC ID220に対応する物理CPUコア LAPIC ID230を算出する(S722)。
【0079】
その後、VMM140はステップS721にて算出した仮想PCIデバイス番号320に対応する物理CPUコア LAPIC ID 330を、ステップS722にて算出した物理CPUコア LAPIC ID230に更新し(S723)、ステップS722にて算出した物理CPUコア LAPIC ID230に対応するPIDアドレス360をVMCS145へ再設定する(S724)。
【0080】
以上の処理により、MSI−X領域155のデータ更新191が発生すると、VMM140は、仮想PCIデバイス153と仮想−物理CPU関係テーブル141を読み込んで、割込みパス記述テーブル142とVMCS145を変更後の値に更新する。
【0081】
<5.コマンド処理部からの割込発生処理>
図8は、コマンド処理部131による割込み要求後に、ブロックOS130で行われる割込み発生処理の一例を示すフローチャートである。
【0082】
コマンド処理部131からの割込み要求133を受け付けたIPI制御部132は、VMM140が共有メモリ領域116に設定した共有メモリ領域116の割込みパス記述テーブル142の情報読み出し領域143を参照し、
図4で示した割込み要求133のゲストパーティション番号410と仮想PCIデバイス番号420が、共有メモリ領域116の情報読み出し領域143においてゲストパーティション番号310と仮想PCIデバイス番号320が一致する組み合わせを選択する。IPI制御部132は、選択したゲストパーティション番号310と仮想PCIデバイス番号320の組み合わせに対応する物理CPU LAPIC ID330と、ゲストベクタ番号332を取得する(S810)。
【0083】
続けて、ステップS810にて取得したゲストベクタ番号332の値をxとするとき、IPI制御部132は、ステップS810にて取得した物理CPUコア LAPIC ID330に対応する書き出し情報領域134のPIRビットマップ370のxビット目をenable(例えば、1)にする(S820)。すなわち、IPI制御部132は、VMM140が共有メモリ領域116に設定した情報読み出し領域143の物理CPUコアLAPIC ID330とゲストベクタ番号332を読み込み、
図3で示したグループB物理CPUコアLAPIC ID340に対応するPIDアドレス360を取得する。そしてIPI制御部132は、取得したPIDアドレス360に対応するPID350のPIRビットマップ(割込み要求ビットマップ)370の0〜255ビットのうち、ゲストベクタ番号332の値をxとすると、xビット目をenableにセットする。このxビットで仮想CPU151に割込みベクタを通知する。
【0084】
続けて、IPI制御部132は、S810にて取得した物理CPUコア LAPIC ID320に対応する情報書き出し領域144領域内の発行済み通知(図中ON)ビット371がenable(有効)であるか否かを判定する(S830)。
【0085】
発行済み通知ビット371が「1」の場合は有効であることを示し、この時点で割込み要求133の元となったストレージ制御コマンド発行192に対するコマンド処理結果がファイルOS160に通知される事が期待でき、IPI制御部132は何もせず処理はここで終了する。つまり、発行済み通知ビット371が有効のときには、すでに割込みをファイルOS160に通知したことを意味する。これにより、ブロックOS130から複数のコマンドが完了したときの割込み処理回数削減でき、結果としてファイルOS160での割込みを受け付ける処理も削減されるためスループットが向上する。
【0086】
一方、発行済み通知ビット371が「0」の場合は無効であり、IPI制御部132は発行済み通知ビット371をEnable(例えば、1)に設定する(S840)。続けて、IPI制御部132は、ステップS810にて取得した物理CPUコア LAPIC ID330に対応する通知ベクタ番号331を、割込みパス記述テーブル142内の情報読み出し領域143から検索して取得する(S850)。
【0087】
次に、IPI制御部132は、上記ステップS850にて取得した通知ベクタ番号331の値を物理CPUコアグループA113に所属する物理CPUコアAの図示しないICR(Interrupt Command Register)に設定する(S851)。
【0088】
続けて、IPI制御部132は、S850にて通知ベクタ番号331の値をICRに設定した物理CPUコアAに物理IPI195(
図1参照)を発行させ、情報読み出し領域143の物理CPUコアLAPIC ID330を割込みの宛先とする(S860)。
【0089】
以上のS810からS860までの処理により、S860にて発行された物理IPI195は、S810にて取得した物理CPUコア LAPIC ID330を持つ物理CPUコアBに通知される。
【0090】
続いて、物理IPI195を受信した物理CPUコアBが、情報書き出し領域144中のPID350を参照するPID取得196(
図1参照)を実施する。このPID取得196は、物理IPI195を受信した物理CPUコアBが、自身のLAPIC ID(グループB物理CPUコアLAPIC ID340)に対応するPIDアドレス360(VMCS145に登録済み)のPID350から割込み要求ビットマップ370を読み込んでゲストベクタ番号332を取得する。
【0091】
そして、ゲストベクタ番号332を取得した物理CPUコアBは、仮想−物理CPU関係テーブル141の物理CPUコア LAPIC ID230に対応する仮想CPU LAPIC ID220を持つ仮想CPU151に対して、割込みベクタとしてのゲストベクタ番号332を伴う仮想割込み197を発行する。
【0092】
以上のように、ファイルOS160がストレージ制御コマンド192(
図1参照)を発行すると、仮想計算機150はブロックOS130にストレージ制御コマンド192を通知する。ブロックOS130は、コマンド処理部131でストレージ制御コマンド192を実行し、ストレージデバイス120へのアクセス結果を取得する。コマンド処理部131は、アクセス結果をファイルOS160に応答するため、IPI制御部132に割込み要求133を発行する。
【0093】
IPI制御部132は、ファイルOS160に割り当てられた仮想PCIデバイス153に対応する物理CPUコアLAPIC ID330と、割込みベクタに対応するゲストベクタ番号332を取得する。そして、IPI制御部132は、共有メモリ領域116に配置された割込みパス記述テーブル142の情報書き出し領域144のPID350に対して、物理CPUコアLAPIC ID330に対応するPID350の割込み要求ビットマップ370に、ゲストベクタ番号332の値をセットしておく。
【0094】
次に、IPI制御部132は、情報読み出し領域143から物理CPUコアLAPIC ID330に対応する通知ベクタ(NV)番号331を読み込んで、物理CPUコアグループA133の物理CPUコアAのICRにセットする。この物理CPUコアAで物理IPI195を発行し、物理CPUコアLAPIC ID330に対応する物理CPUコアグループB114の物理CPUコアBに物理IPI195を通知する。
【0095】
物理CPUコアBは、物理IPI195に含まれる通知ベクタ番号331に基づいて、物理CPUコアLAPIC ID330に対応するPID350から、割込み要求ビットマップ370を取得し、割込み要求ビットマップ370の値に基づく割込みベクタを含む仮想割込み197を生成し、仮想CPU151に通知する。仮想CPU151で実行されるファイルOS160は、割込みベクタに応じた割込みハンドラを起動してブロックOS130からの応答を取得し、一連の処理を完了する。
【0096】
<6.まとめ>
以上の構成及び処理により本実施例では、ネイティヴパーティション101に所属するブロックOS130を実行する仮想化OFFモードの物理CPUコアAからプロセッサ間割込み195を発行し、割込み支援機能に対応した物理CPUコアグループB114の一部が割り当てられたゲストパーティション102上のファイルOS160に対して、VMM140のソフトウェア処理無しに高速な割込み伝達を実現出来る。
【0097】
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【0098】
また、上記実施例では、マルチコアのCPUを用いる例を示したが、物理プロセッサとしてはホモジニアスに限定されるものではなく、ヘテロジニアスのプロセッサを用いてもよい。
【0099】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【0100】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。