(57)【特許請求の範囲】
【請求項１】
第１インターフェースを介してコンピュータ上のデバイスに直接アクセスすることが許可される特権パーティションを有する仮想マシンと、前記デバイスへの直接アクセスは許可されない非特権パーティションを有する仮想マシンとを含むコンピュータにおいて、前記デバイスへの多重パスを生成する方法であって、前記方法は、
前記コンピュータ上のプロセッサが、前記デバイスへのアクセスのための第２インターフェースを生成するステップと、
前記プロセッサが、前記非特権パーティションにおいて、複数のインターフェースをサポートするように前記第２インターフェースのドライバを構成するステップであって、前記ドライバは、
前記デバイスについての情報の要求を、前記デバイスの既存ドライバへのアクセスを制御する非特権パーティションにおいて提供される多重パスリダイレクション層に送信し、
前記多重パスリダイレクション層から、前記第1インターフェイスのための前記既存ドライバへアクセスするためのポインタを受信する
ように構成される、前記第２インターフェースのドライバを構成するステップと、
前記プロセッサが、前記既存ドライバへアクセスするためのポインタを用いて前記デバイスと通信することによって、前記デバイスへのポインタを受信し、かつ、前記受信したポインタを用いて前記デバイスの新しいドライバを構成するステップと、
前記プロセッサが、前記デバイスへのポインタを用い、前記新しいドライバと前記第２インターフェースとを介して前記デバイスにＩ／Ｏ操作をリダイレクトするステップと
を備えたことを特徴とする方法。
【請求項２】
前記デバイスは、ストレージデバイスであることを特徴とする請求項１に記載の方法。
【請求項３】
前記デバイスは、ネットワークインターフェースであることを特徴とする請求項１に記載の方法。
【請求項４】
第１インターフェースを介してコンピュータ上のデバイスに直接アクセスすることが許可される特権パーティションを有する仮想マシンと、前記デバイスへの直接アクセスは許可されない非特権パーティションを有する仮想マシンとを含むコンピュータにおいて、前記デバイスへの多重パスを生成するシステムであって、前記システムは、
前記デバイスへのアクセスのための第２インターフェースを生成し、前記非特権パーティションにおいて、複数のインターフェースをサポートするように前記第２インターフェースのドライバを構成し、前記ドライバは、
前記デバイスについての情報の要求を、前記デバイスの既存ドライバへのアクセスを制御する多重パスリダイレクション層に送信し、
前記多重パスリダイレクション層から、前記既存ドライバへのポインタを受信する
ように構成され、
前記既存ドライバへのポインタを用いて前記デバイスと通信し、前記デバイスへのポインタを受信し、かつ前記デバイスの新しいドライバを構成し、
前記デバイスへのポインタを用い、前記第２インターフェース、および前記新しいドライバを介して、前記デバイスにＩ／Ｏ操作をリダイレクトする
ように構成されたことを特徴とするシステム。
【請求項５】
第１インターフェースを介してコンピュータ上のデバイスに直接アクセスすることが許可される特権パーティションを有する仮想マシンと、前記デバイスへの直接アクセスは許可されない非特権パーティションを有する仮想マシンとを含むコンピュータにおいて、前記デバイスへの多重パスを生成する方法をコンピュータに実行させるコンピュータ実行可能命令をその上に格納するコンピュータ可読記憶媒体であって、前記方法は、
前記コンピュータ上のプロセッサが、前記デバイスへのアクセスのための第２インターフェースを生成するステップと、
前記プロセッサが、前記非特権パーティションにおいて、複数のインターフェースをサポートするように前記第２インターフェースのためのドライバを構成するステップであって、前記ドライバは、
前記デバイスについての情報の要求を、前記デバイスの既存ドライバへのアクセスを制御する多重パスリダイレクション層に送信し、
前記多重パスリダイレクション層から、前記既存ドライバへのポインタを受信する
ように構成される、構成するステップと、
前記プロセッサが、前記既存ドライバへのポインタを用いて前記デバイスと通信し、前記デバイスへのポインタを受信し、かつ前記デバイスの新しいドライバを構成するステップと
を備えたことを特徴とするコンピュータ可読記憶媒体。
【請求項６】
前記方法は、前記プロセッサが、前記デバイスへのポインタを用い、前記新しいドライバと前記第２インターフェースとを介して前記デバイスにＩ／Ｏ操作をリダイレクトするステップをさらに備えたことを特徴とする請求項５に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティング分野、特に、コンピュータの仮想化に関する。もっとも仮想化とは、単に例示的な分野、および非限定的な分野である。
【背景技術】
【０００２】
完全に仮想化されたシステムにおいて、毎回の入出力（Ｉ／Ｏ）操作は、一般的に、ハイパーバイザ、ホストオペレーティングシステム、またはマシン上で実行する別個の仮想マシンによって間接的に処理されるため、仮想マシンシステムは、Ｉ／Ｏ機能に関して低いパフォーマンスに悩まされる可能性があり、それゆえに、入出力機能の実行コストが増加する。このようなパフォーマンスの問題を緩和する一つの手段は、システムにおける物理ハードウェアの一部のリソースを直接制御することを、仮想マシンに許容することである。しかしながら、このような直接制御を提供することは、仮想マシンを不完全に仮想化する効果があり得、仮想化と関連付く機能の多く（データ保存、データ移動、スナップショット取得、など）を成し遂げることが困難になり得る。
【０００３】
このようなＩ／Ｏのパフォーマンス問題を対処する別の方法は、一つのパスはハードウェアに直接的に伝わり、別のパスは、別の仮想マシンを介して、ハードウェアに間接的に伝わるような、Ｉ／Ｏデバイスへの多重パスを生成することである。仮想マシンがデータ保存、またはデータ移動できるように仮想マシンの状態を完全にカプセル化することを要求する場合、ハードウェアへの直接パスは解体される可能性があり、ハードウェアへの間接パスを使用し得る。多重パスを生成する際の一つの問題は、セットアッププロセスの一部として、セカンドパスにデバイス制御を与えることなく、セカンドパスを構成する事は一般的に困難であることである。Ｉ／Ｏデバイスが、ページングコードまたはページングデータのために使用され、ページングデバイスの制御が、ページングデバイスが完全に使用可能になる前に、セカンドパスを通る場合、ページングは停止し、システムクラッシュを引き起こし得る。
【０００４】
したがって、上記問題を解決する技術分野において、別の技術が必要とされる。
【発明の概要】
【０００５】
スタックによって表されたデバイスを物理的に制御するものでない仮想マシンのパーティションにおいて、デバイスドライバスタックを構築する様々な方法および様々なシステムを本願明細書に開示する。実施形態において、第２インターフェースおよびＩ／Ｏデバイスのための関連ドライバを、具体例を挙げて説明し得る。関連ドライバが制御し得るデバイスを記述する情報であって、Ｉ／Ｏ仮想化層からの情報は要求され得る。多重パスリダイレクション層(multi-path redirection layer)は、Ｉ／Ｏデバイスのドライバを含む既存のスタックへのハンドルを提供し得る。この既存のスタックは、その後、デバイスと通信し、デバイスを示すオブジェクトおよび新しいデバイスドライバを含む、新しいスタックの生成を可能にするために使用され得る。多重パスリダイレクション層は、その後、新しいスタックへのハンドルをオープンし、デバイス仮想化層に通知し、デバイス仮想化層は、その後、新たに生成されたインターフェースにデバイスの制御を譲り渡すため、既存のデバイスインターフェースに要求を送信し得る。デバイスは、直ちに、新しいインターフェースによって制御され得、Ｉ／Ｏは、新しいドライバおよび新しいインターフェースを介して、リダイレクトされ得る。
【０００６】
前述に加えて、それ以外の態様は、特許請求の範囲、図面、および本開示の一部を形成する本文で記述する。本開示の１つまたは複数の様々な態様は、本開示の本明細書において参照される態様を達成することのための回路構成および／またはプログラミングを含み得るが、これに制限されないことを、当業者であれば十分に理解できる。前記回路構成および／またはプログラミングは、仮想化技術によって、ハードウェア、ソフトウェア、および／または、システム設計者の設計上の選択によって決まる、本明細書において参照される態様を達成するように構成するファームウェア、の任意の組み合わせとなり得る。
【０００７】
注意すべきは、本概要は、下記の詳細な説明においてさらに記述する簡単な形で概念の選択を紹介するために提供する。本概要は、特許請求の範囲に記載する主題の重要な特徴または重要な特徴を識別する意図はなく、また特許請求の範囲に記載する主題の範囲の画定の手助けを意図するものでもない。
【図面の簡単な説明】
【０００８】
前述の概要、ならびに後述の詳細な説明も、添付の図面とともに読むことにより、よりよく理解される。本開示を示すために、本開示の様々な態様を示す。しかしながら、本開示は、示される特定の態様に制限するものでない。以下に図を示す。
【０００９】
【図１ａ】複数の仮想マシンを備え、複数の仮想プロセッサ、および対応するゲストオペレーティングシステムを含む仮想マシン環境を示す図である。前記仮想マシンは、スケジューラ、および他のコンポーネントを含み得、複数の仮想マシンのためにハードウェアを仮想化する仮想化層において、仮想化層によって保持される。
【図１ｂ】コンピュータシステムにおける、仮想環境のためのハードウェアおよびソフトウェアの基本設計概念の論理的な階層化を表す線図を示す図である。
【図１ｃ】本開示の態様を実施することができるコンピュータシステム例を示す図である。
【図２】典型的な仮想コンピューティングシステムを示す図である。
【図３】代替のコンピューティングシステムを示す図である。
【図４】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図５】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図６】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図７】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図８】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図９】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図１０】本開示を実施するプロセスを示す典型的な系統図を示す図である。
【図１１】スタックと関連付くデバイスを制御するものでない仮想マシンのデバイスドライバスタックを構築する操作手順例を示す図である。
【図１２】スタックと関連付くデバイスを制御するものでない仮想マシンのデバイスドライバスタックを構築する操作手順例を示す図である。
【図１３】仮想マシン環境において、ページングコードまたはページングデータのために使用するＩ／Ｏデバイスへの多重パスを生成する操作手順例を示す図である。
【図１４】仮想マシン環境において、ページングコードまたはページングデータのために使用するＩ／Ｏデバイスへの多重パスを生成する操作手順例を示す図である。
【図１５】上記、図１〜１０に関して述べたコンピュータ実行可能命令を有するコンピュータ可読媒体を示す図である。
【発明を実施するための形態】
【００１０】
一般用語における仮想マシン
本発明の様々な実施形態を十分に理解するため、ある具体的詳細を、以下の説明および図において説明する。しばしばコンピューティング技術およびソフトウェア技術に関連付く、ある良く知られている詳細は、本発明の様々な実施形態を不必要に分かりにくくすることを避けるため、以下の開示に記述していない。さらに、当業者は、以下の１つまたは複数の詳細な説明なしで、本発明の他の実施形態を実施することができることを理解するだろう。最後に、様々な方法は、以下の開示における手順および順序を参照して記述するが、記述それ自体は、本発明の実施形態の明瞭な実施を提供するためであり、手順および手順の順序が、本発明を実施するために必要であるとして解釈すべきでない。
【００１１】
注意すべきは、本明細書に記載する様々な技術は、ハードウェア、またはソフトウェア、または必要に応じて両方の組み合わせ、と接続して実行され得ることである。したがって、本発明の方法および本発明の一連の装置、またはある面、またはその一部は、プログラムコード（すなわち、命令）が、コンピュータ、または本発明を実施するために一連の装置となるマシンなどに読み込まれ、そのマシンなどによって実行される際、フレキシブルディスク、ＣＤ−ＲＯＭ、ハードドライブ、または任意の、マシン可読ストレージ媒体などの有形の媒体において実施されるプログラムコードを形成し得る。プログラム制御可能なコンピュータ上のプログラムコード実行について言えば、コンピューティングデバイスは、プロセッサ、プロセッサによって読み込み可能なストレージ媒体（揮発性メモリ、および不揮発性メモリ、および／または記憶素子を含む）、少なくとも一つの入力デバイス、および少なくとも一つの出力デバイスを通常含む。一つまたは複数のプログラムは、例えばＡＰＩ、再利用可能な制御、または同様のものの使用を介して、本発明に関連して記述されたプロセスを実行、または適用し得る。このようなプログラムは、高水準手続き型プログラミング言語、またはオブジェクト指向プログラミング言語で好んで実装され、コンピュータシステムと通信する。しかしながら、前記プログラムは、必要に応じて、アセンブリ言語、または機械語で実装される場合もある。いずれにせよ、プログラミング言語は、コンパイル言語、またはインタプリタ言語であり、ハードウェア実装と組み合わされ得る。
【００１２】
仮想マシンのために、単一の物理マシンは、下層にある物理マシン自身の完全な仮想インスタンス上で互いに実行する、多くのゲストオペレーティングシステムを支援できる。ゲストオペレーティングシステム（ＯＳ’ｓ）は、あるＯＳの単一のバージョンのインスタンス、同一ＯＳの異なるリリース、または完全に異なるＯＳ’ｓになることができる。仮想マシンモニタ（ＶＭＭ）、またはハイパーバイザと呼ばれるシン・ソフトウェア層は、仮想マシンおよび他の仮想サブシステムを、生成または制御し得る。ＶＭＭもまた、物理マシンの完全な制御権を獲得し、ＣＰＵ、メモリ、ストレージの空き、および互いのゲストＯＳのためのＩ／Ｏ帯域幅、のリソース保証を提供する。
【００１３】
図１ａは、複数の仮想マシン１２０、１２１を備え、複数の仮想プロセッサ１１０、１１２、１１４、１１６、および対応するゲストオペレーティングシステム１３０、１３２を含む仮想マシン環境１００を示す。仮想マシン１２０、１２１は、スケジューラ１４２、および他のコンポーネント（図示せず）を含み得る仮想化層１４０によって保持され、仮想化層１４０は、複数の仮想マシン１２０、１２１のハードウェア１５０を仮想化する。複数の仮想プロセッサ１１０、１１２、１１４、１１６は、下層にあるハードウェアの物理プロセッサ１６０、１６２に相当する仮想のものとなり得る。
【００１４】
図１ｂは、コンピュータシステムにおける、仮想環境のためのハードウェアおよびソフトウェアの基本設計概念の論理的な階層化を表す線図を示す。図１ｂにおいて、仮想化プログラム１８０は、物理ハードウェアの基本設計概念１８２の上で、直接的、または間接的に実行する。仮想化プログラム１８０は、（ａ）ホストオペレーティングシステムと平行して実行する仮想マシンモニタ、（ｂ）仮想化を実行するハイパーバイザコンポーネントを備えるホストオペレーティングマシン、（ｃ）ハードウェア、または（ｄ）マイクロコード、となり得る。仮想化プログラムもまた、任意のオペレーティングシステムから別々に実行するハイパーバイザとなり得る。言い換えれば、ハイパーバイザの仮想化プログラムは、任意のオペレーティングシステムの一部として実行する必要はなく、任意のオペレーティングシステムと平行して実行する必要もない。それどころか、ハイパーバイザの仮想化プログラムは、「ルートパーティション」を含み、すべてのオペレーティングシステムの「下」で実行し得る。仮想化プログラム１８０は、ゲストハードウェアの基本設計概念１７８（本コンポーネントは「パーティション」または「仮想マシン」である事実を示すための破線として示す）を仮想化する、すなわち、ハードウェアは実際には存在しないが、仮想化プログラム１８０によって代わりに仮想化される。ゲストオペレーティングシステム１７６は、ゲストハードウェアの基本設計概念１７８の上で実行し、ソフトウェアアプリケーション１７４は、ゲストオペレーティングシステム１７６の上で実行することができる。図１ｂの仮想化オペレーティング環境において、ソフトウェアアプリケーション１７４は、たとえソフトウェアアプリケーション１７４が、ホストオペレーティングシステム、および物理ハードウェアの基本設計概念１８２と互換性がないオペレーティングシステム上で実行するために通常、設計されていても、コンピュータシステムの中で実行できる。
【００１５】
仮想マシンは、オペレーティングシステム全体、多くのプロセスと組み合わさって構成するアプリケーション一式、仮想マシンの状況における「ワークロード」、または「プロセス」として参照され得るもの全体、を一般的に含む。本開示における用語「プロセス」および用語「ワークロード」は、仮想マシンの状況において同じ意味で用いられ得、当業者は、「プロセス」は、仮想マシンにおいてインスタンスを生成する、すべてのシステム、およびすべてのアプリケーションを含む複数のプロセスを参照し得ることを難なく理解できるだろう。
【００１６】
次に、図２は、物理コンピュータハードウェア２０２の上で直接実行し、パーティションＡ２０８による使用のため、オペレーティングシステムＡ２１２に、およびパーティションＢ２１０による使用のため、オペレーティングシステムＢ２１４に、顕在化させるインターフェースによって、物理コンピュータハードウェア２０２のリソースへのアクセスを提供する、ホストオペレーティングシステム（ホストＯＳ）ソフトウェア層２０４を含む仮想コンピュータシステムを示す。これは、ホストＯＳ２０４の上で実行する、オペレーティングシステム層２１２、およびオペレーティングシステム層２１４に気づかれないホストＯＳ２０４可能にする。さらに、ホストＯＳ２０４は、特定のプログラム用の仮想化機能を考慮して特別に設計され得、仮想化を実行するため組み込まれたハイパーバイザコンポーネント（図示せず）を備える標準のオペレーティングシステムになり得、仮想化を実行する。
【００１７】
さらに図２を参照すると、上記ホストＯＳ２０４は、例えば、仮想化されたインテル３８６プロセッサであり得るパーティションＡ２０８、および例えば、仮想化された、モトローラ６８０ｘ０プロセッサ群の１バージョン、であり得るパーティションＢ２１０、の２つのパーティションである。パーティション２０８内には、ゲストオペレーティングシステム（ゲストＯＳｓ）Ａ２１２があり、パーティション２１０内には、ゲストオペレーティングシステム（ゲストＯＳｓ）Ｂ２１４がある。ゲストＯＳ  Ａ２１２の上で実行するのは、２つのアプリケーション、つまり、アプリケーションＡ１ ２１６、およびアプリケーションＡ２ ２１８であり、ゲストＯＳ  Ｂ２１４の上で実行するのは、アプリケーションＢ１ ２２０である。
【００１８】
図２に関して、（破線で示されている）パーティションＡ２０８、および（破線で示されている）パーティションＢ２１０は、単なるソフトウェア構築物として存在し得る、仮想化コンピュータハードウェアの表現物であることに注意しなくてはならない。パーティションＡ２０８、およびパーティションＢ２１０は、各々、パーティションＡ２０８にゲストＯＳ  Ａ２１２、パーティションＢ２１０にゲストＯＳ  Ｂ２１４を表現するのみならず、実在する物理コンピュータハードウェア２０２と間接的に相互作用するため、ゲストＯＳ  Ａ２１２、およびゲストＯＳ  Ｂ２１４に必要であるソフトウェア手順のすべてを実行する専門の仮想化ソフトウェアの実行のため可能にされる。
【００１９】
図３は、仮想化が、ホストオペレーティングシステム２０４”と平行して実行する仮想マシンモニタ（ＶＭＭ）２０４’によって実行される代替の仮想化コンピューティングシステムを示す。ある場合において、ＶＭＭ２０４’は、ホストオペレーティングシステム２０４”の上で実行するアプリケーションになり得、ホストオペレーティングシステム２０４”のみを介して、コンピュータハードウェア２０２と相互作用する。別の場合においては、図３に示されるように、ＶＭＭ２０４’は、その代わりに、ホストオペレーティングシステム２０４”を介して、コンピュータハードウェア２０２と間接的に相互作用する一部の階層上で、部分的に独立しているが、（ホストオペレーティングシステムがコンピュータハードウェアと直接的に相互作用するのと同様に）ＶＭＭ２０４’がコンピュータハードウェア２０２と間接的に相互作用する別の階層上ではそうでない、ソフトウェアシステムを含み得る。なおかつ別の場合において、ＶＭＭ２０４’は、（そのときでもまだ、コンピュータハードウェア２０２の使用を調整する、および競合を避ける、などのため、ホストオペレーティングシステム２０４”と相互作用するが）ホストオペレーティングシステム２０４”を用いることをせずに、（ホストオペレーティングシステムがコンピュータハードウェアと直接的に相互作用するのと同様に）コンピュータハードウェア２０２と直接的に相互作用する全ての階層上で、完全に独立したソフトウェアシステムを含み得る。
【００２０】
上述のパーティションを実装するためのこれらのバリエーションの全ては、単なる例示的な実装であり、本願明細書において、本開示を任意の独特の仮想化態様に限定するものとして解釈されるべきでない。
【００２１】
仮想ストレージの割り当て
Ｉ／Ｏの仮想化（ＩＯＶ）は、単一の物理Ｉ／Ｏデバイスのための機能を参照し、１つ以上の仮想マシン、または、ハイパーバイザ（もしくはＶＭＭ、など）と仮想マシン間によって共有される。仮想マシンシステムは、Ｉ／Ｏの仮想化に関して低いパフォーマンスに悩まされる可能性がある。これは、仮想化の役立つ特徴（例えば、物理ハードウェアからの分離）が、仮想マシンにおいてワークロードを実行する際、悪い効果をもたらす可能性があるためである。完全に仮想化したシステムにおいて、毎回のＩ／Ｏ操作は、一般に、ハイパーバイザ、ホストオペレーティングシステムによって、またはマシン上で実行する個別の仮想マシンのいずれか一方によって、間接的に処理される。低いＩ／Ｏパフォーマンスを緩和する一つの手段は、システムにおける物理ハードウェアの一部の制御を直接制御することを仮想化マシンに許容することであり得る。しかしながら、直接制御を許容することは、仮想化と関連付く機能の多く（データ保存、データ移動、スナップショット取得、など）を成し遂げることが困難になり得る場合に、仮想マシンを不完全に仮想化する効果があり得る。
【００２２】
同一出願人による米国特許出願番号（代理人整理番号：ＭＳＦＴ−５５５６／３１６０１０．０１）は、上記の問題を対処するための技術を説明している。例えば、Ｉ／Ｏデバイスへの多重パスは生成され得る。一つのパスはハードウェアに直接的に伝わり得、別のパスは、別の仮想マシンを介してハードウェアに間接的に伝わり得る。仮想マシンがデータ保存、またはデータ移動できるように仮想マシンの状態を完全にカプセル化することを要求する場合、直接パスは解体される可能性があり、間接パスを使用し得る。間接パスは、本質的に仮想化できる。
【００２３】
しかしながら、問題は、２つのパスを構築する中で、特に、Ｉ／Ｏデバイスが、ページングコードまたはページングデータのために使用される場合に生じる。セットアッププロセスの一部として、セカンドパスにデバイスの制御を与えることなく、セカンドパスを構成する事は一般的に困難である。ページングデバイスが完全に使用可能になる前に、ページングデバイスの制御がセカンドパスに渡される場合、エラーが発生し得、ページングは停止し得る。多くの状況では、ページングが停止すると、システムはクラッシュし得る。
【００２４】
図４を参照すると、純粋に「合成(synthetic)」ストレージサブシステムの線図が示されている。合成スタックは、仮想マシン内での使用のために一般的に設計されたドライブで構成されているＩ／Ｏスタックである。別の用語が、特定のシステムに応じて合成スタックを参照するために、使用され得る。例えば、別のシステムにおける同様のＩ／Ｏスタックのために使用される用語は、「準仮想化（paravirtualized）」である。図４を参照すると、線図には２つのパーティションが示されている。１つのパーティションは、ディスク４６０への直接の物理アクセスを備える特権パーティション４１０である。もう一方のパーティションは、ディスク４６０へのアクセスを要求し得る非特権パーティション４７０である。例えば、ファイルシステム４７５は、合成ＳＣＳＩバスドライバ４８０がディスクドライバ４８５と通信するように要求するファイルへのアクセスを要求し得、その後、ＶＭバス４６５を介して通信する。ストレージ仮想化サービスプロバイダ４２０は、仮想ストレージサービスを提供し得る。ストレージ仮想化サービスプロバイダ４２０は、ディスクドライバ４３０と通信し得、物理ＳＣＳＩバスデバイスドライバ４４０にアクセスする。ＳＣＳＩバスデバイスドライバ４４０は、ＳＣＳＩコントローラ４５０へのアクセス、および最終的にディスク４６０に常駐するファイル（通常は、ブロック層(block layer)に存在する）を提供し得る。したがって、特権パーティション４１０として示されるある仮想マシンは、ＳＣＳＩコントローラ４５０である物理ストレージデバイスの制御を有する。非特権パーティション４７０として示される別の仮想マシンは、ＳＣＳＩコントローラ４５０へのアクセスを見つけ出そうとし得る。
【００２５】
次に、図５を参照すると、ディスク４６０へのセカンドパスを構築したあとの典型的な最終状態が示されている。非特権パーティション４７０は、第２ＳＣＳＩコントローラ５２０を介して、ディスク４６０に渡る物理的な制御を有する。このアクセスは、物理ＳＣＳＩバスデバイスドライバ５１０、およびディスクドライバ５０５を含む第２スタックによって提供される。第１パスを提供する合成スタックは、ディスクドライバ４８５、および合成ＳＣＳＩバスドライバ４８０を含み、ＶＭバス４６５を介して通信する。ストレージ仮想化サービスプロバイダ４２０は、仮想ストレージサービスを提供し得る。ストレージ仮想化サービスプロバイダ４２０は、ディスクドライバ４３０と通信し得、物理ＳＣＳＩバスデバイスドライバ４４０にアクセスする。ＳＣＳＩバスデバイスドライバ４４０は、ＳＣＳＩコントローラ４５０へのアクセスを提供し得、ディスク４６０への第１インターフェースを提供する。多重パスリダイレクション層５００は、非特権パーティション４７０において提供され、２つのスタックへのアクセスを管理、および制御する。
【００２６】
起こり得る一つの問題は、非特権パーティションにおけるオペレーティングシステムのインスタンスの中の２つのパスのいずれかにディスクドライバ層を構築するために、ストレージディスク４６０の制御が必要であるかもしれないということである。デバイスドライバの２つのスタックを構築するのに必要不可欠なプロセスは、一般的に、起動デバイスであるディスクからの読み込み、ならびに、ページングコードおよびページングデータを介する効果的なディスク活動を必要とするだろう。これは可能なことであるとはいえ、ＳＣＳＩコントローラの多くの機器構成は、第１インターフェース、および第２インターフェースの両方から、ディスクを同時に制御できない。当業者は、ＳＣＳＩデバイスへの本開示は例示的であり、ならびに、本開示の方法および本開示のシステムは、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ｉｎｔｅｒｎｅｔ  ＳＣＳＩ（ｉＳＣＳＩ）、およびファイバーチャネル、などの他のＩ／Ｏデバイスにも適用され得るが、これらに限られるわけではないことがわかるだろう。
【００２７】
様々な実施形態において、本願明細書の開示は、第２Ｉ／Ｏパス、または第２スタックを構築するためのプロセスである。以下に、合成Ｉ／Ｏスタックから始まり、物理スタックを構築するプロセスを記述するが、当業者は、合成Ｉ／Ｏスタックから始まり、物理スタックを構築するため、類似のプロセスを使用し得ることがわかるだろう。
【００２８】
一部の実施形態において、ＳＣＳＩコントローラは要求され得、自身への第２インターフェースを生成する。一部のデバイスは、操作のような機能、特にＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ’ｓ（ＳＩＧ’ｓ）Ｓｉｎｇｌｅ−Ｒｏｏｔ（ＳＲ）Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ（ＩＯＶ）仕様に準拠しているもののように機能することができる。図６を参照すると、仮想ストレージマネージャ６００が提供され、仮想マシンへのリソースの割り当てを管理し、仮想マシンに割り当てられたリソースを、他の仮想マシンによるアクセスから分離し得る。仮想ストレージマネージャ６００は、物理ＳＣＳＩバスデバイスドライバ４４０を介して、ＳＣＳＩコントローラ４５０にメッセージを送信し得る。ＳＣＳＩコントローラ４５０は、その後、第２ＳＣＳＩコントローラインターフェース５２０を生成し得る。上記のように、本開示は、ＳＣＳＩコントローラ以外の様々なストレージコントローラのための本開示の方法の有用性を検討する。一部のコントローラは、多数のやり方で、ストレージ媒体に通信し得る。例えば、ストレージエリアネットワーク（ＳＡＮ）では、複数のコントローラが、単一のＳＲ−ＩＯＶ準拠のコントローラよりむしろ使用され得る
【００２９】
図７を参照すると、第２Ｉ／Ｏスタックを構成するさらに典型的なプロセスが示されている。ストレージデバイスドライバ７００は、第２コントローラインターフェース５２０のために構成され得る。合成ストレージスタック７１０を使用し、起動デバイスは、デバイスドライバに関するファイルを検索し得る。
【００３０】
非特権パーティション４７０におけるＳＣＳＩバスデバイスドライバ７００は、ディスクを表す子デバイスを直ちに生成し得る。しかしながら、非特権パーティション４７０は、特権パーティション４１０の制御下にあるディスク４６０をこれまでのところ所有していない。結果として、スタックのこの部分を生成する標準の方法は、デバイスがディスクにＩ／Ｏを送信できず、自身のプロパティを見つけられない以上、正常に機能し得ない。
【００３１】
図８を参照すると、ＳＣＳＩバスデバイスドライバ７００は、ＳＣＳＩバスデバイスドライバ７００が最終的には所有し得るディスクについての情報のため、多重パスリダイレクション層５００に要求を送信し得る。多重パスリダイレクション層５００は、その後、既存のディスクドライバ４８５へのハンドルに応答し得る。
【００３２】
オペレーティングシステムＩ／Ｏマネージャは、アプリケーション、およびデバイスドライバにより提供されるインターフェースの間の通信を管理し得る。さらに、Ｉ／Ｏマネージャは、Ｉ／Ｏの機能性を管理し、およびシステムにデバイスを追加する際、認識させるためのプラグアンドプレイマネージャを含む。図９を参照すると、非特権パーティション４７０におけるＳＣＳＩバスドライバ７００は、ディスク４６０を表すオブジェクトを生成し、プラグアンドプレイマネージャに前記オブジェクトを伝え得る。プラグアンドプレイマネージャは、その後、ディスク４６０のためにドライバ９００を構成し得る。本来、ドライバ９００は、ディスク４６０にＩ／Ｏを送信するＳＣＳＩコントローラインターフェース５２０なしで構成されることはあり得ない。この場合、必要なＩ／Ｏは、多重パスリダイレクション層５００がＳＣＳＩコントローラインターフェース５２０に提供した、ディスクドライバ４８５へのハンドルを使用する合成ストレージスタック９１０の下へ、リダイレクトされるため、ドライバ９００は構成され得る。多重パスリダイレクション層５００は、その後、新しいディスクオブジェクト９００および自身と関連付くドライバへのハンドルをオープンし得る。
【００３３】
図１０を参照すると、多重パスリダイレクション層５００は、仮想ストレージマネージャ６００にメッセージを送信し得る。仮想ストレージマネージャ６００は、ＳＣＳＩコントローラの第１インターフェース４５０のために、ＳＣＳＩバスデバイスドライバ４４０にメッセージを送信し得る。ＳＣＳＩコントローラの第１インターフェース４５０は、その後、ディスク４６０の制御を、図示するように、ＳＣＳＩコントローラの第２インターフェース５２０に譲り渡し得る。この時点で、多重パスリダイレクション層５００は、非特権パーティション４７０において、ファイルシステム４７５から物理スタック１０００を下降して、Ｉ／Ｏを管理し得る。
【００３４】
本開示の態様は、システム、方法、コンピュータ可読媒体に常駐するコンピュータ実行可能命令、などとして、実施させることができる。したがって、任意の特定システムの任意の開示、任意の特定方法の任意の開示、または任意の特定のコンピュータ可読媒体の任意の開示は、それらを制限するものでなく、むしろ、本開示の主題を実施する別の方法にまで及ぶ。
【００３５】
図１１および図１２は、スタックと関連付くデバイスを制御するものでない仮想マシンのデバイスドライバスタックを構築する操作手順例を示す。本手順は、操作１１００、操作１１１０、操作１１２０、操作１１３０、操作１１４０、操作１１５０、操作１１６０、操作１１７０、および操作１１８０を含み得る。図１１を参照すると、操作１１００は、操作手順を開始し、操作１１００において、要求を送信し、スタックと関連付くデバイスを制御するものでない仮想マシンのデバイスのため、第２インターフェースのインスタンスを生成し得る。操作１１２０で、第２インターフェースのための物理ドライバは構成され得る。操作１１３０は、前記デバイスの表現を生成する事により、前記デバイスドライバスタックを構築することを示す。操作１１４０は、前記デバイスのための新しいドライバを構成することを示し、操作１１５０は、前記デバイスドライバスタックに第２指示を提供することを示す。操作１１６０は、前記代替スタックを介して前記デバイスと通信することにより前記デバイスドライバスタックを構築する情報を取得することを示す。操作１１７０は、前記デバイスドライバスタック、および第２インターフェースを介して、Ｉ／Ｏを前記デバイスに向けることを示す。操作１１８０は、前記デバイスのため第１インターフェースにメッセージを送信し、前記デバイスの制御を前記第２インターフェースに譲り渡すことを示す。
【００３６】
続いて図１２は、操作１２００は、デバイスは、複数の制御インターフェースを任意で含み得ることを示す。操作１２０５は、複数の制御インターフェースは、ＰＣＩ  ＳＲ−ＩＯＶ仕様に任意で準拠し得ることを示す。一実施形態において、操作１２１０で、デバイスドライバスタックはページングＩ／Ｏに使用され得、操作１２１５において、ページングＩ／Ｏは、デバイスドライバスタックを生成するために必要であり得る。
【００３７】
操作１２２０は、一実施形態において、デバイスはディスクデバイスである事を示す。それ以外の実施形態１２２５において、デバイスはネットワークインターフェースアダプタであることを示す。様々な実施形態において、操作１２３０で、代替スタックにＩ／Ｏ要求をリダイレクトすることにより、デバイスの記述およびデバイスのプロパティを発見する。
【００３８】
操作１２３５において、デバイスのドライバに関連付くファイルのため、合成ストレージスタックを介して起動デバイスを検索し得る。操作１２４０において、物理ドライバが所有し得るデバイスの情報の要求を、多重パスリダイレクション層に送信することを示す。一実施形態において、操作１２４５で、指示はハンドルであり得る。それ以外の実施形態において、操作１２５０で、仮想ストレージマネージャに指示を記述しているメッセージが送信され得る。
【００３９】
図１３および図１４は、仮想マシン環境において、ページングコードまたはページングデータのために使用するＩ／Ｏデバイスへの多重パスを生成する典型的な操作手順を示す。本手順は、操作１３００、操作１３０２、操作１３０４、操作１３０６、操作１３０８、操作１３１０、操作１３１２、および操作１３１４を含み得る。図１３を参照すると、操作１３００は、操作手順を開始し、操作１３０２は、第２インターフェースのインスタンス化を要求し、複数の制御インターフェースをサポートができるＩ／Ｏデバイスの物理ドライバを構成する。操作１３０４は、前記Ｉ／Ｏデバイスへの既存ドライバを含む既存スタックへのポインタをＩ／Ｏ仮想化層から受信することを示し、操作１３０６においては、デバイスを表すオブジェクトはインスタンスを生成され得る。
【００４０】
操作１３０８は、前記既存スタックを介して、Ｉ／Ｏデバイスと通信し、Ｉ／Ｏデバイスの新しいドライバを構成することを示す。操作１３１０で、オブジェクトへのポインタおよび新しいドライバは提供され得る。操作１３１２は、前記Ｉ／Ｏデバイスのため、第１インターフェースにメッセージを送信し、前記Ｉ／Ｏデバイスの制御を前記第２インターフェースに譲り渡すことを示す。操作１３１４は、前記オブジェクトへのポインタを使用する第２インターフェースおよび新しいドライバを介して、前記Ｉ／ＯデバイスにＩ／Ｏをリダイレクトすることを示す。
【００４１】
続いて図１４は、操作１４０２において、Ｉ／Ｏデバイスのプロパティ、ならびにページングコード、およびページングデータを受信することを示す。操作１４０４は、一実施形態において、既存スタックは物理スタックであることを示す。操作１４０６は、それ以外の実施形態において、既存スタックは合成スタックであり得る。
【００４２】
一部の上記態様は、方法、システム、コンピュータ可読媒体、または任意のタイプの製造において実施することができる。例えば、図１５で、コンピュータ可読媒体は、仮想Ｉ／Ｏ環境におけるストレージデバイスのための代替Ｉ／Ｏスタックを生成するコンピュータ実行可能命令を、その上に格納する。前記ストレージデバイスは、ストレージデバイスのページングが、既存スタックを介して継続している間に生成される代替Ｉ／Ｏスタック、ならびにページングコード、およびページングデータのために使用される。このような媒体は、第２インターフェースのインスタンス化を要求し、ストレージデバイスのため、第２物理ドライバを構成する第１命令サブセット１５１０、既存スタックへのハンドルを受信する第２命令サブセット１５１２、前記ハンドルを使用する既存スタックを識別し、既存スタックを介して、ストレージデバイスと通信する第３命令サブセット１５１４、ストレージデバイスのため、前記代替スタックのインスタンスを生成し、代替Ｉ／Ｏスタックは、前記ストレージデバイスを表すオブジェクト、およびストレージデバイスのドライバを含む第４命令セット１５１６、前記別のＩ／Ｏへのハンドルを伝える第５命令セット１５１８、前記ストレージデバイスのため、第１インターフェースにメッセージを送信し、前記ストレージデバイスの制御を前記第２インターフェースに譲り渡す第６命令セット１５２０、を含めることができる。本願明細書に開示された様々な別の態様をとらえ、さらなる命令セットを使用することができること、以下で開示する３つの命令サブセットは、本開示の詳細部分で異なる可能性があることは、当業者によって十分に理解されるだろう。
【００４３】
例えば、前記命令はさらに、代替Ｉ／Ｏスタックを介して、ストレージデバイスにＩ／Ｏをリダイレクトする命令１５２４含めることができる。さらに前記命令は、ストレージデバイスがＰＣＩ  ＳＲ−ＩＯＶに準拠している実施形態をサポートする命令１５２６、ストレージデバイスのドライバに関連付くファイルのため、既存のスタックを介して、起動デバイスを検索する命令１５２８を含めることができる。
【００４４】
上記のように、本発明の態様は、プログラム制御可能なコンピュータ上で実行し得る。図１ｃ、および下記は、本開示の態様において適切なコンピューティング環境の簡単な説明を提供するため実行され得ることを意図する。当業者は、図１ｃのコンピュータシステムが、一部の実施形態において、図１ａおよび図１ｂの様々な態様を達成することができることを十分に理解できるだろう。これらの実施例において、サーバおよびクライアントは、図１ｃおよび一部の実施形態において記述される、一部のコンポーネントまたはすべてのコンポーネントを含めることができ、クライアントは、それぞれ、本開示の固有の態様のインスタンスを生成する回路構成要素を含めることができる。
【００４５】
本開示を通じて使用される用語、回路構成要素は、専門的なハードウェアコンポーネントを含めることができる。一部の実施形態、または別の実施形態において、回路構成要素は、ファームウェアまたはスイッチにより、機能を実行するよう構成されるマイクロプロセッサを含めることができる。同一の実施形態例、または別の実施形態例において、回路構成要素は、機能を実行する論理回路を具体化するソフトウェア命令が、ＲＡＭおよび／または仮想メモリなどのメモリにロードされる際、構成される可能性がある、１つまたは複数の汎用プロセシングユニット、および／または１つまたは複数のマルチコアプロセシングユニット、などを含めることができる。回路構成要素が、ハードウェアおよびソフトウェアの組み合わせを含む、実地形態例において、開発者は、論理回路を具体化するソースコードを書き得、ソースコードは、汎用プロセシングユニットが処理できるマシン可読コードにコンパイルされ得る。
【００４６】
図１ｃを参照すると、コンピューティングシステムは、システムメモリを含む様々なシステムコンポーネントをプロセシングユニット２１につなぐシステムバス２３、プロセシングユニット２１、およびシステムバス２２を含める、コンピュータ２０または同様のものを含めることができる。システムバス２３は、メモリバス、またはメモリコントローラ、周辺機器のバス、および任意の様々なバス基本設計概念を使用するローカルバスを含む、任意の何種類かのバス構造になり得る。システムメモリは、ＲＯＭ（read only memory）２４、およびＲＡＭ（random access memory）２５を含む。起動中などにコンピュータ２０内部の素子間の情報を転送することを支援する基本ルーチンを含むＢＩＯＳ（basic input/output system）２６は、ＲＯＭ２４に格納される。さらに、コンピュータ２０は、図示されていないが、ハードディスクから読み込みをする、およびハードディスクに書き込みをするハードディスクドライブ２７、リムーバブル磁気ディスク２９から読み込みをする、およびリムーバブル磁気ディスク２９に書き込みをする磁気ディスクドライブ２８、およびＣＤ−ＲＯＭ、または他の光学メディアなどのリムーバブル光ディスク３１から読み込みをする、およびリムーバブル光ディスク３１に書き込みをする光ディスクドライブ３０を含み得る。一部の実施形態例において、本発明の態様を具体化するコンピュータ実行可能命令は、ＲＯＭ２４、ハードディスク（図示せず）、ＲＡＭ２５、リムーバブル磁気ディスク２９、光ディスク３１、および／またはプロセシングユニット２１のキャッシュに格納され得る。ハードディスクドライブ２７は、ハードディスクドライブインターフェース３２によって、磁気ディスクドライブ２８は、磁気ディスクドライブインターフェース３３によって、および光ディスクドライブ３０は、光ディスクドライブインターフェース３４によって、それぞれ、システムバス２３に接続される。前記ドライブ、および前記ドライブ関連のコンピュータ可読媒体は、コンピュータ可読命令の不揮発性ストレージ、コンピュータ２０のデータ構造、コンピュータ２０のプログラムモジュール、およびコンピュータ２０の他のデータを提供する。本願明細書に記載する環境は、ハードディスク、リムーバブル磁気ディスク２９、およびリムーバブル光ディスク３１を用いてはいるが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイディスク、ＲＡＭ、ＲＯＭ、などのコンピュータによって、アクセス可能なデータを格納できる別形式のコンピュータ可読媒体もまた操作環境において使用され得ることは、当業者によって十分に理解されるべきである。
【００４７】
多くのプログラムモジュールは、オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、別プログラムモジュール３７、およびプログラムデータ３８を含む、ハードディスク、リムーバブル磁気ディスク２９、リムーバブル光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５上に格納され得る。ユーザは、キーボード４０、およびポインティングデバイス４２などの入力デバイスを介して、コンピュータ２０に、コマンドおよび情報を入力し得る。他の入力デバイス（図示せず）は、マイク、ジョイスティック、ゲームパッド、衛星受信装置、スキャナ、または同類のものを含み得る。これらおよび他の入力デバイスは、しばしば、システムバスにつなげられるシリアルポートインターフェース４６を介して、プロセシングユニット２１に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（universal serial bus）などの他のインターフェースによって接続され得る。ディスプレイ４７、または別形式のディスプレイデバイスもまた、ビデオアダプタ４８、などのインターフェースを介して、システムデバイス２３に接続される可能性がある。ディスプレイ４７に加えて、コンピュータは、一般的に、スピーカおよびプリンタなどの他の周辺機器の出力デバイス（図示せず）を含む。図１ｃのシステムもまた、ホストアダプタ５５、ＳＣＳＩ（Small Computer System Interface）バス５６、およびＳＣＳＩバス５６に接続される外部ストレージデバイス６２を含む。
【００４８】
コンピュータ２０は、リモートコンピュータ４９などの、１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境において操作し得る。リモートコンピュータ４９は、それ以外のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または、別の共通ネットワークノードになり得、メモリストレージデバイス５０のみ図１ｃに示されているが、リモートコンピュータ４９は、一般に、コンピュータ２０と関連のある上述した素子の多く、またはすべてを含む可能性がある。図１ｃに示される論理接続は、ローカルエリアネットワーク（ＬＡＮ）５１、およびワイドエリアネットワーク（ＷＡＮ）５２を含む可能性がある。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて、ありふれたものである。
【００４９】
ネットワーク環境をＬＡＮに用いる場合、コンピュータ２０は、ネットワークインターフェース（アダプタ）５３を介して、ＬＡＮ５１に接続される可能性がある。ネットワーク環境をＷＡＮに用いる場合、コンピュータ２０は、一般に、モデム５４、またはインターネットなどのワイドエリアネットワーク５２に渡って通信を確立する別の手段を含む可能性がある。内部モデム、または外部モデムになり得るモデム５４は、シリアルポートインターフェース４６を介して、システムバス２３に接続される可能性がある。ネットワーク環境において、コンピュータ２０と関連のある上述したプログラムモジュール、またはその一部は、リモートメモリストレージデバイスに格納され得る。示されたネットワーク通信は、例であり、コンピュータ間の通信リンクを確立する別の手段が使用され得ることを十分に理解されるだろう。さらに、本発明の非常に多くの実施形態は、コンピュータシステムのために非常に適切であると想定されるが、本書において本開示をこのような実施形態に限定することを意図しない。
【００５０】
上述の詳細な説明は、例および／または操作図を介して、システムおよび／またはプロセスの様々な実施形態を説明した。このようなブロック図の範囲で、ならびに／または１つもしくは複数の機能および／もしくは操作を含む例の範囲で、このようなブロック図および／または例の範囲内での機能および／または操作のそれぞれは、個々におよび／またはまとめて、ハードウェア、ソフトウェア、ファームウェア、またはこれらのコンピュータ上での任意の組み合わせによって、実行できることを、当業者であれば理解できるだろう。
【００５１】
最後に、本開示は、様々な図に示されるように、望ましい態様に関連して記述したが、他の類似態様は使用され得、または、本開示の同一機能を処理するため、記述した態様に、これらから逸脱することなく修正および追加をし得ることを理解されたい。例えば、本開示の様々な態様において、様々な機構は、スタックによって表されたデバイスを物理的に制御するものでない、仮想マシンパーティションにおける、デバイスドライバスタックを構築するために開示された。しかしながら、これらの記述した態様と均等である他の機構もまた、本願明細書における手引きによって、予期され得る。したがって、本開示は、任意の単一の態様に制限されるべきでなく、むしろ添付した特許請求の範囲にしたがって、幅および範囲を解釈されるべきである。
【図１ａ】
0005599804.tif 000002
【図１ｂ】
0005599804.tif 000003
【図１ｃ】
0005599804.tif 000004
【図２】
0005599804.tif 000005
【図３】
0005599804.tif 000006
【図４】
0005599804.tif 000007
【図５】
0005599804.tif 000008
【図６】
0005599804.tif 000009
【図７】
0005599804.tif 000010
【図８】
0005599804.tif 000011
【図９】
0005599804.tif 000012
【図１０】
0005599804.tif 000013
【図１１】
0005599804.tif 000014
【図１２】
0005599804.tif 000015
【図１３】
0005599804.tif 000016
【図１４】
0005599804.tif 000017
【図１５】
0005599804.tif 000018