説明

仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法およびコンピュータ

【課題】仮想化環境が実現されたコンピュータにおいてHDDにアクセスする際のオーバーヘッドを低減する。
【解決手段】HDDには、ATAのSet max addressコマンドで、ゲストOS67がアクセスできる特定領域51とゲストOSがアクセスできない仮想化領域53を設定する。アプリケーション81は、ゲストOS67にHDDの仮想化領域53にデータを書き込む要求をしたときに、アクセス・コントロール・ドライバ89は、HDDの特定領域51に記録する。アプリケーションが仮想化領域53から読み取る要求をしたときは、アクセス・コントロール・ドライバは特定領域を検索してヒットしたときには特定領域からデータを読み取る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想マシンからディスク・ドライブにアクセスする際のオーバーヘッドを低減する技術に関し、さらに詳細にはディスク・ドライブに記録されたデータの安全性を確保しながらオーバーヘッドを低減する技術に関する。
【背景技術】
【0002】
クライアントやサーバなどのコンピュータには、過去のオペレーティング・システム(OS)やアプリケーション・プログラム(アプリケーション)を、互換性のない新しいハードウエアの上で動作させたり、ハードウエア・リソースを有効に活用したり、あるいは複数のOSを同時に動作させたりすることを目的として仮想化技術を導入する場合がある。仮想化技術には、OSの上で仮想化プログラムが動作するホストOS型、あるいは仮想化プログラムがハードウエアの上で直接動作するハイパーバイザ型といわれるものがある。
【0003】
いずれの場合も、仮想化プログラムの上では複数の仮想マシンが動作することができる。アプリケーション、ゲストOS、デバイス・ドライバといったソフトウエアで構成された仮想マシンは、仮想化プログラムが提供する仮想ハードウエアに対してアクセスすることで実際のハードウエアから分離された状態で動作する。仮想マシンを構成するOSをゲストOSという。また、ハイパーバイザ型の中には、ゲストOSに対して完全なハードウエア仮想化環境を提供する完全仮想化と、ゲストOSに修正を加えて仮想化環境に適応させる準仮想化といった方法がある。
【0004】
このように仮想化環境の実現モデルにはさまざまあるが、いずれの場合でも、ゲストOSがハードウエアにアクセスする際には、仮想化プログラムが介在する分だけ余分なオーバーヘッドが生ずる。オーバーヘッドの原因としては、中央演算装置(CPU)、メイン・メモリ、ディスク・ドライブ、またはネットワーク・カードなどのハードウエアをソフトウエアでエミュレーションする処理や、ゲストOSと仮想化プログラムの間で動作を切り換える際に発生するコンテキスト・スイッチングなどを挙げることができる。ハードディスク・ディスク・ドライブ(HDD)に対するI/Oリクエストの際には、仮想ドライブと実際のドライブのアドレスをマッピングするためにオーバーヘッドが発生する。
【0005】
特許文献1は、VMM(Virtual Machine Monitor)によりI/Oデバイスの動作をエミュレーションにより実現するエミュレーション方式と、仮想マシン上で動作するOSへ実際のI/Oデバイスを割り当てて直接的にアクセスさせる直接I/O方式とを切り換える技術を開示する。直接I/O方式では、OSから直接的にI/Oデバイスへの入出力が行なえるので、高速で且つ信頼性の高い処理を行なうことができるが各OSによってI/Oデバイスが占有されるので、仮想化技術により1つのホストマシンで複数のOSが実行可能であっても、その数に応じてI/Oデバイスが必要となり非効率的であることが記載されている。
【0006】
特許文献2は、ハードディスク・ドライブと磁気テープ・ドライブからなる記憶装置において、ハードディスクの一部にキャッシュ領域を設けることで効率よくファイルを保存する技術を開示する。非特許文献1は、指定したゲストOSに対してデバイスの分離を実現し、分離されたデバイスを当該指定されたゲストOSだけが使用できるようにすることで仮想化環境のオーバーヘッドを低減するデバイス・パススルーという技術を開示する。デバイス・パススルーは、デバイスを複数のゲストOSおよび仮想化プログラムの間で共有する必要がない場合や、共有できないデバイスに適用することができる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2009−223793号公報
【特許文献2】特開2003−150413号公報
【非特許文献】
【0008】
【非特許文献1】M. Tim Jones、”Linux(登録商標)の仮想化とPCIパススルー”、[online]、[平成22年7月13日検索]、インターネット〈URL:http://www.ibm.com/developerworks/jp/linux/library/l-pci-passthrough/?ca=drs-jp〉
【発明の概要】
【発明が解決しようとする課題】
【0009】
仮想化環境においてゲストOSがHDDやフラッシュSSD(Flash Solid State Drive)にアクセスする際には上述のようにオーバーヘッドが生ずる。また、パーソナル・コンピュータで仮想化環境を実現する際には、1台のハードウエアを仮想化プログラムおよび複数のゲストOSで共有することが一般的である。仮想化環境では、ゲストOSが仮想化プログラムに対して、非仮想化環境におけるOS上のアプリケーションのように動作する。CPUには、リング・プロテクション機構により特権レベルを設定することができる。
【0010】
仮想化プログラムの上で複数のゲストOSが動作するような場合には、各ゲストOSは対等な関係になるので特定のゲストOSに自由にハードウエアを専有させることはできない。また、特定のゲストOSが直接HDDにアクセスできるようにした場合には、ゲストOS間の分離が行われなくなってしまうので安全上の問題が生ずる。したがって仮想化環境では、基本的に仮想化プログラムに最大の特権レベルを与えてハードウエアへのアクセスを許可し、ゲストOSは仮想化プログラムを介してハードウエアにアクセスするようにしている。したがって、複数の仮想マシンのプログラムを記録したHDDには、特許文献1の直接I/O方式や非特許文献1のデバイス・パススルーを適用してゲストOSが直接アクセスすることはできない。
【0011】
そこで、本発明の目的は、仮想化環境からディスク・ドライブにアクセス際のオーバーヘッドを低減することができるコンピュータを提供することにある。さらに本発明の目的は、仮想化プログラムとゲストOSを格納するディスク・ドライブに安全性を確保しながらアクセスすることができるコンピュータを提供することにある。さらに本発明の目的は、そのようなコンピュータを実現するコンピュータ・プログラムおよびディスク・ドライブへのアクセス方法を提供することにある。
【課題を解決するための手段】
【0012】
仮想化環境では、ディスク・ドライブに対するアクセスは、仮想化プログラムが仮想マシンに提供する仮想ディスク・ドライブに対して行われる。仮想化プログラムは、仮想ディスク・ドライブのアドレスを実際のディスク・ドライブのアドレスにマッピングする。よってディスク・ドライブへのアクセスには仮想プログラムの動作が伴うため、仮想マシンから仮想化プログラムへのコンテキスト・スイッチングおよびアドレス・マッピングのオーバーヘッドが発生する。
【0013】
本発明にかかるコンピュータは、仮想マシンがディスク・ドライブに直接アクセスすることができるようにして、仮想化環境のもとでディスク・ドライブに対してアクセスする際に固有に発生するオーバーヘッドを排除する。ディスク・ドライブは、コンピュータとネットワークを経由して接続されていてもよい。また、本発明におけるディスク・ドライブの形式は特に限定する必要はなく一例ではHDDまたはSSDとすることができる。
【0014】
本発明では、ディスク・ドライブに仮想マシンがアクセスすることができる特定領域と仮想マシンがアクセスすることができない仮想化領域を設定する。特定領域は、CPUやメイン・メモリなどのようなハードウエアの動作速度の差を吸収するキャッシュとは異なり、ソフトウエアのレイヤにおけるオーバーヘッドを除去する目的で設定する。仮想化領域は、ディスク・ドライブが仮想化環境のために提供する記憶領域で仮想マシンや仮想化プログラムが記録される。アプリケーションまたはゲストOSのプロセスが仮想化領域に対するI/Oリクエストを開始する。ゲストOSはI/Oリクエストが仮想化領域にデータを書き込むライト・アクセスであると判断したときに書き込みデータを特定領域に書き込む。
【0015】
よって、ディスク・ドライブに対するライト・アクセスの際に仮想化プログラムの動作により発生するオーバーヘッドを排除することができる。コンピュータはゲストOSがディスク・ドライブにI/Oリクエストをする際に、仮想マシンの動作と仮想化プログラムの動作の間で遷移する。仮想マシンが動作している間は仮想マシンが特定領域だけにアクセス可能になるように設定し、仮想化プログラムが動作している間は特定領域と仮想化領域にアクセスが可能になるようにダイナミックに設定することができる。
【0016】
特定領域は、仮想化プログラムがATAのSet max addressコマンドを実行してディスク・コントローラのレジスタに設定することができる。Set max addressコマンドのパラメータはコンテキスト・スイッチングのタイミングでダイナミックに変更することができる。このように特定領域を設定することで、仮想マシンによるディスク・ドライブに対するI/Oリクエストを許容し、仮想マシンはアクセスの許可された特定領域にデータを書き込むことができるようになる。しかも、仮想マシンは仮想化領域にはアクセスすることができないので、仮想化領域に記録されたデータの安全性は保証される。
【0017】
このとき、仮想化プログラムがみずからパスワードを生成してSet max addressコマンドの設定変更にパスワードを要求することも可能である。複数の仮想マシンが時分割で動作する場合には、特定領域を複数の論理ブロックに分割して複数の仮想マシンにそれぞれ専用に割り当てることもできる。特定領域を使用する仮想マシンを交換したり、特定領域の記憶容量が不足してきたりした場合には、ライト・アクセスと非同期で仮想化領域を特定領域に記録されたデータで更新し、特定領域に記憶容量を確保することができる。更新をアイドル時間やシャット・ダウンのタイミングで行えば、ユーザに更新のオーバーヘッドをほとんど感じさせないようにすることができる。更新を仮想化プログラムが実行すれば、更新処理に発生するコンテキスト・スイッチングによるオーバーヘッドを低減することができる。
【0018】
リード・アクセスの場合に、読み取りデータがすでに特定領域に記録されていると判断したときには仮想マシンは特定領域からデータを読み取ることができる。よって、リード・アクセス時も仮想化プログラムの動作によるオーバーヘッドを低減することができる。また読み取りデータが特定領域に記録されていないと判断したときには、仮想マシンは通常の手順で仮想化領域から読み取ることができる。
【0019】
仮想化領域からの読み取りにはオーバーヘッドが発生する。しかも読み取ったデータは近い将来に再度読み取られる可能性が高い。一度読み取ったデータに対するリード・アクセスが再度行われたときのために、読み取りのアクセスとは非同期で読み取ったデータを特定領域に記録することができる。ディスク・ドライブの台数は1台に限定するものではなく、本発明はRAIDのような複数のディスク・ドライブで1台の仮想的なディスク・ドライブを構成するような場合にも適用することができる。
【発明の効果】
【0020】
本発明により、仮想化環境からディスク・ドライブにアクセス際のオーバーヘッドを低減することができるコンピュータを提供することができた。さらに本発明により、仮想化プログラムとゲストOSを格納するディスク・ドライブに安全性を確保しながらアクセスすることができるコンピュータを提供することができた。さらに本発明により、そのようなコンピュータを実現するコンピュータ・プログラムおよびディスク・ドライブへのアクセス方法を提供することができた。
【図面の簡単な説明】
【0021】
【図1】仮想化環境が実現されたコンピュータのソフトウエアおよびハードウエアの構成を示す図である。
【図2】HDDにアクセスする際のオーバーヘッドを低減する原理を説明する図である。
【図3】仮想化領域をゲストOSのアクセスから保護する方法を説明する図である。
【図4】ファイル転送方式でHDDにアクセスするディスク・アクセス制御システムを構成するソフトウエアおよびハードウエアの機能ブロック図である。
【図5】アドレス・マッピング・テーブルのデータ構造を示す図である。
【図6】ファイル転送方式で仮想マシンがHDDにファイルを記録するときの手順を示すフローチャートである。
【図7】ファイル転送方式で仮想マシンがHDDからファイルを読み出すときの手順を示すフローチャートである。
【図8】ミラーリング方式でHDDにアクセスするディスク・アクセス制御システムを構成するソフトウエアおよびハードウエアの機能ブロック図である。
【図9】ミラーリング方式における特定領域と仮想HDDのアドレス関係を示す図である。
【図10】ミラーリング方式で仮想マシンがHDDにファイルを記録するときの手順を示すフローチャートである。
【発明を実施するための形態】
【0022】
[仮想化環境]
図1は、所定のプログラムが実行されて仮想化環境が実現されているコンピュータ10のソフトウエアおよびハードウエアの構成を示す図である。図1では、いわゆるタイプ1といわれるハイパーバイザ型の仮想化モデルを例示して説明するが、本発明は、ホストOS型の仮想化モデルに適用することもできる。コンピュータ10は、ハードウエア19として代表的にCPU21、メイン・メモリ23、HDD25およびシステムとHDD25の間のインターフェースとなるIDEコントローラ26を含んでいる。本発明におけるハードウエアの構成は周知である。ハードウエア19上では直接ハイパーバイザまたはVMMといわれる仮想化プログラム17が動作する。
【0023】
仮想化プログラム17のレイヤの上では、複数の仮想マシン11、13、15が時分割で動作することができる。あるいは、選択したいずれか1つの仮想マシンだけが、動作することができる。各仮想マシン11、13、15は、アプリケーション73、75、77、ゲストOS67、69、71、および仮想ハードウエア61、63、65といったソフトウエアで構成されている。仮想化プログラム17は、CPU21、メイン・メモリ23、HDD25およびIDEコントローラ26などのハードウエアをエミュレートして、各仮想マシン11、13、15に各ハードウエアに対応した仮想ハードウエア61、63、65を提供する。
【0024】
この例では仮想ハードウエア61、63、65はそれぞれハードウエア19の構成要素に対応して、仮想CPU、仮想メイン・メモリ、仮想HDD、および仮想IDEコントローラを含むことになる。ゲストOS67、69、71および仮想化プログラム17は、各仮想マシン11、13、15がHDD25にアクセスする際に、仮想化プログラム17が介在することにより発生するオーバーヘッドを低減するためのモジュールを含んでいる。なお、仮想マシン11、13、15を構成するプログラムおよび仮想化プログラム17はCPU21およびメイン・メモリ23などで実行されることにより、コンピュータ10に所定の機能を発揮させるハードウエアの要素として捕らえることもできる。
【0025】
[オーバーヘッド低減の基本原理]
図2は、本実施の形態により仮想マシン11、13、15がHDD25にアクセスする際のオーバーヘッドを低減する原理を説明する図である。ゲストOS67、69、71は、仮想HDD61、63、65が提供するファイル・パスを仮想インターフェースとしてHDD25にアクセスする。ハイパーバイザ方式には完全仮想化(Full-Virtualization)と準仮想化(Para-Virtualization)という2つの方式がある。完全仮想化方式では、仮想化プログラム17が完全な仮想化環境を構築するためゲストOS67、69、71は仮想化環境に対応するための修正をする必要がない。そして仮想プログラム17が最大の特権レベルで動作し各ゲストOSはそれよりも低い特権レベルで動作する。
【0026】
しかし、各ゲストOSは、自らが仮想化環境で動作していることを認識しないので、仮想HDD61、63、65に対して、最大の特権レベルで動作するプログラムにしか許容されないHDD25へのアクセスをする。ゲストOSがHDD25にアクセスするとCPU21に特権命令違反の例外が発生し、それをトラップした仮想化プログラム17に制御が移ってHDD25へのアクセスを処理する。
【0027】
準仮想化方式では、ゲストOS67、69、71がHDD25にアクセスする際にハイパーバイザ・コールを発行して仮想化プログラム17の内部関数を呼び出し、仮想マシン11、13、15に変更を加えたり仮想化プログラム17に処理を要求したりする。準仮想化方式は完全仮想化方式に比べて高速処理が可能であるがゲストOSに修正が必要になる。完全仮想化方式および準仮想化方式のいずれの場合にもゲストOS67、69、71がHDD25にアクセスする際には、仮想化プログラム17に制御が移る際のコンテキスト・スイッチングと、仮想HDD61、63、65とHDD25とのアドレスをマッピングするためにオーバーヘッドが発生する。
【0028】
本実施の形態においては、HDD25の記憶領域を仮想化プログラム17が特定領域51と仮想化領域53に論理的に分割する。特定領域51は、ゲストOS67、69、71の中から選択されたいずれかのゲストOS(ここでは、ゲストOS67とする。)が仮想化プログラム17を経由しないで直接アクセスできる記憶領域である。仮想化領域53は、仮想化プログラム17と仮想マシン11、13、15を構成するプログラムおよびファイルなどのデータを記録しており、ゲストOS67が仮想化プログラム17を経由してアクセスする記憶領域である。
【0029】
各仮想マシン11、13、15に対応するデータはデータ領域55、57、59に記録される。データ領域55、57、59にはそれぞれ、各仮想マシン11、13、15に関連するアプリケーション、OS、デバイス・ドライバ、およびユーザ・データなどが記録される。仮想化プログラム17はHDD25を仮想HDD61、63、65としてエミュレートするに当たり、仮想化領域53を仮想HDD61、63、65ごとに論理的に区分してデータ領域55、57、59を確保してもよいし、仮想化領域53の全体を使用して仮想HDD61、63、65のアドレスと仮想化領域53のアドレスをマッピングしてもよい。
【0030】
仮想マシン11、13、15は、アクセス対象のデータについてHDD25のアドレスを認識する必要はなく、仮想HDD61、63、65のアドレスだけを認識してHDD25の仮想化領域53にアクセスする。特定領域51を使用するゲストOS67は、所定のアドレスに当該特定領域51を自らが使用していたことを示すゲストOS識別子を記録する。そして、ゲストOS67はHDD25にファイルを書き込むライト・アクセスの際にはすべての書き込みデータを特定領域51に書き込む。仮想化領域53は仮想マシン11、13、15に対して本来のデータ格納場所としての役割を担う。また、特定領域51は他のゲストOS69、71が使用することもある。ゲストOS67は仮想化プログラム17に指示して、特定領域51にだけ記録されているデータをライト・アクセスとは非同期で仮想化領域53に書き込む。
【0031】
また、HDD25からファイルを読み取るリード・アクセスの際には、ゲストOS67は特定領域51に読み取りデータが記録されている場合は特定領域51から読み取り、読み取りデータが記録されていない場合は仮想化領域53から読み取る。特定領域51からの読み取りの機会を増大するために、一旦読み取られたファイルは、ゲストOS67がリード・アクセスとは非同期で特定領域51に書き込むことができる。このように仮想化されたHDD25にゲストOS67がアクセスするために、以下のようにしてゲストOS67によるHDD25へのアクセスを許可しながら仮想化領域53のデータを保護する。
【0032】
仮想化プログラム17はリング0で動作し、ゲストOS67がリング1、2、3で動作すると、ゲストOS67のHDD25へのアクセスは特権命令違反になって仮想化プログラム17によりトラップされCPU21の制御が仮想化プログラム17に移行する。インテル社のVT(Virtualization Technology)という仮想化支援機構やX86仮想化では、I/O-bitmapというオブジェクトによりハードウエアへのアクセスをI/Oポートごとに制御して、ゲストOS67がHDD25にアクセスしても仮想化プログラム17に制御を移行させないようにする手法を提供する。
【0033】
仮想化プログラム17は、I/O-bitmap のオブジェクトにパラメータを記述して、ゲストOS67によるIDEコントローラ26のI/Oポートに対するI/Oリクエストを制御する。仮想化プログラム17はゲストOS67によるHDD25へのアクセスを、仮想化プログラム17が特定領域51を利用する場合はトラップせず、特定領域51を利用しない場合はトラップするようにI/O-bitmapに記述する。
【0034】
このようにしてゲストOS67による特定領域51へのアクセスが可能になるが、I/O-bitmapによる制御はI/Oポートのアドレス単位であるため、I/Oポートが開放されるとゲストOS67は特定領域51だけでなく仮想化領域53にもアクセスできる。このため、本実施の形態ではI/O-bitmapによる制御方式を採用しながら、以下のようにしてゲストOS67が仮想化領域53にアクセスできないようにしている。なお、インテル社のVTやAMD社の Pacificaという仮想化支援機構では、リング・プロテクションによる特権レベルの制御とは異なってコンテキスト・ベースで特権を付与する方式を採用する。この場合は、仮想化プログラム17への動作の移行をI/O-bitmapで制御する必要はない。
【0035】
[仮想化領域の保護方法]
図3は、仮想化領域53をゲストOS67のアクセスから保護する方法を説明する図である。ATA(Advanced Technology Attachment)のインターフェース規格では、ディスクの記憶領域に特別なプログラム以外はアクセスすることができないHPA(Host Protected Area)を設定することができる。本実施の形態では、HPAの設定をゲストOS67の動作と仮想化プログラム17の動作の遷移にリンクさせてダイナミックに変更し、ゲストOS67が動作している間はゲストOS67が特定領域51にはアクセスできるが仮想化領域53にはアクセスできないようにしている。
【0036】
HDD25にHPAを設定するために、仮想化プログラム17がSet max addressコマンドを発行してIDEコントローラ26のレジスタにHDD25の有効なアドレス範囲を設定する。設定値がHDD25の最大記憶容量よりも小さい場合はゲストOS67または仮想化プログラム17が利用できる記憶容量が低減する。図3(A)は、Set max addressコマンドを最大記憶容量のX(%)に設定した様子を示している。この場合、HDD25の記憶容量のうち0%からX%までは特定領域51に対応し、X%を越えて100%まではHPAで特定領域53に対応する。
【0037】
HPAには、ゲストOS67も仮想化プログラム17もアクセスすることができない。したがって、CPU21の動作がゲストOS67の実行に遷移したときにHPAを設定すれば、ゲストOS67は特定領域51にはアクセスできるが仮想化領域53にアクセスすることができなくなる。図3(B)は、Set max addressコマンドで有効なアドレス範囲を100%に設定した様子を示している。この状態ではHPAは設定されていないことになるので、ゲストOS67および仮想化プログラム17は特定領域51にも仮想化領域53にもアクセスすることができる。
【0038】
ここで仮想化プログラム17は、CPU21の動作が仮想化プログラム17の実行に遷移したときだけ、パラメータが100%のSet max addressコマンドを発行することで、自らだけが特定領域51と仮想化領域53にアクセスできるようにしている。このように、I/O-bitmapによりゲストOS67に対してIDEコントローラ26のI/Oポートを開放しても、ゲストOS67と仮想化プログラム17との間でのCPU21の遷移に応じてダイナミックにHPAを設定することで、ゲストOS67の仮想化領域53に対するアクセスを制限し、かつ仮想化プログラム17にはアクセス制限を解除することができる。
【0039】
ゲストOS67がSet max addressコマンドを発行してHPAを変更できるとすれば、仮想化領域53に記録されたデータの安全を確保することができなくなる。データの安全を確保するためにSet max addressコマンドの発行に、パスワードを要求することができる。すなわち、仮想化プログラム17が一旦設定したHPAは、パスワードを取得しない限りゲストOS67が変更できないようにすることができる。パスワードはユーザが設定しないで、仮想化プログラム17が独自に乱数を発生して生成することができる。
【0040】
[ファイル転送方式]
図4は、ファイル転送方式でHDD25にアクセスするディスク・アクセス制御システム100を構成するソフトウエアおよびハードウエアの機能ブロック図である。ディスク・アクセス制御システム100はコンピュータ10に搭載される。仮想マシン11は、本実施の形態に関連する要素としてアプリケーション73、ゲストOS67、仮想HDD61、およびアドレス・マッピング・テーブル(AMP)93を含んでいる。ゲストOS67は、Windows(登録商標)を例示して説明するが、本発明には他のOSを適用することも可能である。アプリケーション73はユーザー・モードで動作する。アプリケーション73はサブシステムDLL(Dynamic Link Library)を経由してAPI関数を呼び出し、仮想HDD61に対してデータを書き込んだり読み取ったりすることができるプログラムである。
【0041】
アプリケーション73は、プログラムを仮想HDD61にインストールするインストーラであってもよい。システム・サービス・ディスパッチャ(SSD)83は、ユーザー・モードとカーネル・モードの切り替えを担当する。SSD83はユーザー・モードで動作するアプリケーション73から呼び出されたシステム・コール・サービスの際に発生した割り込みのコール番号を確認して、API関数をカーネル・モードで動作する内部サポート関数に切り替える。
【0042】
I/Oマネージャ85は、スタック構造の入出力に関連するデバイス・ドライバの階層間の通信を行うためにIRP(I/O Request Packet)を作成して所定のデバイス・ドライバにディスパッチする。IRPは、各デバイス・ドライバとI/Oマネージャ85との間の通信に使用される。HDD25へのアクセスに関連するデバイス・ドライバは、ファイル・システム・ドライバ87、アクセス・コントロール・ドライバ89、およびディスク・ドライバ91で構成されている。ファイル・システム・ドライバ87は、FAT(File Allocation Table)やNTFS(NT File System)といったファイル・システムを形成して仮想HDD61に関するファイルの記録、読み取り、削除、または移動などのI/Oリクエストを管理する。
【0043】
ファイル・システム・ドライバ87は、アプリケーション73に対して仮想HDD61に対するファイル・パスを提供する。ファイル・システム・ドライバ87は、I/Oマネージャ85から受け取ったAPI関数に指定されたファイル・パスを仮想HDD61のLBA(logical block address)に変換して、アクセス・コントロール・ドライバ89に送る。アクセス・コントロール・ドライバ89は、仮想HDD61に対するI/OリクエストをHDD25の特定領域51を利用して処理するプログラムである。アクセス・コントロール・ドライバ89は、AMP93を参照したり更新したりすることができる。アクセス・コントロール・ドライバ89はさらに特定領域51または仮想化領域53を更新するタイミングを決定する。
【0044】
ディスク・ドライバ91は階層構造になっており、アクセス・コントロール・ドライバ89から受け取った仮想HDD61の所定のLBAに対する読み取りまたは書き込みなどをするためのI/Oリクエストを、HDD25を制御するプロトコルに変換して仮想HDD61に送る。仮想HDD61は仮想化プログラム17により提供され、HDD25の仮想化領域53を抽象化して仮想マシン11に仮想化されたインターフェースを提供する。仮想HDD61はディスク・ドライバ91からのI/Oリクエストに対してファイル・パスのインターフェースを提供するだけで直接応答することはない。
【0045】
仮想化プログラム17は、本実施の形態に関連する要素としてアクセス・マネージャ101、HPAマネージャ102、ファイル・システム・ドライバ103、およびディスク・ドライバ105を含んでいる。アクセス・マネージャ101は、アクセス・コントロール・ドライバ89から仮想化領域53を更新する要求があったときに、特定領域51のデータで仮想化領域53を更新するプログラムである。
【0046】
アクセス・マネージャ101は、ディスク・ドライバ91から受け取ったI/Oリクエストに対しては、なんら処理を加えないでファイル・システム・ドライバ103に渡す。HPAマネージャ102は、ゲストOS61のI/Oリクエストが発行されてゲストOS67から仮想化プログラム17に制御が移行するときにHPAを解除し、仮想化プログラム17からゲストOS61に制御が移行するときにHPAを設定するようにパラメータを設定してSet max addressコマンドを発行するプログラムである。
【0047】
アクセス・マネージャ101は、ファイル・システム・ドライバ103から受け取った仮想化領域53からの読み取りデータに対しては何ら処理を加えないで、ディスク・ドライバ91に渡す。ファイル・システム・ドライバ103は、仮想化領域53のファイル・パスを管理する。ファイル・システム・ドライバ103は、所定のファイルが記録される仮想HDD61の仮想的なLBAを、実際に記録する仮想化領域53のLBAに変換する。ディスク・ドライバ105は、HDD25に対して受け取ったI/Oリクエストを所定のプロトコルに変換して実行する。
【0048】
図5はAMP93のデータ構造を示す図である。図5(A)に示すAMP93は、特定の3つのファイルについて、仮想HDD61がゲストOS67に提供するLBAと実際にデータが記録されている特定領域51のLBAを関連付けている。ここでは説明を簡単にするために1つのファイルをLBA単位で対応付けているが、実際には、複数のLBAの集合であるクラスタの単位で関連付けることができる。
【0049】
HDD25には、特定領域51から仮想化領域53に渡ってディスクのすべてのセクタにアドレスが順番にLBA001からLBAnnnまで割り当てられているものとする。LBA001からLBA100までは特定領域51に対応し、LBA101からLBAnnnまでは仮想化領域53に対応するものとする。また、仮想HDD61には、仮想化プログラム17によりアドレスがLBA001からLBAmmmまで割り当てられているものとする。
【0050】
更新フラグは、仮想化領域53を特定領域51のデータで更新する必要があることを示す情報である。アクセス・コントロール・ドライバ89は、仮想HDD61と特定領域53の対応するLBAに記録されているデータが一致しない場合は更新フラグをリセット(0)し、一致する場合はセット(1)する。更新フラグがセットされている場合は仮想化領域53を更新しないでも特定領域51からデータを削除することができる。更新フラグの設定方法は後に説明する。登録日時は、特定領域51の記憶容量が少なくなったときに、仮想化領域53を更新してから消去するときの順番を決める情報である。アクセス・コントロール・ドライバ89は、登録日時の欄にAMP93にエントリを登録した日時を書き込む。
【0051】
つぎに、ディスク・アクセス制御システム100の動作を図6、図7のフローチャートに基づいて説明する。図6は、仮想マシン11がHDD25にファイルを記録するときの手順を示すフローチャートである。仮想マシン13、15は、仮想マシン11とともにコンピュータ10において時分割動作をしていてもよいが、ここでの手順では仮想マシン13、15は特定領域51を利用しないので説明から除外する。
【0052】
ブロック201では、コンピュータ10が動作して図1の仮想化プログラム17および仮想マシン11が動作する仮想化環境が実現されている。コンピュータ10の起動ルーチンのなかで、または仮想プログラム17が動作したあとに仮想マシン11がロードされる際に、アクセス・コントロール・ドライバ89は、特定領域51の所定のアドレスからゲストOS識別子を読み取って、特定領域51を自らが使用していたか否かを判断する。
【0053】
特定領域51を自らが使用していたと判断した場合は、アクセス・コントロール・ドライバ89は特定領域51に記録されたデータおよびAMP93のエントリを継続して使用する。特定領域51を他の仮想マシン13、15が使用していたと判断した場合は、アクセス・コントロール・ドライバ89は特定領域51およびAMP93を初期化する。仮想化プログラム17は、I/O-bitmapにパラメータを記述してゲストOS67がHDD25にアクセスしてもCPU21の動作が仮想化プログラム17に移行しないようにする。
【0054】
HPAマネージャ102は、仮想マシン11が動作するときはパラメータがX(%)のSet max addressコマンドを発行して図3(A)のように仮想化領域53をHPAに設定し、仮想化プログラム17が動作するときはパラメータが100%のSet max addressコマンドを発行して図3(B)のようにHPAを解除する。仮想化プログラム17は特定領域51に、仮想マシン11が新たなアプリケーションをインストールしたり、アプリケーション73がファイルを記録したり、あるいは仮想化領域53から読み取ったファイルを記録したりするのに十分な記憶容量を確保することが望ましい。ただし、それらのデータを一度に記録するだけの記憶容量を特定領域51に確保できない場合であっても、本実施の形態では特定領域51のデータを入れ替えることで対応できるようにしている。
【0055】
ブロック203でアプリケーション73は、API関数を呼び出してゲストOS67に新しいファイルを記録するためのプロセスまたは仮想化領域51から読み取ったファイルを更新するプロセスを生成するように要求する。プロセスは、ファイル保存場所としての仮想HDD61のLBAを認識しておらず、ファイルの記録場所に関するパラメータとして、ファイル・システム・ドライバ87が提供する仮想HDD61におけるファイル・パスをAPI関数に設定する。SSD83はAPI関数を内部サポート関数に変換してI/Oマネージャ85に送る。
【0056】
I/Oマネージャ85は、IRPに内部サポート関数の要求を記述して各デバイス・ドライバと通信をする。各デバイス・ドライバもI/Oマネージャ85から受け取ったIRPに記述してI/Oマネージャ85に返送することにより、他のデバイス・ドライバと通信する。ファイル・システム・ドライバ87は、API関数で指定されたファイル・パスを仮想HDD61のLBAに変換してアクセス・コントロール・ドライバ89に送る。
【0057】
ここでは、ファイル・システム・ドライバ87はアプリケーション73が指定したファイル名およびファイル・パスに対して仮想HDD61のLBA007を割り当てるものとする。ブロック205でアクセス・コントロール・ドライバ89は、I/Oリクエストがライト・アクセスかリード・アクセスかを判断する。リード・アクセスの場合はブロック209に移行する。リード・アクセスの処理は、図7に基づいて説明する。なお、I/Oリクエストには、ファイルの削除やファイルの移動に関するものもあるが、本実施の形態にかかるライト・アクセスの処理とリード・アクセスの処理について説明すれば当業者にとってそれらの処理方法も明らかになるのでその説明は省略する。
【0058】
HDD25に対する書き込みデータはこれまでの処理では、仮想HDD61がインターフェースになって仮想化領域53に書き込まれるが、本実施の形態ではすべての書き込みデータを一旦は特定領域51に書き込む。そのために、ブロック207でアクセス・コントロール・ドライバ89は、AMP93を参照して、特定領域51の空いているLBAを探して、ファイル・システム・ドライバ87が割り当てたLBA007に対して特定領域51のLBA001を割り当てる。
【0059】
ブロック211でアクセス・コントロール・ドライバ89は、特定領域51のLBA001にファイルを書き込むようにディスク・ドライバ91に要求する。ディスク・ドライバ91は特定領域51のLBA001にファイルを記録するようにHDD25に要求する。仮想化プログラム17は、ゲストOS67のHDD25に対するアクセスをトラップしないようにI/O-bitmapにパラメータを設定しているため、ディスク・ドライバ91は仮想化プログラム17を呼び出すことなくIDEコントローラ26を通じて直接特定領域51にファイルを書き込むことができる。よって、本実施の形態ではライト・アクセスの際のすべての書き込みデータに対して、仮想化プログラム17の処理により発生するオーバーヘッドを除去することができる。
【0060】
HDD25から書き込み完了の通知を受け取ったディスク・ドライバ91は、ブロック213でアクセス・コントロール・ドライバ89にその旨を通知する。通知を受け取ったアクセス・コントロール・ドライバ89は、ブロック215でAMP93を更新する。すなわち、アクセス・コントロール・ドライバ89は特定領域51に新規にファイルが記録されたので、対応する仮想HDD61のLBA007と特定領域51のLBA001をAMP93に登録しさらに登録日時を書き込む。この時点では、特定領域51のLBA007のファイルは仮想化領域53に記録されていないので更新フラグはリセットする。
【0061】
特定領域51は、ライト・リクエストがあったときの書き込みデータを仮想化領域53に代わってすべて記録する領域であり、その記憶容量が小さい場合はゲストOS67に関連するアプリケーションやユーザ・データを書き込めない事態が生ずる。しかし、特定領域51は、CPUやメイン・メモリなどのようなキャッシュとは異なり、電源が喪失しても内容が消えることはないため、データを追加的に記録していく限り残りの記憶容量は少なくなる。
【0062】
したがって、特定領域51の記憶容量が仮想HDD61に設定された記憶容量よりも小さい場合は、データを書き込めない事態が生ずる可能性がある。ブロック217では、アクセス・コントロール・ドライバ89がAMP93を参照して、特定領域51の残りの記憶容量が所定値以下か否かを判断する。残りの記憶容量が所定以下の場合は仮想化領域53の更新が必要であると判断してブロック219に移行する。残りの記憶容量が所定値を越える場合は、更新の必要がないのでブロック223に移行する。
【0063】
ブロック219では、アクセス・コントロール・ドライバ89が、AMP93を参照して更新フラグがリセットされている仮想HDD61と特定領域51のLBAの対を取得する。図5(A)の例では、更新フラグがリセットされている特定領域のLBA001、002に記録されているデータが対象になる。さらにアクセス・コントロール・ドライバ89は、仮想化プログラム17に動作を移すためのシステム・コールを発行し、特定領域51のLBA001、002のデータで、仮想HDD61のLBA007、009に対応する仮想化領域53を更新するようにアクセス・マネージャ101に要求する。
【0064】
仮想化プログラム17がシステム・コールをトラップすることでCPU21の動作が仮想化プログラム17に移行する。HPAマネージャ102は、自らが動作するときはHPAを設定しないので、ディスク・ドライバ105はHDD25の全体にアクセスすることができる。更新の要求を受けたアクセス・マネージャ101は、ディスク・ドライバ105に特定領域51のLBA001、002からデータを読み取るように要求する。
【0065】
さらにアクセス・マネージャ101は、ファイル・システム・ドライバ103に仮想HDD61のLBA007、009に読み取ったデータを書き込むように要求する。ファイル・システム・ドライバ103は、受け取った仮想HDD61のLBA007、009を仮想化領域53のたとえばLBA101、102といった所定のLBAにマッピングしてディスク・ドライバ105に書き込み要求をする。
【0066】
LBA101、102は、図2のデータ領域55の一部である。仮想化領域53の更新は、仮想化プログラム17だけで行うので、複数のLBAを更新してもコンテキスト・スイッチングに伴うオーバーヘッドが発生しない。特定領域51に記録されたデータは他の仮想マシンがそこを使用することにより消去されない限り、後にアプリケーション73が仮想HDD61のLBA007、009に対してリード・アクセスをする場合には、読み取りデータを仮想化領域53のLBA101、102から読み出すことができる。
【0067】
ブロック221では、ディスク・ドライバ105から更新の終了通知を受け取ったアクセス・マネージャ101は、アクセス・コントロール・ドライバ89に更新が終わった仮想HDDのLBA007、009または特定領域51のLBA001、002を通知する。通知を受け取ったアクセス・コントロール・ドライバ89は、AMP93に更新が終わったLBAに対応する更新フラグをセットする。
【0068】
それ以後は、新たなデータを特定領域51に書き込む際に特定領域51の記憶容量が不足する場合は、更新フラグがセットされている特定領域51のLBAの中で最も過去に更新されたLBAに上書きして特定領域51を使用することができる。上記の手順ではブロック217で、仮想化領域53の更新の要否を特定領域51の残りの記憶容量に基づいて判断したが、前述のように特定領域51は、コンピュータ10の電源喪失に対して安全であるため更新フラグがリセットされた状態が長時間継続しても支障がない。したがって、ブロック217の手順は、特定領域51の残りの記憶容量が不足しない限り、ゲストOS67が発行するコンピュータ10のシャット・ダウン・イベント、CPU21のアイドル・イベント、またはゲストOS67の定期的なタイマー・イベントに基づいて実行してもよい。
【0069】
ただし、特定領域51にデータを新規に書き込んだり特定領域51のデータを更新したりするタイミングで仮想化領域53を更新すると、仮想化プログラム17でのオーバーヘッドが大きくなるので好ましくない。仮想化領域53の更新は、特定領域51にある程度の量のデータが記録されてからライト・アクセスとは非同期で行うことが望ましい。データをまとめて更新することで、仮想マシン11と仮想化プログラム17との間のコンテキスト・スイッチングに伴うオーバーヘッドを軽減することができる。
【0070】
図7は、仮想マシン11がHDD25からファイルを読み出すときの手順を示すフローチャートである。AMP93には、図5(A)のような3つのエントリが登録されているものとする。ブロック301では図6のブロック209につづいて、ファイル・システム・ドライバ87は、プロセスが指定したファイル・パスを仮想HDD61のLBAに変換してアクセス・コントロール・ドライバ89に送る。アクセス・コントロール・ドライバ89は、リード・アクセスにおいて指定されている仮想HDD61のLBAがAMP93に登録されているか否かを判断する。
【0071】
リード・リクエストにかかる仮想HDD61のLBAがたとえばLBA009であって、AMP93に登録されている場合は、ブロック303に移行する。ブロック303では、アクセス・コントロール・ドライバ89は、ファイル・システム・ドライバ87から受け取った仮想HDD61のLBA009に対応する特定領域のLBA002をAMP93から取得する。ブロック305でアクセス・コントロール・ドライバ89は、特定領域51のLBA002からファイルを読み取るようにディスク・ドライバ91に要求する。ゲストOS67は特定領域51に直接アクセスしてファイルを読み取り仮想化プログラム17に制御が移行しないためオーバーヘッドを除去することができる。
【0072】
ブロック301でリード・リクエストにかかる仮想HDD61のLBAがたとえばLBA011でAMP93に登録されていない場合は、ブロック307に移行する。ブロック307では、アクセス・コントロール・ドライバ89は、ファイル・システム・ドライバ87から受け取ったI/Oリクエストに含まれているLBA011を変更しないでディスク・ドライバ91に送り、仮想化プログラム17に移行するためのシステム・コールを発行するとCPU21の動作が仮想化プログラム17に移行する。
【0073】
リード・リクエストに含まれるLBA011は、ファイル・システム・ドライバ103によりたとえば仮想化領域53のLBA105にマッピングされているものとする。ファイル・システム・ドライバ103は、受け取ったリード・リクエストのLBA011をLBA105に変換してディスク・ドライバ105に送る。ディスク・ドライバ105は、仮想化領域53のLBA105から読み取ったファイルを、アクセス・マネージャ101およびディスク・ドライバ91を経由してアクセス・コントロール・ドライバ89に送る。
【0074】
リード・リクエストにかかるファイルを受け取ったアクセス・コントロール・ドライバ89はブロック309で、AMP93に図5(B)に示すように仮想HDD61のLBA011を登録する。ただし、この時点では、特定領域51には、仮想化領域53のLBA105のファイルが記録されていないので、仮想HDD61のLBA011に対応する特定領域51のLBAのエントリは空白である。読み取ったファイルの仮想HDD61のエントリだけをAMP93に登録してから、アクセス・コントロール・ドライバ89は受け取ったファイルをアプリケーション73に渡す。
【0075】
ブロック309までの手順によれば、仮想化領域53から読み出されてかつ特定領域51に書き込まれていないデータが存在する。直近にアクセスをされたデータは近いうちに再度アクセスされる可能性が高い。よって、本実施の形態では、一旦仮想化領域53から読み取ったデータを特定領域51に記録して、次回以降のリード・アクセスに対しては、特定領域51からの読み取りを可能にする。ただし、読み取りのたびに特定領域51を更新したのではオーバーヘッドが大きくなるので、仮想化領域53からの読み取り処理と特定領域51への書き込み処理は非同期または異なるタイミングで行う。
【0076】
ブロック311では、アクセス・コントロール・ドライバ89が、特定領域51のデータを更新する必要があるか否かを判断する。判断は、ゲストOS67が発行する、一定の時間インターバルが経過したことを示すイベント、シャット・ダウンを示すイベント、またはCPU21のアイドル状態を示すイベントなどに基づいて行うことができる。ブロック313では、特定領域51の更新の必要性を示すイベントをゲストOS67の所定のモジュールから受け取ったアクセス・コントロール・ドライバ89は、AMP93を参照して特定領域51が空のエントリを検索し、仮想HDD61のLBA011を取得する。
【0077】
アクセス・コントロール・ドライバ89は、仮想HDD61のLBA011に特定領域51の空いているアドレスであるLBA004を割り当てる。アクセス・コントロール・ドライバ89は、HDD25にアクセスするための内部サポート関数を呼んで、仮想HDD61のLBA011を経由して仮想化領域のLBA105からファイルを読み取り、さらに読み取ったファイルを特定領域51のLBA004に記録するようにディスク・ドライバ91に要求する。ディスク・ドライバ91は、仮想化プログラム17を経由して仮想化領域53からファイルを読み取り、直接特定領域51に書き込む。その結果、特定領域51の前回の更新から今回の更新までの間に仮想化領域53から読み取られたLBA105のデータは、特定領域51のLBA004に書き込まれる。
【0078】
ブロック315では、ディスク・ドライバ91が特定領域51への書き込みが終了したことをアクセス・コントロール・ドライバ89に通知する。通知を受け取ったアクセス・コントロール・ドライバ89は、図5(C)に示すようにAMP93に仮想HDD61のLBA011に対応させて特定領域51のLBA004を登録し、かつ、更新フラグをセットする。アクセス・コントロール・ドライバ89は、同時にAMP93に登録日時を書き込む。
【0079】
[ミラーリング方式]
図8は、ミラーリング方式でHDD25にアクセスするディスク・アクセス制御システム300を構成するソフトウエアおよびハードウエアの機能ブロック図である。ディスク・アクセス制御システム300が図4のディスク・アクセス制御システム100と異なる点は、アクセス・コントロール・ドライバ301およびアクセス・マネージャ305の機能、AMP303のデータ構造、および特定領域307の容量である。以下、この相違点を中心に説明する。
【0080】
図9(A)は、ミラーリング方式による特定領域307と仮想HDD61のアドレス関係を示す図である。ミラーリング方式では、特定領域307に仮想HDD61のディスク・イメージをコピーする。したがって仮想化プログラム17は、特定領域307の記憶容量が仮想化領域309のなかで仮想マシン11に割り当てられたデータ領域55の記憶容量以上になるようにパラメータを設定してSet max addressコマンドを発行する。ここでは、特定領域307がHDD25のLBA000〜LBAxxxに設定されるものとする。
【0081】
そして、仮想化プログラム17は、仮想HDD61を通じてファイル・システム・ドライバ87に特定領域307と同じアドレス範囲のLBA000〜LBAxxxのインターフェースを提供する。また図9(B)に示すように、AMP303には仮想HDD61のLBAと特定領域307のLBAが同じアドレスでマッピングされるので、共通のLBAだけが登録される。アクセス・コントロール・ドライバ301とアクセス・マネージャ305の機能については、図10、図11の手順に基づいて説明する。登録日時は、AMP303にエントリを登録したタイミングでアクセス・コントロール・ドライバ301が記録する。
【0082】
図10は、アプリケーション73がHDD25にファイルを記録するときの手順を示すフローチャートである。ブロック401〜405およびブロック409は、図6のブロック201〜205およびブロック209の手順と同じである。ミラーリング方式では、所定のファイルの記録場所としてファイル・システム・ドライバ87が提供する仮想HDD61のLBAは、特定領域307のLBAに一致する。ブロック407では、アクセス・コントロール・ドライバ301は、ファイル・システム・ドライバ87から受け取ったLBA007を変更しないで、ディスク・ドライバ91に特定領域307のLBA007に記録するように要求する。このときアクセス・コントロール・ドライバ301は、仮想化ドライバ17に遷移するためのシステム・コールを発行しない。
【0083】
ファイルを記録する特定領域307のLBAと仮想HDD61のLBAは一致しているので、アクセス・コントロール・ドライバ301はファイル転送方式のようにAMP93を参照して特定領域307の空いているLBAを探す必要はない。要求を受け取ったディスク・ドライバ91はHDD25に、特定領域307のLBA007にファイルを書き込む要求をする。仮想マシン11が動作する間は、HPAマネージャ102は仮想化領域309だけをHPAに設定するので、ディスク・ドライバ91は特定領域307にファイルを書き込むことができる。
【0084】
ブロック407ではアクセス・コントロール・ドライバ301が、ディスク・ドライバ61から書き込み完了の通知を受け取り、ブロック411でAMP303にLBA007を登録する。さらにアクセス・コントロール・ドライバ301は仮想化領域309には仮想HDD61のLBA007に対応する場所にファイルが記録されていないので、LBA007の更新フラグをセットしないか、もしセットされていればリセットする。
【0085】
ブロック413では、アクセス・コントロール・ドライバ301が仮想化領域309の更新が必要か否かを判断する。特定領域307には仮想マシン11に割り当てられた仮想化領域309のすべてのデータを記憶できる記憶容量が設定されているので、特定領域307を仮想マシン11が専有する限りは、仮想化領域309を更新する必要はない。しかし、特定領域307は他の仮想マシン13、15も使用することがあるので、アクセス・コントロール・ドライバ301はゲストOS67のモジュールからシャット・ダウンの通知または仮想マシン11を停止する通知を受け取ったときに更新が必要であると判断する。
【0086】
更新が必要な場合は、ブロック415に移行してアクセス・コントロール・ドライバ301は、AMP303から更新フラグがリセットされているLBAを取得して、特定領域307のデータで仮想化領域309を更新する要求をアクセス・マネージャ305に送る。アクセス・マネージャ305は、図6のブロック219と同じ手順で仮想化領域309を更新する。
【0087】
ブロック417では、ディスク・ドライバ105から更新の終了通知を受け取ったアクセス・マネージャ305は、アクセス・コントロール・ドライバ89に更新が終わったLBAを通知する。通知を受け取ったアクセス・コントロール・ドライバ89は、更新が終わったデータに対応するLBAの更新フラグをセットする。ブロック409におけるリード・アクセスの処理手順は、図7に示したファイル転送方式におけるリード・アクセスの処理手順に準じて行うことができる。
【0088】
[その他の特徴]
これまで、特定領域51、307はいずれか一つの仮想マシンだけが専有することを前提にして説明した。この場合、仮想化プログラム17上で仮想マシン11、13、15が時分割で動作する場合には、特定領域51、307を専有するいずれか1つの仮想マシンだけがHDD25に高速にアクセスすることができる。本発明では、特定領域51、307を複数の論理ブロックに分割して、それぞれを各仮想マシンに割り当てることにより時分割で動作している複数の仮想マシンが特定領域51を利用することができる。また、分割した特定領域51、307を各仮想マシン11、13、15に割り当てることで、特定領域51、307を初期化する必要をなくして、リード・アクセスに対するデータ・ヒット率を高めることができる。
【0089】
本発明では、HDD25が仮想化プログラムと複数の仮想マシンを構成するプログラムを格納する場合にも、HPAを設定することで仮想化領域53、309のデータの安全を確保することができる。このような特徴は、1台のHDDに設けられた仮想化領域53、309にデータを格納する場合に限定されない。たとえば、ファイル・サーバやワーク・ステーションなどにはRAID(Redundant Arrays of Independent Disks)というシステムが採用されている。
【0090】
RAIDでは、複数のHDDを仮想化して一つの論理ディスクを構築し、仮想化プログラムはそれらを1台のHDDとして認識してアクセスすることができる。RAIDを実現する方法には、ハードウエアによる方法とソフトウエアによる方法がある。ハードウエアによる方法に採用する場合は仮想化プログラムが各HDDにHPAを設定するコマンドを送るように変更することで、本発明を適用することができる。また、ソフトウエアによる方法に採用する場合は、特定領域については冗長記録ができなくなる場合も生ずるが、非同期的に特定領域から冗長記録が行われる仮想化領域にデータを転送することにより、高速アクセスを優先する用途には有利である。
【0091】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【0092】
10…コンピュータ
11、13、15…仮想マシン
17…仮想化プログラム
19…ハードウエア
51、307…特定領域
53、309…仮想化領域
61、63、65…仮想HDD
67、69、71…ゲストOS
93、303…アドレス・マッピング・テーブル(AMP)
100、300…ディスク・アクセス制御システム

