JP2016197360A - 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法 - Google Patents

情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法 Download PDF

Info

Publication number
JP2016197360A
JP2016197360A JP2015077459A JP2015077459A JP2016197360A JP 2016197360 A JP2016197360 A JP 2016197360A JP 2015077459 A JP2015077459 A JP 2015077459A JP 2015077459 A JP2015077459 A JP 2015077459A JP 2016197360 A JP2016197360 A JP 2016197360A
Authority
JP
Japan
Prior art keywords
input
area
virtual machine
output device
access
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2015077459A
Other languages
English (en)
Inventor
洋太郎 小西
Yotaro Konishi
洋太郎 小西
佐藤 充
Mitsuru Sato
充 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015077459A priority Critical patent/JP2016197360A/ja
Priority to US15/070,015 priority patent/US20160292108A1/en
Publication of JP2016197360A publication Critical patent/JP2016197360A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/362Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
    • G06F13/366Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control using a centralised polling arbiter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】入出力デバイスが異常状態の場合に不測のエラーが発生することを抑制する。
【解決手段】入出力デバイスが接続可能な入出力部と、入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、基盤ソフトウエアを介して個別プログラムを実行する実行部と、実行部が基盤ソフトウエア及び個別プログラムを実行することにより、監視対象入出力デバイスの第1の領域へのアクセスを検出した場合、監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、第2の領域から読み出した値が異常値であることを検出する判定部と、を有する情報処理装置。
【選択図】図3

Description

