(57)【要約】【課題】  既存のPCI express準拠のI/Oデバイスを前提に、仮想化ソフトウェア(VMM)が割込み要求元のPCI機能を汎用的に特定可能な処理方法を提供する。【解決手段】  142a PCI express準拠のI/Oデバイスと128a PCI expressブリッジとの間に140a 割込み中継回路を設ける。140a割込み中継回路は、I/Oデバイスから発行される割込みトランザクションを受信し中継すると共に、134割込みインジケータに328a割込み識別子に対応して割込み要求の有無を記録する。114 VMMは134割込みインジケータを参照して割込み要求元のI/Oデバイスを一意に特定する。【選択図】  図１
2010250453.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のCPUと、
前記CPU上に生成された仮想計算機と、
前記仮想計算機を制御する仮想計算機モニタと、
メモリと、
第１の割込みトランザクションを発行するI/Oデバイスと、
前記CPU、メモリ及びI/Oデバイスを接続する中継回路と、
前記第１の割込みトランザクションの受信状況を記憶する割込みインジケータが保持される割込みインジケータ保持部とを備え、
前記中継回路は、
前記第１の割込みトランザクションを受信する割込み受信部と、
前記受信した第１の割込みトランザクションの情報に基づき、前記第１の割込みトランザクションの発行元を特定する識別子を取得する識別子取得部と、
前記取得した識別子に対応する割込みインジケータを更新する割込みインジケータ更新部と、
前記割込み受信部における第１の割込みトランザクションの受信に基づき、前記CPUに第2の割込みトランザクションを通知する割込み送出部とを有し、
前記CPUは、前記第2の割込みトランザクションの受信に基づき、前記仮想計算機モニタを呼出す割込みコントローラを有し、
前記仮想計算機モニタは、前記割込みコントローラによる呼出しに基づき、前記更新された割込みインジケータを参照し、前記第１の割込みトランザクションを発行したI/Oデバイスを特定する割込みインジケータ参照部を備えることを特徴とする計算機装置。
【請求項２】
前記仮想計算機モニタは、更に前記割込み分配部を有し、
前記割込み分配部は、
I/Oデバイス制御情報部を参照して前記特定されたI/Oデバイスに対応する仮想計算機を特定し、
前記特定された仮想計算機に前記I/Oデバイスの割込みを通知することを特徴とする請求項１記載の計算機装置。
【請求項３】
前記第１の割込みトランザクションは、PCI express規定のAssert_INTxもしくはDeassert_INTxメッセージであって、
前記割込みインジケータ更新部は、更に、
受信した第1の割込みTxがAssert_INTxである場合に、対応するインジケータをセットする手段と、
受信した第1の割込みTxがDeassert_INTxである場合に、対応するインジケータをリセットする手段とを有する請求項１記載の計算機装置。
【請求項４】
前記識別子取得部は、更に、
Assert_INTxもしくはDeassert_INTxメッセージに含まれる要求元ID(Requester ID)と、仮想ワイヤ区分(A〜D)の全て、もしくは一部を識別子として取得する手段を含む請求項３記載の計算機装置。
【請求項５】
前記第1の割込みトランザクションは、PCI express規定のMessage Signaled Interrupt(MSI)であって、
前記割込みインジケータ更新部は、更に、対応するインジケータをセットする手段を含む請求項１記載の計算機装置。
【請求項６】
前記識別子取得部は、更に、
MSIに含まれる要求元ID(Requester ID)と、宛先CPUのID情報と、割込みベクタ番号の全て、もしくは一部を識別子として取得する手段を含む請求項５記載の計算機装置。
【請求項７】
前記I/Oデバイスは、PCI express規定のMSIアドレスおよびデータレジスタを1つ以上有し、
前記仮想計算機モニタは、更に、
前記I/Oデバイスのうち、割込みを使用するI/Oデバイスのセットを定義する手段と、
前記割込みを使用するI/Oデバイスのセットに対して、ユニークな設定値を前記MSIアドレスおよびデータレジスタのペアに対して設定する手段とを有する請求項６記載の計算機装置。
【請求項８】
前記中継回路は、
前記第１の割込みトランザクションを受信し、受信した前記第１の割込みトランザクションをデコードし、前記デコードの情報を通知する割込み受信部と、
前記デコードの情報を受信し、前記デコードの情報に基づき前記第１の割込みトランザクションの発行元を特定する識別子を取得し、前記デコードの情報に基づき更新要求及び通知要求を発行する識別子取得部と、
前記更新要求を受信し、前記識別子に対応する割込みインジケータを更新する割込みインジケータ更新部と、
前記通知要求を受信し、前記通知要求に基づき第2の割込みトランザクションを通知する割込み送出部とを有し、
前記CPUは、前記第2の割込みトランザクションを受信し、前記第2の割込みトランザクションに基づく物理外部割込みを発行する割込みコントローラを有し、
前記仮想計算機モニタは、前記物理外部割込みに基づき割込みインジケータを参照し、前記第１の割込みトランザクションを発行したI/Oデバイスを特定する割込みインジケータ参照部とを備えることを特徴とする請求項１記載の計算機装置。
【請求項９】
前記割込みインジケータ保持部はメモリであり、
前記割込みインジケータ更新部は、
前記更新要求の受信により、前記メモリに保持される割込みインジケータを前記識別子に対応する割込みインジケータに更新するためのMWrTLP情報を生成し、
前記生成したMWrTLP情報を前記メモリに送出することを特徴とする請求項１記載の計算機装置。
【請求項１０】
前記割込みインジケータ保持部は、前記中継回路内に保持され、
前記割込みインジケータ更新部は、
前記更新要求の受信により、前記保持情報部に保持される割込みインジケータを前記識別子に対応する割込みインジケータに更新することを特徴とする請求項１記載の計算装置。
【請求項１１】
１つ以上のCPUと、前記CPU上に生成された仮想計算機と、前記仮想計算機を制御する仮想計算機モニタと、メモリと、I/Oデバイスと、前記CPU、メモリ及びI/Oデバイスを接続する中継回路とを備える計算機装置における割込み中継方法であって、
前記I/Oデバイスは、第１の割込みトランザクションを発行し、
前記第１の割込みトランザクションの前記中継回路における受信状況は、割込みインジケータに記憶され、
前記中継回路は、
前記第１の割込みトランザクションを受信し、
前記受信した第１の割込みトランザクションの情報に基づき、前記第１の割込みトランザクションの発行元を特定する識別子を取得し、
前記取得した識別子に対応する前記割込みインジケータを更新し、
前記第１の割込みトランザクションの受信に基づき、前記CPUに第2の割込みトランザクションを通知し、
前記CPUは、前記第2の割込みトランザクションの受信に基づき、前記仮想計算機モニタを呼出し、
前記仮想計算機モニタは、前記CPUによる呼出しに基づき、前記更新された割込みインジケータを参照し、前記第１の割込みトランザクションを発行したI/Oデバイスを特定することを特徴とする割込み中継方法。
【請求項１２】
前記仮想計算機モニタは、更に、
I/Oデバイス制御情報部を参照して前記特定されたI/Oデバイスに対応する仮想計算機を特定し、
前記特定された仮想計算機に前記I/Oデバイスの割込みを通知することを特徴とする請求項１１記載の割込み中継方法。
【請求項１３】
前記第１の割込みトランザクションは、PCI express規定のAssert_INTxもしくはDeassert_INTxメッセージであって、
前記取得した識別子に対応する前記割込みインジケータを更新するとき、
受信した第1の割込みTxがAssert_INTxである場合に、対応するインジケータをセットし、
受信した第1の割込みTxがDeassert_INTxである場合に、対応するインジケータをリセットすることを特徴とする請求項１１記載の割込み中継方法。
【請求項１４】
前記第１の割込みトランザクションの発行元を特定する識別子を取得するとき、
Assert_INTxもしくはDeassert_INTxメッセージに含まれる要求元ID(Requester ID)と、仮想ワイヤ区分(A〜D)の全て、もしくは一部を識別子として取得することを特徴とする請求項１３記載の割込み中継方法。
【請求項１５】
前記第1の割込みトランザクションは、PCI express規定のMessage Signaled Interrupt(MSI)であって、
前記取得した識別子に対応する前記割込みインジケータを更新するとき、対応するインジケータをセットすることを特徴とする請求項１１記載の割込み中継方法。
【請求項１６】
前記第１の割込みトランザクションの発行元を特定する識別子を取得するとき、
MSIに含まれる要求元ID(Requester ID)と、宛先CPUのID情報と、割込みベクタ番号の全て、もしくは一部を識別子として取得することを特徴とする請求項１５記載の割込み中継方法。
【請求項１７】
前記I/Oデバイスは、PCI express規定のMSIアドレスおよびデータレジスタを1つ以上有し、
前記仮想計算機モニタは、更に、
前記I/Oデバイスのうち、割込みを使用するI/Oデバイスのセットを定義し、
前記割込みを使用するI/Oデバイスのセットに対して、ユニークな設定値を前記MSIアドレスおよびデータレジスタのペアに対して設定することを特徴とする請求項１６記載の割込み中継方法
【請求項１８】
計算機装置におけるCPU、メモリ及びI/Oデバイスを接続する中継回路であって、
第１の割込みトランザクションを受信する割込み受信部と、
前記受信した第１の割込みトランザクションの情報に基づき、前記第１の割込みトランザクションの発行元を特定する識別子を取得する識別子取得部と、
前記取得した識別子に対応し、前記第１の割込みトランザクションの受信状況を記憶する割込みインジケータを更新する割込みインジケータ更新部と、
前記割込み受信部における第１の割込みトランザクションの受信に基づき、第2の割込みトランザクションを通知する割込み送出部とを有することを特徴とする中継回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機システムに関し、特に仮想計算機を提供する機能を備えた計算機システムおよび割込み中継回路、および割込み中継方法に関する。
【背景技術】
【０００２】
昨今の情報システムでは、Intel社のIA-32(Intel Architecture 32)準拠のCPUを搭載したIAサーバが多数導入されている。多数のIAサーバの管理のため、企業では保守員の人件費や電気代などの運用管理コストが上昇し問題となっている。そこで、仮想化ソフトウェア(VMM: Virtual Machine Monitor)によるサーバ統合が注目されている。
【０００３】
VMMは、物理的には1台のIAサーバ上で複数の仮想的なサーバ環境を生成する。仮想的なサーバ環境を仮想サーバ(VM: Virtual Machine)と称する。VMMを用いると従来のサーバで動作していたOSやアプリケーションを1つのVM上でそのまま稼動させることができ、情報システムを構成するサーバ台数を削減し問題を解決できる。
【０００４】
VMMは、物理サーバ上の資源であるCPUやメモリ、I/Oデバイスを複数のサブセットに分割し、VMに割当てる役割を負う。CPUからアクセスされる資源の場合、IA-32 CPUに搭載されるVT-x(Virtualization Technology for Xeon、非特許文献1)等の仮想化支援機構により割り当てる方法が知られている。
【０００５】
一方、I/Oデバイスからの資源アクセスには大きく直接メモリアクセス(Direct Memory Access; DMA)と 割込みトランザクション(Interrupt)の2種類が知られており、種類によって制御方法が異なる。DMAの場合、特許文献1や非特許文献2における、DMAのアドレス修飾機能により対応するVMのメモリ領域に、アクセスを転送する方法が知られている。一方、割込みトランザクションの場合、特許文献2のように、I/Oデバイスに対してシステム内でユニークなベクタ番号を割当て、上記ベクタ番号に従って割込みを配分する方法が知られている。
【０００６】
しかし、近年のI/OデバイスではPCI expressなどに代表される広帯域なI/Oインタフェースが主流になってきている。また半導体技術の進歩に伴い、同一のPCIデバイスに複数のPCI機能(function)を集積したチップが広く用いられている。これらのI/Oデバイスを搭載したIAサーバではI/OデバイスをPCI機能単位で異なるVMに割付ける場合が多いが、集積されるPCI機能数の増加に伴い以下の問題が顕在化している。
【０００７】
(a)レガシーの割込み機構であるINTx messageを用いた計算機システムの場合、PCIシステム当り最大4つの割込み線しか区分できない。同一の割込み線には1つのベクタしか設定できないため、異なるPCIカード上のPCI機能間でベクタが共有されてしまい、割込み要求元のI/Oデバイスを一意に特定できず割込み分配が不可能になる。
【０００８】
(b)新しい割込み方式であるMSI(Message Signaled Interrupt)および拡張仕様であるMSI-Xを用いた計算機システムの場合、割込みを処理するソフトウェア(割込みハンドラ)には割込みベクタ番号しか通知されず、割込み要求元のIDが伝達されない構成となっていた。そのため、ソフトウェアであるVMMが区分できる割込み要因は、計算機システムに実装されるCPUコア数とベクタ番号(8bit)の積までに制限される。しかし1つのPCI機能当り、割込み要因に相当するMSIベクタを最大2,048まで指定できるため、PCIカードの搭載量が増加すると逆に受信側のCPUのコア数xベクタ数を超過してしまう。本状況ではMSIベクタエントリ間で設定が重複するため、割込み要求元のI/OデバイスおよびMSIベクタエントリを一意に特定できず、割込み分配が不可能になる。
【０００９】
そこで従来のVMMでは、I/Oデバイス個別に対応していた。即ち、PCI機能間での割込みベクタの重複を許容しつつ、割込み受信時にはI/Oデバイス内部の割込み要因レジスタを読出し、割込みを要求したPCI機能とMSIベクタエントリを一意に特定する。
【００１０】
しかし、本方法ではVMMがI/Oデバイスごとに個別の処理を行う必要があり、VMMの開発工数が膨大になる。そのため、市場に広く流通しているPCI expressカードのうち、ごく一部のI/Oデバイスしかサポートできないという難点があった。そこで、I/Oデバイスの種類によらず汎用的な方法で、割込みの要求元を特定する方法が望ましい。
【００１１】
割込みの要求元を特定する汎用的な方法の1つに、特許文献3の方法が知られている。特許文献3では、PCMCIAカード上に実装される複数の入出力機能から駆動される複数の割込み線に対応して、割込み線の駆動状態を示す割込み状態レジスタを保持し、ソフトウェアから読出し可能とする構成が開示されている。また他の方法として、特許文献4の方法が知られている。本方法では、デバイスに固有のメモリ領域を割当て、I/Oデバイスが割込み状況を書き込み、CPU側から読み出す方法を開示している。他に、MSI割込みを前提としてI/Oデバイス発の割込みトランザクションの情報を差し替える方法が特許文献5で開示されている。
【００１２】
しかし、特許文献3の方法では複数のPCIデバイスからの個別に割込み線がドライブされる構成を前提としており、同一のI/Oチップ内部に複数のPCI機能が集積された場合には適用困難である。また特許文献4の方法では、I/Oデバイス発の割込みメッセージ内部に書込み先のメモリアドレス情報が保持されているため、既存のPCI expressデバイス、およびIA-32 CPUをそのまま利用することができない。さらに特許文献5の方法ではレガシーのINTx割込みを用いたシステムには適用できない、CPUコア数を超えた多量のMSI-Xベクタエントリを相互に区分できないなどの難点があった。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開2004-220218
【特許文献２】特開2006-209386
【特許文献３】特開平9-212447
【特許文献４】US2006/0047877
【特許文献５】US2008/0162762
【非特許文献】
【００１４】
【非特許文献１】“Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3B: System Programming Guide”, Nov 2008, http://download.intel.com/design/processor/manuals/253669.pdf, chapter 19 “INTRODUCTION TO VIRTUAL-MACHINE EXTENSIONS”
【非特許文献２】“Intel(R) Virtualization Technology forDirected I/O” Architecture Specification, Sep 2008, http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf, chapter 1 “Introduction”
【発明の概要】
【発明が解決しようとする課題】
【００１５】
そこで本発明では、既存のPCI express準拠のI/Oデバイスを前提に、割込み要求元のPCI機能を汎用的に特定する方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、1つ以上のCPUと、メモリと、1つ以上のI/Oデバイスを搭載した計算機システムにおいて、前記I/Oデバイスが発行する第１の割込みトランザクションを受信し、前記第１の割込みトランザクションから発行元を特定する識別子を取得し、前記識別子と対応する割込みインジケータを更新し、前記CPUに対して第2の割込みトランザクションを送出する。
【００１７】
また、前記計算機システムは更に、1つ以上の仮想計算機(VM)と、該仮想計算機を制御する仮想計算機モニタ(VMM)を実行する機能を有し、前記割込み中継方法は更に、前記I/Oデバイスの割込みを有効化し、前記第2の割込みトランザクションを受け付け、前記割込みインジケータを参照し、第1の割込みトランザクションの発行元を特定し、前記VMのいずれかに割込みを分配する。
【発明の効果】
【００１８】
本発明の手順により、従来の割込み伝達方法におけるベクタ番号に加えて、割込み要求元の識別子を、VMMの割込みハンドラに通知可能とする。前記識別子は計算機システムに搭載されるCPUコア数によらずユニークな値をI/Oデバイスに対して割付けることができるため、VMMは割込み発行元を一意に区分可能である。また、本手順はPCI express準拠のI/Oデバイスに対して適用可能であり有用である。
【図面の簡単な説明】
【００１９】
【図１】第1の実施形態を示し、本発明を適用する計算機システムのブロック図である。
【図２（ａ）】第1の実施形態を示し、I/OデバイスとPCI expressブリッジ間に設置される割込み中継回路のブロック図である。
【図２（ｂ）】第1の実施形態を示し、前記割込み中継回路中の識別子取得部の構成を示すブロック図である。
【図２（ｃ）】第1の実施形態を示し、前記割込み中継回路中の割込み送出部の構成を示すブロック図である。
【図３】第1の実施形態を示し、メモリ上に確保される割込みインジケータの内部フォーマットを示す構成図である。
【図４】前記割込み中継回路が受信する割込みトランザクションのうち、PCI express規定のINTxメッセージのフォーマットを示す構成図である。
【図５】前記割込み中継回路が受信する割込みトランザクションのうち、PCI express規定のMSI(Message Signaled Interrupt)トランザクションのフォーマットを示す構成図である。
【図６】第1の実施形態を示し、I/Oデバイスが有するMSI-Xベクタテーブルの設定例を示す構成図である。
【図７（ａ）】第1の実施形態を示し、前記計算機システムで稼動する仮想マシンモニタ(Virtual Machine Monitor, VMM)の構成を示すブロック図である。
【図７（ｂ）】前記VMMの保持するI/Oデバイス制御情報の設定例を示す構成図である。
【図８（ａ）】第1の実施形態を示し、前記割込み中継回路がI/Oデバイス発割込みトランザクションを受信した際の処理例を示すフローチャートである。
【図８（ｂ）】第1の実施形態を示し、CPUによる前記割込み中継発の割込みトランザクションの受信を契機とした、前記VMMの処理例を示すフローチャートである。
【図８（ｃ）】第1の実施形態を示し、前記VMM内部の割込みインジケータ処理部の処理例を示すフローチャートである。
【図９】第１の実施形態を示し、前記VMMの初期化処理の例を示すフローチャートである。
【図１０】第2の実施形態を示し、割込みインジケータを割込み中継回路に内蔵した場合の計算機システムのブロック図である。
【図１１】第2の実施形態を示し、前記割込みインジケータ内蔵した割込み中継回路のブロック図である。
【発明を実施するための形態】
【００２０】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【実施例１】
【００２１】
図1は第1の実施形態を示し、本発明を適用する計算機システムの構成を示すブロック図である。150サーバハードウェアに対し、外部装置として146a N/W(Network)、146bストレージ装置が接続される。150サーバハードウェア内部では、複数のCPUコア(110a〜d)とI/Oデバイス(142a〜142d)、132 メモリが、130チップセットで相互に接続されている。110a CPUコアは内部に111a割込みコントローラを有し、I/Oデバイス発の割込みトランザクション(Transaction, Tx)を受信可能としている。
【００２２】
130チップセット内では、120ホストバスブリッジが 112a〜112b CPUソケットを合計2本の 112a〜b PCI express(PCIe)リンクに接続している。さらに128a〜b PCIeブリッジがそれぞれのPCIeリンク112a, 112bを各々2本に分岐させ、122c〜fの4本のPCIeリンクを形成している。チップセットを構成する末端のPCIeポートには140a〜d割込み中継回路が接続され、I/Oデバイスから発行される割込みTxを受信し上位の128a〜b PCIeブリッジおよび120 ホストバスブリッジに中継する役割を負う。
【００２３】
PCIeツリーのエンドポイントには、122g〜j PCI expressリンクを介して 144a〜d PCI express拡張スロットが実装されており、各スロット上に前述の142a〜d I/Oデバイスが搭載される。
【００２４】
なお、チップセットの構成は本図面に記載の構成に限定されるものではない。例えば、120ホストバスブリッジ当りのPCI expressリンクは2本の構成を図示しているが、1本であっても3本以上あっても構わない。128a〜b PCIeブリッジも同様である。また理解の容易性の観点から144a〜d PCI express拡張スロットが実装された例を図示しているが、オンボードのPCI expressデバイスなど拡張スロットを実装しないI/Oデバイスに対しても本発明は同様に適用できる。これらのバリエーションについては同業者であれば想像の範囲内であり、本発明に含めるものとする。
【００２５】
132 メモリ上には後述する134割込みインジケータが格納される。割込みインジケータは、140a〜d割込み中継回路による割込みTxの受信状況を保持するデータ構造であり、140a〜d割込み中継回路および110a〜d CPUコアからアクセスされる。
【００２６】
150 サーバハードウェア上では、1つの114 VMMと、複数の170a〜k VM(Virtual Machine; 仮想計算機)が動作する。114 VMMは、150サーバハードウェアを制御するファームウェアであり、111a〜d割込みコントローラが受信した割込みを契機に、162 割込み分配部、164 割込みインジケータ参照部、166割込み有効化手段が連動して、割込みをいずれかのVMに伝達する。114 VMMの割込み伝達処理については、図８(b)を用いて後述する。170a〜k VM上では、それぞれ単一のOS(172a〜k)と、複数のアプリケーション群(図中AP群)がそれぞれ動作する。
【００２７】
図２(a)に、前記の140a割込み中継回路の構成図を示す。本回路は、一対のPCI expressリンク 122cおよび122gを介して外部に接続されている。なお、本図では図面の煩雑化を避け読者の理解を容易にするため、本発明の主眼とする割込み転送に着目して構成を図示する。PCI express規格における物理リンクレイヤや論理リンクレイヤの処理、TxレイヤでのTxのキュー制御等は図示しない。但し、同業者であれば図示されない周辺機能の実施方法については容易に想像しうる範囲である。
【００２８】
140a 割込み中継回路は、122g→122cに向かうInbound方向のTx処理を行う270 I.B.処理ブロックと、122c→122gに向かうOutbound方向のTx処理を行う272 O.B.処理ブロックの2つに大別される。
【００２９】
270 I.B.処理ブロックは、202 I.B. TLP(Transaction Layer Packet)受信部で 142a I/Oデバイス発のTxを122g PCI expressリンク経由で受信する。受信したTLPは種類によって後段の処理が異なる。割込みトランザクションであるINTxメッセージもしくはMSI TLPの場合、204割込み処理回路で処理が行われ、その他のトランザクションの場合、252 I.B.転送先判定で処理される。252 I.B.転送先判定では、従来のPCI expressブリッジで行われるアドレスベースやIDベースのTx転送が行われ公知であるため、本実施例では詳述しない。
【００３０】
204割込み処理回路は、212割込み受信部と 218識別子取得部、216 インジケータ更新部、214 割込み送出部の各処理サブブロック、およびこれらの処理サブブロックからアクセスされる保持データを有する236 保持情報から構成される。
【００３１】
212 割込み受信部は、第1の割込みトランザクションとしてINTxメッセージもしくはMSI TLPを受け取ってデコード処理を行い、後段の218識別子取得部に対して 222デコード情報を通知する。222デコード情報については紙面の都合上、逐一詳述しないが、例えばINTxメッセージ/MSI TLPの区分、TLPヘッダの各フィールド、データペイロードの一部を含む。
【００３２】
218識別子取得部は、受信したデコード情報を元に 224更新要求 および226通知要求を発行する。218 識別子取得部の詳細については図２(b)に詳述する。
【００３３】
216インジケータ更新部は、前記の134割込みインジケータを更新するためのメモリ書込み要求(MWr TLP)の発行制御を行う。更新先のアドレスおよびデータ情報については、224更新要求から受信する。
【００３４】
214割込み送出部は、226通知要求を受け取ってCPUに対して第2の割込みトランザクション(MSI TLP)の発行制御を行う。本サブブロックの詳細については図２(c)に詳述する。
【００３５】
238 保持情報には、インジケータ更新に関する情報として234 INTx table base, 236 MSI table baseを、割込みTx発行に関する情報として 228a MSI addr, 228b MSI dataを保持する。各情報の用途については、図２(b)、図２(c)にて後述する。
【００３６】
204 割込み処理回路からは、割込みインジケータを更新する 230 MWr TLP情報と、232 MSI TLP情報がアサートされる。240 I.B. TLP送出部では、230 MWr TLP情報、232 MSI TLP情報に加えて、252 I.B.転送先判定から送出されたTLP情報、256 completion TLP情報を調停し、PCI express準拠のTLPを生成して122c PCI expressリンクへ送出する。
【００３７】
一方、272 O.B.処理ブロックでは、250 O.B. TLP受信部で受信したTLPの転送先を254 O.B.転送先判定で決定する。本処理において、238 保持情報に対する read/writeアクセスの場合、258 内部レジスタアクセス経由で参照/更新した上で、256 completion TLP情報にて応答を制御する。238 保持情報に対するアクセスか否かは、例えばPCI configuration Txにおける Type0形式のTLPの場合で、かつデバイス番号、機能番号が合致する場合に238保持情報に対するアクセスと見なす実装例が考えられる。また、他の実現方法としてメモリマップドI/O (MMIO)レジスタとして238保持情報を実現し、TLP内のアドレス情報をデコードして判定する実装例も考えられる。このように 254 O.B.転送先判定処理の実現方法はいくつかのバリエーションが考えられるが、いずれも同業者であれば容易に類推可能な範囲である。
【００３８】
上記以外のTLPの場合は、260 O.B. TLP送出部に転送され、122g PCI expressリンクから送出される。
【００３９】
図２(b)に、218 識別子取得部の詳細を示す。本処理サブブロックでは、INTxメッセージもしくはMSI TLPの区分に応じて、割込みTxの発行元を特定するための割込み識別子(328a, 328b)を算出する。328a/b 割込み識別子を基に、更新対象の割込みインジケータのアドレス計算を行う。
【００４０】
まず、300 INTx message処理部の処理内容を説明する。300 INTx message処理部では、INTxメッセージのヘッダから 310a Req ID, 624 codeを取得する。INTxメッセージ形式を図4に示す。624 codeは全8bitから構成されるが、bit<1-0>部分に 620 line情報が、bit2部分に 622 assert情報がそれぞれエンコードされている。620 line情報は、割込み要求元のデバイスが、仮想割込みワイヤのINTA/B/C/Dのいずれをアサート/デアサートしたかを示す。622 assert情報は、0の場合アサートを、1の場合にデアサートを示す。
【００４１】
上記の情報のうち、310a ReqIDおよび620 line情報を用いて328a割込み識別子を生成する。もっとも直感的な実現例としては、TAP回路にて620 lineをbit<1-0>に、310a ReqIDを 328a割込み識別子のbit<18-2>にマッピングする方法が考えられる。また150サーバハードウェア上で多数のPCIバスを使用していない場合、例えば 310a ReqIDの下位数ビットのみを識別子として使用しても構わない。328a割込み識別子に対して、234 INTx table baseを加算し、134割込みインジケータ中の書込み位置として 324a target addressを算出する。
【００４２】
前記のアドレス算出の例では説明の単純化のため、328a 割込み識別子1つに対して1バイトを割当てる前提としている。PCI expressでは4バイト以下の書込みに関しては書込み位置をバイトイネーブル(byte enable, BE)で指定する仕様であるため、後段の216 インジケータ更新部で適切なBEを生成する。なお、328a 割込み識別子1つに対してより小さい割付範囲(例えば 1ビット/割込み識別子)を指定して、134 割込みインジケータのメモリ占有量を減らす実施例も考えられる。その場合は140a 割込み中継回路が 134 割込みインジケータをアトミックに読出して更新する処理を行う。いずれも同業者であれば実現方法は容易に想像できるため、本発明の範囲に含めるものとする。
【００４３】
一方、書込みデータについては、622 assert情報をビット反転した値を取り出す(326a write data)。本データは書込みデータの最小単位(例；1バイト)に伸張され、最終的に割込みインジケータに書き込まれる。本処理により、アサート通知の場合には対応する割込みインジケータに1をセットし、デアサート通知の場合には0にリセットする。
【００４４】
次に302 MSI TLP処理部の処理内容を説明する。IAサーバにおけるMSI TLPは宛先アドレス FEEx_xxxxhに対する4B MWrである。図5にMSI TLPフォーマットを図示する。MSI TLPは、702 MSI TLPヘッダおよび 704 MSI TLPデータから構成される。本図では752 delivery modeが “000b”(fixed)の場合を図示したが、他のモードを使用するか否かは130チップセットおよび114 VMMに依存する。
【００４５】
302 MSI TLP処理部ではMSI TLPヘッダのうち、310b ReqID、314宛先ID、MSI TLPデータ中の316 vectorを参照して328b 割込み識別子を取得する。328a割込み識別子と同様、328b 割込み識別子のビットエンコーディングは複数の実施例が考えられるが、例えば 316 vector番号を328b割込み識別子のbit<7-0>に、314 宛先IDをbit<15-8>に、310b ReqIDを bit<31-16>に割付ける方法が考えられる。310b ReqIDのビットアサインも300INTx message処理部と同様に、150サーバハードウェア内に搭載されているPCIバス数に応じて、特定のビットをアサインせず削減する方法も考えられる。
【００４６】
また、本発明の割込み中継回路140a〜dを用いる場合、314宛先IDのビットアサインについては、150サーバハードウェアに搭載されているCPUコア(110a〜d)の数に関わらずに任意の数字を114 VMMがアサインできる。なぜならば、142a I/Oデバイスが発行するMSI TLPは全て140a割込み中継回路のみが受信し処理されるため110a〜d CPUコアから認識されないためである。本性質を用いて、114 VMMは同一のPCI機能内部でユニークな番号を I/Oデバイス内部のMSI-Xベクタレジスタに設定する。114 VMMによるMSI-Xベクタテーブルの設定例を図6に、MSI-Xベクタテーブルの設定手順を含むVMM初期化処理フローを図9に後述する。
【００４７】
書込みデータである326 write dataについては、固定値1を用いる。MSI TLPの場合は原則エッジ割込み(754 trigger mode = 0)であるため、割込みTxの都度割込みインジケータが1にセットされる。
【００４８】
300 INTx message処理部および302 MSI TLP処理部で算出されたアドレス情報(324a, 324b)、および書込みデータ情報(326a, 326b)は、330セレクタによって選択され、224 更新要求に送られる。同時に 226 通知要求がアサートされる。
【００４９】
図２(c)を用いて、214割込み送出部の構成を説明する。214 割込み送出部では、238保持情報のうち228a MSI addr、228b MSI dataを参照し、226 通知要求に同期してCPUに対して割込みTxを生成するための232 MSI TLP情報を送出する。MSI TLPのヘッダ情報(420 header info.)には、410 address, 412 fmt, 414 type, 416 length, およびその他の付属情報(418)が含まれる。MSI TLPヘッダ中のビットエンコーディングについては、図5に準じる。410 addressのbit<31-2>は 228a MSI addrの情報を用い、下位2bitは0とする。412 fmt, 414 type, 416 lengthは IAサーバにおけるMSI TLPを示す 4B MWrの情報を固定的に生成する。418 otherについては紙面の都合上省略する。422 data info.は228b MSI data情報をそのまま用いる。本処理により、228aおよび228bに設定された情報に即して第2の割込みトランザクションであるMSI TLPが生成される。
【００５０】
図3に第1の実施形態における割込みインジケータの構成例を示す。本図では134 割込みインジケータがメモリ空間上にマップされたバイトマップテーブルの形式としている。134割込みインジケータは、内部的に510 INTx用割込み情報テーブルと、512 MSI用割込み情報テーブルをそれぞれ保持する。なお、本図面ではいずれもPCIバス番号0〜0Fhまでを処理対象とした例を図示している。
【００５１】
510 INTx用割込み情報テーブルは、幅4バイト(2bit)、深さ4,096(12bit)エントリから構成されている。各エントリには、割込みTx発行元の(PCIバス番号:デバイス番号.機能番号)に対応して、INTA/B/C/Dの各仮想ワイヤのアサート状態が格納される(514a〜514d)。いずれも 0がデアサート状態、1がアサート状態を示しており、セット/リセット処理ともに140a〜d割込み中継回路から実施される。
【００５２】
一方、512 MSI用割込み情報テーブルには、幅64キロバイト(16bit)、深さ4,096(12bit)エントリから構成されている。各エントリには、割込みTx発行元の (PCIバス番号:デバイス番号.機能番号)に対応して、宛先ID(8bit)、ベクタ番号別のバイトマップを形成している(516a〜516h)。いずれも0がデアサート状態、1がアサート状態を示しており、セット処理は140a〜d割込み中継回路から、リセット処理は114 VMMからそれぞれ行われる。
【００５３】
512 MSI用割込み情報テーブルの利用に先立ち、114 VMMはシステム内のI/Oデバイスが保持するMSI設定情報にユニークな値を設定して、割込み要求元を一意に区分する。
【００５４】
図6を用いて、MSIの情報を保持するMSI-Xベクタテーブルの設定例を示す。なお、本図ではMSIの拡張仕様であるMSI-Xのベクタテーブル設定のみを図示するが、MSIについても設定レジスタが1セットのみのサブセットに当る仕様となっており同業者であれば構成を類推可能であるため、詳述を避ける。
【００５５】
142cおよび142d I/Oデバイスは、複数のMSI addrレジスタおよびMSI dataレジスタのセットから構成される、802aおよび802b MSI-Xベクタテーブルを保持している。図6は、MSI-Xの最大ベクタテーブルエントリ数の2,048エントリを有するPCIデバイスを2つ、150サーバハードウェアに搭載した場合の例を示す。以下、142c I/Oデバイスの部分に注目して設定情報を説明する。
【００５６】
MSI-Xベクタエントリ中のMSI addrレジスタ中には314宛先IDと、316a vectorが保持される。142c I/OデバイスがMSI TLPを発行する場合には、図5中の314 宛先IDに図6中の314宛先IDの設定値が、図5中の316 vectorに図6中の316a vectorの設定値がそれぞれ反映される。114 VMMは(PCIバス番号:デバイス番号.機能番号)で特定されるPCI機能内のMSI-Xベクタエントリに対して、固有の番号を割付ける。この図の例では、全2,048エントリに対して 314a 宛先IDを0〜7まで、316a vectorを0〜256まで、ユニークに割当てている。本設定により、MSI-Xテーブル内のエントリごとに個別の134割込みインジケータのアドレスを割当て可能となり、114 VMMが割込み要求元をMSI-Xテーブルエントリレベルで一意に識別できる。本実施例では、単一のPCI機能に対して 最大65,536のMSI-Xエントリを区分できる。
【００５７】
次に、図７(a)を用いて114 VMMの内部構成例を示す。114 VMMは902 物理外部割込みを契機に起動される910 割込みハンドラと、受信した割込みを170a〜k VMに分配する162 割込み分配部、912 I/Oデバイス制御情報、164 割込みインジケータ参照部、166 割込み有効化手段、926 VM構成情報から構成される。なおVMM内部の機能ブロックについては複数の実現構成が考えられる。例えば、164割込みインジケータ参照部を 162割込み分配部に内蔵するなどの構成である。いずれもVMMを含むソフトウェア開発者であれば容易に想像できる範囲であり、本発明の範囲に含めるものとする。
【００５８】
910 割込みハンドラは、外部割込みのベクタ(911)を 162 割込み分配部に通知し、割込み処理完了後に904 EOI発行を行う。162 割込み分配部は、912 I/Oデバイス制御情報、および164 割込みインジケータ参照部を介して割込みインジケータの参照/更新(914)を行う。参照結果を元に割込みの通知先のVMを決定し、該当するVMに対して論理割込み通知を行う(930)。
【００５９】
166 割込み有効化手段には、922 I/Oデバイスレジスタ設定と 924割込み中継設定手段がそれぞれ含まれる。いずれもVMMの初期化時に使用され、142a〜d I/OデバイスのMSI-Xベクタテーブルと、140a〜d割込み中継回路に含まれる238保持情報を設定するサブモジュールである。本手段を含めた114 VMMの初期化処理フローは図9に後述する。
【００６０】
926 VM構成情報は、170a〜k VM毎に、割当てたメモリ領域やCPU、I/O資源の情報を保持するサブモジュールである。本モジュールの実現手段は同業者であれば自明であり、詳述は行わない。
【００６１】
図７(b)に912 I/Oデバイス制御情報の設定例を示す。912 I/Oデバイス制御情報は、1000 I/Oデバイス関連情報と、1062 割込みインジケータ情報を保持する。
【００６２】
1000 I/Oデバイス関連情報は、1001 中継回路情報と 1002 物理I/Oデバイス情報、1004 論理I/Oデバイス情報の関係付け情報を有する。1001 中継回路情報には、中継回路のID(1040)と1042中継割込みベクタを保持する。VMMは1040中継回路IDに対応して個別の1042 中継割込みベクタを設定する。162割込み分配部は911 割込みベクタ経由で 1042中継割込みベクタを受信する。
【００６３】
1002物理I/Oデバイス情報は、1010 デバイスID、1011 割付有無、1013 INT line、1014 MSI設定情報を保持し、いずれも割込みインジケータの参照/更新対象を特定するために用いられる。即ち、134割込みインジケータ中の 510 INTx用割込み情報テーブルを参照する際には、911 割込みベクタで通知された番号と1042 中継割込みベクタと合致し、かつ1011割付有無が“有”のエントリを全て取出し、1010 デバイスID(310a ReqIDに対応)、1013 INT line (620 lineに対応)を用いて対応する割込みインジケータ位置を特定する。
【００６４】
また、512 MSI用割込み情報テーブルを参照する際には、1014 MSI設定情報を用いて割込みインジケータ位置を特定する。1014 MSI設定情報には、1018a 宛先ID(314 宛先IDに対応), 1020aベクタ(316 ベクタに対応)を用いて対応する割込みインジケータ位置を特定する。
【００６５】
1000I/Oデバイス関連情報では、1001中継回路情報、1002物理I/Oデバイス情報に対応して、1004 論理I/Oデバイス情報を保持している。本情報には、1030 VM#、1032 論理デバイスID、1034 論理INT line、1036 論理MSI設定情報を含んでおり、本情報から前記の割込みインジケータがセットされていた場合に割込みの転送対象のVM(170a〜k)および通知情報が決定される。各VMへの割込みの通知方法は、VMMによるゲストOS(172a〜k)の外部割込みハンドラへの分岐や、IA-32 CPUに搭載されているVT(Virtualization Technology)を用いた割込みインジェクション機能による方法など、複数が考えられる。いずれも既存のVMMで実現可能な方法であり、紙面の都合上詳述しない。
【００６６】
1062 割込みインジケータ情報には、1064 INTx用テーブルベースアドレス、1066 MSI用テーブルベースアドレスの各情報を保持する。本情報を用いて、114 VMMは参照すべき割込みインジケータの場所を特定する。
【００６７】
図８(a)に、割込み中継回路の処理フローを、140aを例に示す。1110の処理ステップで、140a割込み中継回路が142a I/Oデバイス発の割込みTxを122g PCI expressリンク経由で受信する。次に212割込み受信部にて、受信した割込みTxをデコードし(1112)、Tx種類に応じてINTxメッセージの場合に1114a〜1118aの処理を、MSI TLPの場合に 1114b〜1118bの処理を順次実施する。
【００６８】
INTxメッセージ受信時は、1114aステップで INTxメッセージ中の 310a ReqID, 620 line情報を参照して、328a割込み識別子を取得する。328a割込み識別子の算出方法は、例えば328a割込み識別子のbit<1-0>に 620 line情報を、bit<17-2>に310a ReqIDを割当てる等が考えられる。次に取得した328a割込み識別子と234INTx table base情報を参照して、324a target addressを取得する(1116a)。本処理では、例えば328a割込み識別子と234 INTx table baseを加算する。次に1118aステップにて、622 assert情報を参照して割込みインジケータへ書込むデータを決定する。本例ではAssert_INTxメッセージを示す622 assert=0の場合に1を、622 assert=1の場合に0をそれぞれセット/リセットするよう、326a write dataを設定する。
【００６９】
一方、MSI TLP受信時には、1114bステップでMSI TLP中の 310b ReqID, 314宛先ID、316 vectorを参照し、328b割込み識別子を取得する。328b割込み識別子の算出方法は、例えば328b割込み識別子のbit<7-0>に316 vectorを、bit<15-8>に314宛先IDを、bit<31-16>に310 ReqIDを割当てる等が考えられる。次の1116bステップでは、328b割込み識別子と236 MSI table base情報を参照し、324b target addrを特定する。本処理では、例えば328b割込み識別子と236 MSI table baseを加算する。次に1118b処理ステップにて、326b write dataに1を設定する。
【００７０】
最後に1120ステップにて、224更新要求、226通知要求をアサートし、216インジケータ更新部へ230 MWr TLP情報の生成、および214割込み送出部に232 MSI TLP情報の生成をそれぞれ要求する。
【００７１】
その後、割込み中継回路(140a)からの割込み(MSI TLP)を受信したCPUにて、114 VMMが起動される。図８(b)に割込みを受信したVMMの処理フローを示す。
1210処理ステップで、110a〜d CPUコアのいずれかが902 物理外部割込みを受信し、910割込みハンドラが起動される。
【００７２】
910割込みハンドラは、911割込みベクタを特定し(1212)、162割込み分配部へ通知する。162割込み分配部は、912 I/Oデバイス制御情報を参照し、1042中継割込みベクタに対応する情報エントリ(1051〜1056)を特定する(1214)。
【００７３】
なお、同一の割込みベクタ911に対して複数の情報エントリ(1051〜1056)が該当するケースがあり、その場合は後述の処理ステップ1216〜1220が対象エントリの数だけ複数回実行され、全エントリの処理が完了した場合にのみ判断1224が成立する。
【００７４】
次に、1216処理ステップにて、162割込み分配部は164割込みインジケータ参照部を呼出し(サブルーチンコール)、対応する割込み情報インジケータを取得する。1216の処理内容については、図８(c)に後述する。取得した割込みインジケータ値が1の場合、処理ステップ1217〜1220の処理を順次行う。一方、取得した割込みインジケータ値が0の場合は1217〜1218の処理をスキップし1220に処理を移行する。
【００７５】
さて、1217処理ステップでは162割込み分配部は164割込みインジケータ参照部を呼出して処理を行う。1217処理ステップでは1000 I/Oデバイス関連情報のうち、1010 デバイスIDを取得し、割込みの発行元I/Oデバイスを特定する。例えば、1051エントリに対応する割込みインジケータが1にセットされていた場合、1010デバイスIDから (00:02.0)の物理I/Oデバイスから、INTAラインがアサート(1013)、もしくは MSI-Xエントリの0番目に起因するMSI TLPが発行されたことが分かる。
【００７６】
1218処理ステップにて、1004論理I/Oデバイス情報を参照し、対応する170a〜170k VMを特定して論理割込みを伝達する。たとえば1051エントリに対応する割込みインジケータが1にセットされていた場合、割込みの通知先VM番号は1(1030 VM#参照)、対応する論理デバイスID 1032は(00:2.0)、INTxによる仮想割込みラインはA(1034)、MSIを使用するOSの場合は、1036 論理MSI設定情報から論理I/OデバイスのMSI-Xエントリが0番、宛先ID 1018bが0、ベクタ1020bが32と判別できる。
【００７７】
次に1220処理ステップにて、処理対象を次の情報エントリに進める。1224判定ステップにて、処理対象エントリのうち完了していない情報エントリがあれば1216ステップに戻って処理を継続し、全てを処理済みになったら終了側(1204)に遷移する。
【００７８】
図８(c)を用いて、1216処理ステップにおける164割込みインジケータ参照部の処理フローを示す。本処理フローは大きくINTx用割込み情報テーブルを参照する処理部分(1330)、およびMSI用割込み情報テーブルを参照する処理部分(1332)に分かれる。
【００７９】
PCIではINTxおよびMSI割込みは排他的に使用するよう定められており、本処理ではいずれか一方のみを参照する。図８(c)の例では、1330処理グループにてINTx用割込み情報テーブルを先に参照し、INTxに起因する割込みインジケータがセットされていない場合に1332処理グループを実行するようにしている。なお、本処理の実現方法については複数考えられ、両方を参照しても構わないし、140a〜d I/Oデバイスに設定されたレジスタ情報に基づいてINTx/MSIのいずれか一方の情報テーブルのみを参照するようにしても構わない。いずれも同業者であれば容易に想像できる範囲であり、本発明の範囲内とする。
【００８０】
1330 INTx用割込み情報テーブル参照処理に関し、まず1310処理ステップにて1010デバイスID、1013 INT line情報を用いてINTx用割込み識別子(328a)を特定する。INTx用割込み識別子(328a)のビットアサインに関しては、図２(b)に示したTAP論理に準じる。次に1312処理ステップにて、割込み識別子から参照対象インジケータのアドレスを算出する。最後に1314処理ステップにて対象の割込みインジケータ値を取得する。取得に対しては通常のロード/ストア命令を用いることができる。取得した割込みインジケータ値が1(INTx割込みあり)の場合は処理を終了し、0(INTx割込みなし)の場合は1332処理グループに遷移する。
【００８１】
1332 MSI用割込み情報テーブル参照処理では、まず1316処理ステップにて、1010デバイスID、1018a宛先ID、1020aベクタの各情報を用いてMSI用割込み識別子328bを算出する。MSI用割込み識別子328bのビットアサインに関しては、図２(b)に示したTAP論理に準じる。次に1318処理ステップにて、割込み識別子から参照対象インジケータのアドレスを算出する。最後に1320処理ステップにて参照対象インジケータをアトミックに取得しリセットする。
【００８２】
本処理は、第1の実施形態における、132メモリ内に134割込みインジケータが含まれる構成では、ロックつきの比較交換命令(lock cmpxchg)を用いて実現できる。一方、後述する第2の実施形態における、140e割込み中継回路に134b割込みインジケータが含まれる構成では、通常のロード命令(mov)や I/O命令(in)を用いて実現される。これは、図11を用いて後述するが、254b O.B.転送先判定が134b割込みインジケータの読出しに同期して対象のリセットを行うためである。
【００８３】
1332処理ステップでは、取得した参照対象インジケータの情報を割込み分配部へ応答する。
【００８４】
図9に、本発明に関する114 VMMの初期化処理フローを示す。紙面の都合上、本図では140a〜d割込み中継回路に関する処理部分のみを図示する。
【００８５】
1410処理ステップにて、114 VMMがメモリ上にロード・展開される。VMMのロードは専用のローダプログラムで実施されても良いし、OSの一機能として実現されていても構わない。
【００８６】
1412処理ステップにて、114VMMは150サーバハードウェアに接続される142a〜142d I/Oデバイスのリストアップを行う。
【００８７】
1414処理ステップでは、912 I/Oデバイス制御情報中の1001中継情報、および1062割込みインジケータ情報を設定する。本情報の設定に当り、114 VMMは、各VM(170a〜k)に割当てる資源と異なる専用のメモリ領域を、確保する。
【００８８】
次に1416処理ステップにて、140a〜d中継回路中の238保持情報を設定し、割込みを使用するI/Oデバイスセットを定義する。第1の実施形態では、142a〜dの全てのI/Oデバイスが割込みを使用するものとする。
【００８９】
1418処理ステップでは、割込みを使用するI/Oデバイスについて、1002物理I/Oデバイス情報中の1010デバイスID、1011割付有無、1013 INT lineの設定を行う。
【００９０】
1420処理ステップでは、1014 MSI設定情報について1010デバイスIDが同一のエントリの間で、ユニークな値を設定する。例えば、図７(b)中の1053, 1054エントリは同一のID (02:00.0)のPCIデバイス内部の異なるMSI-Xエントリへの設定情報を保持しており、相互のMSI-Xエントリを区分するため、異なる1020aベクタ番号を付与している。
【００９１】
1422処理ステップでは、1420処理ステップで1014 MSI設定情報に付与されたユニークな設定値を、142a〜d I/Oデバイス内部のMSIレジスタおよびMSI-Xテーブル(802a, 802b)に設定する。本処理により、各I/Oデバイスの割込みが有効化されると共に、142a〜d割込み中継回路は割込み発行元のPCIデバイスをMSI-Xテーブルエントリレベルで一意に区分可能となる。
【００９２】
1424処理ステップでは、170a〜170k VMの構成情報を取得し、1426処理ステップにて1004論理I/Oデバイス情報の設定を行う。VMM初期化時点で設定される対象は1030 VM#、1032論理デバイスID、1034論理INT line情報である。1036 論理MSI設定情報は、172a〜172kゲストOSのブート後に設定されるため、本フロー中では対象とならない。
【００９３】
以上に示した第1の実施形態の構成および処理手順によれば、IOデバイスとCPUコアとの間に割込み中継回路を設け、この割込み中継回路により、IOデバイス等の割込み要求元の識別子（割込み識別子）を算出し、算出した割込み識別子をCPUに送信し、且つメモリに保存され割込み識別子に対応する割込みインジケータを更新する。そして、割込み識別子を受信したCPUにてVMMを起動し、起動されたVMMが、メモリ中の更新された割込みインジケータを読みとるので、既存のPCI express準拠のI/Oデバイス142a〜142dをそのまま利用しつつ、114 VMMが割込み要求元のPCI機能を汎用的に特定することが可能になる。
【実施例２】
【００９４】
次に、本発明の第2の実施形態を添付図面に基づいて説明する。図10は、第2の実施形態に基づいた計算機システムの構成図である。第1の実施形態と異なり、132メモリには134 割込みインジケータを設けず、140e〜140hの割込み中継回路に内蔵する。
【００９５】
図11に、第2の実施形態により140e割込み中継回路の構成を例示する。204割込み処理回路は、内部の238保持情報として新たに134b割込みインジケータを設ける。134b割込みインジケータはフリップフロップ(FF)やSRAM、DRAM等の記憶素子で実現され、110a〜110d CPUコアからアクセス可能としている。216bインジケータ更新部では第1の実施例と異なり、MWr TLP情報を生成する代わりに直接134b割込みインジケータを更新する。
【００９６】
CPU上で稼動する114 VMMからの134b割込みインジケータへのアクセス時には、272 O.B.ブロックで要求TLPを受付け、254b O.B.転送先判定で処理される。254b O.B.転送先判定で宛先が134b割込みインジケータと判断した場合は、258b内部レジスタアクセスを経由してread/writeを行う。本処理において、512 MSI用割込み情報テーブルへのreadアクセスと判断した場合は、データリターン(256 completion TLP情報の生成)に同期して、対象のリセットを行う。本処理により、図８(c)中の1320処理ステップのアトミックな割込みインジケータの取得とリセットが実現される。
【００９７】
以上に示した第2の実施形態の構成および処理手順により、既存のPCI express準拠のI/Oデバイスを142a〜142dそのまま利用しつつ、114 VMM割込み要求元のPCI機能を汎用的に特定することが可能になる。
【００９８】
以上に示した第２の実施形態の構成および処理手順によれば、IOデバイスとCPUコアとの間に割込み中継回路を設け、この割込み中継回路により、IOデバイス等の割込み要求元の識別子（割込み識別子）を算出し、算出した割込み識別子をCPUに送信し、且つ割込み中継回路に保存され割込み識別子に対応する割込みインジケータを更新する。そして、割込み識別子を受信したCPUにてVMMを起動し、起動されたVMMが、割込み中継回路中の更新された割込みインジケータを読みとるので、既存のPCI express準拠のI/Oデバイス142a〜142dをそのまま利用しつつ、114 VMMが割込み要求元のPCI機能を汎用的に特定することが可能になる。
【符号の説明】
【００９９】
110a〜d  CPUコア
111a〜d  割込みコントローラ
112a〜b  CPUソケット
114  VMM
120  ホストバスブリッジ
122a〜j  PCI expressリンク
128a, b  PCI expressブリッジ
130  チップセット
132  メモリ
134  割込みインジケータ
140a〜d  割込み中継回路
142a〜d  I/Oデバイス
144a〜d  PCI express拡張スロット
146a  ネットワーク装置(Network, N/W)
146b  ストレージ装置
150  サーバハードウェア
162  割込み分配部
164  割込みインジケータ参照部
166  割込み有効化手段
170a〜k  VM (Virtual Machine、仮想サーバ)
172a〜k  ゲストOS
202  I.B.(Inbound) TLP受信部
204  割込み処理回路
212  割込み受信部
214  割込み送出部
216  インジケータ更新部
218  識別子取得部
222  デコード情報
224  更新要求
226  通知要求
228a  MSI addrレジスタ
228b  MSI dataレジスタ
230  MWr(memory write) TLP
232  MSI TLP
234  INTx table baseレジスタ
236  MSI table baseレジスタ
238  保持情報
240  I.B. TLP送出部
250  O.B.(Outbound) TLP受信部
252  I.B. 転送先判定
254  O.B. 転送先判定
256  completion TLP情報
258  内部レジスタアクセス
260  O.B. TLP送出部
270  I.B.処理ブロック
272  O.B.処理ブロック
300  INTx message処理部
302  MSI TLP処理部
306  INTx message通知パス
308  MSI TLP通知パス
310a,b  ReqID
312  Tx enable
314  宛先ID
316,316a,316b  vector
324a,b  target addr
326a,b  write data
328a,b  割込み識別子
330  セレクタ(SEL)
410  address
412  fmt
414  type
416  length
418  other
420  header info.
422  data info.
510  INTx用割込み情報テーブル
512  MSI用割込み情報テーブル
514a〜d  INTA〜D対応バイト
516a〜h  宛先ID#0〜255、ベクタ#0〜255対応バイト
602  INTxメッセージヘッダ
610  Reservedフィールド
620  line
622  assert
624  code
630  fmt
632  type
702  MSI TLPヘッダ
704  MSI TLPデータ
710  length
722  1st DW BE (double-word byte-enable)
724  last DW BE
730  fmt
732  type
752  delivery mode
754  trigger mode
802a,b  MSI-Xベクタテーブル
902  物理外部割込み
904  EOI(End-Of-Interrupt)発行
910  割込みハンドラ
911  割込みベクタ
912  I/Oデバイス制御情報
914  割込みインジケータ参照/更新
916  MSIレジスタ設定
918  中継情報設定
922  I/Oデバイスレジスタ設定手段
924  割込み中継回路設定手段
926  VM構成情報
930  論理割込み通知
1000  I/Oデバイス関連情報
1001  中継回路情報
1002  物理I/Oデバイス情報
1004  論理I/Oデバイス情報
1010  デバイスID
1011  割付有無
1013  INT line
1014  MSI設定情報
1016a,b  MSI-Xエントリ#
1018a,b  宛先ID
1020a,b  ベクタ
1030  VM#
1032  論理デバイスID
1034  論理INT line
1036  論理MSI設定情報
1040  回路ID
1042  中継割込みベクタ
1051〜1055  I/Oデバイス割当情報エントリ
1062  割込みインジケータ情報
1064  INTx用テーブルベースアドレス
1066  MSI用テーブルベースアドレス
1110〜1120  140a割込み中継回路処理ステップ
1210〜1220  114 VMM割込み中継処理ステップ
1224  処理終了判断
1330  INTx用割込み情報テーブル参照処理グループ
1332  MSI用割込み情報テーブル参照処理グループ
140e〜h  第2の実施形態における割込み中継回路
134b  第2の実施形態における割込みインジケータ
216b  インジケータ更新部
254b  O.B.転送先判定
258b  内部レジスタアクセス
【図１】
2010250453.tif 000003
【図２（ａ）】
2010250453.tif 000004
【図２（ｂ）】
2010250453.tif 000005
【図２（ｃ）】
2010250453.tif 000006
【図３】
2010250453.tif 000007
【図４】
2010250453.tif 000008
【図５】
2010250453.tif 000009
【図６】
2010250453.tif 000010
【図７（ａ）】
2010250453.tif 000011
【図７（ｂ）】
2010250453.tif 000012
【図８（ａ）】
2010250453.tif 000013
【図８（ｂ）】
2010250453.tif 000014
【図８（ｃ）】
2010250453.tif 000015
【図９】
2010250453.tif 000016
【図１０】
2010250453.tif 000017
【図１１】
2010250453.tif 000018