(57)【特許請求の範囲】
【請求項１】
仮想化支援機能を有する複数の物理プロセッサと、メモリとを含む計算機の制御方法であって、
前記計算機は、
前記物理プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、前記物理プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、を含み、
第１のＯＳに前記第１のプロセッサグループを割り当てて、前記第１のＯＳを起動させる第１のステップと、
仮想マシンを稼働させる仮想化部に前記第２のプロセッサグループを割り当て、前記仮想化部を起動させる第２のステップと、
前記仮想化部が、前記メモリのうちの所定の領域と、前記第２のプロセッサグループの第２の物理プロセッサを仮想化した仮想プロセッサと、を前記仮想マシンとしての第２のＯＳに割り当てて、当該第２のＯＳを起動させる第３のステップと、
前記仮想化部が、前記メモリに前記第１のＯＳと仮想化部が相互に読み書き可能な共有領域を設定する第４のステップと、
前記仮想化部が、割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子と、前記第１のプロセッサグループの第１の物理プロセッサで生成する物理割込みに付加する通知ベクタと、を設定した割込みパス情報を前記共有領域に設定する第５のステップと、
前記第１のＯＳが、前記共有領域から前記割込みパス情報を取得する第６のステップと、
前記第１のＯＳが、前記取得した前記通知ベクタを設定した前記物理割込みを前記第１の物理プロセッサに生成させ、第１の物理プロセッサが、前記割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子に対応する前記第２のプロセッサグループの第２の物理プロセッサへ前記生成した物理割込みを発行する第７のステップと、
前記第２の物理プロセッサが、前記仮想化部を経由せず、前記第１の物理プロセッサから前記物理割込みを受信すると、前記割込みパス情報に基づいて、前記第２のＯＳへ論理割込みを発行する第８のステップと、
を含むことを特徴とする計算機の制御方法。
【請求項２】
請求項１に記載の計算機の制御方法であって、
前記第３のステップは、
前記仮想化部が、前記第２のＯＳが利用する仮想プロセッサ情報を前記仮想化部の仮想マシン管理情報の一部として設定し、
前記第５のステップは、
前記仮想化部が、割込み受信対象の前記第２のＯＳの割り込みハンドラを特定するゲストベクタと、を前記割込みパス情報に設定し、
前記第６のステップは、
前記第１のＯＳが、前記割込みパス情報のうち、前記割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子と、割込み受信対象の前記第２のＯＳの割り込みハンドラを特定するゲストベクタと、を取得することを特徴とする計算機の制御方法。
【請求項３】
請求項２に記載の計算機の制御方法であって、
前記第５のステップは、  前記仮想化部が、前記ゲストベクタに対応する割り込み要求ビットマップと、を前記割込みパス情報に設定し、
前記第７のステップは、
前記第１のＯＳが、前記割込みパス情報に、物理割込みを発行したことを示す発行済み通知ビットを有効化することを特徴とする計算機の制御方法。
【請求項４】
請求項３に記載の計算機の制御方法であって、
前記第５のステップは、
前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアに前記第８のステップを実施させるため、前記通知ベクタと、前記割り込み要求ビットマップおよび前記発行済み通知ビットとを保持するメモリ領域のメモリアドレスと、を前記仮想化部の仮想マシン管理情報へ設定することを特徴とする計算機の制御方法。
【請求項５】
請求項３または請求項４に記載の計算機の制御方法であって、
前記物理プロセッサは、割り込み支援機能として、論理割込み発生に仮想化ソフトウェアの処理を省く機能を有することを特徴とする計算機の制御方法。
【請求項６】
請求項１に記載の計算機の制御方法であって、
前記仮想化部が、前記第２のプロセッサグループの物理プロセッサと前記第２のＯＳの関係を変更する第９のステップと、
前記仮想化部が、前記変更された前記第２のプロセッサグループの物理プロセッサと前記第２のＯＳの関係に基づいて、前記第２のＯＳへの論理割込みと物理割込みの対応関係を含む割込みパス情報を更新する第１０のステップと、
をさらに含むことを特徴とする計算機の制御方法。
【請求項７】
請求項１に記載の計算機の制御方法であって、
前記割込みパス情報に含まれる、前記第２のＯＳへの論理割込みと物理割込みの対応関係は、
前記第２のＯＳが、ＭＳＩ−Ｘ領域に設定する仮想プロセッサの割込み制御部の識別子と、
前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子と、
から構成され、
かつ、前記ＭＳＩ−Ｘ領域を前記第２のＯＳに割り当てられたメモリ領域に配置し、
前記仮想化部が、前記ＭＳＩ−Ｘ領域へのアクセスをトラップして前記対応関係の変更を検知することを特徴とする計算機の制御方法。
【請求項８】
仮想化支援機能を有する複数の物理プロセッサと、メモリとを含む計算機であって、
前記物理プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、
前記物理プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、
前記第１のプロセッサグループを割り当てる第１のＯＳと、
前記第２のプロセッサグループを割り当てて、仮想マシンとしての第２のＯＳを稼働させる仮想化部と、を有し、
前記仮想化部は、
前記第２のＯＳが利用する仮想プロセッサ情報を前記仮想化部の仮想マシン管理情報の一部として設定し、
前記メモリのうちの所定の領域と、前記第２のプロセッサグループの第２の物理プロセッサを仮想化した仮想プロセッサとを第２のＯＳに仮想プロセッサとして割り当てて、当該第２のＯＳを起動して仮想マシンとして提供し、
前記メモリに前記第１のＯＳと仮想化部が相互に読み書き可能な共有領域を設定し、当該共有領域には割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子と、前記第１のプロセッサグループの第１の物理プロセッサで生成する物理割込みに付加する通知ベクタとを含む割込みパス情報を設定し、
前記第１のＯＳが、
前記共有領域から前記割込みパス情報を取得して、前記取得した前記通知ベクタを設定した前記物理割込みを前記第１の物理プロセッサに生成させ、第１の物理プロセッサが、前記割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子に対応する前記第２のプロセッサグループの第２の物理プロセッサへ前記生成した物理割込みを発行し、
前記第２の物理プロセッサが、前記仮想化部を経由せず、前記第１の物理プロセッサから前記物理割込みを受信すると、前記割込みパス情報に基づいて、前記第２のＯＳへ論理割込みを発行することを特徴とする計算機。
【請求項９】
請求項８に記載の計算機であって、
前記仮想化部は、
割込み受信対象の前記第２のＯＳの割り込みハンドラを特定するゲストベクタと、を前記割込みパス情報に設定し、
前記第１のＯＳは、
前記割込みパス情報のうち、割込み受信対象の前記第２のＯＳの割り込みハンドラを特定するゲストベクタと、を取得することを特徴とする計算機。
【請求項１０】
請求項９に記載の計算機であって、
前記仮想化部は、
前記ゲストベクタに対応する割り込み要求ビットマップと、を前記割込みパス情報に設定し、
前記第１のＯＳは、
前記割込みパス情報に、物理割込みを発行したことを示す発行済み通知ビットを有効化することを特徴とする計算機。
【請求項１１】
請求項１０に記載の計算機であって、
前記仮想化部は、
前記通知ベクタと、前記割り込み要求ビットマップおよび前記発行済み通知ビットとを保持するメモリ領域のメモリアドレスと、を前記仮想化部の仮想マシン管理情報へ設定することを特徴とする計算機。
【請求項１２】
請求項１０または請求項１１に記載の計算機であって、
前記物理プロセッサは、割り込み支援機能として、論理割込み発生に仮想化ソフトウェアの処理を省く機能を有することを特徴とする計算機。
【請求項１３】
請求項８に記載の計算機であって、
前記仮想化部が、
前記第２のプロセッサグループの物理プロセッサと前記第２のＯＳの関係を変更し、前記変更された前記第２のプロセッサグループの物理プロセッサと前記第２のＯＳの関係に基づいて、前記第２のＯＳへの論理割込みと物理割込みの対応関係を含む割込みパス情報を更新することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアＣＰＵまたはマルチプロセッサ構成を有する計算機で仮想化ソフトウェアを利用する場合の割込み制御技術に関する。
【背景技術】
【０００２】
近年、企業で用いられるストレージ装置では、単体のアクセス性能に加えて、低価格、省エネや省スペースといったコストパフォーマンスが重視されている。従来、アクセスＩ／Ｆの種類やプロトコルに応じて個別の専用ストレージ装置が用意されてきた。しかし、近年では、ＳＡＮ（Storage Area Network）とＬＡＮ（Local Area Network）の両方のアクセスＩ／Ｆを備えた統合ストレージ装置が台頭しており、そのコストパフォーマンスの高さに注目が集まっている。
【０００３】
統合ストレージ装置では、同一の筐体内でＳＡＮ  Ｉ／Ｆからのブロックアクセス（セクタ単位でのＨＤＤアクセス手法）を処理するブロックＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、ＬＡＮ  Ｉ／Ｆからのファイルアクセス（ファイル単位でのデータアクセス手法）を処理するファイルＯＳの両方を同時に稼働させる必要がある。例えば、単一の計算機上で複数ＯＳの同時稼働を実現する手段として、仮想化ソフトウェアが知られている。
【０００４】
仮想化ソフトウェアは主にサーバ装置で使われてきた技術で、単一の計算機上で複数の論理区画を生成する。各論理区画では独立して個別のＯＳが実行できるため、統合ストレージ装置内に２つの論理区画を生成し、１つの論理区画でブロックＯＳを、もう一方の論理区画でファイルＯＳを同時に稼働させ、両者を仮想的な通信路で接続することにより同時稼働が実現出来る。
【０００５】
仮想化ソフトウェアの主な役割は、計算機の物理資源（プロセッサやメモリ、Ｉ／Ｏデバイス）と論理区画との対応付けを管理することである。物理資源の管理のため、仮想化ソフトウェアは論理区画上でのＣＰＵ（Central Processing Unit）時間の利用状況や割込みによる通信状況等を常時監視し、論理区画上のゲストＯＳに割り付けた資源を超えてアクセスした場合に当該アクセスを抑制する、もしくは処理の代替を行う。この処理を全てソフトウェアで行うと多大な性能低下(オーバヘッド)を生じるため、近年のIntel（登録商標）社製ＣＰＵでは仮想化ソフトウェアによる物理資源の管理をハードウェアでサポートするための専用機能を備えている(例えば、非特許文献１に記載のＶＴ−ｘ: Virtualization Technology for Xeon)。以下、この種の機能を仮想化支援機能とする。
【０００６】
しかしストレージ装置の場合、特にブロックＯＳでは、データベースサーバ等からのアクセスを受け付けるため、数１０μｓｅｃ程度の高い応答性能（低アクセスレイテンシ）が求められる。統合ストレージ装置でもＳＡＮをメインに用いる顧客では、性能に対する要求レベルが高い傾向にある。さらにファイルＯＳについても、ビッグデータの利用及び活用の進展に伴って、単位時間当たりのデータ処理要求が増加すると考えられる。
【０００７】
そこで、ストレージ装置に仮想化ソフトウェアを適用する場合、上記仮想化支援機能を最大限に利用し、仮想化に起因するオーバヘッドを最小化させる必要がある（例えば、特許文献１，２）。しかし、今日の仮想化ソフトウェアにおけるオーバヘッドの主要因として、割込みによる通信処理の代替が挙げられる。仮想化ソフトウェアを用いた場合、割込みの伝達時に、仮想化ソフトウェアは（１）物理割込みの発生、（２）物理割込みの受け付け、（３）論理割込みの生成の３ステップを行って論理区画上のＯＳの割込みハンドラに割込みを通知する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許出願公開第２０１１／０１６１５４１号明細書
【特許文献２】米国特許出願公開第２０１０／０２２３６１１号明細書
【非特許文献】
【０００９】
【非特許文献１】Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3C: System Programming Guide、Part 3、Intel Corp、２０１３年６月発行、第２９−１３頁、１４頁
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記従来例では、割込みを始めとする仮想化ソフトウェアによる処理が必要なイベント（仮想化イベント）が発生すると、ＣＰＵのモードはゲストＯＳを実行するモード（ＶＭＸノンルート）から仮想化ソフトウェアで処理を実行するモード（ＶＭＸルート）へ切り換えが発生する。この切り換え処理により、オーバヘッドが発生する。
【００１１】
本発明の課題は、マルチコアＣＰＵまたは複数のＣＰＵおよび仮想化ソフトウェアを有する計算機またはストレージ装置において、仮想化イベントの発生を抑制することで上記オーバヘッドを削減し、仮想化ソフトウェアの管理下のＯＳに対して高速な割込みを実現することである。
【課題を解決するための手段】
【００１２】
本発明は、仮想化支援機能を有する複数の物理プロセッサと、メモリとを含む計算機の制御方法であって、前記計算機は、前記物理プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、前記物理プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、を含み、第１のＯＳに前記第１のプロセッサグループを割り当てて、前記第１のＯＳを起動させる第１のステップと、仮想マシンを稼働させる仮想化部に前記第２のプロセッサグループを割り当て、前記仮想化部を起動させる第２のステップと、前記仮想化部が、前記メモリのうちの所定の領域と、前記第２のプロセッサグループの第２の物理プロセッサを仮想化した仮想プロセッサと、を前記仮想マシンとしての第２のＯＳに割り当てて、当該第２のＯＳを起動させる第３のステップと、前記仮想化部が、前記メモリに前記第１のＯＳと仮想化部が相互に読み書き可能な共有領域を設定する第４のステップと、前記仮想化部が、割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子と、前記第１のプロセッサグループの第１の物理プロセッサで生成する物理割込みに付加する通知ベクタと、を設定した割込みパス情報を前記共有領域に設定する第５のステップと、前記第１のＯＳが、前記共有領域から前記割込みパス情報を取得する第６のステップと、前記第１のＯＳが、前記取得した前記通知ベクタを設定した前記物理割込みを前記第１の物理プロセッサに生成させ、第１の物理プロセッサが、前記割込み受信対象の前記第２のＯＳに割り当てられた前記仮想プロセッサの割込み制御部の識別子に対応する物理プロセッサコアの割り込み制御部の識別子に対応する前記第２のプロセッサグループの第２の物理プロセッサへ前記生成した物理割込みを発行する第７のステップと、
前記第２の物理プロセッサが、前記仮想化部を経由せず、前記第１の物理プロセッサから前記物理割込みを受信すると、前記割込みパス情報に基づいて、前記第２のＯＳへ論理割込みを発行する第８のステップと、を含む。
【発明の効果】
【００１３】
したがって、本発明によれば、仮想化支援機能と割込み支援機能を有するプロセッサを利用し、仮想化部（仮想化ソフトウェア、ＶＭＭ）の非管理下の第１のＯＳから仮想化部の管理下の第２のＯＳ（ゲストＯＳ）へ高速な割込み伝達を仮想化ソフトウェアの介在無しで実現でき、割込み処理を高速にすることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェアを用いてファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【図２】本発明の実施例を示し、各ゲストＯＳの仮想ＣＰＵと物理ＣＰＵのＬＡＰＩＣ  ＩＤの関係を示すテーブルの一例を示す。
【図３】本発明の実施例を示し、仮想ＰＣＩデバイスの割込みパスを保持する割込みパス記述テーブルの一例を示す。
【図４】本発明の実施例を示し、割込み要求の一例を示す図である。
【図５】本発明の実施例を示し、仮想ＰＣＩデバイスの割込み情報を保持する割込みパス記述テーブルの初期化処理の一例を示すフローチャートである。
【図６】本発明の実施例を示し、ＶＭＭがゲストＯＳの仮想ＣＰＵに割り当てる物理ＣＰＵを変更するスケジューリング処理の一例を示すフローチャートである。
【図７】本発明の実施例を示し、ＶＭＭが割込みパス記述テーブルを更新する処理の一例を示すフローチャートである。
【図８】本発明の実施例を示し、ブロックＯＳがファイルＯＳへ割込みを発生する処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１６】
図１は、本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェア上にファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【００１７】
本実施例では、統合ストレージ装置を構成するために仮想化ソフトウェアの非管理下のＯＳとしてブロックＯＳ１３０と、仮想化ソフトウェア上のゲストＯＳとしてファイルサーバＯＳ１６０（以下、ファイルＯＳとする）を同一のハードウェア上で独立して稼働させ、前記ファイルＯＳから発行されたストレージ制御コマンドを前記ブロックＯＳが処理し、その後、前記ブロックＯＳが割込みを利用してコマンド完了の通知を前記ファイルＯＳへ行う例を説明する。
【００１８】
なお本実施例はあくまでも本発明を適用した一例であり、同様にして仮想化ソフトウェアの非管理ＯＳからゲストＯＳへ割込みを発生させる場合においても本発明を容易に適用可能であることは言うまでもない。
【００１９】
＜１．  ハードウェア構成＞
本発明を実施する統合ストレージ装置のハードウェア構成例について、図１を参照しながら説明する。物理計算機１１０はハードウェアリソースとしてＣＰＵリソース１１１と、メモリリソース１１２と、通信とデータの送受信を行うＩ／Ｏリソース１１７とを有する。
【００２０】
ＣＰＵリソース１１１はマルチプロセッサ構成もしくはマルチコアＣＰＵを利用して複数のＣＰＵコアから構成される。各ＣＰＵコアは仮想化支援機能（例えばIntel社 VT-x機能）を有し、仮想化支援機能を有効（ＶＭＸ  ＯＮ）に設定したコアの物理ＣＰＵコアグループＢ１１４と、仮想化支援機能を無効（ＶＭＸ  ＯＦＦ）に設定したコアの物理ＣＰＵコアグループＡ１１３と、に分類される。
【００２１】
ここで、各ＣＰＵリソース１１１の物理ＣＰＵコアは、仮想化支援機能が有効（以下では仮想化ＯＮモード）または無効（仮想化ＯＦＦ）モードの区別を有する。さらに仮想化ＯＮモードでは前記非特許文献１に記載されているように、仮想化支援機能の割込み支援機能(前記非特許文献１ではPosted Interrupt Processing)が有効になる。以下実施例では、Posted Interrupt Processingの利用を想定する。
【００２２】
メモリリソース１１２は、ブロックＯＳ１３０に割り当てられるメモリグループＡ１１５ａおよび仮想化ソフトウェアとしてのＶＭＭ（Virtual Machine Monitor）１４０に割り当てられるメモリグループＢ１１５ｂから構成される。メモリグループＡ１１５ａは物理ＣＰＵコアグループＡ１１３からアクセスされる。メモリグループＢ１１５ｂは物理ＣＰＵコアグループＢ１１４からアクセスされ、さらにメモリグループＢ１１５ｂの一部はファイルＯＳ１６０から利用される。また、メモリグループＢ１１５ｂのうちＶＭＭ１４０に割り当てられるメモリ領域の一部は、ブロックＯＳ１３０から直接アクセス可能なる共有メモリ領域１１６を含む。
【００２３】
Ｉ／Ｏリソース１１７は、ネットワーク（図示省略）を介して計算機（図示省略）と通信を行うＮＩＣ（Network Interface Card）１１８と、図示しないＳＡＮ（Storage Area Network）を介してデータやプログラムを格納するストレージデバイス１２０とデータの送受信を行うＨＢＡ（Host Bus Adapter）１１９と、を含む。なお、ＮＩＣ１１８及びＨＢＡ１１９は、ＰＣＩ（Peripheral Component Interfaces）仕様に基づくＩ／Ｏデバイスである。
【００２４】
＜２．ソフトウェア構成＞
次に、物理計算機１１０上で実行されるソフトウェアの構成の主要部について、図１を参照しながら詳述する。
【００２５】
物理計算機１１０上では、ブロックＯＳ１３０と、仮想化ソフトウェアとしてのＶＭＭ１４０がシステムソフトウェアとして独立してそれぞれ稼働する。なお、ブロックＯＳ１３０はＳＡＮ等を介してＨＤＤ等をセクタ単位でアクセスするＯＳである。また、ファイル（ファイルサーバ）ＯＳ１６０は、ＬＡＮに接続されてファイル単位でデータを管理するＯＳである。
【００２６】
ブロックＯＳ１３０は、物理計算機１１０のハードウェアを直接制御できるネイティヴパーティション１０１で稼働し、ファイルＯＳ１６０は、ＶＭＭ１４０が管理するゲストパーティション１０２で稼働する。
【００２７】
ブロックＯＳ１３０は、ストレージ制御コマンド１９２を実行するコマンド処理部１３１と、物理ＣＰＵコア（またはプロセッサコア）間の割込みを制御するＩＰＩ（Inter Processor Interrupt）制御部１３２とを有する。
【００２８】
コマンド処理部１３１は、ファイルＯＳ１６０から送られるストレージ制御コマンド１９２をブロックＯＳ１３０が処理するためのオブジェクトである。コマンド処理部１３１は、受け付けたストレージ制御コマンド１９２に応じてＨＢＡ１１９を介してストレージデバイス１２０にアクセスして受け付けたコマンドを実行する。コマンド処理部１３１は、ストレージ制御コマンド１９２に対する実行結果を取得してから、ファイルＯＳ１６０に対してコマンド完了通知のための割込み要求１３３をＩＰＩ制御部１３２に依頼する。なお、本実施例では、ブロックＯＳ１３０を実行する物理ＣＰＵコアグループＡ１１３のうちのひとつの物理ＣＰＵコアから、ＶＭＭ１４０を実行する物理ＣＰＵコアグループＢ１１４のうちのひとつの物理ＣＰＵコアへの割込みとなるため、ＩＰＩを用いる。なお、以下の説明では、物理ＣＰＵコアグループＡ１１３に所属するコアを物理ＣＰＵコアＡとし、物理ＣＰＵコアグループＢ１１４に所属するコアを物理ＣＰＵコアＢとする。
【００２９】
ＩＰＩ制御部１３２は、コマンド処理部１３１からの割込み要求１３３の転送対象となるファイルＯＳ１６０に割り当てられた仮想ＣＰＵ１５１に対して、物理ＩＰＩ１９５を発行する。なお、コマンド処理部１３１がＩＰＩ制御部１３２の機能を有する構成であっても構わない。
【００３０】
ＶＭＭ１４０は、物理計算機１１０から割り当てられた物理リソースを利用して仮想計算機１５０を生成する。仮想計算機１５０はＶＭＭ１４０により複数生成することができ、全ての仮想計算機１５０はゲストパーティション１０２に属する。仮想計算機１５０が有する仮想ＣＰＵ１５１の実行ステートは、ＶＭＭ１４０が保持する仮想マシン管理情報であるＶＭＣＳ（Virtual Machine Control Structure）１４５により保持される。なお、ＶＭＣＳ１４５の詳細については、上記非特許文献１に記載されているとおりである。
【００３１】
仮想計算機１５０は１つ以上の仮想ＣＰＵ１５１と、ゲストメモリ１５２と、割込み対象となる仮想ＰＣＩデバイス１５３とから構成され、その他必要に応じて他デバイスを保持してもよい。
【００３２】
仮想ＣＰＵ１５１は、ＶＭＭ１４０によって物理ＣＰＵコアグループＢ１１４のうちの１以上の物理ＣＰＵコアＢが割り当てられる。ゲストメモリ１５２は、ＶＭＭ１４０によってメモリグループＢ１１５ｂの一部が割り当てられ、ゲストＯＳは仮想計算機１５０上の物理メモリであるかのように扱うことができる。仮想ＰＣＩデバイス１５３は、ＰＣＩ仕様に基づくソフトウェアで実装されたＨＢＡ１１９として機能する仮想デバイスであり、PCI Local Bus Specification Revision 3.0（PCI SIG発行、２００２年８月１２日）に記載のＰＣＩ仕様に基づくＰＣＩコンフィグ空間１５４と、ＭＳＩ−Ｘ（Message Signal Interrupt-X）領域１５５を有する。
【００３３】
ＭＳＩ−Ｘ領域１５５は、割込みベクタを通知するための（Ｇｕｅｓｔ  Ｖｅｃｔｏｒ）番号１５６および仮想ＣＰＵ  ＬＡＰＩＣ（Local Advanced Programmable Interrupt Controller）ＩＤ１５７を保持し、必要であればＭＳＩ−Ｘ仕様に基づきその他のデータを有してもよい。
【００３４】
また、仮想ＰＣＩデバイス１５３が保持するデータはゲストメモリ１５２上に展開され、ＶＭＭ１４０によりデータ更新がトラップされる。本実施例はストレージデバイス１２０を対象としているためＨＢＡ１１９を仮想ＰＣＩデバイス１５３とする例を示すが、本発明はＮＩＣ１１８等の他種の仮想ＰＣＩデバイスにも応用可能である。
【００３５】
ファイルＯＳ１６０は仮想計算機１５０上で稼働するオペレーティングシステムであり、仮想ＰＣＩデバイスドライバ１６１を有し、仮想ＰＣＩデバイスドライバ１６１を利用して仮想ＰＣＩデバイス１５３を制御する。本実施例において、仮想ＰＣＩデバイス１５３は、ＶＭＭ１４０が物理的なＰＣＩデバイスであるＨＢＡ１１９を仮想化したデバイスである。
【００３６】
またファイルＯＳ１６０は、仮想ＣＰＵ１５１への仮想割込み（または論理割込み）１９７として受信されるブロックＯＳ１３０からの制御完了割込みを契機として、ブロックＯＳ１３０へ送信したストレージ制御コマンド発行１９２に対するストレージ制御コマンドの実行結果を受信する。
【００３７】
さらにＶＭＭ１４０は、仮想−物理ＣＰＵ関係テーブル１４１を有し、仮想計算機１５０に割り当てた物理ＣＰＵコアグループＢ１１４の物理ＣＰＵコアＢと、仮想ＣＰＵ１５１との関係を管理する。
【００３８】
また、ＶＭＭ１４０は割込みパス記述テーブル１４２を有し、仮想計算機１５０の割込み情報を管理する。割込みパス記述テーブル１４２は、後述するように、ファイルＯＳ１６０が使用する仮想及び物理リソースに関する情報を格納する情報読み出し領域１４３と、ブロックＯＳ１３０がＣＰＵリソース１１１による割込み支援を利用するために必要な情報を書き出す情報書き出し領域１４４を含む。
【００３９】
仮想−物理ＣＰＵ関係テーブル１４１および割込みパス記述テーブル１４２は、メモリグループＢ１１５ｂ上に保持されるが、特に割込みパス記述テーブル１４２はブロックＯＳ１３０からアクセス出来るよう、共有メモリ領域１１６に保持される。
【００４０】
また、物理計算機１１０の起動は、まず、物理ＣＰＵコアグループＡ１１３がブロックＯＳ１３０をメモリグループＡ１１５ａにロードして、物理ＣＰＵコアグループＡ１１３がブロックＯＳ１３０を起動する。次に、ブロックＯＳ１３０がメモリグループＢ１１５ｂにＶＭＭ１４０をロードして、物理ＣＰＵコアグループＢ１１４をＶＭＭ１４０に割り当てて起動させる。そして、ＶＭＭ１４０がメモリグループＢ１１５ｂの一部と、物理ＣＰＵコアグループＢ１１４の一部を仮想計算機１５０に割り当てて、ゲストメモリ１５２と仮想ＣＰＵ１５１でファイルＯＳ１６０を起動させる。
【００４１】
そして、ＶＭＭ１４０は、ＶＭＭ１４０とブロックＯＳ１３０が相互に読み書き可能な共有メモリ領域１１６をメモリグループＢ１１５ｂの一部に設定して、この共有メモリ領域１１６には、ファイルＯＳ１６０への論理割込みと物理割込みの対応関係を含む割込みパス記述テーブル（割込みパス情報）１４２を配置する。
【００４２】
図２は、ＶＭＭ１４０が保持する仮想−物理ＣＰＵ関係テーブル１４１の一例である。仮想−物理ＣＰＵ関係テーブル１４１は、ＶＭＭ１４０が管理する割込み関係に特化したＣＰＵスケジューリング情報の一部である。
【００４３】
仮想−物理ＣＰＵ関係テーブル１４１は、ファイルＯＳ１６０が稼働するゲストパーティション１０２の識別子を格納するパーティション番号２１０と、ゲストパーティション１０２が利用する仮想ＣＰＵ１５１のＬＡＰＩＣ  ＩＤ２２０と、当該仮想ＣＰＵ１５１に割り当てられた物理ＣＰＵコアグループＢ１１４の物理ＣＰＵコアＢのＬＡＰＩＣ  ＩＤ２３０とを含む。
【００４４】
図示の例では、ファイルＯＳ１６０が稼働するゲストパーティション番号２１０＝「０」には、ＬＡＰＩＣのＩＤが「０」〜「３」の４つの仮想ＣＰＵ１５１が割り当てられる。そして、これらの仮想ＣＰＵ１５１には、物理ＣＰＵコアグループＢ１１４のＬＡＰＩＣのＩＤが「１」〜「４」の物理ＣＰＵコアＢが割り当てられていることを示す。なお、ゲストパーティション番号２１０＝「１」は、図１では表示していないゲストパーティション番号である。
【００４５】
なお、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ２３０及び仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ２２０は、ＶＭＭ１４０が所定のタイミング（例えば、ポーリング等）で取得した値である。また、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ２３０は、物理ＣＰＵコアＢの割り込み制御部の識別子であり、仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ２２０は、仮想ＣＰＵ１５１の割り込み制御部の識別子である。
【００４６】
図３は、ＶＭＭ１４０がメモリグループＢ１１５ｂの共有メモリ領域１１６に保持する割込みパス記述テーブル１４２の一例である。
【００４７】
割込みパス記述テーブル１４２は、情報読み出し領域１４３と、情報書き出し領域１４４とを含む。情報読み出し領域１４３は、ファイルＯＳ１６０が稼働するゲストパーティション１０２の識別子を格納するゲストパーティション番号３１０と、ファイルＯＳ１６０が利用する仮想ＰＣＩデバイス１５３の識別子を格納する仮想ＰＣＩデバイス番号３２０と、各仮想ＰＣＩデバイスに関連づけられた物理ＣＰＵコアＢのＬＡＰＩＣの識別子を格納するＬＡＰＩＣ  ＩＤ３３０と、通知ベクタ（Notification Vector）番号３３１と、ゲストベクタ（Guest Vector）番号３３２と、物理ＣＰＵコアグループＢ１１４内の各物理ＣＰＵコアＢのＬＡＰＩＣ  ＩＤ３４０と、物理ＣＰＵコアグループＢ１１４内の各物理ＣＰＵコアＢが有するＰＩＤ（Posted-Interrupt Descriptor）３５０と、ＰＩＤ３５０が保持されているメモリアドレスを格納するＰＩＤアドレス３６０とを含む。なお、通知ベクタ番号３３１とＰＩＤアドレス３６０については、前記非特許文献１の第２９−１３頁、１４頁に記載されているとおりであり、ＶＭＣＳ１４５に含まれる値のひとつである。
【００４８】
通知ベクタ番号３３１は、前記非特許文献１の第２４−１３頁に記載されるとおり、ＶＭＣＳ１４５に含まれる値のひとつであり、物理割込み（物理ＩＰＩ１９５）の通知先の物理ＣＰＵコアＢで、仮想ＣＰＵ１５１に対する仮想割込み１９７（図１参照）を発生させるための情報を含む。
【００４９】
Posted Interruptでは、物理ＩＰＩ１９５に通知ベクタを付加することで、物理ＩＰＩ１９５を受信した物理ＣＰＵコアＢに、ＰＩＤ３５０を参照させて、仮想ＣＰＵ１５１に対する仮想割込み１９７に、論理割り込み先を指定するＰＩＲ（Posted-Interrupt Requests）ビットマップ３７０の値の割り込みベクタを付加させる。
【００５０】
ゲストベクタ番号３３２は、上述したＰＣＩ規格のＭＳＩ−Ｘに準拠するものでファイルＯＳ１６０が仮想ＰＣＩデバイス１５３にアクセスしたときに、ＶＭＭ１４０がフックすること等により取得した値である。ゲストベクタ番号３３２には、図１に示した仮想ＰＣＩデバイス１５３のゲストベクタ番号１５６の値がＶＭＭ１４０によって設定される。
【００５１】
ここで、Posted Interruptの概要は、インテル社製のプロセッサに搭載された仮想化環境用のプロセッサ間割込みの支援機能で、前記非特許文献１に記載のＶＴ−ｘ: Virtualization Technology for Xeonを拡張した割込み支援機能である。Posted Interruptは、同一の仮想化ソフトウェア上で複数のゲストＯＳが稼働している状態で、ゲストＯＳから他のゲストＯＳへ割込みをかける際にＶＭＭ１４０（仮想化ソフトウェア）を経由せずに、割込みを高速に通知する仮想化環境の割込み支援機能である。
【００５２】
Posted Interruptを受けた物理ＣＰＵコアＢは、対応する仮想ＣＰＵ１５１に対して情報読み出し領域１４３のゲストベクタ番号３３２で指定されたゲストＯＳ（ファイルＯＳ１６０）割込みハンドラを起動させる。
【００５３】
これにより物理ＩＰＩ１９５を受信した物理ＣＰＵコアＢは、従来例のように仮想化ソフトウェア（ＶＭＭ１４０）で割込みハンドラを起動することなく、直接仮想ＣＰＵ１５１からゲストＯＳ（ファイルＯＳ１６０）の割込みハンドラを起動させることができ、仮想化環境における割込み処理を高速化するものである。
【００５４】
また、情報書き出し領域１４４は、ＩＰＩ制御部１３２が物理ＣＰＵによる割込み支援機能を利用するために必要な情報を書き出す領域であり、ＰＩＤ３５０を含む。ＰＩＤ３５０は、ＰＩＲビットマップ（以下、割り込み要求ビットマップ）３７０と、発行済み通知（図中ＯＮ＝Outstanding Notification）ビット３７１の情報を含む。なお、ＰＩＲ（割込み要求）ビットマップ３７０の詳細な構成については、上述の非特許文献１の第２９−１３頁、１４頁に記載されている。
【００５５】
割り込み要求ビットマップ３７０は、ファイルＯＳ１６０の論理割り込み先を指定する割り込みベクタを含む。また、発行済み通知ビット３７１は、物理ＩＰＩ１９５を生成したことを示し、物理ＩＰＩ１９５の生成の際に設定される。
【００５６】
上記のように、情報読み出し領域１４３と、情報書き出し領域１４４を含む割込みパス記述テーブル１４２を、ＶＭＭ１４０とブロックＯＳ１３０が相互に読み書き可能な共有メモリ領域１１６に格納し、Posted Interruptに関する情報を格納しておく。そして、ブロックＯＳ１３０がパス記述テーブル１４２を利用することで、ＶＭＭ１４０の管理外のブロックＯＳ１３０から、ＶＭＭ１４０の管理下のゲストＯＳであるファイルＯＳ１６０に直接プロセッサ間割込み（ＩＰＩ）を通知することができるのである。
【００５７】
なお、ゲストパーティション番号３１０と、仮想ＰＣＩデバイス番号３２０と、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０と、通知ベクタ番号３３１は、ＶＭＭ１４０が設定した値である。また、ゲストベクタ番号３３２は、ゲストＯＳ（ファイルＯＳ１６０）が設定した値である。
【００５８】
図４は、ブロックＯＳ１３０のコマンド処理部１３１が生成する割込み要求１３３の一例である。割込み要求１３３は、コマンドがどの仮想ＰＣＩデバイスに対応するものなのかを一意に区別するため、ファイルＯＳ１６０が実行されているゲストパーティションの識別子を格納するパーティション番号４１０と、ファイルＯＳ１６０に割り当てられている仮想ＰＣＩデバイス１５３の識別子を格納する仮想ＰＣＩデバイス番号４２０とを含む。
【００５９】
図示の例では、ゲストパーティション番号が０で、仮想ＰＣＩデバイス番号が１に対応する仮想ＣＰＵ１５１への割込み要求１３３の例を示す。
【００６０】
＜３．ＶＭＭによる割込み情報の初期化および更新処理＞
次に、ＶＭＭ１４０が行う割込みパス記述テーブル１４２の初期化および更新処理の一例について、以下フローチャートを参照しながら説明する。
【００６１】
図５は、仮想計算機１５０がＶＭＭ１４０によって生成される際に、ＶＭＭ１４０による仮想ＰＣＩデバイス１５３の構成後に割込みパス記述テーブル１４２を初期化する処理の一例を示すフローチャートである。この処理は、仮想計算機１５０が生成されるときに実行される。
【００６２】
ＶＭＭ１４０は、仮想計算機１５０の生成時に割込みパス記述テーブル１４２を保持可能なデータ領域を共有メモリ領域１１６上に確保する（Ｓ５１０）。すなわち、ＶＭＭ１４０は、図３に示した情報読み出し領域１４３と、情報書き出し領域１４４と、ＰＩＤ３５０を格納する領域を、メモリグループＢ１１５ｂの共有メモリ領域１１６に確保する。
【００６３】
続けて、ＶＭＭ１４０は、仮想計算機１５０に割り当てる仮想ＣＰＵ１５１に対応する物理ＣＰＵコアグループＢ１１４内の物理ＣＰＵコアＢの通知ベクタ番号（当該仮想PCIデバイスへの割込みに対する識別子となる任意値）を、割込みパス記述テーブル１４２の通知ベクタ番号３３１へ設定する（Ｓ５２０）。
【００６４】
そして、ＶＭＭ１４０は、仮想計算機１５０が有する仮想ＣＰＵ１５１に利用される物理ＣＰＵコアグループＢ１１４内の物理ＣＰＵコアＢのＬＡＰＩＣ  ＩＤ３４０に対応するＰＩＤ３５０のメモリアドレスをＰＩＤアドレス３６０へ登録する（Ｓ５３０）。
【００６５】
次に、ＶＭＭ１４０は、情報読み出し領域１４３の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０にリストされた物理ＣＰＵコアＬＡＰＩＣ  ＩＤを、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３４０中で特定する（Ｓ５４０）。
【００６６】
その後、ステップＳ５４０で特定した物理ＣＰＵコアＬＡＰＩＣ  ＩＤに対応するＰＩＤアドレス３６０を、ＶＭＣＳ１４５へ設定する（Ｓ５５０）。
【００６７】
最後に、ステップＳ５２０で設定した通知ベクタ番号値をＶＭＣＳ１４５へ設定する（Ｓ５６０）。
【００６８】
ＶＭＭ１４０は、上記ステップＳ５１０からステップＳ５５０の処理を、仮想計算機１５０に割り当てられた仮想ＰＣＩデバイス１５３の数の分だけ実施する。
【００６９】
図６は、ＶＭＭ１４０が仮想計算機１５０の仮想ＣＰＵ１５１のスケジューリングを行う際に、ＶＭＭ１４０による割込みパス記述テーブル１４２を更新する処理の一例を示すフローチャートである。この処理は、仮想ＣＰＵ１５１に割り当てる物理ＣＰＵコアＢを変更する際に実行される。または、ＶＭＭ１４０が、仮想計算機１５０の生成、停止などを行うときに実行される。
【００７０】
ＶＭＭ１４０は、仮想−物理ＣＰＵ関係テーブル１４１を参照し、仮想−物理ＣＰＵ関係テーブル１４１の仮想ＣＰＵコアＬＡＰＩＣ  ＩＤ２２０に対応する物理ＣＰＵコアＬＡＰＩＣ  ＩＤ２３０が変更されたか否かを判定する（Ｓ６１０）。
【００７１】
変更された場合、ＶＭＭ１４０は、変更後の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ２３０を、情報読み出し領域１４３内の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０に再設定し（Ｓ６１１）、ステップＳ６１１で更新した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤに対応するＰＩＤアドレス３６０をＶＭＣＳ１４５へ再設定する（Ｓ６１２）。
【００７２】
以上の処理により、仮想ＣＰＵコアＬＡＰＩＣ  ＩＤ２２０に割り当てられた物理ＣＰＵコアＬＡＰＩＣ  ＩＤ２３０が変更されると、ＶＭＭ１４０は、割込みパス記述テーブル１４２の情報読み出し領域１４３と、ＶＭＣＳ１４５の値を更新する。
【００７３】
＜４．ファイルＯＳによる割込み情報変更時の処理＞
図７は、ファイルＯＳ１６０の起動、もしくはファイルＯＳ１６０により実施される仮想ＰＣＩデバイス１５３に対するＭＳＩ−Ｘ１５５のデータ更新１９１に基づいて、ＶＭＭ１４０が割込みパス記述テーブル１４２を更新する処理の一例を示すフローチャートである。本フローチャートは、ファイルＯＳ１６０によるＭＳＩ−Ｘ領域１５５へのアクセスをＶＭＭ１４０がトラップしたことを契機に、ＶＭＭ１４０によって実施される。
【００７４】
ＶＭＭ１４０は、ＭＳＩ−Ｘ領域１５５のデータ更新１９１が発生した場合、ＭＳＩ−Ｘ領域１５５中の割込みベクタを示すゲストベクタ番号１５６が変更されたかを否かを、情報読み出し領域１４３中のゲストベクタ番号３３２とゲストベクタ番号１５６の比較で判定する（Ｓ７１０）。ゲストベクタ番号３３２が変更された場合は、ステップＳ７１１へ進んで、ＶＭＭ１４０は、割込みパス記述テーブル１４２の情報読み出し領域１４３でゲストベクタ番号３３２を更新する。
【００７５】
続けて、ＶＭＭ１４０は、ＭＳＩ−Ｘ領域１５５中の仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ１５７が変更されたか否かを判定する（Ｓ７２０）。本判定では、ＭＳＩ−Ｘ領域１５５中の仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ１５７に対応する物理ＣＰＵ  ＬＡＰＩＣ  ＩＤ２３０の値を仮想−物理ＣＰＵ関係テーブル１４１から取得する。そして、ＶＭＭ１４０は取得した物理ＣＰＵ  ＬＡＰＩＣ  ＩＤ２３０が情報読み出し領域１４３中の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０と等しいか否かを判定する。
【００７６】
ＶＭＭ１４０は、仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ１５７が変更されたと判定すると、ステップＳ７２１へ進む。一方、変更が無い場合には当該処理を終了する。
【００７７】
変更された場合、ＶＭＭ１４０は変化前後の仮想−物理ＣＰＵ関係テーブル１４１および割込みパス記述テーブル１４２を比較して、変更された仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ１５７へ仮想割込み１９７を発生させる仮想ＰＣＩデバイス番号３２０を算出する（Ｓ７２１）。
【００７８】
そして、ＶＭＭ１４０は仮想−物理ＣＰＵ関係テーブル１４１から変更後の仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ２２０に対応する物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ２３０を算出する（Ｓ７２２）。
【００７９】
その後、ＶＭＭ１４０はステップＳ７２１にて算出した仮想ＰＣＩデバイス番号３２０に対応する物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ  ３３０を、ステップＳ７２２にて算出した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ２３０に更新し（Ｓ７２３）、ステップＳ７２２にて算出した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ２３０に対応するＰＩＤアドレス３６０をＶＭＣＳ１４５へ再設定する（Ｓ７２４）。
【００８０】
以上の処理により、ＭＳＩ−Ｘ領域１５５のデータ更新１９１が発生すると、ＶＭＭ１４０は、仮想ＰＣＩデバイス１５３と仮想−物理ＣＰＵ関係テーブル１４１を読み込んで、割込みパス記述テーブル１４２とＶＭＣＳ１４５を変更後の値に更新する。
【００８１】
＜５．コマンド処理部からの割込発生処理＞
図８は、コマンド処理部１３１による割込み要求後に、ブロックＯＳ１３０で行われる割込み発生処理の一例を示すフローチャートである。
【００８２】
コマンド処理部１３１からの割込み要求１３３を受け付けたＩＰＩ制御部１３２は、ＶＭＭ１４０が共有メモリ領域１１６に設定した共有メモリ領域１１６の割込みパス記述テーブル１４２の情報読み出し領域１４３を参照し、図４で示した割込み要求１３３のゲストパーティション番号４１０と仮想ＰＣＩデバイス番号４２０が、共有メモリ領域１１６の情報読み出し領域１４３においてゲストパーティション番号３１０と仮想ＰＣＩデバイス番号３２０が一致する組み合わせを選択する。ＩＰＩ制御部１３２は、選択したゲストパーティション番号３１０と仮想ＰＣＩデバイス番号３２０の組み合わせに対応する物理ＣＰＵ  ＬＡＰＩＣ  ＩＤ３３０と、ゲストベクタ番号３３２を取得する（Ｓ８１０）。
【００８３】
続けて、ステップＳ８１０にて取得したゲストベクタ番号３３２の値をｘとするとき、ＩＰＩ制御部１３２は、ステップＳ８１０にて取得した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ３３０に対応する書き出し情報領域１３４のＰＩＲビットマップ３７０のｘビット目をｅｎａｂｌｅ（例えば、１）にする（Ｓ８２０）。すなわち、ＩＰＩ制御部１３２は、ＶＭＭ１４０が共有メモリ領域１１６に設定した情報読み出し領域１４３の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０とゲストベクタ番号３３２を読み込み、図３で示したグループＢ物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３４０に対応するＰＩＤアドレス３６０を取得する。そしてＩＰＩ制御部１３２は、取得したＰＩＤアドレス３６０に対応するＰＩＤ３５０のＰＩＲビットマップ（割込み要求ビットマップ）３７０の０〜２５５ビットのうち、ゲストベクタ番号３３２の値をｘとすると、ｘビット目をｅｎａｂｌｅにセットする。このｘビットで仮想ＣＰＵ１５１に割込みベクタを通知する。
【００８４】
続けて、ＩＰＩ制御部１３２は、Ｓ８１０にて取得した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ３２０に対応する情報書き出し領域１４４領域内の発行済み通知（図中ＯＮ）ビット３７１がｅｎａｂｌｅ（有効）であるか否かを判定する（Ｓ８３０）。
【００８５】
発行済み通知ビット３７１が「１」の場合は有効であることを示し、この時点で割込み要求１３３の元となったストレージ制御コマンド発行１９２に対するコマンド処理結果がファイルＯＳ１６０に通知される事が期待でき、ＩＰＩ制御部１３２は何もせず処理はここで終了する。つまり、発行済み通知ビット３７１が有効のときには、すでに割込みをファイルＯＳ１６０に通知したことを意味する。これにより、ブロックＯＳ１３０から複数のコマンドが完了したときの割込み処理回数削減でき、結果としてファイルＯＳ１６０での割込みを受け付ける処理も削減されるためスループットが向上する。
【００８６】
一方、発行済み通知ビット３７１が「０」の場合は無効であり、ＩＰＩ制御部１３２は発行済み通知ビット３７１をＥｎａｂｌｅ（例えば、１）に設定する（Ｓ８４０）。続けて、ＩＰＩ制御部１３２は、ステップＳ８１０にて取得した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ３３０に対応する通知ベクタ番号３３１を、割込みパス記述テーブル１４２内の情報読み出し領域１４３から検索して取得する（Ｓ８５０）。
【００８７】
次に、ＩＰＩ制御部１３２は、上記ステップＳ８５０にて取得した通知ベクタ番号３３１の値を物理ＣＰＵコアグループＡ１１３に所属する物理ＣＰＵコアＡの図示しないＩＣＲ（Ｉｎｔｅｒｒｕｐｔ  Ｃｏｍｍａｎｄ  Ｒｅｇｉｓｔｅｒ）に設定する（Ｓ８５１）。
【００８８】
続けて、ＩＰＩ制御部１３２は、Ｓ８５０にて通知ベクタ番号３３１の値をＩＣＲに設定した物理ＣＰＵコアＡに物理ＩＰＩ１９５（図１参照）を発行させ、情報読み出し領域１４３の物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０を割込みの宛先とする（Ｓ８６０）。
【００８９】
以上のＳ８１０からＳ８６０までの処理により、Ｓ８６０にて発行された物理ＩＰＩ１９５は、Ｓ８１０にて取得した物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ３３０を持つ物理ＣＰＵコアＢに通知される。
【００９０】
続いて、物理ＩＰＩ１９５を受信した物理ＣＰＵコアＢが、情報書き出し領域１４４中のＰＩＤ３５０を参照するＰＩＤ取得１９６（図１参照）を実施する。このＰＩＤ取得１９６は、物理ＩＰＩ１９５を受信した物理ＣＰＵコアＢが、自身のＬＡＰＩＣ  ＩＤ（グループＢ物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３４０）に対応するＰＩＤアドレス３６０（ＶＭＣＳ１４５に登録済み）のＰＩＤ３５０から割込み要求ビットマップ３７０を読み込んでゲストベクタ番号３３２を取得する。
【００９１】
そして、ゲストベクタ番号３３２を取得した物理ＣＰＵコアＢは、仮想−物理ＣＰＵ関係テーブル１４１の物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ２３０に対応する仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ２２０を持つ仮想ＣＰＵ１５１に対して、割込みベクタとしてのゲストベクタ番号３３２を伴う仮想割込み１９７を発行する。
【００９２】
以上のように、ファイルＯＳ１６０がストレージ制御コマンド１９２（図１参照）を発行すると、仮想計算機１５０はブロックＯＳ１３０にストレージ制御コマンド１９２を通知する。ブロックＯＳ１３０は、コマンド処理部１３１でストレージ制御コマンド１９２を実行し、ストレージデバイス１２０へのアクセス結果を取得する。コマンド処理部１３１は、アクセス結果をファイルＯＳ１６０に応答するため、ＩＰＩ制御部１３２に割込み要求１３３を発行する。
【００９３】
ＩＰＩ制御部１３２は、ファイルＯＳ１６０に割り当てられた仮想ＰＣＩデバイス１５３に対応する物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０と、割込みベクタに対応するゲストベクタ番号３３２を取得する。そして、ＩＰＩ制御部１３２は、共有メモリ領域１１６に配置された割込みパス記述テーブル１４２の情報書き出し領域１４４のＰＩＤ３５０に対して、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０に対応するＰＩＤ３５０の割込み要求ビットマップ３７０に、ゲストベクタ番号３３２の値をセットしておく。
【００９４】
次に、ＩＰＩ制御部１３２は、情報読み出し領域１４３から物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０に対応する通知ベクタ（ＮＶ）番号３３１を読み込んで、物理ＣＰＵコアグループＡ１３３の物理ＣＰＵコアＡのＩＣＲにセットする。この物理ＣＰＵコアＡで物理ＩＰＩ１９５を発行し、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０に対応する物理ＣＰＵコアグループＢ１１４の物理ＣＰＵコアＢに物理ＩＰＩ１９５を通知する。
【００９５】
物理ＣＰＵコアＢは、物理ＩＰＩ１９５に含まれる通知ベクタ番号３３１に基づいて、物理ＣＰＵコアＬＡＰＩＣ  ＩＤ３３０に対応するＰＩＤ３５０から、割込み要求ビットマップ３７０を取得し、割込み要求ビットマップ３７０の値に基づく割込みベクタを含む仮想割込み１９７を生成し、仮想ＣＰＵ１５１に通知する。仮想ＣＰＵ１５１で実行されるファイルＯＳ１６０は、割込みベクタに応じた割込みハンドラを起動してブロックＯＳ１３０からの応答を取得し、一連の処理を完了する。
【００９６】
＜６．まとめ＞
以上の構成及び処理により本実施例では、ネイティヴパーティション１０１に所属するブロックＯＳ１３０を実行する仮想化ＯＦＦモードの物理ＣＰＵコアＡからプロセッサ間割込み１９５を発行し、割込み支援機能に対応した物理ＣＰＵコアグループＢ１１４の一部が割り当てられたゲストパーティション１０２上のファイルＯＳ１６０に対して、ＶＭＭ１４０のソフトウェア処理無しに高速な割込み伝達を実現出来る。
【００９７】
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【００９８】
また、上記実施例では、マルチコアのＣＰＵを用いる例を示したが、物理プロセッサとしてはホモジニアスに限定されるものではなく、ヘテロジニアスのプロセッサを用いてもよい。
【００９９】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【０１００】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【符号の説明】
【０１０１】
１０１    ネイティヴパーティション
１０２    ゲストパーティション
１１０    物理計算機
１１１    ＣＰＵリソース
１１２    メモリリソース
１１３    物理ＣＰＵコアグループＡ
１１４    物理ＣＰＵコアグループＢ
１１５ａ  メモリグループＡ
１１５ｂ  メモリグループＢ
１１６    共有メモリ領域
１３０    ブロックＯＳ
１３１    コマンド処理部
１３２    ＩＰＩ制御部
１３３    割込み要求
１４０    ＶＭＭ（仮想化ソフトウェア）
１４１    仮想−物理ＣＰＵ関係テーブル
１４２    割込みパス記述テーブル
１４３    情報読み出し領域
１４４    情報書き出し領域
１４５    ＶＭＣＳ
１５０    仮想計算機
１５１    仮想ＣＰＵ
１５２    ゲストメモリ
１５３    仮想ＰＣＩデバイス
１５４    ＰＣＩコンフィグ空間
１５５    ＭＳＩ−Ｘ領域
１５６    Ｇｕｅｓｔ  Ｖｅｃｔｏｒ番号
１５７    仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ
１６０    ファイルＯＳ
１６１    仮想ＰＣＩデバイスドライバ
１９１    ＭＳＩ−Ｘデータ更新
１９２    ストレージ制御コマンド発行
１９３    割込みパス記述テーブル取得
１９４    割込みパス記述テーブル設定
１９５    物理ＩＰＩ
１９６    Ｐｏｓｔｅｄ−Ｉｎｔｅｒｒｕｐｔ  Ｄｅｓｃｒｉｐｔｏｒ（ＰＩＤ）取得
１９７    仮想割込み
２１０    ゲストパーティション番号
２２０    仮想ＣＰＵ  ＬＡＰＩＣ  ＩＤ
２３０    物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ
３１０    ゲストパーティション番号
３２０    仮想ＰＣＩデバイス番号
３３０    物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ
３３１    Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｖｅｃｔｏｒ番号
３３２    Ｇｕｅｓｔ  Ｖｅｃｔｏｒ番号
３４０    グループＢ物理ＣＰＵコア  ＬＡＰＩＣ  ＩＤ
３５０    Ｐｏｓｔｅｄ−Ｉｎｔｅｒｒｕｐｔ  Ｄｅｓｃｒｉｐｔｏｒ（ＰＩＤ）
３６０    ＰＩＤアドレス
３７０    Ｐｏｓｔｅｄ−Ｉｎｔｅｒｒｕｐｔ  Ｒｅｑｕｅｓｔｓビットマップ
３７１    Ｏｕｔｓｔａｎｄｉｎｇ  Ｎｏｔｉｆｉｃａｔｉｏｎビット
４１０    ゲストパーティション番号
４２０    仮想デバイス番号
【図２】
0006029550.tif 000002
【図３】
0006029550.tif 000003
【図４】
0006029550.tif 000004
【図５】
0006029550.tif 000005
【図６】
0006029550.tif 000006
【図７】
0006029550.tif 000007
【図８】
0006029550.tif 000008
【図１】
0006029550.tif 000009