本発明は,情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法に関する。
情報処理装置は、CPU(Central Processing Unit)とメモリを有し、CPUがメモリ内のプログラムの命令を実行することで、プログラムの機能を実現する。さらに、情報処理装置は、I/O(Input Output)バスを有し、I/OバスにI/Oバスブリッジ(または入出力部、I/Oスイッチ、I/Oインターフェース)を介して様々なI/Oデバイス(または周辺デバイス)、例えばハードディスク、フラッシュメモリなどの周辺機器(Peripheral Component)、を接続する。また、情報処理装置は、I/Oデバイスを駆動するデバイスドライバをOS内に有し、CPUはOS内のデバイスドライバを介してデバイスにアクセスする。
I/Oバスブリッジに接続されているI/Oデバイスが故障したり活性状態で抜き取られると、切断検出イベントなどの回復不能エラーイベントが発生し、I/OバスブリッジからCPUにそのエラーイベントが伝搬し、システムダウンを招く場合がある。
そのようなエラーによるシステムダウンを回避するために、PCI Express (PCIe:Peripheral Component Interconnect express)の追加仕様として、ダウンポートコンテインメント(DPC:Downstream Port Containment、以下DPCと称する。)が採用されている。このDPC機能を搭載したバスブリッジは、バスブリッジのポートで発生したエラーイベントがCPUなどの上流側に伝わらないように閉じこめて、エラーによるシステムダウンを防止し、システムの継続動作を可能にする。これにより、バスの信頼性を高める。
一方、アプリケーションプログラムは、OSのデバイスオブジェクトなどのインターフェースにアクセスし、OS内のデバイスドライバを介してバススイッチに接続されたI/Oデバイスにアクセスする。この場合、例えば、I/Oデバイスがバススイッチから引き抜かれるなどI/Oデバイスに異常が発生すると、OS割込が発生し、OSは上記のデバイスオブジェクトを削除し、その後のI/Oデバイスへのアクセスを不能にする。
ここで、I/Oデバイスが抜かれるなどの異常が発生した直後で、OSがデバイスオブジェクトを削除完了する前のタイミングで、I/Oデバイスへのアクセスが発生する場合がある。通常、PCIeバスなどのI/Oバスのバスブリッジは、接続されていないI/Oデバイスへのアクセスに対して、例えばAll F(0xFFFF_FFFF)などのデータを応答する。上記のDPC機能を予定しているDPC対応のデバイスドライバは、このようなAll Fのデータを受信した場合、適切なエラー処理を実行し、All Fデータによる不正なメモリアクセスやシステム状態の不定の発生を回避する。
特開2011−100431号公報 特開2011−197845号公報 特開2011−123857号公報
しかし、DPC非対応のデバイスドライバは、上記のAll Fのデータを正常なデータとして取り扱い、適切なエラー処理をせず、不正なメモリアクセスを発生してデータを破壊したり、システム状態を不定にすることがある。そして、デバイスドライバの機能はデバイスベンダに依存するので、全てのデバイスドライバがDPC機能対応になることを保証することは困難である。
そこで,実施の形態の第1の側面の目的は,デバイスに異常が発生しても、デバイス異常による不測のエラーが発生することを抑制した情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法を提供することにある。
本実施の形態の第1の側面は,入出力デバイスが接続可能な入出力部と、前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、基盤ソフトウエアを介して個別プログラムを実行する実行部と、前記実行部が前記基盤ソフトウエア及び前記個別プログラムを実行することにより、前記監視対象入出力デバイスの第1の領域へのアクセスを検出した場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であることを検出する判定部と、を有する情報処理装置である。
第1の側面によれば,デバイス異常による不足のエラーが発生することを抑制する。
PCIeのDPC(Down Port Containment、ダウンポートコンテインメント)機能を説明する図である。 I/OデバイスがI/Oバスブリッジから抜かれた場合の動作を示す図である。 第1の実施の形態における情報処理装置の構成を示す図である。 監視対象I/Oデバイス表の一例を示す図である。 本実施の形態における情報処理装置1の起動時の処理を示すフローチャート図である。 本実施の形態における情報処理装置1の監視対象I/Oデバイスへのアクセス動作を示すフローチャート図である。 第2の実施の形態における情報処理装置1の構成を示す図である。 第2の実施の形態の情報処理装置1の仮想マシンの構成例を示す図である。 ハイパバイザのプログラムモジュール、テーブルなどの構成例を示す図である。 VM制御構造体(VMCS)の構成例を示す図である。 仮想マシン情報ファイル280内の各表及びテーブルの一例を示す図である。 本実施の形態におけるCPUの仮想化に対応するハードウエア構成を示す図である。 BARレジスタの構成例を示す図である。 第2の実施の形態における情報処理装置の動作の概略を示すフローチャート図である。 第2の実施の形態における情報処理装置の動作の概略を示すフローチャート図である。 仮想マシンVM起動前の処理とVM_Entry後にVM_Exitした時の処理の概略を示すフローチャート図である。 HVモードでのI/Oポート処理S50のフローチャート図である。 HVモードでのI/Oポート処理S50内のI/Oライト処理S58のフローチャート図である。 監視対象I/Oデバイスのコンフィグレーション領域へのライト処理S64のフローチャート図である。 図18の非初期化処理でのI/Oライト処理S66のフローチャート図である。 図17のI/Oリード処理S57のフローチャート図である。 HVモードでのMMIO処理S49のフローチャート図である。 HVモードのMMIO処理S49内のMMIOライト処理S100とMMIOリード処理S99のフローチャート図である。 図21、図23のリード結果のエラーチェックS88のフローチャート図である。 図18のI/Oライト処理の変形例のフローチャート図である。
図1は、PCIeのDPC(Down Port Containment、ダウンポートコンテインメント)機能を説明する図である。図1は、I/Oバスブリッジ16のダウンポートDPにI/OデバイスDEV1が接続され、I/OデバイスDEV2がダウンポートDPから抜かれたことをそれぞれ示す。DPC機能を有していないI/Oバスブリッジ16に接続されているデバイスDEV2が抜かれると(工程SA)、回復できないフェイタルエラーがI/Oバスブリッジを伝搬し(工程SB)、CPU10に伝搬してシステムダウンを招く場合がある(工程SC)。
DPC機能を有するI/Oバスブリッジ16は、デバイスDEV2のI/Oバスブリッジ16から抜かれたことで発生するエラーが伝搬するのを阻止する(工程SD)。具体的には、I/Oブリッジ16は、フェイタルエラーを、そのエラーの度合いを下げてコレクタブルエラーに変更し、上流に伝搬させる。
これにより、デバイスの異常によるエラーによってシステムダウンが発生することを回避できる。その結果、I/Oバスの信頼性を高めている。近年のI/Oデバイスは、フラッシュメモリなど頻繁に挿入、抜き取りされるデバイスが含まれる。そのようなデバイスのI/Oバスブリッジからの引き抜きによるシステムダウンを防止することが望まれていた。
一方、アプリケーションプログラムは、OSのデバイスオブジェクトなどのインターフェースにアクセスし、OS内のデバイスドライバを介してバスブリッジ16に接続されたI/Oデバイスにアクセスする。この場合、例えば、I/Oデバイスがバススイッチから引き抜かれるなどI/Oデバイスに異常が発生すると、OS割込が発生し、OSは上記のデバイスオブジェクトを削除し、その後のデバイスへのアクセスを不能にする。
図2は、I/OデバイスがI/Oバスブリッジから抜かれた場合の動作を示す図である。図2の左側に示された通常時のデバイスアクセスS1では、ユーザプログラムはI/OデバイスDevにアクセスする場合、オペレーティングシステムOS内のデバイスオブジェクトDOにアクセスし、それを介してOS内のデバイスドライバDDを実行する。
次に、図2の中央部に示されたデバイスDevに異常が発生した場合の動作S2によれば、デバイスDevがバスブリッジ16から抜かれると、バスブリッジ16を介してOSに割込が発生し、OSはデバイスオブジェクトDOを削除する。
しかし、図2の右側に示された動作S3によれば、デバイスが抜かれた後、OSが割込処理によりデバイスオブジェクトDOを削除中(削除完了前)に、ユーザプログラムがデバイスオブジェクトDOを介して抜かれたI/Oデバイスにアクセスすることが起こりうる。I/Oデバイスへのアクセスは、具体的にはデバイスのレジスタへのアクセスである。
例えば、PCIeの仕様では、I/Oデバイスが存在しないスロットへのリードアクセスに対しては、I/Oバスブリッジ16はオールF(0xFFFF_FFFF)のデータを応答する。その理由は、I/Oバスブリッジのポートは、電源電圧にプルアップされているので、デバイスが接続されていなければオールFのデータが発生するからである。
ここで、DPC対応のI/Oデバイスのデバイスドライバは、オールFのデータを不正な値と判断し、不正なメモリの参照などを行わない。DPC機能によりデバイスが突然抜かれてもシステムダウンしないため、DPC対応のデバイスドライバは、上記のような不正なアクセスが発生することを想定して設計されているからである。
しかし、DPC非対応のデバイスのデバイスドライバは、オールFのデータを不正な値と判断できず、処理を続行してしまい、不正なメモリの参照などを招き、最悪データの破壊やシステム状態が不定を招くことがある。
そこで、I/Oデバイスに異常が発生しても、図2で示したようなデバイス異常による不測のエラーが発生することを防止することが求められる。
[第1の実施の形態]
図3は、第1の実施の形態における情報処理装置の構成を示す図である。情報処理装置1は、コンピュータ、サーバである。情報処理装置1は、情報処理回路であるCPU(Central Processing Unit)10と、メインメモリ12と、モニタやキーボードなどの入力デバイス14と、それらを接続するCPUバス16を有する。さらに、情報処理装置1は、CPUバス16に接続されるI/Oバスブリッジ(または入出力部)18を有し、I/Oバスブリッジ18のI/OポートP1,P2にはI/Oデバイス(または周辺デバイス)DEV1、DEV2が接続されている。また、I/Oバスブリッジ1のI/OポートP3には、I/Oデバイスの一つであるハードディスクなどの大容量ストレージ装置20が接続されている。
I/Oバスブリッジ18は、I/OデバイスDEV1,DEV2が抜かれるなどの異常状態になった場合のフェイタルエラーをエラー度を下げてコレクタブルエラーとして上流側に伝搬するDPC機能を実装する。また、各I/OデバイスDEV1,DEV2は、CPU10がアクセスするレジスタ群REGと、デバイスの機能を実現する機能回路または機能装置FUNCを有する。
また、ハードディスク20は、例えば、アプリケーションプログラム(または個別プログラム)24と、オペレーティングシステム(または基盤ソフトウエア)22を記憶する。そして、情報処理装置1は起動すると、アプリケーションプログラム24とOS22をメインメモリ12内に展開し、CPU10がメインメモリ12に展開されたアプリケーションプログラムとOSを実行する。
OS22のカーネルは、少なくともI/OデバイスDEV1,DEV2をそれぞれ制御するデバイス制御プログラムであるデバイスドライバDD1,DD2を有する。さらに、本実施の形態では、OS22のカーネルは、リードのシステムコールが行われた場合に、リードのアクセス先が監視対象I/Oデバイスであるかのチェックと、監視対象I/Oデバイス宛てのリードの場合、I/Oデバイスが正常に接続されているかをチェックまたは正常状態にあるかをチェックするリードチェック・デバイスドライバDDXを有する。
また、CPU10がアプリケーションプログラムおよびOSを実行することで、I/OデバイスDEV1,DEV2にアクセスし、I/Oデバイスの機能回路または機能装置FUNCに所望の処理を実行させる。具体的には、CPU10がアプリケーションプログラム24を実行中にI/Oデバイスへのアクセスが発生すると、CPU10は、OS内の図示しないデバイスオブジェクトを介してアクセス対象のデバイスドライバDD1,DD2を動作させ、デバイスドライバにI/OデバイスDEV1,DEV2内のレジスタに所定の設定値を書き込みを実行させ、その設定値に対応する処理を機能回路または機能装置FUNCに実行させる。
本実施の形態の情報処理装置1は、図2で説明した動作S3のようなエラーが発生しないように、I/Oバスブリッジに搭載されているI/Oデバイスのうち、DPC非対応のI/Oデバイスを監視対象デバイスに登録しておく。そして、情報処理装置1は、OSがリードのシステムコールを受信した場合、リードチェック・デバイスドライバDDXを動作させる。リードチェック・デバイスドライバDDXは、そのリードが監視対象デバイスへのアクセスか否かを検出する。リードが監視対象デバイスへのアクセスでない場合は、OSによるリード処理を実行させる。
リードが監視対象デバイスへのアクセスの場合、リードチェック・デバイスドライバDDXは、アクセス対象のI/Oデバイスの所定のレジスタの値を読み出し、I/OデバイスがI/Oバスブリッジから切断されているなどの異常状態にあるか否かをチェックする。異常状態にある場合は、アクセス対象のI/Oデバイスのデバイスドライバの動作を禁止してアクセスを抑止する。一方、異常状態でない場合に、アクセス対象のI/Oデバイスのデバイスドライバの動作を開始させ、アクセス対象のI/Oデバイスへのアクセスを実行させる。
図4は、監視対象I/Oデバイス表の一例を示す図である。図4の監視対象I/Oデバイス表270には、DPC非対応のI/Oデバイスが登録される。さらに、監視対象I/Oデバイスへのアクセスを検出するために、監視対象I/Oデバイスのレジスタのアドレス(第1の領域)も登録される。また、監視対象I/Oデバイス内の特定レジスタのアドレス(第2の領域)も登録される。この特定レジスタには、I/Oデバイスが異常状態の場合にI/Oバスブリッジが応答する異常値ではないデータが格納されていることが保証されるレジスタである。たとえば、I/Oデバイスのコンフィグレーション空間のベンダIDやプロダクトIDが格納されるレジスタが選択される。
図5は、本実施の形態における情報処理装置1の起動時の処理を示すフローチャート図である。まず、情報処理装置1が起動する(S5)。初期化動作の後、情報処理装置1は、DPC非対応のI/Oデバイスを監視対象I/Oデバイス表に登録する(S6)。例えば、監視対象にすべきI/Oデバイスのユニークな識別情報を、監視対象I/Oデバイス表に登録する。
次に、情報処理装置1は、監視対象I/Oデバイスのレジスタのアドレス(第1の領域)をI/Oデバイス内のベーシックアドレスレジスタ(BAR:Basic Address Resistor)から取得し、監視対象I/Oデバイス表の第1の領域に登録する(S7)。さらに、情報処理装置1は、特定レジスタのアドレスも、図4の監視対象I/Oデバイス表270内の特定レジスタのアドレス(第2の領域)に登録する(S7)。その後、情報処理装置1は、通常動作に移行し、CPU10が例えばアプリケーションプログラム24を実行する。
図6は、本実施の形態における情報処理装置1の監視対象I/Oデバイスへのアクセス動作を示すフローチャート図である。図6には、OSと、デバイスドライバDD1,DD2と、リードチェック・デバイスドライバDDXの動作が示されている。
CPU10は、通常動作でアプリケーションプログラム24を実行し、必要に応じてリードアクセスを実行する。それに応答して、アプリケーションプログラム24は、リードのシステムコールをOSに発行する。OSは、システムコールを受信し(S9)、それがリードのシステムコールの場合(S10のYES)リードチェック・デバイスドライバDDXの動作を開始させる。
これに応答して、リードチェック・デバイスドライバDDXは、リードのアクセス先が監視対象I/Oデバイス宛てか否かをチェックする(S11)。リードが監視対象I/Oデバイス宛てでない場合(S11のNO)、OSがそのリードのシステムコールを実行する(S12)。
一方、リードが監視対象I/Oデバイス宛ての場合、リードチェック・デバイスドライバDDXは、I/Oデバイスのアクセス先のアドレス(第1の領域内のアドレス)にリードアクセスを実行し(S13)、リードデータがALL Fか否かをチェックする(S14)。アクセス先のI/Oデバイスがバスブリッジのポートから抜かれていた(切断または非接続状態)場合は、通常バスブリッジはALL Fのデータを応答する。もし、リードデータがALL Fでない場合は(S14のNO)、アクセス先のI/Oデバイスが抜かれた異常状態ではないので、リードチェック・デバイスドライバDDXは、アクセス先のI/OデバイスのデバイスドライバDD1,DD2に動作を開始させる(S15)。一方、リードデータがALL Fの場合は(S14のYES)、リードチェック・デバイスドライバDDXは、アクセス先のI/Oデバイスの第2の領域のレジスタにリードアクセスを実行する(S16)。すなわち、ALL Fのリードデータが正常なレジスタ値である可能性があるので、必ず「0」のビットを含む第2の領域のレジスタの値を読み出して再度ALL Fか否かをチェックする。
そして、リードデータがALL Fでない場合(S17のNO)、アクセス先のI/Oデバイスが抜かれた異常状態ではないので、リードチェック・デバイスドライバDDXは、アクセス先のI/OデバイスのデバイスドライバDD1,DD2に動作を開始させる(S18)。一方、リードデータがALL Fの場合は(S17のYES)、リードチェック・デバイスドライバDDXは、アクセス先のI/Oデバイスのデバイスドライバの動作を禁止し、I/Oデバイスへのリードアクセスを抑止する(S18)。
リードチェック・デバイスドライバDDXは、I/OデバイスへのリードアクセスでALL Fのリードデータを受信しても、それに応答して、不都合なメモリアクセスを実行してデータを変更したりシステムを不定状態にする何らかの動作を行うことはない。リードチェック・デバイスドライバDDXは、リードが監視対象I/Oデバイス宛か否かと、アクセス先のI/OデバイスからのリードデータがALL Fか否かのチェックをそれぞれ行うだけであり、リードデータをCPUに応答したりしない。
それに対して、通常のデバイスドライバDD1,DD2は、I/OデバイスへのリードアクセスでALL Fのリードデータを受信した場合、リードデータを処理して何らかの不都合な処理を招く可能性を否定することができない。デバイスドライバの機能は、デバイスベンダに依存しているからである。
変形例として、図6に示した処理のうち、リードチェック・デバイスドライバDDXは、第1の領域にリードアクセスする処理S13を省略してもよい。その場合、リードチェック・デバイスドライバDDXは、監視対象I/Oデバイス宛てのリードであることを検出すると(S11のYES)、第2の領域にリードアクセスを実行し(S16)、そのリードデータがALL Fか否かを判定する(S17)。ALL Fの場合はI/Oアドレスが異常状態であるので、その後のデバイスドライバによる第1のアドレスへのリード動作を抑制する。
以上のとおり、第1の実施の形態の情報処理装置1は、OSがリードのシステムコールを受信すると、まずリードチェック・デバイスドライバが、アクセス先が監視対象I/Oデバイスかをチェックする。さらに、監視対象宛ての場合、リードチェック・デバイスドライバは、アクセス先I/Oデバイスの第2のアドレスにリードアクセスして異常状態にあるか否かをチェックし、正常状態の場合は、アクセス先I/Oデバイスに対応するデバイスドライバによるアクセス処理を実行させ、異常状態の場合は、そのデバイスドライバによるアクセスを抑止または禁止する。
したがって、第1の実施の形態によれば、DPC機能によりDPC非対応I/Oデバイスが抜かれて異常状態になってもシステムダウンが起こらない状況下で、異常状態のDPC非対応I/Oデバイスに不適切なアクセスが発生しても、メモリが不適切に書き換えられたりシステムが不定状態になることを抑制する。
[第2の実施の形態]
第2の実施の形態における情報処理装置は、仮想化制御プログラムであるハイパバイザを実行して仮想マシン(ゲストVM(Virtual Machine))を生成し、生成された各仮想マシンがそれぞれのアプリケーションプログラムをそれぞれのゲストOSと共に実行する。ハイパバイザは、各仮想マシンの仕様(CPUまたはCPUコア数、CPUのクロック数、メモリサイズ、ディスクサイズ、ネットワーク帯域など)に基づいて、情報処理装置のハードウエア(CPU、メインメモリ、ディスクストレージ装置、ネットワーク装置)の資源を割り当てることで、各仮想マシンを生成する。一般に、ホストOSはハイパバイザを含む。
第2の実施の形態では、DPC非対応I/Oデバイスへのアクセス時に、ハイパバイザが、I/Oデバイスが異常状態の場合に異常処理を行い、DPC非対応デバイスドライバによる不適切な動作を抑制する。これにより、デバイスベンダに依存したDPC非対応のデバイスドライバの機能不足を補い、異常状態のI/Oデバイスへのアクセス発生時に図2で示した異常動作が生じないようにする。
なお、第2の実施の形態に関連する技術については、末尾の[関連技術]にまとめている。したがって、それを適宜参照することで、以下の説明を理解することができる。
[第2の実施の形態の情報処理装置と仮想マシン]
図7は、第2の実施の形態における情報処理装置1の構成を示す図である。図3と同様に、情報処理装置1は、コンピュータ、またはサーバである。情報処理装置1は、情報処理回路であるCPU(Central Processing Unit)10と、メインメモリ12と、モニタやキーボードなどの入力デバイス14と、それらを接続するCPUバス16を有する。さらに、情報処理装置1は、CPUバス16に接続されるI/Oバスブリッジ(または入出力部)18を有し、I/Oバスブリッジ18のI/OポートP1,P2にはI/Oデバイス(または周辺デバイス)DEV1、DEV2が接続されている。また、I/Oバスブリッジ1のI/OポートP3には、I/Oデバイスの一つであるハードディスクなどの大容量ストレージ装置20が接続されている。
I/Oバスブリッジ18は、I/OデバイスDEV1,DEV2が抜かれるなどの異常状態になった場合のフェイタルエラーをエラー度を下げてコレクタブルエラーとして上流側に伝搬するDPC機能を実装している。そして、各I/OデバイスDEV1,DEV2は、CPU10がアクセスするレジスタ群REGと、デバイスの機能を実現する機能回路または機能装置FUNCを有する。
また、ハードディスク20は、例えば、アプリケーションプログラム(または個別プログラム)24と、オペレーティングシステム(または基盤ソフトウエア)22を記憶する。そして、情報処理装置1は起動すると、アプリケーションプログラム24とOS22をメインメモリ12内に展開し、CPU10がメインメモリ12に展開されたアプリケーションプログラムとOSを実行する。
OS22のカーネルは、少なくともI/OデバイスDEV1,DEV2をそれぞれ制御するデバイス制御プログラムであるデバイスドライバDD1,DD2を有する。
そして、CPU10がアプリケーションプログラムまたはOSを実行することで、I/OデバイスDEV1,DEV2にアクセスし、I/Oデバイスの機能回路または機能装置FUNCに所望の処理を実行させる。具体的には、CPU10がアプリケーションプログラム24を実行中にI/Oデバイスへのアクセスが発生すると、CPU10は、OS内の図示しないデバイスオブジェクトを介してアクセス対象のデバイスドライバDD1,DD2を起動し、デバイスドライバにI/OデバイスDEV1,DEV2内のレジスタに所定の設定値を書き込み、その設定値に対応する処理を機能回路または機能装置FUNCに実行させる。ここまでは、図3と同様である。
図3と異なり、図7の情報処理装置1は、仮想化マシンを生成し制御するハイパバイザ(または基盤ソフトウエア)26を有する。ハイパバイザ26が仮想マシンを起動し、仮想マシンがアプリケーションプログラム24を実行する際に、仮想マシンへのハードウエア資源の割当の制御を行う。ハイパバイザ26は、OS22に含まれるのが一般的である。
図8は、第2の実施の形態の情報処理装置1の仮想マシンの構成例を示す図である。図8の例では、ハイパバイザ26が、3つの仮想マシンVM1、VM2、VM3を生成し動作させている。各仮想マシンVMに対応して、ゲストOSとアプリケーションプログラムAPLがインストールされる。CPU10は、ハイパバイザ36によるハードウエア資源割り当て制御のもとで、各仮想マシンVMのアプリケーションプログラムAPLをゲストOSと共に実行する。そして、仮想マシンVMがI/OデバイスDEV1,DEV2へのアクセスを要求すると、ハイパバイザ26を介してホストOS22内のデバイスドライバがアクセスを実行する。
第2の実施の形態の情報処理装置1は、図2の動作S3のようなエラーが発生しないように、I/Oバスブリッジに搭載されているI/Oデバイスのうち、DPC非対応のI/Oデバイスを監視対象デバイスに登録しておく。言い換えれば、DPC非対応のI/Oデバイスとは、DPC非対応デバイスドライバのI/Oデバイスの意味である。そして、仮想マシンVMがアプリケーションプログラムを実行中に、監視対象I/Oデバイスへのアクセスを発生した場合、仮想マシンの動作モード(以下VMモード)からハイパバイザの動作モード(以下HVモード)に遷移するよう各種設定をしておく。
監視対象I/Oデバイスへのアクセスが発生すると、HVモードに遷移し、ハイパバイザ26は、デバイスドライバに代わって、アクセス対象のI/Oデバイスにアクセスし、読み出しデータが異常値かどうかをチェックする。読み出しデータが異常値(例えば前述のALL F)の場合は、不正なアクセスと判断し、対象の仮想マシンVMを停止する。これにより、対象の仮想マシンVMによるI/Oデバイスへのアクセスが中断され、結果的にアクセスが抑止される。一方、読み出しデータが異常値でない場合は、正常なアクセスと判断し、読み出しデータを仮想マシンのメモリやレジスタに格納し、仮想マシンの動作モード(VMモード)に遷移する。
第2の実施の形態では、ハイパバイザの動作モード(HVモード)と仮想マシンの動作モード(VMモード)とを利用し、仮想マシンによるDPC非対応I/Oデバイスへのアクセス要求(正確には、リードアクセス要求)に応答して、HVモードに遷移し、ハイパバイザがI/Oデバイスへのアクセス(リードアクセス)をエミュレートし、読み出しデータに基づいてI/Oデバイスが異常状態か否かをチェックする。異常状態でない場合は、VMモードに遷移する。但し、ハイパバイザがリード動作をエミュレート済みであるので、デバイスドライバによるI/Oデバイスへのアクセス処理を行わない。したがって、DPC非対応I/Oデバイスへのアクセスが発生したときに、ハイパバイザが、リアルタイムでアクセスの実行と異常状態のチェックを行う。
[ハイパバイザ]
次に、本実施の形態におけるハイパバイザの構成例、CPUの構成、I/Oデバイスのレジスタについて説明し、それらを前提に、情報処理装置1の初期化動作と、監視対象のI/Oデバイスへのアクセスが発生した場合の動作を詳述する。
図9は、ハイパバイザのプログラムモジュール、テーブルなどの構成例を示す図である。ハイパバイザ26は、監視デバイス設定部261を有する。CPUは、監視デバイス設定部261を実行して、I/Oバスブリッジに装着されているI/Oデバイスのうち、DPC非対応I/Oデバイスを監視対象I/Oデバイスとして登録する。監視デバイス設定部261は一種のプログラムモジュールである。
ハイパバイザ26は、仮想マシン情報を初期化するVM情報初期化部262を有する。VM情報初期化部262も一種のプログラムモジュールである。ハイパバイザ26が最初に仮想マシンを起動したときに、CPUはVM情報初期化部262を実行して、各仮想マシンVM1,VM2,VM3の情報を初期化する。初期化される仮想マシンの情報は、例えば、図9中の各仮想マシンVM1,VM2,VM3の情報ファイル280内のデバイスID変換表272、監視I/Oポート番号管理表273、監視MMIOアドレス管理表274、TDP(Two Dimensional Paging)ページテーブル275、VM制御構造体(VMCS)276などである。これらの具体例については後述する。
さらに、ハイパバイザ26は、仮想マシンを起動し、動作させ、一時停止(サスペンド)、再開(レジューム)、停止するなどの制御を行うVM実行部263を有する。VM実行部263は、一種のプログラムモジュールである。CPUは、VM実行部263を実行して、仮想マシン構成情報271に基づいて、仮想マシンの起動、動作、サスペンド、レジューム、停止を制御する。仮想マシン構成情報271は、仮想マシンの情報ファイル280に含まれ、仮想マシンの仕様(CPUまたはCPUコア数、CPUのクロック数、メモリサイズ、ディスクサイズ、ネットワーク帯域など)を有する一種のファイルである。
図10は、VM制御構造体(VMCS)の構成例を示す図である。VM制御構造体276は、後述する[関連技術]に記載したとおり、仮想マシンの状態や設定などを記録するデータ構造体(Data Structure)である。VM制御構造体276の各構成は以下のとおりである。
・VMCS revision identifier280は、バージョン情報が書き込まれるエリアである。
・VMX-abort indicator281は、VM_Exit中にエラーが発生し、VM制御構造体にVM_Exit要因のデータを書き込めなかった場合のエラーコードが書き込まれるエリアである。
・VMCS dataは、様々なデータが読み書きされるエリアである。
・Guest-state area282は、VM_Exit時にゲストVMのCPU内のレジスタを退避し、VM_Entry時にゲストVMが復帰するためのエリアである。
・Host-state are283は、M_Entry時にハイパバイザのCPU内のレジスタを退避し、VM_Exit時にハイパバイザが復帰するためのエリアである。
・VM-execution control fields284は、ゲストVM実行時にどのようなイベントでVM_Exitするかという情報が設定されるフィールドである。第2の実施の形態では、ハイパバイザが、仮想マシンVMを起動する時、このフィールドにI/O命令実行時にVM_Exitするような設定を行う。この初期設定により、CPUはI/O命令の実行に応答してVM_Exitする。具体的には、CPU内の仮想化対応命令実行部がVM_Exitする。詳細は後述。
・VM-exit control fields285は、VM_Exit時のCPUの挙動を設定するエリアである。
・VM-entry control fields286は、VM_Entry時のCPUの挙動を設定するエリアである。
・VM-exit information fields287は、VM_Exit時の要因などが書き込まれるエリアである。
上記のとおり、VM制御構造体276には、VMが動作中のVMモードでVM_Exitする要因が設定され、実際にVM_Exitした時、VM_Exit発生の要因がVM制御構造体に書き込まれる。
図11は、仮想マシン情報ファイル280内の各表及びテーブルの一例を示す図である。以下、それぞれの表及びテーブルを説明する。
監視対象デバイス登録表270は、I/Oバスブリッジに接続されたI/Oデバイスのうち、DPC非対応のデバイスドライバのI/Oデバイスを登録するテーブルである。仮想マシンVM毎に生成される。第2の実施の形態では、利用者が、ハイパバイザ26の監視デバイス設定部261を利用して、事前にこの監視対象デバイス登録表にI/Oデバイスを登録する。登録するデバイスIDとして、例えばI/OデバイスのBDF(Bus番号、Device番号、Function番号)の組合せを利用する。BDFは情報処理装置1内でユニークな番号の組である。
デバイスID変換表272は、I/Oバスブリッジに接続された全てのパススルー対象のI/OデバイスのID変換表である。仮想マシンVM毎に生成される。デバイスID変換表271は、ゲストVM側からみたBDF(ゲストBDF)と、ホスト(ハイパバイザ)側からみたBDF(ホストBDF)とを対応付けて登録する。第2の実施の形態では、利用者が、ハイパバイザ26のVM情報初期化部262を利用して、事前にデバイスID変換表271を作成する。パススルーについては、後述の[関連技術]の欄に記載されている。
ハイパバイザのVM情報初期化部262が、仮想マシンVMを起動した時の初期化処理で、監視対象デバイス登録票270とデバイスID変換表271を参照し、監視対象デバイスについて監視I/Oポート番号管理表273と監視MMIOアドレス管理表374を生成する。また、VM情報初期化部262は、さらに、TDPページテーブル275を全てのI/Oデバイスについて生成する。
監視I/Oポート番号管理表273は、ゲストVMからみたI/Oポート番号(及びサイズ)と、I/OデバイスのホストからアクセスできるI/Oポート番号(及びサイズ)の対応表であり、監視対象I/Oデバイスについて生成される。ゲストVMがI/OデバイスにアクセスするときゲストVMからみたI/Oポート番号を伴うので、ハイパバイザは、管理I/Oポート番号管理表273を参照して、監視対象I/Oデバイスへのアクセスか否かをチェックする。また、ハイパバイザは、ゲストVMがI/OデバイスのI/O空間へのアクセスを行う場合、管理I/Oポート番号管理表273を参照して、ゲストVMによるI/OデバイスへのアクセスのI/Oポート番号を、ホストからアクセスできるI/Oポート番号に変換し、アクセスをエミュレートする。
監視MMIOアドレス管理表274は、ゲストVMからみたMMIOアドレス(及びサイズ)と、I/OデバイスのホストからアクセスできるMMIOアドレス(及びサイズ)の対応表であり、監視対象I/Oデバイスについて生成される。ゲストVMがI/OデバイスにアクセスするときゲストVMからみたMMIOアドレスを伴うので、ハイパバイザは、管理MMIOアドレス管理表を参照して、ゲストVMによるI/OデバイスへのアクセスのMMIOアドレスを、ホストからアクセスできるMMIOアドレスに変換し、アクセスをエミュレートする。
TDPページテーブル275は、全てのI/Oデバイスについて、MMIO領域におけるゲスト物理ページとホスト物理ページの対応を記録する。そして、TDPページテーブル内の監視対象I/Oデバイスのゲスト物理ページ/ホスト物理ページのエントリのリードアクセスビットに、VM_Exitの発生を指示する「0」が設定される。これにより、監視対象I/Oデバイスへのリードアクセスが発生したとき、CPUがTDPページテーブル275を参照し、リードアクセスビットの「0」に応答して、VM_Exitする。これにより、監視対象I/Oデバイスへのリードアクセス時にCPUの動作で自動的にVM_Exitが発生する。具体的には、後述するCPUの仮想化対応MMU(Memory Management Unit)がVM_Exitする。この動作が、監視対象I/OデバイスのMMIO空間へのリードアクセスを検出する動作である。TDPページテーブルは、Intel社のEPT(Extended Page Table)に対応する。
[CPUの構成とBARの構成]
図12は、本実施の形態におけるCPUの仮想化に対応するハードウエア構成を示す図である。ハイパバイザによる仮想化制御によるオーバヘッドを削減するために、CPUやI/Oバスブリッジは専用の回路構成を有する。図12に示されるとおり、CPU10は、仮想化対応命令実行部101と、仮想化対応MMU(Memory Management Unit)102を有する。いずれも論理回路で構成される。
仮想化対応命令実行部101は、特定の命令(例えばI/O命令)がゲストVMの実行モード(VMモード)で実行されたことを検出し、メモリ12内のVM制御構造体のVM_Exit要因の設定に基づいて、自動的にVM_Exitし、ハイパバイザ実行モード(HVモード)に遷移する。したがって、各VMのVM制御構造体276には特定の命令でVM_Exitすることが設定され、CPU10にVM制御構造体276のアドレスが通知される。
第2の実施の形態では、CPU内の仮想化対応命令実行部101が、I/O命令を実行するときに自動的にVM_ExitしてHVモードに遷移する。その後、ハイパバイザのVM実行部263が管理I/Oポート番号管理表を参照して、監視対象I/Oデバイスへのアクセスか否かをチェックする。これにより、ハイパバイザは、監視対象I/Oデバイスへのアクセスかを検出する。この動作が、監視対象I/OデバイスへのI/O空間へのアクセスを検出する動作である。
仮想化対応MMU102は、I/OデバイスにMMIO空間でアクセスが発生したとき、TDPページテーブルを参照してゲスト物理ページをホスト物理ページに変換し、リードアクセスビットの設定が「1」の場合に自動的にVM_Exitする。この動作が、監視対象I/OデバイスへのMMIO空間へのアクセスを検出する動作である。
図13は、BARレジスタの構成例を示す図である。I/Oデバイスは、レジスタにハードウエアで対応付けられたBARレジスタBAR_REGを有する。情報処理装置の起動時の初期化プログラムが、BARレジスタに対応するレジスタに割り当てたI/O空間のアドレスまたはMMIO空間のアドレスと、書き込まれたアドレスがI/O空間かMMIO空間かを示すビット「1」または「0」とを、BARレジスタBAR_REGそれぞれに書き込んで初期設定する。これにより、アクセス要求が発行されると、I/OデバイスはBARに設定されたアドレスと、アクセス要求のアドレスとを比較して、どのレジスタがアクセス先かを決定する。
[第2の実施の形態における動作の概略]
図14、図15は、第2の実施の形態における情報処理装置の動作の概略を示すフローチャート図である。
[1.全体の初期化、図14参照]
ユーザからの指示に応答して、ハイパバイザの監視デバイス設定部261は、監視対象のI/Oデバイスをハイパバイザ26内の監視対象デバイス表に登録する(S20, S21)。監視対象I/Oデバイスは、DPC非対応のデバイスドライバでアクセスされるI/Oデバイスである。具体的には、図11で説明したとおり、監視対象I/OデバイスのBDF番号を登録する。
さらに、ユーザからの指示に応答して、ハイパバイザのVM情報初期化部262は、ハイパバイザが起動する仮想マシンVMからパススルーで直接アクセスされる全てのI/Oデバイスを、デバイスID変換表272に登録する(S22, S23)。このとき、ゲストVMから認識できるBDF値とそれに対応するホスト側のBDF値とがデバイスID変換表272に登録される。
さらに、ユーザからの仮想マシンVMを実行(または起動)する指示に応答して、ハイパバイザのVM情報初期化部262は、起動対象の仮想マシンVMのVM制御構造体に、I/Oアクセス命令でExitするよう設定する(S24, S25)。これにより、CPU10の仮想化対応命令実行部101が全てのI/O命令に対してExitするように設定される。また、このとき、VM情報初期化部262は、VM制御構造体で保管対象に設定されていないホスト用のCPU内のレジスタを退避する(S25)。
[2.VMの初期化、図14参照]
次に、ハイパバイザのVM実行部263は、仮想マシンVMを起動してVM_Entyし、仮想マシンVMの動作モードであるVMモードに入る。具体的には、VM実行部263は、VM制御構造体276にVM制御情報を登録し、CPUのコンテキスト(レジスタ値)をゲストVMの値に切り替えて、仮想マシンVMを起動する。起動動作は、例えば、仮想マシンVMのBIOSを実行し、VMのブートローダを実行し、起動プログラムを実行する。
この起動時に、仮想マシンVMは、VMモードに入り、ハイパバイザのVM実行部263は、I/Oデバイスの初期化処理を実行する(S27)。I/Oデバイスの初期化処理で、ゲストVMが認識できるI/OデバイスのI/O空間とMMIO空間がI/Oデバイス内のBARに設定される。このI/Oデバイス内のBARにアドレスを設定する初期化フローはI/O命令を伴う。そのため、CPUの仮想化対応命令実行部101は、初期化フローのI/O命令を検出し、VM制御構造体のVM_Exit要因の設定に基づき、VM_Exitしてハイパバイザの動作モードであるHVモードに入る。
初期化処理でBARに設定されたアドレスがI/O空間の場合、且つアクセス先が監視対象デバイスのBARの場合、ハイパバイザのVM実行部263は、監視I/Oポート番号管理表273にゲストI/Oポート番号(及びサイズ)とホストI/Oポート番号(及びサイズ)の組を登録する(S28)。
具体的には、ハイパバイザのVM実行部263は、デバイスID変換表272を参照して、I/OアクセスのデバイスIDであるゲスト側BDF値からホスト側BDF値を抽出し、さらに、監視対象デバイス表270を検索して監視対象I/Oデバイスへのアクセスであるか否か判定する。監視対象I/OデバイスへのI/O命令の場合、VM実行部は、監視I/Oポート番号管理表273に前述のI/Oポート番号の組を登録する。ゲストVMがI/Oアクセスしたポート番号の情報は、VM制御構造体276のVM-exit information fields287から取得される。
初期化処理でBARに設定されたアドレスがMMIOアドレスの場合、且つアクセス先が監視対象デバイスの場合、ハイパバイザのVM実行部263は、監視MMIOアドレス管理表274にゲストMMIOアドレスとホストMMIOアドレスの組を登録する。さらに、VM実行部は、TDPページテーブル275に、当該MMIO領域におけるゲスト物理ページとホスト物理ページの組を登録する。この際、VM_Exitさせる設定(Read Access Bitを「0」に設定)も行う(S29)。アクセス先が監視対象デバイスか否かの判定は、I/O空間の場合と同様である。
以上でVM初期化フローが終了し、VM実行部は、VM_Entryし、再度仮想マシンVMの動作モードであるVMモードに戻し、仮想マシンVMの通常動作に移る。
[3.VM初期化後の通常動作、図15参照]
VMモードの通常動作では、仮想マシンVMがI/O命令を実行すると、CPUの仮想化対応命令実行部101が、VM制御構造体276の設定に基づき自動的にVM_Exitする(S30のYES)。または、仮想マシンVMが監視対象I/OデバイスのMMIOアドレスへのアクセス(リードアクセス)を実行すると、CPUの仮想化対応MMU102が、TDPページテーブル275を参照してゲスト物理ページからホスト物理ページに変換する際に、監視対象I/OデバイスのMMIOアドレスに対するリードアクセスフラグ「0」に基づいて、自動的にVM_Exitする(S32のYES)。これらVM_ExitでHVモードに移る。
前述のI/O命令でVM_Exitしてきた場合、非監視対象デバイスも含めて全てのI/O命令でVM_Exitしている。したがって、HVモードにて、VM実行部263は、VM制御構造体からVM_Exitした要因(I/O命令)とアクセス先のI/Oポート番号を取得し、監視I/Oポート番号管理表273を参照して監視対象I/Oデバイスへのアクセスか否かを判別する(S31)。もし、アクセス先I/Oポート番号が監視I/Oポート番号管理表273内のゲストI/Oポート番号と一致すれば、監視対象I/Oデバイスへのアクセスであることが判明する。つまり、監視I/Oポート番号管理表内のI/Oポート番号は、監視I/Oデバイスへのアクセスアドレスである第1のアドレスの一つである。
もし、アクセス先I/Oポート番号が監視I/Oポート番号管理表273内のゲストI/Oポート番号と一致しなければ、VM実行部は、対応するI/O命令をエミュレートする(S31_2)。
一方、監視対象I/OデバイスのMMIO空間へのリードアクセスでVM_Exitした場合は(S32のYES)、監視対象I/Oデバイス宛のリードアクセスであることは判明している。つまり、監視MMIOアドレス管理表274内のアドレスは、監視I/Oデバイスへのアクセスアドレスである第1のアドレスの一つである。
次に、VM実行部263は、仮想マシンVMが行おうとしていたI/Oデバイスへのリードアクセスをエミュレートする(S33)。そのために、VM実行部は、監視I/Oポート番号管理表273を参照してホスト側I/Oポート番号を取得する。または、VM実行部は、監視MMIOアドレス管理表274を参照してホスト側MMIOアドレスを入手する。そして、VM実行部は、ホスト側I/Oポート番号またはホスト側MMIOアドレスで、仮想マシンVMが読み出そうとしていたI/Oデバイスのレジスタ(第1のレジスタ)の値を読み出す(S33)。
次に、ハイパバイザの異常判定部264は、アクセス先I/OデバイスがI/Oバスブリッジから切断されて異常状態にあるか否かを判定する。まず、前述のI/Oデバイスへのリードアクセスのデータ値が、ALL Fか否か判定する(S34)。ALL Fは、I/Oデバイスが異常状態の場合に応答する値である。
ALL Fの場合(S34のYES)、そのALL Fが正常値か異常値かを確認するため、異常判定部264は、そのI/Oデバイスの別のレジスタ(第2のアドレス領域の第2のレジスタで、必ず0があるレジスタ)をリードする(S35)。そして、そのリード値がALL Fか否かを判定する(S36)。
別のレジスタのリードデータがALL Fなら(S36のYES)、ハイパバイザの異常処理実行部265は、アクセス先I/Oデバイスは異常状態であることが確定するので、仮想マシンVMを停止(強制シャットダウン)する(S37)。これにより、第1のレジスタからのリードデータは仮想マシンVMに応答されず、第1のレジスタへのリードアクセスは中断される。
一方、別のレジスタのリードデータがALL Fでないなら(S36のNO)、アクセス先I/Oデバイスは正常状態であり、先に読み出した値のALL Fは正常な値であると判断される。そして、VM実行部263は、第1のアドレス領域の第1のレジスタから読み出した値を、仮想マシンVMのレジスタまたはメモリに格納する。これで、I/Oデバイスへのリードアクセスの動作が完了する。そして、VM実行部は、VM_Entryして、VMモードへ移行する(S38)。
処理S33でI/Oデバイスのアクセス先レジスタをリードしたときのリードデータがALL Fでない場合(S34のNO)、異常判定部は、そのI/Oデバイスは正常であることを検出し、リードエミュレートS33で得たリードデータを対応する仮想マシンVMのメモリ又はCPU内レジスタに書き込んで、VM Entryする(S38)。
[異常処理実行部による別の異常処理例]
上記の説明では、アクセス先I/Oデバイスが異常状態であることが判明した場合、異常処理実行部265は、I/Oアクセスを実行した仮想マシンVMを停止する。
しかし、監視対象I/Oデバイスの仕様により、異常値検出時において仮想マシンVMに応答する安全なダミーデータが存在する場合は、異常処理実行部265は、異常値に代えてダミーデータを仮想マシンVMのレジスタまたはメモリに格納し、VM_Entryする。安全なダミーデータであれば、不適切なメモリアクセスなどは発生しない。この場合も、I/Oアクセス先へのリードエミュレーションは中断され、そのI/Oアクセスは抑制される。
ダミーデータを異常値に代えて安全なダミーデータをリードデータとして利用するために、監視対象I/Oデバイス表270に安全なダミーデータを設定しておくのが望ましい。図11の監視対象I/Oデバイス表に示すとおりである。
以上説明したとおり、第2の実施の形態では、仮想マシンが監視対象I/Oデバイスにリードアクセスすると、ハイパバイザのVM実行部がそのI/Oデバイスへの読み出しを行い、I/Oデバイスへのリードアクセスをエミュレートする。このリードアクセスで得たリードデータが異常値ALL Fと同じ場合、そのリードデータが正常値か異常値かを確認するために、ハイパバイザのVM実行部は第2のアドレスの第2のレジスタを読み出し、再度リードデータが異常値ALL Fと同じなら、異常判定部はI/Oデバイスは異常状態と判断する。異常状態と判断されると、VM実行部が仮想マシンを強制シャットダウンする。したがって、エミュレートしたリードデータが仮想マシンのレジスタまたはメモリに格納することがなく、I/Oデバイスへのリードアクセスが中断(または抑制)される。
第2の実施の形態では、I/Oリードアクセスをエミュレートした後に、第2のレジスタ(必ず0が含まれるレジスタ)をリードして異常状態を確認するので、第2のレジスタのリードデータが異常値でない場合は、エミュレートしたリードデータを仮想マシンのレジスタまたはメモリに格納する(S38)。
したがって、第2の実施の形態は、第1の実施の形態のように、リードチェック・デバイスドライバが第2のレジスタのデータをチェックした後に、本来のデバイスドライバがリードアクセスを実行する動作とは、異なる。
また、第2の実施の形態では、監視対象I/Oデバイスへのアクセスを検出するために、CPUの仮想化対応命令実行部と仮想化対応MMUの機能を利用する。すなわち、I/Oデバイスへのリードアクセスは、I/O命令でI/Oポート番号を指定して行うI/Oポートアクセスと、リード命令でMMIOアドレスを指定して行うリードアクセスとがある。
I/O空間へのアクセスの場合は、CPUの仮想化対応命令実行部101がI/O命令を検出したときにVM_Exitし、HVモードでVM実行部がI/Oポート番号が監視対象I/OデバイスのI/Oポート番号と一致するか否かをチェックし、監視対応I/Oデバイスへのアクセスを検出する。
MMIO空間へのアクセスの場合は、CPUの仮想化対応MMU102がMMIOアドレスが監視対象I/OデバイスのMMIOアドレスと一致するか否かをチェックし、監視対応I/Oデバイスへのアクセスを検出する。したがって、CPUによるハードウエア回路101,102での自動検出機構が、監視対象I/Oデバイスへのアクセスを検出する。但し、I/O空間へのアクセスの場合はハイパバイザのVM実行部が最終的に検出する。
そして、第2の実施の形態では、仮想マシンVMを起動したときのI/Oデバイスの初期化工程で、BARの設定のためのI/O命令によりCPUが自動的にVM_Exitし、ハイパバイザモードに入る。VM制御構造体にVM_Exit要因として設定されているからである。そして、HVモードで、VM実行部が、監視対象I/OデバイスにおけるゲストVMとホストのI/Oポート番号及びMMIOアドレスの対応表(管理表)の作成と、TDPページテーブルへのVM_Exitの設定を行う。監視I/Oポート番号管理表は、監視対象I/OデバイスへのI/Oポートアクセスか否かの確認に利用される。さらに、監視I/Oポート番号管理表と監視MMIOアドレス管理表は、ハイパバイザのVM実行部によるリードまたはライトエミュレーション工程で参照される。
[第2の実施の形態の具体的動作例]
以下、第2の実施の形態の具体的動作例を説明する。図16乃至図26は、第2の実施の形態の具体的動作例を示すフローチャート図である。これらのフローチャート図では、2つのVM_Exit要因でVM_Exitした後の処理が含まれる。第1のVM_Exit要因は、VM起動時のI/Oデバイス初期化時のI/O命令で発生するVM_Exitであり、第2のVM_Exit要因は、VMモードで監視対象I/Oデバイスへのアクセス(I/O命令とMMIOアドレスへのリード又はライト命令)で発生するVM_Exitである。したがって、これらのフローチャートは、上記の第1のVM_Exitした後のHVモードでの初期化処理(ライト動作)と、第2のVM_Exitした後のHVモードでのリードエミュレーション動作とを有する。図14、図15の工程番号と同じ工程には、図14、図15の工程番号も明示した。
図16は、仮想マシンVM起動前の処理とVM_Entry後にVM_Exitした時の処理の概略を示すフローチャート図である。VM起動前の処理では、ハイパバイザHVが、DPC非対応I/Oデバイスのテーブル(監視対象I/Oデバイス表)を作成しメモリに記憶する(S41(S21))。さらに、ハイパバイザHVが、パススルー対応の全てのI/OデバイスのデバイスID(BDF)変換表を作成しメモリに記憶する(S42(S22))。そして、ハイパバイザHVが、VM制御構造体を初期化し、VM-Execution Control Fields内のUnconditional I/O exitingを「1」に設定する(S43(S25))。この設定で、全てI/O命令がVM_Exitを招くようになる。
次に、ハイパバイザHVのVM実行部は、仮想マシンVMを起動しVM_Entryする(S44(S26))。仮想マシンVMの起動では、CPUが仮想マシンのBIOSを実行して仮想マシンVMを起動する(S44(S26))。起動後のVM_Entry状態で、VM実行部は、様々な要因によりVM_Exitする(S45,S46)。このVM_Exitの要因には、I/O命令の実行と、監視対象I/OデバイスのMMIOアドレスへのリードアクセスに起因したTDPページフォルト(TDP違反)とが含まれる。
VM_ExitしてHVモードになると、ハイパバイザのVM実行部は、MV_Exitの要因をVM制御構造体を参照して調査し、I/O命令が要因ならI/Oポート処理S50を、TDPページフォルトが要因ならMMIO処理S49を、それ以外の要因なら他のエミュレーション処理S48を、それぞれ実行する。I/Oポート処理S50は、前述のとおり、VM起動時のI/Oデバイスの初期化でのI/O命令と、通常動作時のI/O命令によりVM_Exitした後の処理である。一方、MMIO処理S49は、通常動作時の監視対象I/OデバイスへのアクセスによりVM_Exitした後の処理である。I/Oポート処理S50とMMIO処理S49は後で詳述する。
I/Oポート処理S50とMMIO処理S49で第2のレジスタのリードデータが異常値であることを検出した場合(S51のYES)、仮想マシンVMを強制終了する(S53(S37))。異常値でない場合(S51のNO)と他のエミュレーションを実行した場合(S48)は、VM実行部は、仮想マシンVMをレジュームし、再度EM_Entryする(S52(S38))。
I/Oポート処理S50とMMIO処理S49について以下説明する。I/Oポート処理S50は、I/Oデバイス初期化時のライト処理と、通常動作時のI/Oデバイスアクセス時のリード及びライトエミュレーション処理などを含む。また、MMIO処理S49は、通常動作時のI/Oデバイスアクセス時のリード及びライトエミュレーション処理などを含む。また、通常動作時のリードエミュレーション処理は、I/Oデバイスが正常か異常かを判定する処理を含む。
[I/Oポート処理、図17−図21]
図17は、HVモードでのI/Oポート処理S50のフローチャート図である。VM実行部は、VM制御構造体276のVM-Exit Information FieldのExit qualification(Exit要因)からI/Oポート番号、リードまたはライトの情報を取得する。そして、VM実行部は、Exit要因がリードの場合(S56のRead)、I/Oリード処理S57を実行し、Exit要因がライトの場合(S56のWrite)、I/Oライト処理S58を実行する。I/Oリード処理S57は、初期化処理では発生せず、VMモードでI/O命令によりVM_Exitした後のHVモードでのリードエミュレーションと異常状態確認のリード動作を含む。I/Oライト処理S58は、初期化処理でのライト処理と、非初期化処理でのライトエミュレーションとを含む。
図18は、HVモードでのI/Oポート処理S50内のI/Oライト処理S58のフローチャート図である。VM実行部は、I/OライトアクセスのI/Oポート番号がI/Oデバイスの初期化処理に対応する場合(S60のYES)、書き込み用入力値をメモリに格納する(S61)。また、VM実行部は、表270,272を参照し(S62)、ホストBDFが監視対象デバイス登録表270のデバイスBDFと一致する場合(S63のYES)、監視対象I/Oデバイスのコンフィグレーションスペースにライト処理を行う(S64)。この処理S64は、図14の処理S28,S29を含む。ホストBDFが監視対象デバイス登録表のデバイスBDFと一致しない場合、VM実行部は、通常のI/Oエミュレーション処理を行う。
一方、VM実行部は、I/OライトアクセスのI/Oポート番号がI/Oデバイスの初期化処理に対応しない場合(S60のNO)、非初期化処理である通常動作でのI/Oライト処理を行う(S66)。
図19は、監視対象I/Oデバイスのコンフィグレーション領域へのライト処理S64のフローチャート図である。I/Oライトアクセス先のコンフィグレーション領域がBARである場合(S70のYES)、MV実行部は、BARに書き込まれるデータのbit1が「0」か否かを判定する(S71)。MV実行部は、bit1が「0」(MMIO空間)なら(S71のYES)、ホストI/Oデバイスのコンフィグレーション領域を読み出して(S74)、ホストI/OデバイスのBARと、ゲストI/OデバイスのBARとをTDPページテーブル上にマッピングし(S75)、TDPページテーブルのマップ先エントリのRead Access bitを「0」にWrite Access bitを「1」にそれぞれ設定する(S76(S29))。さらに、VM実行部は、MMIOアドレス管理表にゲスト物理ページ(アドレス)とホスト物理ページ(アドレス)の対応を追加する(S77(S29))。これにより、初期化処理での、TDPページテーブルへの設定と、監視MMIOアドレス管理表への登録がそれぞれ行われる。
一方、VM実行部は、前述のbit1が「1」(I/O空間)なら(S71のNO)、ホストI/Oデバイスのコンフィグレーション領域を読み出して(S72)、I/Oポート番号管理表にゲストI/Oポート番号とホストI/Oポート番号との対応を追加する(S73(S28))。これにより、初期化処理での監視I/Oポート番号管理表への登録が行われる。
また、VM実行部は、I/Oライトアクセス先のコンフィグレーション領域がBARでない場合(S70のNO)、ホストI/Oデバイスのコンフィグレーション領域を読み出し(S78)、ホストI/Oデバイス上の指定されたレジスタにライト用入力値を書き込む(S79)。これは、BAR以外の初期化のための書き込み処理である。
図20は、図18の非初期化処理でのI/Oライト処理S66のフローチャート図である。つまり、図20のI/Oライト処理S66は、VMモードでの通常処理においてI/Oライトアクセスが発生し、VM_Exitした後のHVモードでのVM実行部によるI/Oライトエミュレーション処理である。
I/OライトアクセスのI/Oポート番号が監視I/Oポート番号管理表に存在する場合(S80のYES)、管理対象I/Oデバイス宛てのライト命令であるので、VM実行部は、I/Oポート番号管理表からホストI/Oポート番号を取得し(S81)。そのホストI/Oポート番号に対してI/Oライト命令を実行する(S82)。I/Oライト命令では、監視対象I/Oデバイスが非接続状態になっていてもALL Fの読み出しデータが応答されることはない。
一方、I/OライトアクセスのI/Oポート番号が監視I/Oポート番号管理表に存在しない場合(S80のNO)、VM実行部は、通常のI/Oライトエミュレーション処理を実行する(S83)。
図21は、図17のI/Oリード処理S57のフローチャート図である。つまり、図21のI/Oリード処理S57は、VMモードでの通常処理においてI/Oリードアクセスが発生し、VM_Exitした後のHVモードでのVM実行部によるI/Oリードエミュレーション処理である。
I/OリードアクセスのI/Oポート番号が監視I/Oポート番号管理表に存在する場合(S85のYES)、管理対象I/Oデバイス宛てのリード命令であるので、VM実行部は、I/Oポート番号管理表からホストI/Oポート番号を取得し(S86)。そのホストI/Oポート番号に対してI/Oリード命令を実行する(S87(S33))。そして、監視対象I/Oデバイスが非接続状態で異常状態か否かをリードデータ基づいてチェックする(S88(S34-S35))。このエラーチェック処理は後述する。
リードデータが異常値(ALL F)の場合(S89(S36)のYES)、異常処理実行部は、仮想マシンVMをシャットダウンする(S90(S37))。一方、リードデータが異常値でない場合(S89(S36)のYES)、VM実行部は、リードデータをゲストVMのメモリとレジスタ(CPU内)に格納する(S91(S38))。これによりI/Oリードエミュレーション処理が完了する。
一方、I/OリードアクセスのI/Oポート番号が監視I/Oポート番号管理表に存在しない場合(S85(S31)のNO)、VM実行部は、通常のI/Oリードエミュレーション処理を実行する(S91(S38))。
[MMIO処理、図22−図23]
次に、図16のMMIO処理S49について説明する。図16で説明したとおり、CPUがTDPページテーブルを参照してページフォルトを発生してVM_Exitした後のHVモードでの処理である。このページフォルトには、VMモードでゲストVMが監視対象I/OデバイスのMMIO空間にアクセスしたときのページフォルトと、それ以外の一般的なページフォルトとが含まれる。
図22は、HVモードでのMMIO処理S49のフローチャート図である。VM実行部は、VM制御構造体276のVM-Exit Information FieldsのGuest-physical addressからゲスト物理アドレスを取得する(S95)。このゲスト物理アドレスは、仮想マシンVMが監視対象I/OデバイスのMMIOアドレスでアクセスした時のゲスト物理アドレスである。VM実行部は、そのゲスト物理アドレスが監視MMIOアドレス管理表274に存在するかをチェックする。存在する場合(S96のYES)、監視対象I/OデバイスへのMMIOアドレスによるアクセスであるので、VM実行部は、MMIOリード処理S99またはMMIOライト処理S100のいずれかを実行する。リードかライトかの判断のために、VM実行部は、VM制御構造体276内のVM-Exit Information FieldsのVM-Exit qualificationからリードまたはライトを取得し(S97)、判断する(S98)。
一方、ゲスト物理アドレスが監視MMIOアドレス管理表274に存在しない場合(S96のNO)、一般的なページフォルトでVM_Exiteしたことを意味するので、VM実行部は、通常のI/Oエミュレーション処理を実行する(S101)。
図23は、HVモードのMMIO処理S49内のMMIOライト処理S100とMMIOリード処理S99のフローチャート図である。VM実行部は、MMIOライト処理S100において、監視MMIOアドレス管理表274を参照し、MMIOアドレスへのアクセスのゲストMMIOアドレスをホストMMIOアドレスに変換する(S105)。さらに、VM実行部は、ゲストVMの命令ポインタ(IP: Instruction Pointer)値を読み出し、その命令ポインタの命令をデコードし、書き込み情報(書き込み先のメモリ、レジスタ、書き込みサイズ)を取得し(S106)、ホストMMIOアドレスに対してデコードしたライト命令を実行する(S107)。
一方、VM実行部は、MMIOリード処理S99において、監視MMIOアドレス管理表274を参照し、MMIOアドレスへのアクセスのゲストMMIOアドレスをホストMMIOアドレスに変換する(S110)。さらに、VM実行部は、ゲストVMの命令ポインタ(IP: Instruction Pointer)値を読み出し、その命令ポインタの命令をデコードし、読み出し情報(読み込み先のメモリ、レジスタ、読み込みサイズ)を取得し(S111)、ホストMMIOアドレスに対しデコードしたリード命令を実行する(S112(S33))。VM実行部は、このリードデータを保持する。
そして、リードデータが異常値か否かをチェックし(S88(S34-S35))、異常値なら(S113(S36)のYES)、VM実行部は仮想マシンVMをシャットダウンする(S114(S37))。また、異常値でないなら(S113(S36)のNO)、VM実行部はリードデータをゲストVMのメモリとレジスタに格納する(S115(S38))。
図24は、図21、図23のリード結果のエラーチェックS88のフローチャート図である。図15と同様に、図24では、ハイパバイザの異常判定部が、リードデータがALL Fか否かチェックする(S120(S34))。リードデータがALL Fでなければ(S120のNO)、アクセス先のI/Oデバイスは正常と判断される。一方、リードデータがALL Fの場合、正常状態でレジスタデータのリードデータがALL Fか、異常状態でリードデータがALL Fかを確認する必要がある。
そこで、ハイパバイザの異常判定部は、アクセス対象のI/Oデバイスのコンフィグレーションレション領域からI/OデバイスのベンダIDまたはプロダクトIDが格納される第2のレジスタにリードエミュレーションを実行し(S121(S35))、リードデータがALL Fか否かをチェックする(S122(S36))。異常判定部は、今回もリードデータがALL Fの場合(S122のYES)、対象のI/Oデバイスは異常状態であると判断し、一方、ALL Fでない場合(S122のNO)、対象のI/Oデバイスは正常状態と判断する。
図25は、図18のI/Oライト処理の変形例のフローチャート図である。この変形例では、監視対象デバイス登録表270に代えて、非監視対象デバイス登録表を利用する。つまり、ブラックリストではなくホワイトリストにする。したがって、図25は、I/Oライトアクセスのアクセス先I/OデバイスのID(BDF値)が、非監視対象I/Oデバイスか否か(S63)の判断結果のYESとNOが、図18と逆になっている。つまり、VM実行部は、非監視対象I/Oデバイスの場合(S63のYES)、通常のI/Oエミュレーション処理を実行し(S65)、非監視対象I/Oデバイスでない場合(S63のNO)、監視対象I/Oデバイスのコンフィグレーション領域の処理を実行する。
以上のとおり、第2の実施の形態では、仮想マシンVMがI/Oデバイスにアクセスする場合に、DPC非対応のI/Oデバイスのデバイスドライバが、異常状態で取得するリードデータに基づいて不適切な動作を行うことを抑制することができる。
[関連技術]
以下は、本実施の形態に関する関連技術の簡単な説明である。必要に応じて参照される。
(1)仮想化支援技術
・仮想化によるオーバヘッドを削減するために、CPUなどのハードウエアには、仮想化対応命令実行部や仮想化対応メモリ制御ユニットなどの論理回路が設けられる。第2の実施の形態では、この仮想化支援のためのハードウエア回路の機能を利用して、監視対象I/Oデバイスへのアクセス時にVMモードからVM_Exitする。
・VM制御構造体(VMCS:Virtual Machine Control Structure)は、仮想マシンの状態や設定などを記録するデータ構造であり、VMモードとHVモードとの間でのデータの受け渡しに利用される。
・TDP(Two Dimensional Paging)は、ゲスト物理アドレスとホスト物理アドレス変換をハードウエアで可能にする変換テーブルである。ゲストVMのゲストOSはページテーブルによりゲスト仮想アドレスからゲスト物理アドレスを取得する。TDP変換テーブルは、ゲスト物理アドレスをホスト物理アドレスに変換するための変換テーブルである。
(2)I/Oデバイスの関連技術(特にPCIeデバイス)
・BDF(Bus/Device/Function)番号は、I/Oデバイスのユニークな番号であり、I/Oデバイスへのアクセスは、このI/Oデバイスをユニークに識別するBDF番号でアクセスされる。
・例えばPCIeバスなどのバスコンフィグレーション空間は、I/Oデバイスの基本情報を取得するためのアドレス空間であり次を含む。例えば、I/OポートCF8h(Configuration Index)に対してデバイスのBDF及びレジスタ番号が書き込まれ、I/OポートCFCh(Configuration Data)に対してリード/ライトを実行してコンフィグレーション空間にアクセスされる。コンフィグレーション空間から、I/OデバイスのベンダIDやプロダクトIDなどの製品識別情報が入手され、BAR(Base Address Register)の情報も入手される。
・BAR(Base Address Register)は、I/Oデバイス内のレジスタ群に対してアクセスするためのアドレス空間が記録されるI/Oデバイス内のレジスタであり、各I/Oデバイスに例えば最大で6つ存在する。そして、仮想マシンを起動するときに、ホストのBIOSが、各I/OデバイスのBARレジスタに適切なアドレスを設定する。I/Oデバイスのアドレス空間には、I/O空間とMMIO(Memory Mapped IO)空間の2種類があり、BARにはどちらかのアドレス空間が設定される。
・I/O空間は、INPUT命令とOUTPUT命令(I/O命令)によってI/Oポート経由でアクセスするアドレス空間であり、そのアドレス範囲は、例えば0x0000-0xFFFFである。
・MMIO(Memory Mapped IO)空間は、I/Oデバイスのレジスタがホストのメモリ空間に直接マッピングされるアドレス空間であり、MMIO空間のアドレスを使用して通常のメモリ転送命令によりI/Oデバイス内のレジスタに直接アクセスされる。
・PCI Passthroughとは、ゲストVMがI/Oデバイスに直接アクセスすることができる機能である。PCIパススルーによれば、ゲストオペレーティングシステムがホスト側のI/Oデバイスに直接物理的にアクセスでき、仮想マシンVMが仮想でないデバイスドライバをそのまま利用できる。通常は、ゲストVMによるI/Oデバイスへのアクセスは、ハイパバイザによりエミュレーション処理される。一方、ゲストVMは、パススルー機能を有するI/Oデバイスには、ハイパバイザによるエミュレーションを介さずに、直接I/Oアクセスできる。その場合、ゲストVMのMMIO空間とホストのMMIO空間との対応をTDPページテーブルにマップし、TDPページテーブルを参照して、ゲストVMが対象のI/Oデバイスに直接アクセスする。
仮想マシンVMが、パススルー機能を有するI/Oデバイスにリードアクセスするとき、仮想でないデバイスドライバを直接動作させる。そのため、DPC非対応のデバイスドライバは、異常状態のI/OデバイスからのALL Fのデータを適切にエラー処理できない。第2の実施の形態はこの課題を解決する。
(3)ハイパバイザ動作関連技術
・VM_Entryは、仮想マシンVMが動作するVMモードに推移する動作である。ハイパバイザHVが動作するHVモードからVM_EntryによりVMモードに遷移する。VM_Entryする場合、CPU内は、HVモードでのホストのコンテキストが退避され、VMのコンテキストに交換される。第2の実施の形態では、CPUの仮想化対応命令実行部がVM_Entryを制御する。
・VM_Exitは、VMモードからHVモードに推移する動作である。第2の実施の形態ではゲストVMが発行する特定の命令をトラップしてHVモード(HVによる制御動作)に推移する。例えば、I/Oポートに対するアクセスがあった場合と、TDPのアクセス違反があった場合をトラップして、VM_Exitする。VM_Exitされた後HVモードで、HVは、VM制御構造体VMCSを参照することで、VM_Exitの起点となった命令やアクセス先のアドレスを取得する。また、ゲストVMのインストラクションポイントから、ゲストVMが実行中の命令を取得し、その命令をソフトウエアデコードすることで、VM_Exitの起点となった命令の状況(アクセス元、アクセス先、転送サイズなど)を知ることができる。第2の実施の形態では、CPUの仮想化対応命令実行部がVM_Exitを制御する。
・TDP違反(TDP Violation)については、TDPページテーブルを参照してVMの物理アドレスからホストの物理アドレスに変換する場合、変換先物理アドレスがないなどの理由でTDP違反が生じてページフォルトが発生する。第2の実施の形態では、TPDページテーブル内の監視対象I/Oデバイスのアドレスに、リードアクセスビットを「0」に設定することで、ページフォルトが発生する。CPUの仮想化対応メモリ制御ユニット(MMU)がTDPページテーブルを参照してアドレス変換を行い、上記のページフォルトを発生する。
(4)BAR(Base Address Register)は、I/Oデバイス内のレジスタのアドレスを設定するレジスタである。I/Oデバイス内のレジスタへのアクセスは、メモリ空間に割り当てられたMMIO空間か、I/O空間に対し行われる。MMIOはMemory Mapped IOの省略である。そして、このMMIO空間とI/O空間はプログラマブルであり、システムの初期化プログラムがBARにMMIO空間とI/O空間を設定する。I/Oデバイスへのアクセスはこの設定されたMMIO空間とI/O空間にしたがって行われる。アクセス要求が発行されると、I/OデバイスはBARに設定されたアドレスと、アクセス要求のアドレスとを比較して、どのレジスタがアクセス先かを決定する。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
入出力デバイスが接続可能な入出力部と、
前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、
基盤ソフトウエアを介して個別プログラムを実行する実行部と、
前記実行部が前記基盤ソフトウエア及び前記個別プログラムを実行することにより、前記監視対象入出力デバイスの第1の領域へのアクセスを検出した場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であることを検出する判定部と、を有する情報処理装置。
(付記2)
個別プログラムは、前記入出力デバイスにアクセスする第1のプログラムを有し、
前記判定部は、前記第2の領域から読み出した値が異常値である場合、前記第1の領域へのアクセスを抑止する、
付記1に記載の情報処理装置。
(付記3)
前記基盤ソフトウエアは、オペレーティングシステムと仮想マシンを生成するハイパバイザを有し、
前記個別プログラムは、前記仮想マシンが実行し、前記入出デバイスにアクセスする第1のプログラムを有し、
前記実行部が、前記基盤ソフトウエアと前記個別プログラムを実行することにより、前記仮想マシンを生成し、
前記判定部は、
前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスした場合、前記第1の領域にアクセスし、
前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域にアクセスし、
前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止する、
付記1に記載の情報処理装置。
(付記4)
前記ハイパバイザは、前記監視対象入出力デバイスの識別情報を有し、
前記実行部が、前記ハイパバイザを実行することにより、
前記仮想マシンを起動した時の前記入出力デバイスの初期化処理に応答して、前記監視対象入出力デバイスの前記第1の領域の情報を前記情報保持部に登録する、
付記3に記載の情報処理装置。
(付記5)
前記監視対象入出力デバイスの第1の領域の情報は、前記仮想マシンの前記監視対象入出力デバイスに対する入出力ポート番号と、前記仮想マシンが扱う第1の物理ページと前記オペレーティングシステムが扱う第2の物理ページとの変換テーブルとを有する、
付記4に記載の情報処理装置。
(付記6)
前記実行部は、前記変換テーブルを参照して、前記監視対象入出力デバイスの第1の領域に対応する前記第1の物理ページから前記第2の物理ページに変換する場合、前記監視対象入出力デバイスの第1の領域へのアクセスを検出する、
付記5に記載の情報処理装置。
(付記7)
前記実行部は、前記仮想マシンが前記入出力デバイスへのアクセス命令を実行したことに応答して前記ハイパバイザを実行し、前記ハイパバイザの実行により、前記アクセス命令の入出力ポート番号が、前記第1の領域の情報に含まれる前記監視対象入出力デバイスに対する入出力ポート番号と一致することを検出した場合、前記監視対象入出力デバイスの第1の領域へのアクセスを検出する、
付記5に記載の情報処理装置。
(付記8)
前記実行部は、前記第2の領域から読み出した値が前記異常値でない場合、前記第1の領域から読み出した値を前記仮想マシンの記憶部に記憶する、
付記3に記載の情報処理装置。
(付記9)
前記基盤ソフトウエアは、オペレーティングシステムと仮想マシンを生成するハイパバイザを有し、
前記個別プログラムは、前記仮想マシンが実行し、前記入出デバイスにアクセスする第1のプログラムを有し、
前記実行部が、前記基盤ソフトウエアと前記個別プログラムを実行することにより、前記仮想マシンを生成し、
前記判定部は、
前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスした場合、前記第1の領域にアクセスし、
前記第1の領域から読み出した値が前記異常値である場合、前記異常値以外の値を前記仮想マシンに応答する、
付記1に記載の情報処理装置。
(付記10)
入出力デバイスが接続可能な入出力部と、前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、個別プログラムを実行する実行部とを有する情報処理装置の制御処理を、前記情報処理装置に実行させる制御プログラムであって、
前記制御処理は、
前記監視対象入出力デバイスの第1の領域へのアクセスが検出された場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であるか否かを判定すること
を有する情報処理装置の制御プログラム。
(付記11)
前記制御処理は、さらに、
仮想マシンを生成し、
前記判定することは、
前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスしたことが検出された場合、前記第1の領域にアクセスし、
前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域の値にアクセスし、
前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止することを有する、
付記10に記載の情報処理装置の制御プログラム。
(付記12)
入出力デバイスが接続可能な入出力部と、前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、基盤ソフトウエアを介して個別プログラムを実行する実行部とを有する情報処理装置の制御方法であって、
前記監視対象入出力デバイスの第1の領域へのアクセスが検出された場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であるか否かを判定すること
を有する情報処理装置の制御方法。
(付記13)
さらに、
仮想マシンを生成し、
前記判定することは、
前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスしたことが検出された場合、前記第1の領域にアクセスし、
前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域の値にアクセスし、
前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止することを有する、
付記12に記載の情報処理装置の制御方法。
(付記14)
前記仮想マシンを起動した時の前記入出力デバイスの初期化処理に応答して、前記監視対象入出力デバイスの前記第1の領域の情報を前記情報保持部に登録する、
付記12に記載の情報処理装置の制御方法。
(付記15)
前記監視対象入出力デバイスの第1の領域の情報は、前記仮想マシンの前記監視対象入出力デバイスに対する入出力ポート番号と、前記仮想マシンが扱う第1の物理ページと前記オペレーティングシステムが扱う第2の物理ページとの変換テーブルとを有する、
付記13に記載の情報処理装置の制御方法。
10:CPU、実行部
12:メインメモリ、情報保持部
18:I/Oバスブリッジ、入出力部
DEV1, DEV2:入出力デバイス、周辺デバイス
REG:レジスタ
BAR:ベーシックアドレスレジスタ
OS:オペレーティングシステム
PM:プロセス管理モジュール
DD1、DD2:デバイスドライバ
DDX:リードチェック・デバイスドライバ
24:アプリケーションプログラム
VM:ゲスト仮想マシン、仮想マシン
APL:アプリケーションプログラム
G_OS:ゲストOS
H_OS:ホストOS
26、HV:ハイパバイザ
261:監視デバイス設定部
262:VM情報初期化部
263:VM実行部
264:異常判定部
265:異常処理実行部
270:監視対象入出力デバイス表
280:仮想マシン情報ファイル
271:VM構成情報
272:デバイスBDF変換表、デバイスID変換表
273:監視I/Oポート番号管理表
274:監視MMIOアドレス(Memory Mapped IO Address)管理表
275:TDP(Two Dimensional Paging)用ページテーブル
276:VM制御構造体(VMCS:Virtual Machine Control Structure)