【特許請求の範囲】
【請求項1】
ディスク・ドライブを搭載し、仮想化プログラムと仮想マシンで仮想化環境が形成されているコンピュータに、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域を前記ディスク・ドライブに設定するステップと、
前記仮想化領域に対するI/Oリクエストを開始するステップと、
前記I/Oリクエストが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断するステップと、
前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込むステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項2】
前記設定するステップが、前記コンピュータの動作が前記仮想マシンと前記仮想化プログラムの間で遷移する際に、前記仮想マシンが動作している間は前記仮想マシンが前記特定領域だけにアクセス可能になるように設定し、前記仮想化プログラムが動作している間は前記特定領域と前記仮想化領域にアクセスが可能になるように設定するステップを含む請求項1に記載のコンピュータ・プログラム。
【請求項3】
前記設定するステップが、前記仮想化プログラムがATAのSet max addressコマンドを実行するステップを含む請求項1または請求項2に記載のコンピュータ・プログラム。
【請求項4】
前記特定領域が、複数の前記仮想マシンにそれぞれ専用に割り当てた複数の論理ブロックで構成されている請求項1から請求項3のいずれかに記載のコンピュータ・プログラム。
【請求項5】
前記ライト・アクセスと非同期で前記仮想化領域を前記特定領域に記録されたデータで更新するステップを有する請求項1から請求項4のいずれかに記載されたコンピュータ・プログラム。
【請求項6】
前記更新するステップを前記仮想化プログラムが実行する請求項5に記載のコンピュータ・プログラム。
【請求項7】
前記リード・アクセスであると判断したときに読み取りデータが前記特定領域に記録されているか否かを判断するステップと、
特定領域に記録されていると判断したときに、前記仮想マシンが前記特定領域からデータを読み取るステップと
を有する請求項1から請求項6のいずれかに記載のコンピュータ・プログラム。
【請求項8】
特定領域に記録されていないと判断したときに、前記仮想マシンが前記仮想化領域からデータを読み取るステップを有する請求項7に記載のコンピュータ・プログラム。
【請求項9】
前記仮想化領域から読み取ったデータを前記リード・アクセスと非同期で前記特定領域に記録するステップを有する請求項7または請求項8に記載のコンピュータ・プログラム。
【請求項10】
仮想化レイヤの上で仮想マシンが動作する仮想化環境の実現が可能なコンピュータであって、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域が設定されたディスク・ドライブと、
前記ディスク・ドライブに対するインターフェースを構成するディスク・コントローラ、
前記ディスク・コントローラに対するI/Oリクエストを発行するリクエスト部と、
前記I/Oリクエストがライト・アクセスかリード・アクセスかを判断し、前記ライト・アクセスであると判断したときに、書き込みデータを前記特定領域に書き込むアクセス制御部と
を有するコンピュータ。
【請求項11】
前記仮想マシンが動作している間は前記特定領域だけがアクセス可能になるように前記ディスク・コントローラを制御し、前記仮想化プログラムが動作している間は前記ディスク・コントローラに対するアクセス制限を解除するように制御する記憶領域制御部を有する請求項10に記載のコンピュータ。
【請求項12】
前記仮想化レイヤは、前記ライト・アクセスのタイミングとは異なるタイミングで前記仮想化領域を前記特定領域に書き込まれたデータで更新する更新処理部を有する請求項10または請求項11に記載のコンピュータ。
【請求項13】
前記アクセス制御部は、前記I/Oリクエストが前記リード・アクセスであると判断したとき、さらに前記特定領域に読み取りにかかるデータが存在するか否かを判断し、データが存在すると判断した場合は前記特定領域から読み取る請求項10から請求項12のいずれかに記載のコンピュータ。
【請求項14】
前記アクセス制御部は、前記特定領域にデータが存在しないと判断した場合は前記仮想化領域からデータを読み取る請求項13に記載のコンピュータ。
【請求項15】
前記アクセス制御部は、前記リード・アクセスのタイミングとは異なるタイミングで前記仮想化領域から読み取られたデータを前記特定領域に書き込む請求項13または請求項14に記載のコンピュータ。
【請求項16】
前記ディスク・ドライブが複数のディスク・ドライブが論理的に一体になるように仮想化されている請求項10から請求項15のいずれかに記載のコンピュータ。
【請求項17】
仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法であって、
仮想化プログラムが前記コンピュータにゲストOSが前記ディスク・ドライブにアクセスすることができる特定領域と前記ゲストOSが前記ディスク・ドライブにアクセスすることができない仮想化領域を設定する機能を実現させるステップと、
アプリケーション・プログラムが前記コンピュータに前記仮想化領域に対するアクセスを開始する機能を実現させるステップと、
前記ゲストOSが前記コンピュータに前記アクセスが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断する機能を実現させるステップと、
前記ライト・アクセスであると判断したときに仮想化プログラムが前記コンピュータに書き込みデータを前記特定領域に書き込む機能を実現させるステップと
を有する方法。
【請求項18】
前記設定する機能を実現させるステップが、前記ゲストOSが動作する間は前記ディスク・ドライブの一部の記憶領域へのアクセスを制限し、前記仮想化プログラムが動作する間は前記アクセス制限を解除するように設定する請求項17に記載の方法。
【請求項19】
前記書き込む機能を実現させるステップが、ゲストOSが決定した仮想ディスク・ドライブのアドレスと同じアドレスの前記特定領域に書き込ませる請求項17または請求項18に記載の方法。
【請求項20】
前記ゲストOSが前記コンピュータに前記ライト・アクセスのタイミングとは異なるタイミングで前記特定領域に書き込まれたデータを前記仮想化領域に書き込む機能を実現させるステップを有する請求項17から請求項19のいずれかに記載の方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2012−38117(P2012−38117A)
【公開日】平成24年2月23日(2012.2.23)
【国際特許分類】
【出願番号】特願2010−178219(P2010−178219)
【出願日】平成22年8月7日(2010.8.7)
【出願人】(505205731)レノボ・シンガポール・プライベート・リミテッド (292)
【復代理人】
【識別番号】100106699
【弁理士】
【氏名又は名称】渡部 弘道
【復代理人】
【識別番号】100077584
【弁理士】
【氏名又は名称】守谷 一雄
【Fターム(参考)】