(57)【要約】      （修正有）【課題】コンピュータ記憶媒体上にエンコードされ、仮想マシンによるメモリ要求を処理するためのコンピュータプログラムを含む方法、システムおよび装置を提供する。【解決手段】プロセス２００は、装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップと、複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む。【選択図】図２
2018170033.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータで実行される方法であって、
装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップと、
前記複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、
各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む、方法。
【請求項２】
前記プロセッサが前記要求を処理している間に、各仮想マシンの実行を継続するステップを含む、請求項１に記載の方法。
【請求項３】
各キューが対応する各仮想マシンからの要求を記憶している通知を受信する前に、各キューの更新を受信するステップを含む、請求項１に記載の方法。
【請求項４】
前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップと、
各キューが対応する各仮想マシンからの要求を記憶している通知を受信したことに応答して、各キューを特定する前記アレイ内の各エントリを更新するステップとを含み、
各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップを含む、請求項１に記載の方法。
【請求項５】
前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップは、前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むビットベクトルを生成することを含み、
各キューを特定する前記アレイ内の各エントリを更新するステップは、前記各キューを特定する、前記ビットベクトルにおける各エントリを更新するステップを含み、
前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップは、前記ビットベクトルを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させることを含む、請求項４に記載の方法。
【請求項６】
前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップは、前記アレイを前記プロセッサに提供して、前記プロセッサに前記複数の仮想マシンに対応する複数のキューを処理させることを含む、請求項４に記載の方法。
【請求項７】
各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、前記プロセッサに割込みを送信することを含む、請求項１に記載の方法。
【請求項８】
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定す
る各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記複数のドアベルページのうち、各キューのヘッドノードを含む各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供することを含む、請求項１に記載の方法。
【請求項９】
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供することを含む、請求項１に記載の方法。
【請求項１０】
前記複数のドアベルページを生成するステップは、前記複数のドアベルページの各ドアベルページに各アドレスを割り当てることを含み、
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記各仮想マシンに対応する各アドレスを前記複数の仮想マシンの各々に提供することを含む、請求項１に記載の方法。
【請求項１１】
前記複数のドアベルページを生成するステップは、追跡構造を生成し、前記追跡構造からの各インデックスを前記複数のドアベルページの各々に割り当てることを含み、
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記各仮想マシンに対応する各インデックスのアドレスを前記複数の仮想マシンの各々に提供することを含む、請求項１に記載の方法。
【請求項１２】
前記複数のドアベルページを生成するステップは、
前記複数のドアベルページの各々について、ページを生成することと、
前記複数のドアベルページのうちの各ドアベルページが、対応する各ページに存在する非ゼロオフセットを前記複数のドアベルページの各々に割り当てることとを含み、
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、各ページに対応するアドレスおよび各仮想マシンに対応する非ゼロオフセットを前記複数の仮想マシンの各々に送信することを含む、請求項１に記載の方法。
【請求項１３】
第２複数のドアベルページを生成するステップと、
前記複数のドアベルページのうち、各仮想マシンからの第２要求を記憶する第２キューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンのうち少なくとも一部の各々に提供するステップとを含み、第１種類の前記要求は、第２種類の前記第２要求とは異なり、
前記複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップは、前記複数のドアベルページのうち１つの特定のドアベルページから、要求の種類を特定する通知を受信することを含み、
各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、
前記要求の種類が前記第１種類を含むことを判断することと、
前記第１種類の要求を処理するために割り当てられる特定のプロセッサを決定することと、
各仮想マシンに対応する各キューを前記特定のプロセッサに処理させることを含む、請求項１に記載の方法。
【請求項１４】
前記装置の第１プロセッサ上で前記複数の仮想マシンを実行するステップを含み、
各仮想マシンに対応する各キューを前記特定のプロセッサに処理させるステップは、異なる第２プロセッサ上で動作しているハイパーバイザにメッセージを提供して、各仮想マシンに対応する各キューを前記異なる第２プロセッサに処理させることを含む、請求項１３に記載の方法。
【請求項１５】
前記異なる第２プロセッサ上で動作しているハイパーバイザに前記メッセージを提供することは、前記装置とは異なる第２装置上の前記異なる第２プロセッサ上で動作している前記ハイパーバイザに前記メッセージを提供することを含む、請求項１４に記載の方法。
【請求項１６】
データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体であって、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
第１装置上でアプリケーションの実行を継続させながら、前記第１装置のメモリに記憶され、前記第１装置上で前記アプリケーションの実行に使用されるデータページを前記第１装置から第２装置にコピーすることによって、前記第１装置上で実行している前記アプリケーションを前記第１装置から前記第２装置に移行する移行プロセスを開始する動作と、
前記移行プロセス中に前記第１装置上で前記アプリケーションの実行に応答して、前記第１装置によって、前記データページのうち、少なくとも１つのデータページ内の１つ以上のバイトを更新する動作と、
前記第１装置上で前記アプリケーションの実行を停止する動作と、
前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させる動作とを含む動作を実行させる、コンピュータ可読記憶媒体。
【請求項１７】
前記動作は、前記アプリケーションのために、前記メモリ内の前記データページの場所を特定するためのマッピングを作成する動作を含み、
前記移行プロセス中に前記第１装置上で前記アプリケーションの実行に応答して、前記第１装置によって、前記データページのうち、少なくとも１つのデータページ内の１つ以上のバイトを更新する動作は、
前記少なくとも１つのデータページの各々をヘルパーに割り当てる動作と、
前記少なくとも１つのページの各々に対応して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新する動作と、
前記少なくとも１つのデータページ内の１つ以上のバイトを更新する動作とを含む、請求項１６に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記動作は、前記少なくとも１つのデータページ内の前記１つ以上のバイトの更新に応答して、前記第１装置によって、前記更新されたバイトを特定するデータを記憶する動作を含み、
前記更新されたバイトを前記第１装置から前記第２装置にコピーする動作は、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定する動作と、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することに応答して、前記更新されたバイトを前記第１装置から前記第２装置にコピーする動作とを含む、請求項１６に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記動作は、
前記第１装置によって、前記データページの前記少なくとも１つのデータページ内の前記１つ以上のバイトを受信する動作と、
前記第１装置によって、前記１つ以上のバイトが移行されている前記アプリケーションのデータページのものであることを判断する動作とを含み、
前記更新されたバイトを特定する前記データを記憶する動作は、前記１つ以上のバイトが移行される前記アプリケーションのデータページのものであることの判断に応答して、前記更新されたバイトを特定する前記データを記憶する動作を含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記動作は、
前記アプリケーションから、メモリにアクセスする要求を受信する動作と、
前記メモリにアクセスする要求が書き込み要求であることを判断する動作とを含み、
前記更新されたバイトを特定する前記データを記憶する動作は、前記メモリにアクセスする要求が書き込み要求であることの判断に応答して、前記更新されたバイトを特定する前記データを記憶する動作を含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２１】
前記動作は、アプリケーションのデータページを第１装置のメモリに格納することを含み、第１装置上でアプリケーションを実行する動作を含む、請求項１６に記載のコンピュータ可読記憶媒体。
【請求項２２】
前記第１装置上で前記アプリケーションの実行は、前記第１装置上で仮想マシンを実行することを含む、請求項２１に記載のコンピュータ可読記憶媒体。
【請求項２３】
前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させる動作は、前記更新されたバイトのみを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることを含む、請求項１６に記載のコンピュータ可読記憶媒体。
【請求項２４】
システムであって、
メモリと、
データ処理装置と、
前記データ処理装置とデータ通信し、前記データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備え、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
前記システム上で動作している複数の仮想マシンのために、前記メモリに複数のドアベルページを記憶する動作と、
前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供する動作と、
前記複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する動作と、
各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させる動作とを含む動作を実行させる、システム。
【請求項２５】
前記データ処理装置は、前記プロセッサを含む、請求項２４に記載のシステム。
【請求項２６】
前記プロセッサは、前記データ処理装置とは異なり、
前記動作は、前記データ処理装置上で前記複数の仮想マシンを実行する動作を含み、
各仮想マシンに対応する各キューを前記プロセッサに処理させる動作は、前記プロセッサ上で動作しているハイパーバイザにメッセージを提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させることを含む、請求項２４に記載のシステム。
【請求項２７】
前記システムは、
前記データ処理装置を含む第１装置と、
前記プロセッサを含む第２装置とを備え、
前記プロセッサ上で動作しているハイパーバイザにメッセージを提供することは、前記メッセージを前記第１装置と異なる前記第２装置に含まれた前記プロセッサ上で動作しているハイパーバイザに提供することを含む、請求項２６に記載のシステム。
【請求項２８】
システムであって、
第１装置を備え、
前記第１装置は、
メモリと、
データ処理装置と、
前記データ処理装置とデータ通信し、前記データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備え、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
第１装置上でアプリケーションの実行を継続させながら、前記第１装置のメモリに記憶され、前記第１装置上で前記アプリケーションの実行に使用されるデータページを前記第１装置から第２装置にコピーすることによって、前記第１装置上で実行している前記アプリケーションを前記第１装置から前記第２装置に移行する移行プロセスを開始する動作と、
前記移行プロセス中に前記第１装置上で前記アプリケーションの実行に応答して、前記データページのうち、少なくとも１つのデータページ内の１つ以上のバイトを更新する動作と、
前記第１装置上で前記アプリケーションの実行を停止する動作と、
前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させる動作とを含む動作を実行させる、システム。
【請求項２９】
前記第２装置を含む、請求項２８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、仮想マシンシステムによるメモリアクセスに関する。
【背景技術】
【０００２】
場合によって、仮想マシン、例えばクラウド仮想マシンは、仮想装置と通信を行うために、制約付きの双方向通信パスを必要とする。例えば、仮想マシンは、ヘッドポインタとテールポインタとを有する循環バッファを使用することができる。ハイパーバイザ、ハイパーバイザのエージェント、または信頼できる物理装置は、ヘッドポインタをポーリングすることによって、仮想マシンが新しい要求をキューに入れる時間を判断し、キューの内容を読み取ることができる。一部のシステムは、複数のプロセッサコアを用いて、キューをポーリングすることができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
いくつかの実現例において、ハイパーバイザ、例えばハイパーバイザヘルパーは、各キューに対応するドアベルページを用いて、複数の仮想マシンに対応する複数のキューを監視し、潜在的に各仮想マシンに対応する複数のキューを監視することができる。ハイパーバイザは、ドアベルページを用いて、プロセッサの作業を含むエントリをキューに入れたか否か、およびエントリをキューに入れた時間を判断する。ドアベルページが呼び出される時に、ハイパーバイザは、ビットベクトルを更新し、サービスを必要とするキューを示すために、更新後のビットベクトルをプロセッサに提供することができる。ドアベルページが呼び出される時に、ハイパーバイザは、例えば、ドアベルページまたはドアベルページからの値をメモリにコピーすることによって、ハイパーバイザまたはプロセッサによって使用される。ハイパーバイザは、プロセッサに割込みを送信することによって、作業を行っているプロセッサが他の作業を行える時間をそのプロセッサに通知することができる。このハイパーバイザヘルパーは、上述したステップを実行するように構成されたアプリケーションまたはハードウェアであってもよい。
【０００４】
いくつかの実現例において、ヘルパーアプリケーションまたは装置、例えばハイパーバイザまたはハイパーバイザヘルパーアプリケーションまたは装置は、仮想マシンなどのアプリケーションを第１装置から第２装置に移行する間に、メモリアクセスを制御することができる。ヘルパーは、アプリケーションによって使用されるメモリのページを監視し、移行プロセス中にページからのダーティバイトのみを第２装置に移行することができる。
【０００５】
一般的には、本明細書に記載された主題の１つの革新的な態様は、方法として具体化することができる。この方法は、装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップと、複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む。この態様の他の実施形態は、各々が方法の動作を実行するように構成されたコンピュータシステム、装置、および１つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含む。
【０００６】
一般的には、本明細書に記載された主題の１つの革新的な態様は、方法として具体化することができる。この方法は、第１装置上でアプリケーションの実行を継続させながら、第１装置のメモリに記憶され、第１装置上でアプリケーションの実行に使用されるデータページを第１装置から第２装置にコピーすることによって、第１装置上で実行しているアプリケーションを第１装置から第２装置に移行する移行プロセスを開始するステップと、移行プロセス中に第１装置上でアプリケーションの実行に応答して、第１装置によって、データページのうち、少なくとも１つのデータページ内の１つ以上のバイトを更新するステップと、第１装置上でアプリケーションの実行を停止するステップと、更新されたバイトを第１装置から第２装置にコピーして、第２装置にアプリケーションの実行を継続させるステップとを含む。この態様の他の実施形態は、各々が方法の動作を実行するように構成されたコンピュータシステム、装置、および１つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含む。
【０００７】
１つ以上のコンピュータのシステムは、動作するとシステムに特定の動作または行動を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせをシステム上にインストールすることによって、特定の動作または行動を行うように構成することができる。１つ以上のコンピュータプログラムは、データ処理装置によって実行されると、データ処理装置に動作を実行させる命令を含むことによって、特定の動作または行動を実行するように構成することができる。
【０００８】
必要に応じて、上記および他の実施形態の各々は、単独でまたは合わせて、以下の特徴のうち１つ以上を含むことができる。この方法は、プロセッサが要求を処理している間に、各仮想マシンの実行を継続するステップを含むことができる。この方法は、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する前に、各キューの更新を受信するステップを含むことができる。
【０００９】
いくつかの実現例において、この方法は、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ各ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信したことに応答して、各キューを特定するアレイ内の各エントリを更新するステップとを含む。プロセッサに各仮想マシンに対応する各キューを処理させるステップは、アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップを含むことができる。複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップは、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むビットベクトルを生成することを含むことができる。各キューを特定するアレイ内の各エントリを更新するステップは、各キューを特定する、ビットベクトルにおける各エントリを更新することを含むことができる。対応するキューを特定するアレイ内の各エントリを更新するステップは、対応するキューを特定するビットベクトルの各エントリを更新するステップを含むことができる。アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、ビットベクトルをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させることを含むことができる。アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、アレイをプロセッサに提供して、プロセッサに複数の仮想マシンに対応する複数のキューを処理させることを含むことができる。
【００１０】
いくつかの実現例において、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、プロセッサに割込みを送信することを含む。複数のドアベルページのうち
、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供することを含む。複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供することを含む。
【００１１】
いくつかの実現例において、複数のドアベルページを生成するステップは、複数のドアベルページの各ドアベルページに各アドレスを割り当てることを含み、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各仮想マシンに対応する各アドレスを複数の仮想マシンの各々に提供することを含む。複数のドアベルページを生成するステップは、追跡構造を生成し、追跡構造からの各インデックスを複数のドアベルページの各々に割り当てることを含み、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各仮想マシンに対応する各インデックスのアドレスを複数の仮想マシンの各々に提供することを含むことができる。複数のドアベルページを生成するステップは、複数のドアベルページの各々について、ページを生成するステップと、複数のドアベルページのうちの各ドアベルページが、対応する各ページに存在する非ゼロオフセットを複数のドアベルページの各々に割り当てるステップとを含むことができる。複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各ページに対応するアドレスおよび各仮想マシンに対応する非ゼロオフセットを複数の仮想マシンの各々に送信することを含むことができる。
【００１２】
いくつかの実現例において、この方法は、第２複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの第２要求を記憶する第２キューを特定する各ドアベルページに対するアクセスを複数の仮想マシンのうち少なくとも一部の各々に提供するステップとを含み、第１種類の要求と第２種類の第２要求とは異なる。複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップは、記複数のドアベルページのうち１つの特定のドアベルページから、要求の種類を特定する通知を受信することを含むことができる。各仮想マシンに対応する各キューをプロセッサに処理させるステップは、要求の種類が第１種類を含むことを判断することと、第１種類の要求を処理するために割り当てられた特定のプロセッサを判断することと、各仮想マシンに対応する各キューを特定のプロセッサに処理させることを含むことができる。この方法は、装置の第１プロセッサ上で複数の仮想マシンを実行するステップを含むことができる。各仮想マシンに対応する各キューを特定のプロセッサに処理させるステップは、異なる第２プロセッサ上で動作しているハイパーバイザにメッセージを提供して、異なる第２プロセッサに各仮想マシンに対応する各キューを処理させることを含むことができる。異なる第２プロセッサ上で動作しているハイパーバイザにメッセージを提供することは、装置とは異なる第２装置上の異なる第２プロセッサ上で動作しているハイパーバイザにメッセージを提供することを含むことができる。
【００１３】
いくつかの実現例において、この方法は、アプリケーションのために、メモリ内のデータページの場所を特定するためのマッピングを作成するステップを含むことができる。移行プロセス中に第１装置上でアプリケーションの実行に応答して、第１装置によって、データページのうち、少なくとも１つのデータページ内の１つ以上のバイトを更新するステ
ップは、少なくとも１つのデータページの各々をヘルパーに割り当てるステップと、少なくとも１つのページの各々に対応して、アプリケーションがヘルパー内の対応ページを特定するためのマッピングを更新するステップと、少なくとも１つのデータページ内の１つ以上のバイトを更新するステップとを含む。第１装置上でアプリケーションの実行は、第１装置上で仮想マシンを実行することを含むことができる。
【００１４】
いくつかの実現例において、この方法は、動作は、少なくとも１つのデータページ内の１つ以上のバイトの更新に応答して、第１装置によって、更新されたバイトを特定するデータを記憶するステップを含む。更新されたバイトのみを第１装置から第２装置にコピーするステップは、更新されたバイトを特定するデータを用いて更新されたバイトを特定することと、更新されたバイトを特定するデータを用いて更新されたバイトを特定することに応答して、更新されたバイトのみを第１装置から第２装置にコピーすることとを含むことができる。この方法は、第１装置によって、データページの少なくとも１つのデータページ内の１つ以上のバイトを受信するステップと、第１装置によって、１つ以上のバイトが移行されているアプリケーションのデータページのものであることを判断するステップとを含むことができる。更新されたバイトを特定するデータを記憶するステップは、１つ以上のバイトが移行されるアプリケーションのデータページのものであることの判断に応答して、更新されたバイトを特定するデータを記憶することを含むことができる。この方法は、アプリケーションから、メモリにアクセスする要求を受信するステップと、メモリにアクセスする要求が書き込み要求であることを判断するステップとを含むことができる。更新されたバイトを特定するデータを記憶するステップは、メモリにアクセスする要求が書き込み要求であることの判断に応答して、更新されたバイトを特定するデータを記憶することを含むことができる。この方法は、アプリケーションのデータページを第１装置のメモリに格納することを含み、第１装置上でアプリケーションを実行するステップを含むことができる。
【００１５】
本明細書に記載された主題は、特定の実施形態に実現することができ、以下の利点のうち１つ以上をもたらすことができる。いくつかの実現例において、ドアベルページを使用しないシステムおよび方法に比べて、以下に説明するシステムおよび方法は、ハイパーバイザまたはヘルパーアプリケーションまたは装置による加速によって、より迅速に例えば１マイクロ秒以内に、より少ないリソースで、またはその両方で、仮想マシンがデータ要求をキューに入れる時間を判断することができる。いくつかの実現例において、以下に説明するシステムおよび方法は、ドアベルページが呼び出されて且つ対応するキュー内の要求が例えば非同期に処理されている時に、仮想マシンを継続的に実行することができる。
【００１６】
いくつかの実現例において、以下に説明するシステムおよび方法は、ビットベクトルをプロセッサに提供することによって、ハイパーバイザ、プロセッサ、またはその両方がサービスを必要とする仮想マシンを迅速に判断することができる。例えば、システムは、ドアベルポーリングエージェントとは異なり、ドアベルページが仮想マシンによって呼び出された時に、より迅速に知ることができ、数千のインスタンス化されたドアベルページを含む時にも応答することができる。いくつかの実現例において、ドアベルページが周辺機器相互接続エクスプレス（ＰＣＩｅ）スペースに存在する場合、装置は、例えば、仮想マシンがソフトウェアによって純粋にエミュレートされた装置のドアベルにアクセスするときに必要とされる、少なくとも３０００個の処理サイクルまたは１マイクロ秒を消耗する従来のトラップエミュレートトラップを回避する。いくつかの実現例において、システムは、第１プロセッサ上で動作しており、サービスを必要とするキューを有する仮想マシンに関する通知を、第２プロセッサに提供することによって、第１プロセッサ上で動作している間にキューの処理により仮想マシンからサイクルの盗用を防止し、第１プロセッサのキャッシュに対する汚染を防止し、または第２プロセッサによるキューの処理、例えば、複数の仮想マシンまたはこれらの２つ以上の仮想マシンの組み合わせからの同一種類また
は類似種類の要求を含むキューの処理を可能にする。
【００１７】
いくつかの実現例において、以下に説明するシステムおよび方法は、メモリページを移行する他のシステムおよび方法に比べて、例えばクラウド環境においてアプリケーションを装置間に移行する時に、ページよりも小さいダーティバイトまたはバイトブロックのみをコピーすることによって、アプリケーションのブラックアウト時間を短縮することができる。
【００１８】
本明細書に記載された主題の１つ以上の実施形態の詳細は、添付の図面および以下の説明に記載されている。主題の他の特徴、態様および利点は、以下の説明、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１９】
【図１】装置がドアベルページを用いて、仮想マシンのキューがサービスを必要とする時間を判断するための例示的な環境を示すブロック図である。
【図２】プロセッサに仮想マシンのキューを処理させるプロセスを示すフローチャートである。
【図３】特定のプロセッサにキューを処理させるプロセスを示すフローチャートである。
【図４】装置Ａ  ４０２ａがアプリケーションを別の装置Ｂに移行させるための例示的な環境を示すブロック図である。
【図５】アプリケーションを第１装置から第２装置に移行させるプロセスを示すフローチャートである。
【図６】本明細書に記載のコンピュータで実行される方法に関連して使用することができるコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００２０】
詳細な説明
概要
様々な図面において、同様の参照符号は、同様の要素を示す。
【００２１】
装置上で動作しているアプリケーション、例えばハイパーバイザまたはハイパーバイザヘルパーは、多くのドアベルページ、例えば、１０２４個以上のドアベルページを作成することができる。ドアベルページは、周辺機器相互接続エクスプレス（ＰＣＩｅ）ベースアドレスレジスタ（ＢＡＲ）スペース内の入出力（ＩＯ）またはメモリマップＩＯ（ＭＭＩＯ）のいずれかに存在してもよい。アプリケーションは、ドアベルページを用いて、装置上で動作している仮想マシンの１つ以上のキューがサービスを必要とする時間を判断する。仮想マシンがドアベルページを書き込む時に、アプリケーションは、例えば、割り当てられたドアベルページを設定することによって、保留中のドアベルページリストおよびドアベルページに書き込まれた値をハイパーバイザに通知することができる。通知を受信すると、ハイパーバイザは、保留中のドアベルページリストまたは対応するキューをプロセッサに提供して、キューに格納されたデータ要求をプロセッサに処理させることができる。いくつかの例において、アプリケーションは、装置に設けられたコンポーネント上で動作することができ、ドアベルページに使用されたメモリを含むことができる。
【００２２】
各ドアベルページは、構成可能なセマンティクスを含むことができる。例えば、ＮＩＣ−１００型ドアベルページは、３２ビットのリングバッファインデックス、例えば、メモリに格納され、ハイパーバイザに提供されるキューを含むことができる。いくつかの例において、ＮＶＭｅキューは、対応するキューを処理しなければならず、対応するキュー、例えばリングバッファインデックスが別個のメモリに存在することを示す指示を含むこと
ができる。いくつかの例において、virtio-netキューは、ドアベルページが呼び出された時に、特定のキュー番号と共に書き込まれるＩＯスペースレジスタを含むことができる。アプリケーション、例えばハイパーバイザヘルパーは、各ドアベルページのセマンティックをハイパーバイザに提供するようにプログラムされてもよい。
【００２３】
いくつかの例において、アプリケーションは、呼び出されたドアベルページを用いて、サービスを必要とする全てのキューを示すビットベクトル集合を生成することができる。アプリケーションがビットベクトルをハイパーバイザに提供することによって、ハイパーバイザまたはプロセッサは、キューに入れられた全てのドアベルページの値を走査する必要なく、サービスを必要とする全てのキューを迅速に特定することができる。
【００２４】
いくつかの実現例において、一部のドアベルページは、アプリケーションまたはハイパーバイザが例えば割込みコントローラと同様に通知遅延を適用することを可能にする設定を含むことができる。例えば、ハイパーバイザが特定のドアベルページが呼び出されたという通知を受け取った後、特定のドアベルページは、対応するキュー内の追加の要求をアプリケーションに知らせないことがある。換言すれば、アプリケーションまたはハイパーバイザが特定のドアベルページを再有効化するまで、すなわち、対応するキューを処理した後、特定のドアベルページは、セルフマスクする。いくつかの例において、特定のドアベルページは、例えば、対応するキューがサービスを必要とする通知をハイパーバイザに提供する頻度を指定する頻度制限設定を含むことができる。
【００２５】
いくつかの実現例において、各ドアベルページは、個別の４ＫＢページを占めてもよく、特定のキュー構造がゼロオフセットをサポートしない場合、必要に応じて非ゼロオフセットをもってそのページ内に存在してもよい。アプリケーションは、例えば、標準的なｘ８６  ＭＭＵおよびＥＰＴページングを用いて、４ＫＢページという粒度で、キューから特定された仮想マシンのメモリアクセスを個々のドアベルページにマッピングすることによって、各仮想マシンが自身に割り当てられたドアベルページのみにアクセスするように各仮想マシンを制限することができる。
【００２６】
いくつかの実現例において、ヘルパーアプリケーションは、別のアプリケーションをライブ移行している間に、トラフィックをリダイレクトすることができる。例えば、ヘルパーアプリケーションは、ページミラーリングを行うことによって、バイトまたはマルチバイトレベルで、他のアプリケーションを第１装置から第２装置により細かく移行することができる。例えば、ページを第２装置に移行した後、ページ内の特定のバイトが更新された場合、ヘルパーアプリケーションは、特定のバイトを含む２つのバイトデータブロックを第２装置に移行する。これによって、ページの全体を第２装置に移行する必要はない。
【００２７】
いくつかの実現例において、ハイパーバイザヘルパーまたはヘルパーアプリケーションは、装置上で動作しているアプリケーションである。いくつかの実現例において、ハイパーバイザヘルパーまたはヘルパーアプリケーションは、装置に設けられたハードウェア要素、例えば装置に一体化されたまたは接続されたハードウェア要素である。
【００２８】
キューの処理
図１は、装置１０２がドアベルページを用いて仮想マシンのキューがサービスを必要する時間を判断するための例示的な環境１００を示すブロック図である。装置１０２は、１つ以上のプロセッサＡ  １０４ａおよびプロセッサＢ  １０４ｂを含む。一方のプロセッサＡ  １０４ａは、ハイパーバイザ１０６を実行し、プロセッサＡ  １０４ａおよびプロセッサＢ  １０４ｂの一方または両方は、１つ以上の仮想マシン１０８ａ〜１０８ｃを実行する。
【００２９】
仮想マシン１０８ａ〜１０８ｃは、データの読み取り要求または書き込み要求のいずれかを発行する場合、対応するキュー１１０にエントリを入れる。例えば、仮想マシンＡ  １０８ａは、読み取り要求を第１キューＡ１に入れることができ、書き込み要求を第２キューＡ２に入れることができる。いくつかの例において、仮想マシンは、全ての要求を単一のキューに、例えば仮想マシンＢ  １０８ｂに対応するキューＢ１に入れることができる。キュー１１０の各々は、リングバッファまたは任意の他の適切な種類のキューであってもよい。
【００３０】
データ要求をキュー１１０に入れた後、仮想マシン１０８ａ〜１０８ｃは、例えば対応するドアベルページ１１２を呼び出すための通知値を対応するドアベルページ１１２に書き込む。例えば、仮想マシンＡ１０８ａは、キューＡ１に読み取り要求を入れると、キューＡ１に特有なドアベルページＡ１に通知値を書き込むことができる。いくつかの例において、１つ以上の仮想マシン１０８ａ〜１０８ｃは、データ要求をキュー１１０に入れる前に、対応するドアベルページ１１２に通知値を書き込むことができる。
【００３１】
装置１０２は、ドアベルページ１１２に通知値の書き込みに応答して、対応するキューがサービスを必要することをプロセッサＡ  １０４ａ〜プロセッサＤ  １０４ｄに通知する。例えば、装置１０２は、対応するビットベクトルＡ  １１４ａ〜ビットベクトルＤ  １１４ｂを更新し、更新されたビットベクトルをプロセッサ１０４ａ〜１０４ｄのうち１つのプロセッサに提供することができる。ビットベクトルＡ  １１４ａは、キューＡ１、Ｂ１、およびＣ１に対応する通知ビット値を含むことができる。装置１０２は、ドアベルページＡ１、Ｂ１またはＣ１のいずれかに対応する通知を受信すると、ビットベクトルＡ
１１４ａを更新して、対応するキューがサービスを必要することを示す。例えば、ビットベクトルＡ  １１４ａの第１位置の値は、キューＡ１がサービスを必要とするか否かを示し、ビットベクトルＡ  １１４ａの第２位置の値は、キューＢ１がサービスを必要とするか否かを示し、第３の位置ビットベクトルＡの１１４ａは、キューＣ１がサービスを必要とするか否かを示す。同様に、ビットベクトルＢ  １１４ｂの各位置の値は、キューＡ２およびＣ２に対応する。
【００３２】
いくつかの実現例において、ビットベクトルＡ  １１４ａの値「１」は、対応するキューがサービスを必要とすることを示し、値「０」は、対応するキューがサービスを必要としないことを示す。他の実現例において、値「０」は、対応するキューがサービスを必要とすることを示し、値「１」は、対応するキューがサービスを必要としないことを示す。
【００３３】
いくつかの実現例において、装置１０２は、サービスを必要とするキューを有する仮想マシンを実行するプロセッサコアとは異なるプロセッサコア上で動作しているハイパーバイザに割込みを送信する。例えば、プロセッサＡ  １０４ａが仮想マシンＢ  １０８ｂを実行し、キューＢ１がサービスを必要とする場合、装置Ｂ  １０２は、キューＢ１がサービスを必要とすることをプロセッサＢ  １０４ｂまたはプロセッサＤ  １０４ｄに通知することができる。装置１０２は、異なるプロセッサコア上で動作しているハイパーバイザまたは別のアプリケーションに割込みを送信することによって、キューＢ１がサービスを必要とすることをハイパーバイザに通知することができる。
【００３４】
いくつかの実現例において、装置１０２は、装置１０２に通知したドアベルページからの通知値をバッファすることができる。例えば、装置１０２は、ビットベクトルをメモリに格納し、オンデマンドまたはランダムで、ビットベクトルからの値、例えばビットベクトルのコピーを、ビットベクトルによって特定されたキューを処理するためのプロセッサにまたはこのビットベクトルを使用しているアプリケーションに提供することができる。いくつかの例において、ハイパーバイザヘルパーがビットベクトルを管理しており、ハイパーバイザ１０６が、既に処理されており、サービスを必要としないキューに対応するビ
ットベクトルの１つ以上のビットを消去したい場合、ハイパーバイザ１０６は、消去されるビットを特定するメッセージをハイパーバイザヘルパーに送信することができる。したがって、ハイパーバイザヘルパーは、特定されたビットを消去して、このビットベクトルを最新ものに、すなわち、ビットベクトルのマスタコピーを最新ものに維持することができる。
【００３５】
装置１０２は、装置に通知したドアベルページ１１２に対応するビットベクトル１１４ａ〜ｂを対応するキューを処理するプロセッサ１０４ａ〜ｄに提供することができる。例えば、装置１０２がキューＢ１を処理する要求に応答してビットベクトルＡ  １１４ａを更新した場合、装置１０２は、このビットベクトルＡ  １１４ａをプロセッサＢ  １０４ｂに提供する。プロセッサＢ  １０４ｂは、ビットベクトルＡ  １１４ａを用いて、例えばビットベクトル１１４ａの各位置に対応する値を用いて、キューＢ１がサービスを必要とすること、潜在的にキューＡ１、キューＣ１、またはその両方がサービスを必要とすることを判断する。その後、プロセッサＢ  １０４ｂは、ビットベクトルＡ  １１４ａに特定された、サービスを必要とするキューを処理することができる。例えば、プロセッサＢ
１０４ｂは、キューＡ１内の第１エントリを利用して、第１エントリによって要求されたデータを決定し、仮想マシンＡ１０８ａに使用される要求データを取り出す。
【００３６】
各々のドアベルページ１１２は、１つ以上の設定を含むことができる。例えば、ドアベルページ１１２は、各ドアベルページを呼び出す時に更新すべきビットベクトル内の所望のビット位置を示すことができる。
【００３７】
いくつかの例において、ドアベルページ１１２は、通知の統合を実行すべきか否かを示す通知統合設定を含むことができる。例えば、通知統合設定は、イベントが発生したことを示すブール値であってもよい。ブール値が消去されるまで、装置１０２は、各々のドアベルページに対する更なる通知の発行を禁止すべきである。例えば、装置１０２は、例えば、ブール値を「真」に設定することによって、対応するキュー内の全てのエントリが処理されるまで更なる通知の発行を禁止することができ、装置１０２は、ブール値を「偽」に設定することによって、対応するキューに追加されたエントリを通知することができる。
【００３８】
装置１０２が複数のビットベクトルを含む実現例において、各ドアベルページ１１２は、ドアベルページに対応する特定のビットベクトルを示すことができる。例えば、装置１０２は、仮想マシン１０８ａ〜１０８ｃからの要求を処理するための各プロセッサまたは各プロセッサコアに対応する１つのビットベクトルを含むことができ、各ドアベルページは、ドアベルページを呼び出す時に更新すべきビットベクトルを示すことができる。これによって、サービスを必要とするキューは、対応するプロセッサまたはプロセッサコアに通知される。プロセッサおよびプロセッサコアの一部、例えばプロセッサＡ１０４ａおよびプロセッサＢ  １０４ｂは、装置１０２に含まれてもよい。プロセッサおよびプロセッサコアの一部、例えばプロセッサＣ１０４ｃおよびプロセッサＤ  １０４ｄは、１つ以上の他の装置に含まれてもよい。要求を処理するプロセッサまたはプロセッサコアは、要求のデータを格納するメモリを備える特定の装置に含まれてもよい。
【００３９】
いくつかの例において、装置１０２は、第１ドアベルページＡ１を介して、仮想マシンＡ  １０８ａの第１キューＡ１がサービスを必要とする通知を受信し、ビットベクトルＡ
１１４ａ、例えばビットベクトルのコピーをプロセッサＢ  １０４ｂに提供する。装置１０２は、第２ドアベルページＡ２を介して、仮想マシンＡ  １０８ａの第２キューＡ２がサービスを必要とする通知を受信すると、通知に応じてビットベクトルを更新した後、ビットベクトルＢ  １１４ｂのコピーを、例えば別の装置に設けられたプロセッサＣ  １０４ｃに提供する。
【００４０】
いくつかの実現例において、各ドアベルページ１１２は、対応するキュー１１０がサービスを必要とし、対応するドアベルページが呼び出された場合、装置１０２が行う行動を示す書き込み設定時挙動を含むことができる。例えば、装置１０２は、ドアベルページに対応する設定を用いて、対応するキュー内の新規エントリの数、対応するキュー内のエントリの総数、対応するキュー内の非新規エントリ（キューを更新する前、キューに存在したもの）の数、またはこれらの２つ以上の組み合わせを示す値を更新すべきか否かを判断することができる。いくつかの例において、ドアベルページは、対応するキュー内の最後のエントリのインデックスを含むことができる。例えば、ドアベルページは、対応するキューがエントリを有することを示す値を含むことができ、装置１０２は、値を監視して値の変化時間を判断するが、ドアベルページが呼び出された場合、特定の値が、対応するキューがサービスを必要とすることを判断するものであるか否かを監視しない。
【００４１】
いくつかの実現例において、ハイパーバイザ１０６、ハイパーバイザヘルパー１１８アプリケーションまたは装置、または別のアプリケーションまたは装置は、ドアベルページ１１２に通知値の書き込みに応答してもよく、または上述した他のステップの一部を実行してもよい。例えば、ハイパーバイザヘルパー１１８は、サービスを必要とするキューを有する仮想マシンを実行するプロセッサコアとは異なるプロセッサコア上で動作しているハイパーバイザに割込みを送信することができる。ハイパーバイザ１０６、ハイパーバイザヘルパー１１８、または他のアプリケーションまたは装置は、ドアベルページ１１２を格納するメモリを含んでもよい。
【００４２】
装置１０２は、ネットワーク１１６を介してデータを送受信することができるパーソナルコンピュータ、モバイル通信装置、サーバおよび他の装置を含むことができる。ネットワーク１１６、例えば、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネットまたはそれらの組み合わせは、装置１０２と、プロセッサＣ  １０４ｃおよびプロセッサＤ  １０４ｄを含む１つ以上の他の装置とを接続する。
【００４３】
キュー処理プロセスのフローチャートの一例
図２は、プロセッサに仮想マシンのキューを処理させるためのプロセス２００を示すフローチャートである。プロセス２００は、環境１００内の装置１０２によって使用され得る。装置１０２は、例えば、ハイパーバイザ、ハイパーバイザヘルパー、別のアプリケーション、別の装置、またはこれらの２つ以上の組み合わせを実行することができる。いくつかの例において、これらのアプリケーションのうち１つは、プロセス２００の特定のステップを行うことができ、装置または別のアプリケーションは、プロセス２００の他の特定のステップを行うことができる。
【００４４】
第１装置は、複数の仮想マシンを実行する（２０２）。例えば、第１装置は、複数の仮想マシンを実行するサーバまたは別の装置であってもよい。第１装置は、ハイパーバイザアプリケーションを用いて、複数の仮想マシンのうち１つ以上を実行することができる。
【００４５】
第１装置は、複数のドアベルページを生成する（２０４）。第１装置は、各々の仮想マシンに対応するドアベルページまたは仮想マシンの各キューに対応するドアベルページを生成することができる。いくつかの例において、第１装置は、仮想マシンによって使用されるキューの数より多くのドアベルページを生成し、新しい仮想マシンの実行または新しいキューの要求に応じて、これらのドアベルページを仮想マシンのキューに動的に関連付ける。例えば、ハイパーバイザヘルパーは、複数のドアベルページを作成することができ、または複数のドアベルページを作成するようにハイパーバイザに要請することができる。
【００４６】
第１装置は、ドアベルページを生成する時に、アドレス、例えばドアベルページのアドレスを各ドアベルページに割り当てることができる。いくつかの実現例において、第１装置は、全てのドアベルページに追跡構造を生成し、追跡構造からの各インデックスをドアベルページの各々に割り当てることができる。いくつかの例において、ハイパーバイザは、アドレスを各ドアベルページに割り当て、そのアドレスをハイパーバイザヘルパーに提供することができる。ハイパーバイザヘルパーは、例えば、ハイパーバイザヘルパー内のトラッキング構造を用いて、ドアベルページを監視することができる。
【００４７】
第１装置は、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成する（２０６）。例えば、第１装置、例えばハイパーバイザヘルパーは、複数のビットベクトルを生成する。各ビットベクトルは、キューを処理する各プロセッサに使用される。各ドアベルページは、特定のビットベクトル内の１つのエントリのみに対応し、他のビットベクトル内のエントリに対応しない。ビットベクトルを使用するプロセッサは、その１つのエントリを用いて、対応するキューを判断し、対応するキューを処理することができる。
【００４８】
第１装置は、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供する（２０８）。例えば、第１装置は、各ドアベルページのアドレス、例えば各ドアベルページに対応するインデックスのアドレスを各仮想マシンに提供する。いくつかの例において、ドアベルページは、対応するキューのヘッドノードであってもよく、第１装置は、ヘッドノードのアドレスを各仮想マシンに提供してもよい。いくつかの例において、例えばキューがリングバッファである場合、ドアベルページは、各仮想マシンのために、サービス要求を入れるリングバッファを特定することができる。ハイパーバイザアプリケーションは、ハイパーバイザヘルパーから、各ドアベルページに対応するアドレスを受信し、このアドレスを対応する仮想マシンに提供することができる。
【００４９】
第１装置は、各キューの更新を受信する（２１０）。例えば、各仮想マシンは、サービス、例えばデータを要請する要求を対応するキューに入れる。
【００５０】
第１装置は、複数のドアベルページのうち１つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する（２１２）。例えば、各仮想マシンは、例えば、ドアベルページの書き込み設定時挙動を用いて、ドアベルページの値を更新する。これに応答して、ドアベルページは、値が変更されたことを第１装置、例えばハイパーバイザヘルパーに通知する。
【００５１】
必要に応じて、第１装置は、各キューを特定するアレイ内の各エントリを更新する（２１４）。例えば、ハイパーバイザヘルパーは、例えば、ビットベクトル内の各エントリを、対応するキューがサービスを必要とすることを示す特定の値に更新する。各キューがサービスを必要としないことを「０」で示し、各キューがサービスを必要とすることを「１」で示す場合、特定の値は、「１」であってもよい。いくつかの例において、特定の値は、「０」または任意の他の適切な値であってもよい。いくつかの実現例において、ハイパーバイザアプリケーションは、各エントリを更新する。
【００５２】
第１装置は、各仮想マシンに対応する各キューをプロセッサに処理させる（２１６）。いくつかの例において、第１装置、例えばハイパーバイザヘルパーは、各キューの識別子をプロセッサに提供する。例えば、第１装置、すなわち、ハイパーバイザまたはハイパーバイザヘルパーは、ビットベクトルをプロセッサに提供する。ビットベクトルの受信に応答して、プロセッサは、例えば、ビットベクトルを用いて、ビットベクトルに関連付けら
れたキューのうち、サービスを必要とするキューを判断し、これらのキューを処理する。いくつかの例において、第１装置は、例えば、プロセッサがキューを処理していない時に、プロセッサに割込みを提供することによって、プロセッサに他の作業の実行を停止させる。いくつかの実現例において、第２装置は、プロセッサを含むことができる。
【００５３】
第１装置は、プロセッサが要求を処理している間に、各仮想マシンの実行を継続させる（２１８）。例えば、第１装置は、各仮想マシンを実行させ、要求を並列に処理するシングルプロセッサを含むことができる。いくつかの例において、第１プロセッサは、各仮想マシンを実行すると共に、第２装置または第２プロセッサは、要求を処理する。
【００５４】
上述したプロセス２００におけるステップの順序は、例示に過ぎず、プロセッサに、異なる順序で仮想マシンのキューを処理させることができる。例えば、第１装置は、先ずドアベルページを生成し、その後、仮想マシンを実行することができる。
【００５５】
いくつかの実現例において、プロセス２００は、より多くのステップまたはより少ないステップを含むことができ、一部のステップは、複数のステップに分割することができる。例えば、第１装置は、アレイを生成しなくてもよい。いくつかの例において、第１装置は、ステップ２０２〜２０６を行わず、ステップ２０８〜２１８を行うことができる。
【００５６】
図３は、特定のプロセッサにキューを処理させるためのプロセス３００を示すフローチャートである。例えば、プロセス３００は、環境１００内の装置１０２によって使用され得る。装置１０２は、プロセス３００の１つ以上のステップを行うためのハイパーバイザまたはハイパーバイザヘルパーアプリケーション、プロセス３００の１つ以上のステップを行うためのハイパーバイザヘルパー装置、またはこれらの２つ以上の組み合わせを実行することができる。
【００５７】
ハイパーバイザは、複数のドアベルページのうち１つの特定のドアベルページから、要求の種類を特定する通知を受信する（３０２）。例えば、各ドアベルページは、要求の種類を特定する構成設定を含むことができる。要求の種類は、読み取り要求、書き込み要求、特定のメモリからの読み取り要求、特定のメモリへの書き込み要求、または別の種類の要求であってもよい。いくつかの実現例において、ハイパーバイザは、書き込み設定時挙動を用いて、要求の種類を判断することができる。
【００５８】
ハイパーバイザは、要求の種類が第１種類を含むことを判断する（３０４）。例えば、装置上で動作しているハイパーバイザまたは別のアプリケーションは、複数の異なる種類の要求から、要求の特定の種類、例えば第１種類を判断する。
【００５９】
ハイパーバイザは、第１種類の要求を処理するために割り当てられる特定のプロセッサを決定する（３０６）。例えば、ハイパーバイザは、第１プロセッサ上で動作することができ、同一装置または別の装置上の第２プロセッサが第１種類の要求を処理すべきであることを判断することができる。
【００６０】
ハイパーバイザは、各仮想マシンに対応する各キューを特定のプロセッサに処理させる（３０８）。例えば、ハイパーバイザは、サービスを必要とするキューを示すメッセージを特定のプロセッサに提供する。いくつかの例において、ハイパーバイザは、サービスを必要とするキューを示すビットベクトルを特定のプロセッサに提供することができる。
【００６１】
アプリケーションの移行
いくつかの実現例において、アプリケーション、例えば、ハイパーバイザまたはヘルパーアプリケーションまたは装置は、実行中の仮想マシンを１つの装置から別の装置に移行
することを容易にすることができる。例えば、アプリケーションは、第１装置上で仮想マシンを実行している間に、サービスを必要とする仮想マシンのキューをプロセッサに通知し、仮想マシンを第１装置から第２装置に移行する時のダーティバイトを監視する。仮想マシンのキューおよびキューの処理プロセスフローは、前の段落に説明されている。以下で説明するように、これらの構造およびプロセスフローに基づいて、アプリケーションを移行するためのヘルパー４０６を実装することができる。いくつかの例において、実行中の仮想マシンを第１装置から第２装置に移行する時に、アプリケーションは、例えば、仮想マシンに対応するキュー内のエントリに基づいて、メモリに書き込むべきバイトをプロセッサに通知し、書き込まれたバイトを示すデータを記憶することができる。これによって、以前にこれらのバイトを含むページを更新せず第２装置に移行した場合、これらのバイトを含むページではなく、これらのバイトが第２装置に移行される。いくつかの実現例において、異なるアプリケーションは、実行中の仮想マシンを１つの装置から別の装置に移行することを容易にし、サービスを必要とする仮想マシンのキューをプロセッサに通知することができる。
【００６２】
図４は、装置Ａ  ４０２ａがアプリケーション４０４を別の装置Ｂ  ４０２ｂに移行するための例示的な環境４００を示すブロック図である。例えば、装置Ａ  ４０２ａは、仮想マシンなどのアプリケーション４０４を実行することができる。装置Ａ  ４０２ａは、時間ＴＡで、アプリケーション４０４を装置Ｂ  ４０２ｂに移行することを決定することができる。装置Ａ  ４０２ａは、別の装置から、アプリケーション４０４を移行すべきであることを示すメッセージを受信することに応答して、決定を行うことができる。装置Ａ
４０２ａは、装置Ａ  ４０２ａ上で動作しているアプリケーション４０４または別のアプリケーションの性能に応じて、決定を行うことができる。例えば、アプリケーション４０４または他のアプリケーションが最小性能要件を下回って実行している場合、装置Ａ  ４０２ａは、アプリケーション４０４を装置Ｂ  ４０２ｂに移行することを決定することができる。
【００６３】
装置Ａ  ４０２ａは、アプリケーション４０４の実行に必要なデータを装置Ｂ  ４０２ｂにコピーする。例えば、装置Ａ  ４０２ａは、メモリＡ  ４０８ａにアクセスし、アプリケーション４０４に使用される１つ以上のページＡ  ４１０ａおよびＢ  ４１０ｂのデータをアプリケーションＡ  ４０８ａから装置Ｂ  ４０２ｂにコピーすることができる。装置Ｂ  ４０２ｂは、ページＡ  ４１０ａおよびＢ  ４１０ｂのデータを装置Ｂ  ４０２ｂに設けられたメモリＢ  ４０８ｂに格納することができる。
【００６４】
装置Ａ  ４０２ａは、時間ＴＢで、例えばページマッピングにおいて、メモリＡ  ４０８ａ内のページをヘルパー４０６にマッピングする。ヘルパー４０６は、アプリケーションまたは装置、例えば装置Ａ  ４０２ａに設けられた要素であってもよい。まず、例えばアプリケーション４０４の実行中に、装置Ａ  ４０２ａは、ページＡ  ４１０ａおよびＢ
４１０ｂをアプリケーション４０４にマッピングする。ページＡ  ４１０ａおよびＢ  ４１０ｂを装置Ｂ  ４０２ｂにコピーするときに、またはページＡ  ４１０ａおよびＢ  ４１０ｂを装置Ｂ  ４０２ｂにコピーする直前に、装置４０２ａは、ページＡ  ４１０ａおよびＢ  ４１０ｂをヘルパー４０６にマッピングするようにページマッピングを変更する。これによって、移行プロセス中に、ヘルパー４０６は、ページＡ  ４１０ａおよびＢ
４１０ｂ内の粒状ダーティを監視することができる。いくつかの例において、ヘルパー４０６は、ページマッピングを更新するように、ハイパーバイザに通知する。いくつかの実現例において、ヘルパー４０６は、ハイパーバイザヘルパーまたはハイパーバイザである。
【００６５】
装置Ａ  ４０２ａは、アプリケーション４０４の実行に必要なデータを装置Ｂ  ４０２ｂにコピーすると共に、アプリケーション４０４を実行し続ける。アプリケーション４０
４の実行中に、アプリケーション４０４は、時間ＴＣで、ページＡ  ４１０ａに書き込まれるバイト数を決定する。
【００６６】
装置４０２ａは、時間ＴＤで、アプリケーションに割り当てられるページを示すメモリマッピングを用いて、ページＡ  ４１０ａをヘルパー４０６にマッピングすることを決定する。例えば、ヘルパー４０６は、ページＡ  ４１０ａを編集することができるが、アプリケーション４０４は、ページＡ  ４１０ａを編集することができない。装置４０２ａは、アプリケーション４０４からバイトを受信し、ページＡ  ４１０ａに書き込まれるためのバイトをヘルパー４０６に提供する。
【００６７】
ヘルパー４０６は、時間ＴＥで、これらのバイトをメモリＡ  ４０８ａ内のページＡ  ４１０ａに書き込み、時間ＴＦで、ページページＡ  ４１０ａに書き込まれたバイトを示すダーティマッピング４１２、すなわち、ページのメタデータを更新する。ＴＥおよびＴＦのタイミングは、任意の順序であってもよい。例えば、ヘルパー４０６は、ダーティマッピング４１２を更新した後、バイトをページＡ  ４１０ａに書き込むことができ、または両方を同時に行うことができ、またはバイトを書き込んだ後、ダーティマッピング４１２を更新することができる。
【００６８】
いくつかの実現例において、ヘルパー４０６は、バイトを書き込むために、新しいページ、例えばメモリＡ  ４０８ａ内の新しいページを割り当てる。例えば、ヘルパー４０６は、バッファプールから新しいページを割り当て、この新しいページにバイトを書き込み、記憶することができる。次に、ヘルパー４０６は、ページマッピングを更新して、ページＡ  ４１０ａを読み取るおよび書き込むためのアクセス要求をページＡ  ４１０ａではなく、新たに割り当てられたページにマッピングする。いくつかの例において、ヘルパー４０６は、ページマッピングを更新するように、ハイパーバイザに通知する。ヘルパー４０６による新しいページの割り当てによって、装置Ａ  ４０２ａは、例えば新たなバイトの書き込みにより中断されることなく、ページＡ  ４１０ａおよびＢ  ４１０ｂを装置Ａ
４０２ａから装置Ｂ  ４０２ｂにコピーし続けることができる。
【００６９】
アプリケーション４０４が読み取り動作に必要なデータを要求すると、ヘルパー４０６は、読み取り要求の通知を受信する。ヘルパー４０６は、ページマッピングを用いて、要求されたデータを決定し、要求されたデータをアプリケーション４０４に提供する。例えば、ヘルパー４０６は、既知の定値を返すことができる。例えば、このページは、共有コピーオンライト（Copy-On-Write）ページからの全ゼロ値を含む。装置４０２ａは、書き
込みイベントを受信するまで、ページの１つのコピーのみを記憶する。書き込みイベントを受信すると、装置４０２ａは、ページのコピーを作成し、新しいバイトでコピーを更新する、または圧縮データを解凍し、解凍されたデータをアプリケーション４０４に提供する。読み取り要求の間に、ページＡ  ４１０ａおよびＢ  ４１０ｂが更新されていない、すなわち、新しいバイトで書き込まれていない場合に、ヘルパー４０６は、ページＡ  ４１０ａおよびＢ  ４１０ｂのいずれか１つにアクセスすることができる。読み取り要求の間に、例えば、対応するページが更新されたバイトを含む場合に、ヘルパー４０６は、１つ以上の新たに割り当てられたページにアクセスすることができる。
【００７０】
装置Ａ  ４０２ａは、時間ＴＧで、アプリケーション４０４の実行を停止する。例えば、装置Ａ  ４０２ａは、ダーティバイトを除き、アプリケーション４０４の実行に必要なデータを装置Ｂ  ４０２ｂにコピーすることを完了してから、アプリケーション４０４の実行を停止する。装置Ａ  ４０２ａは、コピーする必要のあるデータの一部を書き込まない場合、例えばそのデータの一部がダーティになった場合、アプリケーション４０４の実行に必要なデータを装置Ｂ  ４０２ｂに続けてコピーできないと判断したことに応答して、アプリケーション４０４の実行を停止することができる。
【００７１】
装置Ａ  ４０２ａまたはヘルパー４０６は、時間ＴＨで、アプリケーション４０４のダーティバイトを装置Ｂ  ４０２ｂにコピーする。対応するページのコピーが既に装置Ｂ  ４０２ｂに提供されたため、ヘルパー４０６は、例えば、ダーティマッピング４１２を用いて、更新されたバイトを判断し、これらのバイトを装置Ｂ  ４０２ｂに提供する。
【００７２】
装置Ｂ  ４０２ｂは、ダーティバイトを用いて、メモリＢ  ４０８ｂ内のページのコピーを更新する。装置Ｂ  ４０２ｂは、時間ＴＩで、アプリケーション４０４ｂの実行を開始する。
【００７３】
ダーティバイトを装置Ｂ  ４０２ｂに移行した後、装置Ａ  ４０２ａは、メモリＡ  ４０８ａから、アプリケーションＡ  ４０４ａの全てのデータを消去することができる。例えば、装置Ａ  ４０２ａは、別のアプリケーションの実行に使用されていないアプリケーション４０４のデータを判断し、そのデータをメモリＡ  ４０８ａから消去することができる。
【００７４】
装置４０２ａおよび４０２ｂは、ネットワークを介してデータを送受信することができるパーソナルコンピュータ、モバイル通信装置、サーバ、および他の装置を含むことができる。ネットワーク、例えば、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、インターネット、またはそれらの組み合わせは、装置４０２ａ、装置４０２ｂおよび潜在的に他の装置（図示せず）を接続する。
【００７５】
いくつかの実現例において、ヘルパー４０６は、ダーティマッピング４１２内の複数のダーティバイトデータブロックを含む。例えば、ヘルパー４０６は、例えば、アプリケーション４０４の１つのページに各々書き込まれた２つまたは４つのダーティバイトブロックの粒度を決定し、それに応じてダーティマッピング４１２を更新することができる。
【００７６】
アプリケーション移行プロセスフローの例
図５は、アプリケーションを第１装置から第２装置に移行するためのプロセス５００を示すフローチャートである。例えば、プロセス５００は、環境４００内の装置Ａ  ４０２ａによって使用されることができる。
【００７７】
第１装置は、アプリケーションに必要なデータページを第１装置のメモリに格納することを含み、アプリケーションを実行する（５０２）。データページは、アプリケーションの命令、アプリケーションの命令を実行するためのデータ、またはその両方を含むことができる。アプリケーションは、仮想マシンであってもよく、または１つの装置から別の装置に移行することができる別の種類のアプリケーションであってもよい。
【００７８】
第１装置は、アプリケーションのために、メモリ内のデータページの場所を特定するためのマッピングを作成する（５０４）。例えば、第１装置は、アプリケーションに所有されているデータページを示すページマッピングを作成する。
【００７９】
第１装置は、第１装置上でアプリケーションの実行を継続させながら、データページを第１装置から第２装置にコピーすることによって、アプリケーションを第１装置から第２装置に移行するための移行プロセスを開始する（５０６）。例えば、第１装置は、第１装置をシャットダウンまたは再起動する必要があると判断し、移行プロセスを開始する。
【００８０】
第１装置は、少なくとも１つのデータページの各々をヘルパーに割り当てる（５０８）。例えば、第１装置は、全てのデータページをヘルパーアプリケーションまたは装置に割り当てる。いくつかの例において、第１装置は、一部のデータページ、例えば、命令のみ
を含むページではなく、命令を実行できるページをヘルパーに割り当てることができる。いくつかの例において、第１装置は、アプリケーションがページに書き込もうとする時に、ページをヘルパーに動的に割り当てることができる。第１装置は、例えば、ヘルパーがこのページを所有していることを示すように、ページマッピングを更新することによってページをヘルパーに割り当てることができる。
【００８１】
第１装置は、アプリケーションから、メモリにアクセスする要求を受信する（５１０）。この要求は、読み取り要求であってもよく、書き込み要求であってもよい。第１装置は、要求の種類、すなわち、要求が読み取り要求であるかまたは書き込み要求であるかを判断することができる。
【００８２】
第１装置は、メモリにアクセスする要求が書き込み要求であることを判断する（５１２）。第１装置は、少なくとも１つのデータページ内の１つ以上のバイトを更新する（５１４）。例えば、ヘルパーは、アプリケーションからバイトを受信し、メモリ内のバイトを更新する。ヘルパーは、バイトを書き込むページのコピーを作成し、ページコピー、すなわち、新しく割り当てられたページ内のバイトを更新し、このページコピーを使用して、更なる読み取り要求および書き込み要求を処理することができる。
【００８３】
第１装置は、更新されたバイトを特定するデータを記憶する（５１６）。例えば、ヘルパーは、バイトを更新したことを示すデータを記憶する。データは、バイトを格納する特定のページおよびページ内のバイトの特定位置を特定することができる。例えば、ヘルパーは、ダーティマッピングを更新することによって、バイトが上書きされたことを示すことができる。ダーティマッピングは、個々のバイトまたはバイト群、例えば、６４バイトのブロックに適用することができる。単一のページに含まれるバイトの数よりも小さい任意の適切な粒度を使用することができる。
【００８４】
いくつかの実現例において、更新されたバイトを特定するデータは、バイトを上書きするアドレスのリストであってもよい。例えば、ダーティマッピングは、バイトを上書きする時のログであってもよい。このアドレスリストは、バイトを書き込む時間順で排列されたアドレスを含んでもよい。いくつかの例において、このアドレスリストは、数字順で排列されたアドレスを含んでもよい。
【００８５】
いくつかの例において、更新されたバイトを特定するデータは、設定可能な粒度を有するビットベクトルであってもよい。例えば、ビットベクトルの各ビットは、６４バイトのメモリを表すことができる。１つのバイトが上書きされると、ビットベクトルの対応するエントリが更新される。ビットベクトルは、例えば、特定のアプリケーションのゲストメモリ内の全てのバイトに対応するエントリを含むことができる。
【００８６】
いくつかの実現例において、第１装置は、拡張ページテーブル（ＥＰＴ）データ形式に従うシャドウ構造を使用することができる。例えば、第１装置は、ビットベクトル内の各ビットが６４バイトのメモリを表すように、ＥＰＴリーフノードに４ＫＢを割り当て、メモリ内の次の４ＫＢを、ＥＰＴリーフノードによって特定されたメモリ場所に対応するダーティバイトを表すビットベクトルに割り当てることができる。
【００８７】
第１装置は、第１装置上でアプリケーションの実行を停止する（５１８）。例えば、第１装置は、アプリケーションの実行を停止し、アプリケーションに対する任意の要求を第２装置に転送する。これによって、第２装置上でアプリケーションを実行する時に、第２装置は、これらの要求をアプリケーションに提供することができる。
【００８８】
第１装置は、更新されたバイトを特定するデータを用いて、更新されたバイトを特定す
る（５２０）。ヘルパーは、ダーティマッピングを用いて、更新されたバイトを特定することができ、必要に応じて、更新されたバイトを格納するページを特定することができる。
【００８９】
第１装置は、更新されたバイトを第１装置から第２装置にコピーして、第２装置にアプリケーションの実行を継続させる（５２２）。第１装置は、更新されたバイトのコピーを第２装置に送信することができる。第１装置は、コピープロセスが完了したときに、第２装置がアプリケーションを実行すべきであることを示すメッセージを、第２装置に送信することができる。いくつかの実現例において、第１装置は、更新されたバイトのコピーのみを第２装置に送信する。いくつかの例において、第１装置は、更新されたバイトを特定するデータの粒度、すなわち、ダーティマッピングに応じて、バイトブロック、例えば６４バイトブロックのコピーを第２装置に送信する。例えば、ダーティマッピングが特定の６４バイトブロックのうち１つの６４バイトが上書きされたことを示す場合、第１装置は、特定の６４バイトブロックのコピーを第２装置に送信する。
【００９０】
いくつかの実現例において、プロセス５００は、追加のステップ、より少ないステップ、またはいくつかのステップを複数のステップに分割することができる。例えば、第１装置は、ステップ５０２および５０４を実行することなく、ステップ５０６〜５２２を実行することができる。いくつかの例において、第１装置またはヘルパーは、移行プロセス中にアプリケーションから読み取り要求を受け取り、要求されたデータをアプリケーションに提供することができる。
【００９１】
オプション実現例の詳細
いくつかの実現例において、ヘルパーは、ＰＣＩｅ付属の特定用途向け集積回路（ＡＳＩＣ）またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）に実装されたハードウェアであってもよい。例えば、ヘルパーをＰＣＩｅ付属装置に実装することによって、既存のシステムの物理ハードウェアに変更を加えることなく、ヘルパーを既存のシステムに使用することができる。
【００９２】
いくつかの実現例において、ヘルパーは、システムオンチップ（ＳｏＣ）であってもよい。例えば、ヘルパーは、コンピュータプロセッサユニット（ＣＰＵ）チップＳｏＣであってもよい。ＣＰＵチップＳｏＣは、ＰＣＩｅ、コヒーレントオンダイファブリック（coherent on-die fabric）、またはコヒーレントオフチップファブリック（coherent off-chip fabric）、例えば、インテル（登録商標）社のＱＰＩ（QuickPath Interconnect）またはＡＲＭ（登録商標）社のＡＸＩ（Advanced eXtensible Interface）バスを介して接
続することができる。いくつかの実現例において、ヘルパーは、ＱＰＩまたはＡＸＩバスを使用するオフソケットチップに実装されてもよい。
【００９３】
ハードウェアに実装された場合、ヘルパーは、例えば、キャッシュまたはＣＰＵメモリなどのメモリに書き込むことができ、割込みを送信することができる。ヘルパーは、１秒当たり多くのドアベル要求（例えば、１秒当たり５百万個のドアベル要求）に応答することができる。
【００９４】
追加実現例の詳細
本開示に記載された主題および機能的な動作の実施形態は、本開示に開示された構造およびそれらの構造的均等物を含むデジタル電子回路、有形化されたコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、もしくはそれらの１つ以上の組み合わせにおいて実現することができる。本開示に記載された主題の実施形態は、１つ以上のコンピュータプログラム、すなわち、有形化された非一時的なプログラム担体上にエンコードされ、データ処理装置によって実行されるまたはデータ処理装置の動作を制御す
るためのコンピュータプログラム命令の１つ以上のモジュールとして実装することができる。これに代えてまたは加えて、プログラム命令は、人為的に生成された伝播信号、例えば、データ処理装置による実行のため、情報を適切な受信機に送信するために符号化することによって生成された機械生成電気信号上にエンコードされてもよい。コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムまたはシリアルアクセスメモリ装置、またはそれらの１つ以上の組み合わせであってもよい。
【００９５】
「データ処理装置」という用語は、データ処理ハードウェアを指し、データを処理するためのあらゆる種類の機器、装置およびマシン、例えば、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む。また、この装置は、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）などの専用論理回路であってもよく、またはそれらをさらに含んでもよい。この装置は、ハードウェアに加えて、コンピュータプログラムの実行環境を生成するコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの１つ以上の組み合わせを構成するコードを含むことができる。
【００９６】
プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとして呼ばれ得るまたは記述され得るコンピュータプログラムは、コンパイル言語またはインタープリタ言語、宣言型言語または手続き型言語を含む任意のプログラミング言語で記述することができ、スタンドアロンプログラムとしてまたはコンピューティング環境内の使用に適したモジュール、コンポーネント、サブルーチン、オブジェクトまたはその他のユニットとしての任意の形で使用することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応することができるが、必ずしも対応する必要がない。プログラムは、他のプログラムまたはデータ（例えば、マークアップ言語文書に記憶された１つ以上のスクリプト）を保持するファイルの一部、関与しているプログラムに専用の単一ファイル、または複数の同格ファイル（例えば、１つ以上のモジュール、サブプログラムまたはコードの一部を記憶するファイル）に記憶されてもよい。コンピュータプログラムは、１つのコンピュータ上で、または１つのサイトに配置されまたは複数のサイトにわたって分散され、通信ネットワークによって相互接続されている複数のコンピュータ上で動作しているように実装することができる。
【００９７】
本開示に記載のプロセスおよびロジックフローは、入力データを操作して出力を生成することによって機能する１つ以上のコンピュータプログラムを実行する１つ以上のプログラム可能なコンピュータによって実施することができる。また、プロセスおよびロジックフローは、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）などの専用論理回路によっても実施することができ、装置は、専用論理回路として実装することもできる。
【００９８】
コンピュータプログラムの実行に適したコンピュータは、例として、汎用マイクロプロセッサまたは専用マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理装置を含む。一般的には、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリもしくはその両方から、命令およびデータを受信する。コンピュータの必須要素は、コンピュータの必須要素は、命令に従って動作を実行するためのプロセッサ、命令およびデータを記憶するための１つ以上のメモリ装置を含む。一般的には、コンピュータはまた、データを記憶するための１つ以上の大容量記憶装置、例えば磁気ディスク、磁気光ディスクまたは光ディスクを含むおよび／またはこれらの大容量記憶装置とデータを送受信するように動作可能に結合される。しかしながら、コンピュータは、これらの装置を有する必要がない。さらに、コンピュータは、別の装置、例えば携帯電話、携帯情報端末（ＰＤＡ）、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位シ
ステム（ＧＰＳ）受信機、または携帯型記憶装置（例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）を含むことができる。
【００９９】
コンピュータプログラム命令およびデータの記憶に適したコンピュータ可読媒体は、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリ装置などの半導体メモリ装置、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む全ての種類の不揮発性メモリ、媒体およびメモリ装置を含む。プロセッサおよびメモリは、専用論理回路によって補完されてもよく、専用論理回路に組み込まれてもよい。
【０１００】
ユーザとの情報交換を提供するために、本開示に記載された主題の実施形態は、情報をユーザに提示するための表示装置（例えば、ＣＲＴ（陰極線管）モニタまたはＬＣＤ（液晶ディスプレイ）モニタ）、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティング装置（例えば、マウスまたはトラックボール）を備えたコンピュータ上で実装することができる。他の種類の装置を用いて、ユーザとの対話を提供することもできる。例えば、ユーザに提供されるフィードバックは、任意種類の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形で受信することができる。さらに、コンピュータは、ユーザによって使用される装置との間でドキュメントを送受信することによって、例えば、ウェブブラウザから受信した要求に応答して、ユーザ装置上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
【０１０１】
本開示に記載された主題の実施形態は、例えばデータサーバなどのバックエンドコンポーネント、またはアプリケーションサーバなどのミドルウェア要素、ユーザが本開示に記載された主題の実装と対話することができるグラフィカルユーザインターフェイスまたはウェブブラウザを有するクライアントコンピュータなどのフロントコンポーネント、または１つ以上のバックエンドコンポーネント、ミドルウェア要素またはフロントエンドコンポーネントの組み合わせを含むコンピューティングシステムに実現することができる。システムのコンポーネントは、任意の形式または媒体のデジタルデータ通信、例えば通信ネットワークと相互接続することができる。通信ネットワークの例として、ローカルエリアネットワーク（ＬＡＮ）、およびワイドエリアネットワーク（ＷＡＮ）、例えばインターネットが挙げられる。
【０１０２】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントとサーバとは、一般的には互いに遠隔であり、典型的には通信ネットワークを介して相互作用する。クライアントとサーバとは、対応するコンピュータ上で動作しているし、互いにクライアント−サーバ関係を有するコンピュータプログラムである。いくつかの実施形態において、サーバは、例えば、ユーザ装置、すなわち、クライアント装置と情報を交換するユーザにデータを表示し、ユーザから入力を受信するために、データ（例えば、ＨＴＭＬページ）をユーザ装置に送信する。クライアント装置で生成されたデータ（例えば、ユーザ対話の結果）は、サーバ上でクライアント装置から受信することができる。
【０１０３】
このような種類のコンピュータの一例は、図６に示されている。図６は、汎用コンピュータシステム６００を示す概略図である。システム６００を使用して、一実現例に従って上記に記載されたコンピュータで実行される方法のいずれかに関連して説明した動作を行うことができる。システム６００は、プロセッサ６１０と、メモリ６２０と、記憶装置６３０と、入出力装置６４０を含む。構成要素６１０、６２０、６３０および６４０の各々は、システムバス６５０を介して相互接続される。プロセッサ６１０は、システム６００
内で実行命令を処理することができる。一実現例において、プロセッサ６１０は、シングルスレッドプロセッサである。別の実現例において、プロセッサ６１０は、マルチスレッドプロセッサである。プロセッサ６１０は、メモリ６２０または記憶装置６３０に格納された命令を処理して、入出力装置６４０上のユーザインターフェイスに図形情報を表示することができる。
【０１０４】
メモリ６２０は、システム６００内の情報を記憶する。一実現例において、メモリ６２０は、コンピュータ可読媒体である。一実現例において、メモリ６２０は、揮発性メモリユニットである。別の実現例において、メモリ６２０は、不揮発性メモリユニットである。
【０１０５】
記憶装置６３０は、大容量の記憶をシステム６００に提供することができる。一実現例において、記憶装置６３０は、コンピュータ可読媒体である。様々な異なる実現例において、記憶装置６３０は、フロッピーディスク（登録商標）装置、ハードディスク装置、光ディスク装置、またはテープ装置であってもよい。
【０１０６】
入出力装置６４０は、入力／出力動作をシステム６００に提供する。一実現例において、入出力装置６４０は、キーボードおよび／またはポインティング装置を含む。別の実現例において、入出力装置６４０は、ユーザインターフェイスに図形情報を表示させるための表示ユニットを含む。
【０１０７】
本開示は、多くの具体的な実施詳細を含むが、これらの詳細は、発明の範囲または請求可能な範囲を限定するものではなく、むしろ特定の発明の特定の実施形態に特有の特徴の説明として考えるべきである。本開示の個別の実施形態に記載された特定の特徴は、単一の実施形態において組み合わせとして実施することもできる。逆に、単一の実施形態に記載されたさまざまな特徴は、複数の実施形態において、別々にまたは任意の適切なサブ組み合わせで実施することもできる。さらに、上記で特徴を特定の組み合わせで作用するものとして説明したが、このような説明にも拘らず、１つ以上の特徴は、説明した組み合わせから削除されてもよく、説明した組み合わせは、部分組み合わせに変形されてもよい。
【０１０８】
同様に、動作が特定の順序で図面に示されているが、望ましい結果を達成するために、図示された順序または順番に従ってこれらの動作を実行する必要があるまたは図示された全ての動作を実行する必要があると理解すべきではない。特定の状況において、マルチ作業および並列処理は、有利である可能性がある。例えば、並列処理を用いて、複数の言語検出メソッドを同時に実行することができる。さらに、上述の実施形態におけるさまざまなシステム要素の分離は、全ての実施形態においてそのような分離が必要であると理解すべきではなく、記載されたプログラム要素およびシステムは、一般的に、単一のソフトウェア製品に一体化されまたは複数のソフトウェア製品にパッケージ化することができると理解すべきである。
【０１０９】
したがって、主題の特定の実施形態を説明した。他の実施形態は、添付の特許請求の範囲内にある。場合によって、請求項に列挙された動作は、異なる順序で実行され、依然として望ましい結果を達成することができる。さらに、望ましい結果を達成するために、添付の図面に示されるプロセスは、必ずしも示された特定の順序または順番に従う必要がない。特定の実現例において、マルチ作業および並列処理が有利である可能性がある。
【図１】
2018170033.tif 000003
【図２】
2018170033.tif 000004
【図３】
2018170033.tif 000005
【図４】
2018170033.tif 000006
【図５】
2018170033.tif 000007
【図６】
2018170033.tif 000008
【手続補正書】
【提出日】平成30年7月3日(2018.7.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理装置によって実行可能な命令を含むプログラムであって、前記命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
第１のバイトのサブセットおよび前記第１のバイトのサブセットとは異なる第２のバイトのサブセットを含む特定のページのコピーを含む第１装置上でアプリケーションの実行を継続させながら、前記第１装置のメモリに記憶され、前記第１装置上で前記アプリケーションの実行に使用されるデータページを前記第１装置から第２装置にコピーすることによって、前記第１装置上で実行している前記アプリケーションを前記第１装置から前記第２装置に移行する移行プロセスを開始することと、
前記アプリケーションが前記メモリ内の前記データページの場所を特定するためのマッピングを作成することと、
前記移行プロセス中に前記第１装置上での前記アプリケーションの実行に応答して、前記第１装置によって、前記第１のバイトのサブセットのうち、１つ以上のバイトを更新することとを含む動作を実行させ、
前記１つ以上のバイトを更新することは、
ヘルパーがデータを前記特定のページに書き込むことを可能にし、前記アプリケーションがデータを前記特定のページに書き込むことを防止するように、前記特定のページの書き込み許可を変更することと、
前記特定のページに対して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新することと、
特定のデータを前記特定のページに書き込むためのマッピングを用いて、前記特定のページが前記ヘルパーにマッピングされたことを判断することと、
前記特定のページが前記ヘルパーにマッピングされたという判断に応答して、前記ヘルパーによって、前記第１のバイトのサブセットのうち、更新される１つ以上のバイトに対応する前記特定のデータを受信することと、
前記ヘルパーによって、前記特定のデータを用いて、前記特定のページからの前記第１のバイトのサブセット内の１つ以上のバイトを更新することとを含み、
前記命令は、前記データ処理装置に、さらに、
前記第１装置上で前記アプリケーションの実行を停止することと、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることとを含む動作を実行させる、プログラム。
【請求項２】
前記動作は、前記第１装置の前記メモリに前記アプリケーションのデータページを記憶することを含む前記第１装置上での前記アプリケーションの実行を含み、
前記アプリケーションの前記データページは、前記特定のページを含む、請求項１に記載のプログラム。
【請求項３】
前記第１装置上での前記アプリケーションの実行は、前記第１装置上で仮想マシンを実行することを含む、請求項２に記載のプログラム。
【請求項４】
前記動作は、前記第１のバイトのサブセット内の前記１つ以上のバイトの更新に応答して、前記第１装置によって、前記更新されたバイトを特定するデータを記憶することを含み、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーすることは、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することと、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することに応答して、前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーすることとを含む、請求項１〜３のいずれか１項に記載のプログラム。
【請求項５】
前記動作は、
前記第１装置によって、前記第１のバイトのサブセット内の前記１つ以上のバイトを受信することと、
前記第１装置によって、前記１つ以上のバイトが、移行されている前記アプリケーションのデータページのためのものであることを判断することとを含み、
前記更新されたバイトを特定する前記データの記憶は、前記１つ以上のバイトが、移行される前記アプリケーションのデータページのためのものであるとの判断に応答して行われる、請求項４に記載のプログラム。
【請求項６】
前記動作は、
前記アプリケーションから、メモリにアクセスする要求を受信することと、
前記メモリにアクセスする要求が書き込み要求であることを判断することとを含み、
前記更新されたバイトを特定する前記データの記憶は、前記メモリにアクセスする要求が書き込み要求であるとの判断に応答して行われる、請求項４に記載のプログラム。
【請求項７】
前記第１装置によって、前記更新されたバイトを特定する前記データを記憶することは、前記特定のページに対して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新することを含み、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することは、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを用いて、前記更新されたバイトを特定することを含む、請求項４に記載のプログラム。
【請求項８】
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることは、前記更新されたバイトのみを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることを含む、請求項１〜７のいずれか１項に記載のプログラム。
【請求項９】
システムであって、
第１装置を備え、
前記第１装置は、
メモリと、
データ処理装置と、
前記データ処理装置とデータ通信し、前記データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備え、前記命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
第１のバイトのサブセットおよび前記第１のバイトのサブセットとは異なる第２のバイトのサブセットを含む特定のページのコピーを含む第１装置上でアプリケーションの実行を継続させながら、前記第１装置のメモリに記憶され、前記第１装置上で前記アプリケーションの実行に使用されるデータページを前記第１装置から第２装置にコピーすることによって、前記第１装置上で実行している前記アプリケーションを前記第１装置から前記第２装置に移行する移行プロセスを開始することと、
前記アプリケーションが前記メモリ内の前記データページの場所を特定するためのマッピングを作成することと、
前記移行プロセス中に前記第１装置上での前記アプリケーションの実行に応答して、前記第１のバイトのサブセットのうち、１つ以上のバイトを更新することとを含む動作を実行させ、
前記１つ以上のバイトを更新することは、
ヘルパーがデータを前記特定のページに書き込むことを可能にし、前記アプリケーションがデータを前記特定のページに書き込むことを防止するように、前記特定のページの書き込み許可を変更することと、
前記特定のページに対して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新することと、
特定のデータを前記特定のページに書き込むためのマッピングを用いて、前記特定のページが前記ヘルパーにマッピングされたことを判断することと、
前記特定のページが前記ヘルパーにマッピングされたという判断に応答して、前記ヘルパーによって、前記第１のバイトのサブセットのうち、更新される１つ以上のバイトに対応する前記特定のデータを受信することと、
前記ヘルパーによって、前記特定のデータを用いて、前記特定のページからの前記第１のバイトのサブセット内の１つ以上のバイトを更新することとを含み、
前記命令は、前記データ処理装置に、さらに、
前記第１装置上で前記アプリケーションの実行を停止することと、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることとを含む動作を実行させる、システム。
【請求項１０】
前記動作は、前記第１装置の前記メモリに前記アプリケーションのデータページを記憶することを含む前記第１装置上での前記アプリケーションの実行を含み、
前記アプリケーションの前記データページは、前記特定のページを含む、請求項９に記載のシステム。
【請求項１１】
前記第１装置上での前記アプリケーションの実行は、前記第１装置上で仮想マシンを実行することを含む、請求項１０に記載のシステム。
【請求項１２】
前記動作は、前記第１のバイトのサブセット内の前記１つ以上のバイトの更新に応答して、前記更新されたバイトを特定するデータを記憶することを含み、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーする動作は、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することと、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することに応答して、前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーすることとを含む、請求項９〜１１のいずれか１項に記載のシステム。
【請求項１３】
前記動作は、
前記第１のバイトのサブセット内の前記１つ以上のバイトを受信することと、
前記１つ以上のバイトが、移行されている前記アプリケーションのデータページのためのものであることを判断することとを含み、
前記更新されたバイトを特定する前記データの記憶は、前記１つ以上のバイトが、移行される前記アプリケーションのデータページのためのものであるとの判断に応答して行われる、請求項１２に記載のシステム。
【請求項１４】
前記動作は、
前記アプリケーションから、メモリにアクセスする要求を受信することと、
前記メモリにアクセスする要求が書き込み要求であることを判断することとを含み、
前記更新されたバイトを特定する前記データの記憶は、前記メモリにアクセスする要求が書き込み要求であるとの判断に応答して行われる、請求項１２に記載のシステム。
【請求項１５】
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることは、前記更新されたバイトのみを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させることを含む、請求項９〜１４のいずれか１項に記載のシステム。
【請求項１６】
前記第２装置を含む、請求項９〜１５のいずれか１項に記載のシステム。
【請求項１７】
コンピュータで実行される方法であって、
第１のバイトのサブセットおよび前記第１のバイトのサブセットとは異なる第２のバイトのサブセットを含む特定のページのコピーを含む第１装置上でアプリケーションの実行を継続させながら、前記第１装置のメモリに記憶され、前記第１装置上で前記アプリケーションの実行に使用されるデータページを前記第１装置から第２装置にコピーすることによって、前記第１装置上で実行している前記アプリケーションを前記第１装置から前記第２装置に移行する移行プロセスを開始するステップと、
前記アプリケーションが前記メモリ内の前記データページの場所を特定するためのマッピングを作成するステップと、
前記移行プロセス中に前記第１装置上での前記アプリケーションの実行に応答して、前記第１装置によって、前記第１のバイトのサブセットのうち、１つ以上のバイトを更新するステップとを含み、
前記１つ以上のバイトを更新するステップは、
ヘルパーがデータを前記特定のページに書き込むことを可能にし、前記アプリケーションがデータを前記特定のページに書き込むことを防止するように、前記特定のページの書き込み許可を変更することと、
前記特定のページに対して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新することと、
特定のデータを前記特定のページに書き込むためのマッピングを用いて、前記特定のページが前記ヘルパーにマッピングされたことを判断することと、
前記特定のページが前記ヘルパーにマッピングされたという判断に応答して、前記ヘルパーによって、前記第１のバイトのサブセットのうち、更新される１つ以上のバイトに対応する前記特定のデータを受信することと、
前記ヘルパーによって、前記特定のデータを用いて、前記特定のページからの前記第１のバイトのサブセット内の１つ以上のバイトを更新することとを含み、
前記方法は、さらに、
前記第１装置上で前記アプリケーションの実行を停止するステップと、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーして、前記第２装置に前記アプリケーションの実行を継続させるステップとを含む、方法。
【請求項１８】
前記第１装置の前記メモリに前記アプリケーションのデータページを記憶することを含む前記第１装置上で前記アプリケーションを実行するステップを含み、
前記アプリケーションの前記データページは、前記特定のページを含む、請求項１７に記載の方法。
【請求項１９】
前記第１のバイトのサブセット内の前記１つ以上のバイトの更新に応答して、前記第１装置によって、前記更新されたバイトを特定するデータを記憶するステップを含み、
前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーすることは、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することと、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することに応答して、前記特定のページからの前記第２のバイトのサブセット内のバイトをコピーせず、前記特定のページからの前記第１のバイトのサブセット内の前記更新されたバイトを前記第１装置から前記第２装置にコピーすることとを含む、請求項１７または１８に記載の方法。
【請求項２０】
前記第１装置によって、前記更新されたバイトを特定する前記データを記憶するステップは、前記特定のページに対して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新することを含み、
前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することは、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを用いて、前記更新されたバイトを特定することを含む、請求項１９に記載の方法。
【外国語明細書】
2018170033000001.pdf