Claims (13)

  1. 入出力デバイスが接続可能な入出力部と、
    前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、
    基盤ソフトウエアを介して個別プログラムを実行する実行部と、
    前記実行部が前記基盤ソフトウエア及び前記個別プログラムを実行することにより、前記監視対象入出力デバイスの第1の領域へのアクセスを検出した場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であることを検出する判定部と、を有する情報処理装置。
  2. 個別プログラムは、前記入出力デバイスにアクセスする第1のプログラムを有し、
    前記判定部は、前記第2の領域から読み出した値が異常値である場合、前記第1の領域へのアクセスを抑止する、
    請求項1に記載の情報処理装置。
  3. 前記基盤ソフトウエアは、オペレーティングシステムと仮想マシンを生成するハイパバイザを有し、
    前記個別プログラムは、前記仮想マシンが実行し、前記入出デバイスにアクセスする第1のプログラムを有し、
    前記実行部が、前記基盤ソフトウエアと前記個別プログラムを実行することにより、前記仮想マシンを生成し、
    前記判定部は、
    前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスした場合、前記第1の領域にアクセスし、
    前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域にアクセスし、
    前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止する、
    請求項1に記載の情報処理装置。
  4. 前記ハイパバイザは、前記監視対象入出力デバイスの識別情報を有し、
    前記実行部が、前記ハイパバイザを実行することにより、
    前記仮想マシンを起動した時の前記入出力デバイスの初期化処理に応答して、前記監視対象入出力デバイスの前記第1の領域の情報を前記情報保持部に登録する、
    請求項3に記載の情報処理装置。
  5. 前記監視対象入出力デバイスの第1の領域の情報は、前記仮想マシンの前記監視対象入出力デバイスに対する入出力ポート番号と、前記仮想マシンが扱う第1の物理ページと前記オペレーティングシステムが扱う第2の物理ページとの変換テーブルとを有する、
    請求項4に記載の情報処理装置。
  6. 前記実行部は、前記変換テーブルを参照して、前記監視対象入出力デバイスの第1の領域に対応する前記第1の物理ページから前記第2の物理ページに変換する場合、前記監視対象入出力デバイスの第1の領域へのアクセスを検出する、
    請求項5に記載の情報処理装置。
  7. 前記実行部は、前記仮想マシンが前記入出力デバイスへのアクセス命令を実行したことに応答して前記ハイパバイザを実行し、前記ハイパバイザの実行により、前記アクセス命令の入出力ポート番号が、前記第1の領域の情報に含まれる前記監視対象入出力デバイスに対する入出力ポート番号と一致することを検出した場合、前記監視対象入出力デバイスの第1の領域へのアクセスを検出する、
    請求項5に記載の情報処理装置。
  8. 前記実行部は、前記第2の領域から読み出した値が前記異常値でない場合、前記第1の領域から読み出した値を前記仮想マシンの記憶部に記憶する、
    請求項3に記載の情報処理装置。
  9. 前記基盤ソフトウエアは、オペレーティングシステムと仮想マシンを生成するハイパバイザを有し、
    前記個別プログラムは、前記仮想マシンが実行し、前記入出デバイスにアクセスする第1のプログラムを有し、
    前記実行部が、前記基盤ソフトウエアと前記個別プログラムを実行することにより、前記仮想マシンを生成し、
    前記判定部は、
    前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスした場合、前記第1の領域にアクセスし、
    前記第1の領域から読み出した値が前記異常値である場合、前記異常値以外の値を前記仮想マシンに応答する、
    請求項1に記載の情報処理装置。
  10. 入出力デバイスが接続可能な入出力部と、前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、個別プログラムを実行する実行部とを有する情報処理装置の制御処理を、前記情報処理装置に実行させる制御プログラムであって、
    前記制御処理は、
    前記監視対象入出力デバイスの第1の領域へのアクセスが検出された場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であるか否かを判定すること
    を有する情報処理装置の制御プログラム。
  11. 前記制御処理は、さらに、
    仮想マシンを生成し、
    前記判定することは、
    前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスしたことが検出された場合、前記第1の領域にアクセスし、
    前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域の値にアクセスし、
    前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止することを有する、
    請求項10に記載の情報処理装置の制御プログラム。
  12. 入出力デバイスが接続可能な入出力部と、前記入出力デバイスが入出力部から非接続にされた場合に生じるエラーの伝播を抑止するエラー抑止機能に対応しない監視対象入出力デバイスの識別情報を登録する情報保持部と、基盤ソフトウエアを介して個別プログラムを実行する実行部とを有する情報処理装置の制御方法であって、
    前記監視対象入出力デバイスの第1の領域へのアクセスが検出された場合、前記監視対象入出力デバイスの第2の領域から読み出した値が所定値であるかを判断した結果、前記第2の領域から読み出した値が異常値であるか否かを判定すること
    を有する情報処理装置の制御方法。
  13. さらに、
    仮想マシンを生成し、
    前記判定することは、
    前記仮想マシンが前記監視対象入出力デバイスの第1の領域にアクセスしたことが検出された場合、前記第1の領域にアクセスし、
    前記第1の領域から読み出した値が前記異常値である場合、前記第2の領域の値にアクセスし、
    前記第2の領域から読み出した値が前記異常値である場合、前記仮想マシンを停止することを有する、
    請求項12に記載の情報処理装置の制御方法。
