WO2015159359A1 - 物理計算機 - Google Patents
物理計算機 Download PDFInfo
- Publication number
- WO2015159359A1 WO2015159359A1 PCT/JP2014/060685 JP2014060685W WO2015159359A1 WO 2015159359 A1 WO2015159359 A1 WO 2015159359A1 JP 2014060685 W JP2014060685 W JP 2014060685W WO 2015159359 A1 WO2015159359 A1 WO 2015159359A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- cpu
- report destination
- interrupt
- bitmap
- interrupt report
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
物理計算機は、複数のCPUと、前記複数のCPU上で動作する複数のOS(Operating System)と、前記複数のOSが使用する複数のデバイスと、前記複数のOSのうち少なくとも2つのOSが使用するIOMMU(Input/Output Memory Management Unit)と、を備える。前記IOMMUは、前記少なくとも2つのOSに対応するCPUについての割り込み報告先CPUの情報を参照することにより、割り込みを発生させる。
Description
本発明は、1つの物理計算機で2つ以上のOSが動作する物理計算機におけるIOMMU制御方法に関する。
近年、物理計算機上のハードウェアリソースを有効に活用するために、1台の物理計算機上で2つ以上のOS(Operating System)を起動する技術が注目されている。本技術分野の背景技術として、特許文献1がある。
特許文献1には、「割り込み処理手段が、割り込み発生時に割り込み要因に基づいて該割り込みを処理すべきOSを決定し、該割り込み発生時に該計算機で実行されていたOSと前記決定したOSとが異なる場合に前記決定したOSのモジュールを呼び出し、前記決定したOSによる前記割り込みの処理が終了した後に、前記実行されていたOSの実行の再開を指示する」と記載されている。
特許文献1では、1つデバイスからの割り込みについて2つ以上のOSで処理することが想定されていない。また、デバイスが使用するメモリアドレスについて、ゲストアドレスからホストアドレスへのアドレス変換のための装置は、一般にIOMMU(Input/Output Memory Management Unit)と呼ばれる。IOMMUにより障害が検知された場合、障害割り込みが発生し、直ちにデバイスをリセットする必要があるが、IOMMUが2つ以上のOSから使用される場合に障害割り込みを使用することができない。また、従来より、各OSの使用するデバイスをどのようにIOMMUに登録するかという課題もある。
本発明の目的は、2つ以上のOSで1つのIOMMUを使用できるようにする技術を提供することにある。
上記課題を解決する為に、例えば特許請求の範囲に記載の構成を採用する。本願は上記課題を解決する手段を複数含んでいるが、その一例をあげるならば、複数のCPUと、前記複数のCPU上で動作する複数のOSと、前記複数のOSが使用する複数のデバイスと、前記複数のOSのうち少なくとも2つのOSが使用するIOMMU(Input/Output Memory Management Unit)と、を備える物理計算機であって、前記IOMMUは、前記少なくとも2つのOSに対応するCPUについての割り込み報告先CPUの情報を参照することにより、割り込みを発生させる、物理計算機が提供される。
本発明によれば、2つ以上のOSで1つのIOMMUを使用することができる。
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成および効果は、以下の実施例の説明により明らかにされる。
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成および効果は、以下の実施例の説明により明らかにされる。
以下、添付図面を参照して本発明の実施例について説明する。なお、添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
IOMMUは、DMA(Direct Memory Access)によりデバイスがメモリにアクセスする際に仮想アドレスを物理アドレスに変換する機能を持つ。この機能は仮想計算機を実現する際などに用いられる。
IOMMUは、デバイスのアクセスできるメモリ範囲を限定することで、デバイスの誤動作時におけるメモリのデータを保護することができる。IOMMUによりデバイスの誤動作を検知した際にはデバイスが異常状態となっていることから、デバイスに対してリセットを実施する等によりデバイスを直ちに停止させる必要がある。
本実施例におけるIOMMUは、デバイスの誤動作を検知した時に障害割り込みを発生させ、OSに対して障害の報告を行う機能を持つ。デバイスで障害が発生した場合、割り込みによってOSへ通知する。
しかし、IOMMUでは1つのOSで使用することを前提としており、障害報告用割り込みの設定は1つしか用意されていない場合がある。一方で、2つ以上のOSのデバイスで1つのIOMMUを使用していた場合にはその障害が発生したデバイスを使用していたOSで障害処理をする必要があり、それぞれのOSに対して割り込みを発生させる必要がある。
複数のOSに対して障害を報告する方法として、障害割り込みをブロードキャストする方法がある。しかし、1つのOSが複数のCPUを使用している場合や、IOMMUを使用していないOSが存在する場合に、不要な割り込みが発生する等の課題がある。また、1つのOSで割り込みを受信してOS間通信機能を使用して伝達する場合、割り込みを直接使用する場合と比較して伝達するまでに時間が掛かってしまい、障害処理の開始が遅れるという課題がある。
ここで、ビットマップを使用することによって、割り込みを伝達するCPUを選択する方式がある。例えば、x86アーキテクチャでは、論理デスティネーションモードにおいてはそれぞれのCPUに対応するビットを割り振ることによって割り込みを伝達するCPUを指定することが可能である。このような方式を利用することにより、必要なCPUに対してのみ障害割り込みを伝達することができる。
本実施例では1つの物理計算機上で2つ以上のOSが動作する構成において、2つのOSからIOMMUを使用する方法について説明する。2つのOSでは、それぞれ物理計算機上の1つ以上のCPUを使用する。図1は、本発明の実施例に係る物理計算機の構成の例を示す図である。物理計算機は、複数のCPUと、複数のCPU上で動作する複数のOSと、複数のOSが使用する複数のデバイスと、複数のOSのうち2つのOSが使用するIOMMU(Input/Output Memory Management Unit)と、を備える。
図1に示すように、物理計算機101上で、OS102a、102b、102cが動作している。それぞれのOS102a、102b、102cは、物理CPU、及びI/Oデバイスを使用している。
OS102aは、CPU番号が0、1、2、3であるCPU120a、120b、120c、120dを使用する。OS102bは、CPU番号が4、5であるCPU120e、120fを使用する。OS102cは、CPU番号が6、7であるCPU120g、120hを使用する。
また、OS102aはデバイス121a、121bを使用し、OS102bはデバイス121cを使用し、OS102cはデバイス121dを使用する。それぞれのOS102a、102b、102cは、自身のOSが使用しているデバイスの管理情報であるデバイス管理情報106a、106b、106cを備える。
それぞれのOS102a、102b、102cは、自身のOSが管理するデバイスを制御するデバイス制御機能104a、104b、104cを備える。デバイス制御機能104a、104b、104cは、それぞれ、デバイス識別機能105a、105b、105cを備える。ここで、デバイス識別機能105a、105b、105cは、デバイス管理情報106a、106b、106cを使用して、与えられたデバイス情報が自OSが管理しているデバイスかどうかを検査することができる。
OS102a及び102bは、IOMMU130を使用している。OS102aは、IOMMU130を介してデバイス121a、121bを使用する。OS102bは、IOMMU130を介してデバイス121cを使用する。OS102cは、IOMMU130を使用しないOSであり、デバイス121dを使用する。IOMMU130を使用するデバイスは、デバイステーブル107に登録されている。IOMMU130は、デバイステーブル107から、各デバイスで使用するアドレス変換テーブル110a、110bを参照することによりアドレス変換を行うことができる。
IOMMU130は、OS102a内のIOMMU制御機能108により制御される。IOMMU制御機能108は、割り込み報告先CPUビットマップ情報109により、障害が発生した際の割り込みを伝達するCPUの情報を管理する。ここで、割り込み報告先CPUビットマップ情報109は、IOMMU130を使用する2つのOS102a、102bに対応するCPUについての割り込み報告先CPUの情報を含む。IOMMU制御機能108は、割り込み報告先CPUビットマップ情報109を元に、IOMMU130の障害割り込み制御レジスタ134に対して、障害が発生した際の割り込みを伝達するCPUの情報を設定してもよい。
それぞれのOS102a、102b、102cは、OS間通信機能103a、103b、103cを備える。この機能を使用して各OS102a、102b、102c間でのデータのやり取りを行う。ここで、OS間通信機能103a、103b、103cは、実施形態を問わない。例えば、共有メモリであっても良いし、ハードウェア機能を使用して実現しても良い。
IOMMU130は、デバイステーブルアドレスレジスタ131を備える。デバイステーブルアドレスレジスタ131は、メモリ上に作成したデバイステーブル107の先頭アドレスを保持する。
IOMMU130は、デバイスの誤動作等の障害を検知する障害検知機能132を備える。IOMMU130は、障害検知機能132によって障害を検知した場合、障害が発生したデバイスを特定する情報を障害情報レジスタ133に保存し、障害割り込み制御レジスタ134に設定された割り込みを発生させる。IOMMU130から割り込みを発生させる場合、発生させる割り込みの情報が、IOMMU130から割り込みコントローラ135に通知される。割り込みコントローラ135は、通知された情報に基づいてCPU120a~120hで割り込みを発生させる。
OS102a、102bは、割り込み報告先情報管理部111a、111bを備える。OS102a、102bは、IOMMU130を使用するとき、障害割り込み報告先のCPUの登録処理を行う。OS102a、102bは、障害割り込み報告先のCPUに障害が発生して使用できなくなった時や負荷の分散が必要な時などには、障害割り込み報告先のCPUの変更を行う。OS102a、102bがシャットダウンする時などの障害割り込みを受ける必要が無くなった時には、障害割り込み報告先のCPUを削除する。割り込み報告先情報管理部111a、111bは、上記の障害割り込み報告先のCPUの登録、変更、削除の処理のために、割り込み報告先情報を作成し、管理するものである。なお、本実施例では、分かり易くするため、割り込み報告先情報管理部111a、111bを別箇の機能ブロックとして示したが、割り込み報告先情報管理部111a、111bが、他の構成要素(例えば、IOMMU制御機能108やデバイス制御機能104a、104bなど)に組み込まれて実装されてもよい。割り込み報告先情報管理部111a、111bの具体的な処理の手順については、後述する。
図2は、OS102bによって制御されているデバイスについて、IOMMU130によるアドレス変換を行うためのデータの構造、及び制御の流れを示している。アドレス変換を行うとき、IOMMU130は、デバイステーブルアドレスレジスタ131に指し示されたデバイステーブル107を参照する。IOMMU130は、変換を行うデバイスのデバイスアドレスからデバイステーブル107内のエントリを探し、エントリに保存されたアドレスを参照することにより、OS102b内のアドレス変換テーブル110bを見つけることができる。IOMMU130は、アドレス変換テーブル110bを使用することによって、ゲストアドレスからホストアドレスへのアドレス変換を行うことができる。
図3は、OS102bによるIOMMU130からの障害割り込み報告先のCPUを登録する処理手順の実施の形態を示すフローチャートである。ステップ201から205は、割り込み報告先CPU通知処理、ステップ211からステップ217は、割り込み報告先CPU登録処理、ステップ221は割り込み報告先CPU登録完了処理である。
ステップ201から205、及びステップ221はCPU120e、120f上で動作するOS102bが実施する処理手順である。ステップ211からステップ217は、CPU120a~120d上で動作するOS102aが実施する処理手順である。
図4A~図4Cは、OS102bがIOMMU130による障害割り込み報告先のCPUを登録する処理手順でのデータの例である。図4A~図4Cにおいて、選択CPUビットマップ、CPUマスク、割り込み報告先CPUビットマップの各ビットは、物理CPUと対応させている。
図4A~図4Cの例では、8ビットのビット列の場合を示している。一番右のビットは、CPU番号が0のCPU120aの状態を表しており、右から順にCPU番号0、1、2、・・・の順で管理する。この例のように、IOMMU130を使用しないOS102cを動作させているCPU120g、CPU120hもこれらのデータで管理してもよい。
以下、図3の各ステップについて説明する。ステップ201において、割り込み報告先情報管理部111bは、IOMMU130からの割り込み報告先CPUをOS102bで使用しているCPUから選択する。
次に、ステップ202において、割り込み報告先情報管理部111bは、選択したCPUの選択したベクタ番号について、割り込みハンドラを登録する。ここでは、割り込みハンドラのアドレスを登録しておくテーブルがあり、そのテーブルへの登録を行う。これにより、割り込み処理時に割り込みハンドラが呼び出される。
次に、ステップ203において、割り込み報告先情報管理部111bは、選択したCPUのCPU番号に対応するビットが「1」であるビットマップを作成する。以降、このビットマップを「選択CPUビットマップ」と呼ぶ。図4Aは、選択CPUビットマップの一例である。選択CPUビットマップ401は、選択したCPU番号が4である場合の選択CPUビットマップの例である。
次に、ステップ204において、割り込み報告先情報管理部111bは、OS102bで使用しており、かつ、IOMMU130の障害割り込みの報告先として設定される可能性のあるCPUに対応するビットが「1」であるビットマップを作成する。以降、このビットマップを「CPUマスク」と呼ぶ。図4Bは、CPUマスクの一例である。CPUマスク402は、OS102bで使用している全てのCPUがIOMMU130の障害割り込みの報告先として設定される可能性がある場合についてのCPUマスクの例である。OS102bはCPU120e、120f上で動作するため、CPUマスク402は、CPU番号が4及び5の箇所が「1」であるビットマップとなる。
ここで、システム装置起動後の最初の登録の場合、OS102bの割り込み報告先として設定される可能性のある全てのCPUに対応するビットを「1」にしたCPUマスクを作成する必要は無い。一部あるいは全てのビットを「0」に設定しても良い。しかし、IOMMU130に以前設定した情報が残存していることを考慮した場合には、OS102bで割り込み報告先として設定される可能性のある全てのCPUに対応する番号のビットを「1」にすることで以前設定した情報を消去することができる利点がある。
次に、ステップ205において、OS間通信機能103bが、ステップ203、及びステップ204で作成した選択CPUビットマップ、及びCPUマスクをOS102aに送信する。
次に、ステップ211において、OS102aのOS間通信機能103aが、OS102bが送信した選択CPUビットマップ、及びCPUマスクを受信する。
次に、ステップ212において、割り込み報告先情報管理部111aは、現在の割り込み報告先CPUビットマップ情報109を取得する。本実施例ではメモリから取得しているが、その他の記憶装置に障害割り込み先CPUビットマップを保存していた場合は、そこから取得できる。また、障害割り込み制御レジスタ134に設定した情報から読み出すことで取得することもできる。図4Cの割り込み報告先CPUビットマップ403は、CPU番号が0のCPUが既に障害割り込み報告先として登録されていた場合の割り込み報告先CPUビットマップの例である。
次に、ステップ213において、割り込み報告先情報管理部111aは、受信したCPUマスクが「1」であるビットに対応する割り込み報告先CPUビットマップのビットを「0」に変更する。図4Cの割り込み報告先CPUビットマップ404は、現在の割り込み報告先CPUビットマップ情報109が割り込み報告先CPUビットマップ403の状態であった場合に、図4BのCPUマスク402を受信したときのステップ213の後の割り込み報告先CPUビットマップの例である。ステップ213の処理によって、割り込み報告先CPUビットマップ403のCPU番号が4及び5の箇所が「0」となる。
次に、ステップ214において、割り込み報告先情報管理部111aは、ステップ213の変更後の割り込み報告先CPUビットマップに対して、受信した選択CPUビットマップが「1」であるビットに対応するビットを「1」に変更する。図4Cの割り込み報告先CPUビットマップ405は、ステップ211で選択CPUビットマップ401を受信し、ステップ213の後に割り込み報告先CPUビットマップ404の状態であった場合の割り込み報告先CPUビットマップの例である。ステップ214の処理により、割り込み報告先CPUビットマップ405では、CPU番号が4の箇所が「1」となる。
次に、ステップ215において、割り込み報告先情報管理部111aは、IOMMU130に登録する障害割り込み用データを作成する。IOMMUの割り込みにおいて、例えばMSI(Message Signaled Interrupt)を使用する場合は、ステップ215において、メッセージアドレスとメッセージデータを作成する。このメッセージアドレス、及びメッセージデータを作成する際に割り込み報告先CPUビットマップを使用することで、障害割り込みを報告するCPUを指定することができる。
例えば、x86アーキテクチャにおいては、割り込みコントローラ135としてローカルAPIC(Advanced Programmable Interrupt Controller)が使用される。ローカルAPICの論理デスティネーションモードではメッセージアドレスのデスティネーションIDに割り込み報告先CPUビットマップを格納することによって、指定したCPUに対して割り込みを発生させることができる。
次に、ステップ216において、割り込み報告先情報管理部111aは、IOMMU130の障害割り込み制御レジスタ134に対して、ステップ215で作成した障害割り込み用データを設定する。したがって、障害割り込み制御レジスタ134の情報は、割り込み報告先CPUビットマップ情報109と同様の情報、あるいは、割り込み報告先CPUビットマップ情報109を元に作成された情報である。また、割り込み報告先情報管理部111aは、ステップ214で作成した割り込み報告先ビットマップを割り込み報告先CPUビットマップ情報109に保存する。
次に、ステップ217において、OS102aのOS間通信機能103aが、IOMMU130に対して割り込み報告先CPUの登録が完了したことを、OS102bに対して通知する。
次に、ステップ221において、OS102bのOS間通信機能103bが、OS102aから、IOMMU130に対して登録が完了したことを知らせる通知を受信する。これにより、これ以降にIOMMU130で障害が発生した場合にOS102bへ通知可能となったことをOS102bは知ることができる。
図5は、OS102bによるIOMMU130による障害割り込み報告先のCPUを変更する処理手順の実施の形態を示すフローチャートである。ステップ231から235は割り込み報告先CPU通知処理、ステップ241から242は割り込み報告先CPU登録完了処理である。ステップ231から235及びステップ241から242は、CPU120e、120f上で動作するOS102bが実施する処理手順である。ステップ211から217は、CPU120a~120d上で動作するOS102aが実施する処理手順である。
図6A~図6Cは、IOMMU130による障害割り込み報告先のCPUを変更する処理手順でのデータの例である。図4A~図4Cの例と同様に、図6A~図6Cにおいて、選択CPUビットマップ、CPUマスク、割り込み報告先CPUビットマップの各ビットは、物理CPUと対応させている。
ステップ231において、割り込み報告先情報管理部111bは、OS102bで使用しているCPUから、新しい割り込み報告先CPUを選択する。ここで、OS102bは、割り込み報告先CPUとして現在設定されているCPU(ここでは、CPU番号が4のCPU)を知っているため、OS102bは、OS102bに対応するCPUであって、割り込み報告先CPUとして現在設定されているCPUとは別のCPU(CPU番号が5)を選択する。
次に、ステップ232において、割り込み報告先情報管理部111bは、選択したCPUの選択したベクタ番号について、割り込みハンドラを登録する。
次に、ステップ233において、割り込み報告先情報管理部111bは、選択したCPUのCPU番号に対応する選択CPUビットマップを作成する。図6Aの選択CPUビットマップ411は、選択したCPU番号が5である場合の選択CPUビットマップの例である。
次に、ステップ234において、割り込み報告先情報管理部111bは、OS102bでのCPUマスクを作成する。図6BのCPUマスク412は、OS102bで使用している全てのCPUがIOMMU130の障害割り込み報告先として設定される可能性がある場合についてのCPUマスクの例である。
次に、ステップ235において、OS102bのOS間通信機能103bが、ステップ233、及びステップ234で作成した選択CPUビットマップ、及びCPUマスクをOS102aに送信する。
OS102aでは、図3で説明した登録処理の場合と同様の処理(ステップ211~ステップ217)を行う。したがって、ステップ211~ステップ217の処理の説明を省略する。図6Cは、図5のステップ211~ステップ217を実行した場合における、割り込み報告先CPUビットマップ、及び、割り込み報告先CPUビットマップを処理した結果の一例である。
割り込み報告先CPUビットマップ413は、CPU番号が4のCPUが割り込み報告先CPUとして登録されていた場合についてステップ212で取得される割り込み報告先CPUビットマップの例である。
割り込み報告先CPUビットマップ414は、ステップ211においてCPUマスク412を受信し、ステップ212で割り込み報告先CPUビットマップ413が取得された場合の、ステップ213の処理結果の例である。ステップ213の処理によって、割り込み報告先CPUビットマップ413のCPU番号が4及び5の箇所が「0」となる。
割り込み報告先CPUビットマップ415は、ステップ211において選択CPUビットマップ411を受信し、ステップ213の後に割り込み報告先CPUビットマップ414の状態であった場合に、ステップ214の処理を実行した後の割り込み報告先CPUビットマップの例である。ステップ214の処理により、割り込み報告先CPUビットマップ415では、CPU番号が5の箇所が「1」となる。
ステップ216において、割り込み報告先情報管理部111bが、割り込み報告先CPUビットマップ415から作成された障害割り込み用データをIOMMU130に設定することにより、割り込み報告先CPUが切り替わる。
ステップ241において、OS102bのOS間通信機能102bが、OS102aから、IOMMU130に対して登録が完了したことを知らせる通知を受信する。これにより、OS102bはこれ以降にIOMMU130の障害割り込みが新しいCPUへの通知に切り替わったことを知ることができる。
次に、ステップ242において、割り込み報告先情報管理部111bは、IOMMU130の障害割り込み用に使用していた変更前の割り込みハンドラを削除する。ここでは、割り込みハンドラのアドレスを登録しておくテーブルからの削除を行う。
図7は、IOMMU130による障害割り込み報告先のCPUを削除する処理手順の実施の形態を示すフローチャートである。ステップ251から253は割り込み報告先CPU通知処理、ステップ261から262は割り込み報告先CPU登録完了処理である。ステップ251から253及びステップ261から262は、CPU120e、120f上で動作するOS102bが実施する処理手順である。ステップ211から217は、CPU120a~120d上で動作するOS102aが実施する処理手順である。
図8A~図8Cは、IOMMU130による障害割り込み報告先のCPUを削除する処理手順でのデータの例である。図4A~図4Cの例と同様に、図8A~図8Cにおいて、選択CPUビットマップ、CPUマスク、割り込み報告先CPUビットマップの各ビットは、物理CPUと対応させている。
ステップ251において、割り込み報告先情報管理部111bは、全てのビットが「0」の選択CPUビットマップを作成する。すなわち、ここでの選択CPUビットマップは、割り込み報告先CPUとして全てのCPUを選択しないことを表すビットマップとなる。図8Aの選択CPUビットマップ421は、ステップ251で生成される選択CPUビットマップの例である。
次に、ステップ252において、割り込み報告先情報管理部111bは、OS102bでのCPUマスクを作成する。図8BのCPUマスク422は、ステップ252で生成されるCPUマスクの例である。CPUマスク422は、OS102bで使用している全てのCPUがIOMMU130の障害割り込み報告先として設定される可能性がある場合についてのCPUマスクの例である。
次に、ステップ253において、OS102bのOS間通信機能103bが、ステップ251、及びステップ252で作成した選択CPUビットマップ、及びCPUマスクをOS102aに送信する。
OS102aでは、図3で説明した登録処理の場合と同様の処理(ステップ211~ステップ217)を行う。したがって、ステップ211~ステップ217の処理の説明を省略する。図8Cは、図7のステップ211~ステップ217を実行した場合における、割り込み報告先CPUビットマップ、及び、割り込み報告先CPUビットマップを処理した結果の一例である。
割り込み報告先CPUビットマップ423は、CPU番号が4のCPUが割り込み報告先CPUとして登録されていた場合のステップ212で取得される割り込み報告先CPUビットマップの例である。
割り込み報告先CPUビットマップ424は、ステップ211においてCPUマスク422を受信し、ステップ212で割り込み報告先CPUビットマップ423が取得された場合の、ステップ213の処理結果の例である。ステップ213の処理によって、割り込み報告先CPUビットマップ413のCPU番号が4及び5の箇所が「0」となる。
割り込み報告先CPUビットマップ425は、ステップ211において選択CPUビットマップ421を受信し、ステップ213の後に割り込み報告先CPUビットマップ424の状態であった場合に、ステップ214の処理を実行した後の割り込み報告先CPUビットマップの例である。ステップ214の処理を実行した場合、選択CPUビットマップ421の全てのビットは「0」であるため、割り込み報告先CPUビットマップ425では、CPU番号が4及び5の箇所は「0」のままである。
ステップ216において、割り込み報告先情報管理部111bが、割り込み報告先CPUビットマップ425から生成された障害割り込み用データをIOMMU130に設定することにより、割り込み報告先CPUの設定が削除される。
ステップ261において、OS102bのOS間通信機能103bが、OS102aから、IOMMU130に対して登録が完了したことを知らせる通知を受信する。これにより、OS102bはIOMMU130への割り込み報告先CPUの登録が削除されたことを知ることができる。
その後、ステップ262において、割り込み報告先情報管理部111bは、IOMMU130の障害割り込み用に使用していた変更前の割り込みハンドラを削除する。
図9は、デバイス121cにおいて障害が発生した際の処理手順の実施の形態を示すフローチャートである。ステップ271からステップ273は、IOMMU130が実施する処理である。ステップ274からステップ275は、割り込みコントローラ135が実施する処理である。ステップ281からステップ285は、障害割り込みを受信したOSが実施する処理であり、OS102a、あるいはOS102bで実施される。
ステップ271において、デバイス121cの誤動作により障害が発生し、IOMMU130の障害検知機能132によって障害が検知される。
次に、ステップ272において、障害検知機能132は、障害が発生したデバイスを特定するための情報を作成し、障害情報レジスタ133に保存する。
次に、ステップ273において、IOMMU130は、障害割り込み制御レジスタ134に設定された障害割り込み用データを割り込みコントローラ135に通知する。
次に、ステップ274において、割り込みコントローラ135は、IOMMU130から障害割り込み用データを受け取る。
次に、ステップ275において、割り込みコントローラ135は、障害割り込み用データを元に、CPUに割り込みを発生させる。このとき、障害割り込み用データには、割り込み報告先CPUビットマップの情報が含まれている。割り込みコントローラ135は、この情報を元に割り込みを発生させるため、割り込み報告先CPUビットマップで指定したCPUのみに割り込みが発生する。
ステップ281以降は、この割り込み報告先CPUビットマップで指定されたCPUでのみ実行される。
ステップ281において、CPU(割り込み報告先CPUビットマップで指定されたCPUであり、ここでは、OS102bに対応するCPUを例とする)は、割り込みを受信し、OSの障害処理の割り込みハンドラの処理へ制御を移す。
次に、ステップ282において、OS102bは、IOMMU130の障害情報レジスタ133のデータを取得する。
次に、ステップ283において、OS102bのデバイス識別機能105bは、ステップ282で取得した情報と、デバイス管理情報106bを比較し、障害が発生したデバイスが自OSの管理下かどうかを検査する。
ステップ284において、ステップ283での検査の結果、自OS(ここでは、OS102b)の管理下であった場合はステップ285へ進む。そうでなかった場合は障害処理を終了する。ステップ285に進んだ場合、OS102bは、障害が発生したデバイス102cをリセットする。
図10は、CPUの閉塞処理のうち、IOMMUの割り込み報告先CPUの切り替え処理についての処理手順の実施の形態を示すフローチャートである。
割り込み報告先CPUを切り替える例として、CPUの閉塞処理がある。CPUのハードウェア障害等が発生した場合、そのCPUは使用不可となる。この場合、CPUの閉塞処理を実施し、当該CPUの使用を停止する必要がある。閉塞するCPUが割り込み報告先CPUであった場合は、割り込み報告先CPUを切り替える。そうしなかった場合は、割り込み報告先のCPUが閉塞されるため、当該CPUでは障害割り込みを受信できず、障害処理が実施できなくなる。したがって、このような場合に、割り込み報告先CPUを切り替える必要がある。
ステップ291及びステップ292は、OS102bのCPUが閉塞したときに、OS102bが実施する処理手順である。
ステップ291において、OS102が、閉塞するCPUが割り込み報告先CPUかどうかを検査する。割り込み報告先CPUであった場合はステップ292へ進む。そうでなかった場合は、本フローを終了する。ステップ292に進んだ場合、図5で示した割り込み報告先CPUの変更処理を実施する。
図11は、OSのシャットダウン処理の一部である。割り込み報告先CPUを削除する例としてOSのシャットダウンがある。OSのシャットダウンの後は、当該OSの処理が不要となるため、割り込み報告先CPUの登録を解除する。
OS102bをシャットダウンする場合を例とする。OS102bをシャットダウンする際には、OS102bが実施するステップ301のシャットダウン処理内で、ステップ302の割り込み報告先CPUの登録を削除する処理を実施する。ここで、ステップ302では、図7で示した障害割り込み報告先のCPUの削除処理を実施する。
図12は、OS102bが制御するデバイスをデバイステーブル107へ登録する際のフローチャートである。本実施例では、2つ以上のOSによって1つのIOMMUを使用するため、例えば、OS102aのデバイステーブル107へ、OS102bが制御するデバイスを登録しておく必要がある。
ステップ311及びステップ331は、OS102bが実施する処理である。ステップ321からステップ324は、OS102aが実施する処理手順である。
ステップ311において、OS102bのOS間通信機能103bが、アドレス変換テーブル110bの先頭アドレス、及び登録するデバイスのデバイスアドレスをOS102aに送信する。
次に、ステップ321において、OS102aのOS間通信機能103aが、アドレス変換テーブル110bの先頭アドレス、及びデバイスアドレスを受信する。
次に、ステップ322において、OS102aは、デバイステーブル107から、デバイスアドレスが示すエントリを検索する。
次に、ステップ323において、OS102aは、検索されたデバイステーブル107のエントリにアドレス変換テーブル110bの先頭アドレスを登録する。
次に、ステップ324において、OS間通信機能103aが、デバイスの登録が完了したことをOS102bに通知する。
ステップ331において、OS間通信機能103bが、デバイステーブルへの登録が完了したことを知らせる通知を受信する。
従来では、1つの物理計算機上で2つ以上のOSが動作する計算機システムにおいて、2つ以上のOSから1つのIOMMUを使用した場合に、2つのOSから障害割り込みが使用できず、デバイスのリセットができないという課題があった。
本実施例によれば、IOMMU130は、IOMMU130を使用する2つのOS102a、102bに対応するCPUについての割り込み報告先CPUの情報(割り込み報告先CPUビットマップ情報109を元に設定された障害割り込み制御レジスタ134の情報)を参照することにより、割り込みを発生させる。したがって、2つ以上のOSで1つのIOMMUを使用することができる。本実施例の処理により、障害を検知した時に、障害を引き起こしたデバイスを安全に速やかに停止させることができる。
本実施例によれば、IOMMU130は、IOMMU130を使用する2つのOS102a、102bに対応するCPUについての割り込み報告先CPUの情報(割り込み報告先CPUビットマップ情報109を元に設定された障害割り込み制御レジスタ134の情報)を参照することにより、割り込みを発生させる。したがって、2つ以上のOSで1つのIOMMUを使用することができる。本実施例の処理により、障害を検知した時に、障害を引き起こしたデバイスを安全に速やかに停止させることができる。
本実施例によれば、OS102a(第1のOS)は、OS102b(第2のOS)から、割り込み報告先CPUの選択に関する情報を取得し、OS102aは、前記割り込み報告先CPUの選択に関する情報に基づいて、割り込み報告先CPUの情報を作成する。OS102aは、IOMMU130の障害割り込み制御レジスタ134に前記割り込み報告先CPUの情報を設定する。このような構成において、OS102bは、障害割り込み報告先のCPUの登録処理、切り替え処理、削除処理のそれぞれに応じて、割り込み報告先CPUの選択に関する情報を作成する(すなわち、処理に応じて選択に関する情報を変える)。これにより、OS102a側での処理は、障害割り込み報告先のCPUの登録処理、切り替え処理、削除処理のどの場合でも、同様のステップ(ステップ211~217)で行うことができる。
また、本実施例によれば、障害割り込みの設定を行うとき、OS102bはOS102aから割り込み報告先CPUの情報を取得し、割り込み報告先CPUビットマップ情報109を作成し、割り込み報告先CPUビットマップ情報をIOMMU130の障害割り込み制御レジスタ134に格納する。IOMMU130で障害割り込みが発生した時には、OSのCPUにより割り込みを受信し、障害が発生したデバイスがOSの制御しているデバイスかを検査する。そのOSが制御していたデバイスである場合にはそのOSが障害の発生したデバイスをリセットする。デバイスを登録するときには、OS102aは、OS102bからアドレス変換テーブルの先頭アドレス、及びデバイスアドレスを取得し、デバイステーブル107に登録する。
本実施例によれば、1つのOSが複数のCPUを使用している場合や、IOMMUを使用していないOSが存在する場合に、不要な割り込みが発生することを回避できる。また、OS102bのデバイスで障害が発生した場合、OS102aを介さずにOS102bで割り込み報告先CPU通知処理を行うため、OS102aの状態(高負荷など)に影響されず、また、OS間通信のオーバヘッドがない。
また、上記の実施例において、IOMMU130を使用しないOS102cのCPUは、割り込み報告先CPUビットマップに登録されていない(すなわち、OS102cのCPUが選択されない)。したがって、IOMMU130によって障害を検知した際に、OS102cには障害割り込みは発生しない。このため、IOMMU130に関する処理をOS102cに組み込む必要が無いという利点がある。
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることもできる。また、ある実施例の構成に他の実施例の構成を加えることもできる。また、各実施例の構成の一部について、他の構成を追加・削除・置換することもできる。
例えば、物理計算機上のCPU、及びデバイス、OS、IOMMUなどの構成要素の数、及び割り当てが変わっても本発明は実施可能である。IOMMUの割り込み設定は1つのみである場合を記載したが、設定が複数可能である場合についても容易に拡張可能である。
上記で説明したOSの機能、処理部などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリやハードディスク、SSD(Solid State Drive)などの記憶装置、または、ICカード、SDカード、DVDなどの記憶媒体に置くことができる。
101 物理計算機
102a~102c OS(Operating System)
103a~103c OS間通信機能
104a~104c デバイス制御機能
105a~105c デバイス識別機能
106a~106c デバイス管理情報
107 デバイステーブル
108 IOMMU制御機能
109 割り込み報告先CPUビットマップ情報
110a~110b アドレス変換テーブル
111a~111b 割り込み報告先情報管理部
120a~120h CPU
121a~121d デバイス
130 IOMMU
131 デバイステーブルアドレスレジスタ
132 障害検知機能
133 障害情報レジスタ
134 障害割り込み制御レジスタ
135 割り込みコントローラ
102a~102c OS(Operating System)
103a~103c OS間通信機能
104a~104c デバイス制御機能
105a~105c デバイス識別機能
106a~106c デバイス管理情報
107 デバイステーブル
108 IOMMU制御機能
109 割り込み報告先CPUビットマップ情報
110a~110b アドレス変換テーブル
111a~111b 割り込み報告先情報管理部
120a~120h CPU
121a~121d デバイス
130 IOMMU
131 デバイステーブルアドレスレジスタ
132 障害検知機能
133 障害情報レジスタ
134 障害割り込み制御レジスタ
135 割り込みコントローラ
Claims (12)
- 複数のCPUと、前記複数のCPU上で動作する複数のOS(Operating System)と、前記複数のOSが使用する複数のデバイスと、前記複数のOSのうち少なくとも2つのOSが使用するIOMMU(Input/Output Memory Management Unit)と、を備える物理計算機であって、
前記IOMMUは、前記少なくとも2つのOSに対応するCPUについての割り込み報告先CPUの情報を参照することにより、割り込みを発生させることを特徴とする物理計算機。 - 請求項1に記載の物理計算機において、
前記少なくとも2つのOSは、第1のOS及び第2のOSを含み、
前記第2のOSは、割り込み報告先CPUの選択に関する情報を作成し、
前記第1のOSは、前記第2のOSから取得した前記割り込み報告先CPUの選択に関する情報に基づいて、前記割り込み報告先CPUの情報を作成し、
前記第1のOSは、前記IOMMUに前記割り込み報告先CPUの情報を設定することを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記IOMMUが割り込みを発生した時には、前記第2のOSは、前記割り込みを受信し、
前記第2のOSは、障害が発生したデバイスが前記第2のOSの管理下であるかを検査し、
前記障害が発生したデバイスが前記第2のOSの管理下である場合、前記第2のOSが、当該デバイスをリセットすることを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記割り込み報告先CPUの選択に関する情報は、
前記第2のOSに対応するCPUから選択された割り込み報告先のCPUをビットで表した選択CPUビットマップと、
前記第2のOSで使用しており、かつ、前記IOMMUの障害割り込みの報告先として設定される可能性のあるCPUをビットで表したCPUマスクと、
を含み、
前記第1のOSは、
現在の割り込み報告先CPUをビットで表した第1の割り込み報告先CPUビットマップを取得し、
前記第1の割り込み報告先CPUビットマップを前記CPUマスク及び前記選択CPUビットマップの情報で処理し、
前記割り込み報告先CPUの情報として、割り込み報告先CPUをビットで表した第2の割り込み報告先CPUビットマップを作成することを特徴とする物理計算機。 - 請求項4に記載の物理計算機において、
前記第1のOSは、
前記第1の割り込み報告先CPUビットマップにおける前記CPUマスクに対応するビットを処理した後に、前記第1の割り込み報告先CPUビットマップにおける前記選択CPUビットマップに対応するビットを処理することにより、前記第2の割り込み報告先CPUビットマップを作成することを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記割り込み報告先CPUの選択に関する情報は、
前記第2のOSに対応するCPUであって、割り込み報告先CPUとして現在設定されているCPUとは別のCPUをビットで表した選択CPUビットマップと、
前記第2のOSで使用しており、かつ、前記IOMMUの障害割り込みの報告先として設定される可能性のあるCPUをビットで表したCPUマスクと、
を含み、
前記第1のOSは、
現在の割り込み報告先CPUをビットで表した第1の割り込み報告先CPUビットマップを取得し、
前記第1の割り込み報告先CPUビットマップを前記CPUマスク及び前記選択CPUビットマップの情報で処理し、
前記割り込み報告先CPUの情報として、割り込み報告先CPUをビットで表した第2の割り込み報告先CPUビットマップを作成することを特徴とする物理計算機。 - 請求項6に記載の物理計算機において、
前記割り込み報告先CPUとして現在設定されているCPUが閉塞されるときに、前記第2の割り込み報告先CPUビットマップが作成されることを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記割り込み報告先CPUの選択に関する情報は、
割り込み報告先CPUとして全てのCPUを選択しないことをビットで表した選択CPUビットマップと、
前記第2のOSで使用しており、かつ、前記IOMMUの障害割り込みの報告先として設定される可能性のあるCPUをビットで表したCPUマスクと、
を含み、
前記第1のOSは、
現在の割り込み報告先CPUをビットで表した第1の割り込み報告先CPUビットマップを取得し、
前記第1の割り込み報告先CPUビットマップを前記CPUマスク及び前記選択CPUビットマップの情報で処理し、
前記割り込み報告先CPUの情報として、割り込み報告先CPUをビットで表した第2の割り込み報告先CPUビットマップを作成することを特徴とする物理計算機。 - 請求項8に記載の物理計算機において、
前記第2のOSは、前記第2のOSがシャットダウンするときに、前記第2の割り込み報告先CPUビットマップが作成されることを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記第1のOSは、前記IOMMUを使用するデバイスの情報を格納するデバイステーブルを備え、
前記第1のOSは、前記第2のOSからアドレス変換テーブルに関する情報を取得し、前記アドレス変換テーブルに関する情報を前記デバイステーブルに登録することを特徴とする物理計算機。 - 請求項2に記載の物理計算機において、
前記第1のOSは、前記割り込み報告先CPUの情報を格納するIOMMU制御部を備えることを特徴とする物理計算機。 - 請求項1に記載の物理計算機において、
前記複数のOSは、前記IOMMUを使用しないOSを含み、
前記割り込み報告先CPUの情報には、前記IOMMUを使用しないOSに対応するCPUについての情報が登録されないことを特徴とする物理計算機。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2014/060685 WO2015159359A1 (ja) | 2014-04-15 | 2014-04-15 | 物理計算機 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2014/060685 WO2015159359A1 (ja) | 2014-04-15 | 2014-04-15 | 物理計算機 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2015159359A1 true WO2015159359A1 (ja) | 2015-10-22 |
Family
ID=54323607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2014/060685 WO2015159359A1 (ja) | 2014-04-15 | 2014-04-15 | 物理計算機 |
Country Status (1)
Country | Link |
---|---|
WO (1) | WO2015159359A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017091544A (ja) * | 2015-11-16 | 2017-05-25 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 仮想プロセッサ・スレッド・グループを使用する処理ユニット内の割込みを処理するための方法、処理ユニット、および設計構造 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100191885A1 (en) * | 2009-01-26 | 2010-07-29 | Serebrin Benjamin C | Guest Interrupt Controllers for Each Processor to Aid Interrupt Virtualization |
JP2013519170A (ja) * | 2010-02-05 | 2013-05-23 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | ゲストローカル割込みコントローラを仮想化するように構成されたプロセッサ |
-
2014
- 2014-04-15 WO PCT/JP2014/060685 patent/WO2015159359A1/ja active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100191885A1 (en) * | 2009-01-26 | 2010-07-29 | Serebrin Benjamin C | Guest Interrupt Controllers for Each Processor to Aid Interrupt Virtualization |
JP2013519170A (ja) * | 2010-02-05 | 2013-05-23 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | ゲストローカル割込みコントローラを仮想化するように構成されたプロセッサ |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017091544A (ja) * | 2015-11-16 | 2017-05-25 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 仮想プロセッサ・スレッド・グループを使用する処理ユニット内の割込みを処理するための方法、処理ユニット、および設計構造 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9104818B2 (en) | Accelerator management device, accelerator management method, and input-output device | |
JP5851503B2 (ja) | 高可用性仮想機械環境におけるアプリケーションの高可用性の提供 | |
CN109815043B (zh) | 故障处理方法、相关设备及计算机存储介质 | |
US8872638B2 (en) | Controlling communication among multiple industrial control systems | |
US9575785B2 (en) | Cluster system and method for providing service availability in cluster system | |
US8918673B1 (en) | Systems and methods for proactively evaluating failover nodes prior to the occurrence of failover events | |
US7865782B2 (en) | I/O device fault processing method for use in virtual computer system | |
WO2018054081A1 (zh) | 故障处理方法、虚拟架构管理系统和业务管理系统 | |
JP5167844B2 (ja) | プロセッサ、電子機器、割込み制御方法及び割込み制御プログラム | |
US8949659B2 (en) | Scheduling workloads based on detected hardware errors | |
US20150058848A1 (en) | Encapsulation of an application for virtualization | |
US20090083467A1 (en) | Method and System for Handling Interrupts Within Computer System During Hardware Resource Migration | |
US9049101B2 (en) | Cluster monitor, method for monitoring a cluster, and computer-readable recording medium | |
US20170212815A1 (en) | Virtualization substrate management device, virtualization substrate management system, virtualization substrate management method, and recording medium for recording virtualization substrate management program | |
JP2012243298A (ja) | サーバi/oマイグレーション管理方法及び装置 | |
CN105511941A (zh) | 辅助计算机系统中多个管理程序的联合操作的系统和方法 | |
US9304955B2 (en) | Techniques for identifying and handling processor interrupts | |
US9411666B2 (en) | Anticipatory protection of critical jobs in a computing system | |
JP5333735B2 (ja) | 仮想計算機システム、仮想計算機のマイグレーション方法、及びプログラム | |
WO2015159359A1 (ja) | 物理計算機 | |
JP6356822B2 (ja) | 計算機システム及びメモリダンプ方法 | |
WO2019169582A1 (zh) | 处理中断的方法和装置 | |
CN115033337A (zh) | 虚拟机内存迁移方法、装置、设备及存储介质 | |
US10013279B2 (en) | Processing interrupt requests | |
US9772869B2 (en) | System and method for performing efficient failover and virtual machine (VM) migration in virtual desktop infrastructure (VDI) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 14889464 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 14889464 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: JP |