JP2015077459A 2015-04-06 2015-04-06 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法 Pending JP2016197360A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015077459A JP2016197360A (ja) 2015-04-06 2015-04-06 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法
US15/070,015 US20160292108A1 (en) 2015-04-06 2016-03-15 Information processing device, control program for information processing device, and control method for information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015077459A JP2016197360A (ja) 2015-04-06 2015-04-06 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法

Publications (1)

Publication Number Publication Date
JP2016197360A true JP2016197360A (ja) 2016-11-24

Family

ID=57017218

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015077459A Pending JP2016197360A (ja) 2015-04-06 2015-04-06 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法

Country Status (2)

Country Link
US (1) US20160292108A1 (ja)
JP (1) JP2016197360A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020524840A (ja) * 2017-06-16 2020-08-20 アリババ グループ ホウルディング リミテッド ハードウェア仮想化のための方法及び装置

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274823B1 (en) * 2014-12-24 2016-03-01 Parallels IP Holdings GmbH Thin hypervisor for native execution of unsafe code
JP7102814B2 (ja) * 2018-03-16 2022-07-20 富士フイルムビジネスイノベーション株式会社 電子装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100244836B1 (ko) * 1995-11-02 2000-02-15 포만 제프리 엘 컴퓨터시스템 및 다수의 기능카드 중 한개의 기능카드를 격리하는 방법
CN100459717C (zh) * 2005-04-20 2009-02-04 华为技术有限公司 基于h.264的压缩视频传输误码消除方法
US7620854B2 (en) * 2007-01-30 2009-11-17 Hewlett-Packard Development Company, L.P. Method and system for handling input/output (I/O) errors
JP5281942B2 (ja) * 2009-03-26 2013-09-04 株式会社日立製作所 計算機およびその障害処理方法
US8510592B1 (en) * 2009-09-15 2013-08-13 Netapp, Inc. PCI error resilience
US9086965B2 (en) * 2011-12-15 2015-07-21 International Business Machines Corporation PCI express error handling and recovery action controls
CN104704478B (zh) * 2012-06-06 2018-10-19 英特尔公司 输入/输出错误遏制事件后的恢复
WO2014115257A1 (ja) * 2013-01-23 2014-07-31 株式会社 日立製作所 PCI-Express接続ソリッドステートドライブを適用したストレージ装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020524840A (ja) * 2017-06-16 2020-08-20 アリババ グループ ホウルディング リミテッド ハードウェア仮想化のための方法及び装置
US11467978B2 (en) 2017-06-16 2022-10-11 Alibaba Group Holding Limited Method and apparatus for hardware virtualization
JP7220163B2 (ja) 2017-06-16 2023-02-09 アリババ グループ ホウルディング リミテッド ハードウェア仮想化のための方法及び装置

Also Published As

Publication number Publication date
US20160292108A1 (en) 2016-10-06

Similar Documents

Publication Publication Date Title
US8954963B2 (en) Method and apparatus for resetting a physical I/O adapter without stopping a guest OS running on a virtual machine
EP3893114B1 (en) Fault processing method, related device, and computer storage medium
JP5305848B2 (ja) データ処理システム内で入出力(i/o)仮想化を管理するための方法およびデータ処理システムならびにコンピュータ・プログラム
JP3954088B2 (ja) 論理分割された(lpar)計算機でシステム・ファームウェア更新を安全に実行する機構
US9098321B2 (en) Method and computer for controlling virtual machine
US8584229B2 (en) Methods and apparatus supporting access to physical and virtual trusted platform modules
US20060064523A1 (en) Control method for virtual machine
KR101823888B1 (ko) 신뢰 컴퓨팅을 위한 다중노드 허브
US20090276773A1 (en) Multi-Root I/O Virtualization Using Separate Management Facilities of Multiple Logical Partitions
JP6530723B2 (ja) コンピュータシステム内における複数のハイパーバイザーの共同運用を容易にするためのシステムおよび方法
CN104885057A (zh) 虚拟化计算系统中隔离的客创建
US9372702B2 (en) Non-disruptive code update of a single processor in a multi-processor computing system
US10257166B2 (en) Guest netfilter protection by virtual machine function
EP3436947B1 (en) Secure driver platform
WO2020063432A1 (zh) 一种升级虚拟化模拟器的方法和装置
US9047112B2 (en) Installation of virtual service processor to computer system having existing operating system
CN114741233A (zh) 快速启动方法
US11475131B2 (en) Hypervisor level signature checks for encrypted trusted execution environments
JP2016197360A (ja) 情報処理装置、情報処理装置の制御プログラム及び情報処理装置の制御方法
JP5925288B2 (ja) 計算機、アクセス管理方法およびアクセス管理プログラム
JP2023544001A (ja) アクセラレータカードのセキュリティモードの静的構成
CN114115703A (zh) 裸金属服务器在线迁移方法以及系统
EP4195021A1 (en) Online migration method and system for bare metal server
US20240078129A1 (en) Execution of bios components with virtual machines
CN113312295B (zh) 计算机系统、机器可读存储介质和重置计算机系统的方法