IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許7483054致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート
<>
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図1
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図2
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図3A
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図3B
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図4
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図5A
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図5B
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図5C
  • 特許-致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート 図5D
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-02
(45)【発行日】2024-05-14
(54)【発明の名称】致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート
(51)【国際特許分類】
   G06F 11/07 20060101AFI20240507BHJP
   G06F 9/455 20180101ALI20240507BHJP
   G06F 11/20 20060101ALI20240507BHJP
【FI】
G06F11/07 193
G06F11/07 140N
G06F11/07 140A
G06F9/455 150
G06F11/20 630
【請求項の数】 21
(21)【出願番号】P 2022570729
(86)(22)【出願日】2021-11-16
(65)【公表番号】
(43)【公表日】2023-08-01
(86)【国際出願番号】 US2021059488
(87)【国際公開番号】W WO2022108914
(87)【国際公開日】2022-05-27
【審査請求日】2023-01-05
(31)【優先権主張番号】16/950,181
(32)【優先日】2020-11-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ワン,ジュエ
(72)【発明者】
【氏名】ジア,チウイー
(72)【発明者】
【氏名】ルプレヒト,アダム
【審査官】福西 章人
(56)【参考文献】
【文献】特開2017-033113(JP,A)
【文献】特開2015-118436(JP,A)
【文献】RUPRECHT, Adam et al,VM Live Migration At Scale,VEE '18: Proceedings of the 14th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution,2018年03月25日,pp.45-56,インターネット:<URL:https://dl.acm.org/doi/pdf/10.1145/3186411.3186415>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44-9/455
11/07
11/20
11/28-11/36
(57)【特許請求の範囲】
【請求項1】
クラウドコンピューティング環境における訂正不可能なメモリエラー回復のための方法であって、
仮想マシン管理マネージャにおいて、ソースホストマシンによって検出された訂正不可能なメモリエラーに関連付けられる信号伝達を受取るステップと、
前記訂正不可能なメモリエラーに関連付けられるべきと判断された1つ以上のメモリページを、1つ以上のそれぞれの損なわれたメモリページとして識別するステップと、
前記損なわれたメモリページを送信から除外して、前記ソースホストマシンに関連付けられた損なわれていないメモリページをターゲットホストマシンに送信するステップとを含み、所与の損なわれていないメモリページは、損なわれたメモリページとして識別されないメモリページであり、前記方法はさらに、
前記ソースホストマシンで行なわれた損なわれていないメモリページの修正に関連付けられた更新済みページを前記ターゲットホストマシンに送信するステップを含む、方法。
【請求項2】
前記ソースホストマシン上で1つ以上の実行中の仮想マシンの動作を一時停止させるステップを含み、前記1つ以上の実行中の仮想マシンは、損なわれたメモリページおよび損なわれていないメモリページに関連付けられている、請求項1に記載の方法。
【請求項3】
前記ターゲットホストマシン上における前記1つ以上の実行中の仮想マシンの動作を再開させるステップを含む、請求項2に記載の方法。
【請求項4】
前記訂正不可能なメモリエラーに関連付けられた情報をバウンスバッファから読取るステップを含む、請求項1~3のいずれか1項に記載の方法。
【請求項5】
前記損なわれていないメモリページのみについて前記ターゲットホストマシンにおいてチェックサムを実行するステップを含む、請求項1~4のいずれか1項に記載の方法。
【請求項6】
前記損なわれていないメモリページについてのビットマップを更新し、前記更新されたビットマップをコピーして前記更新済みページを生成するステップを含む、請求項1~5のいずれか1項に記載の方法。
【請求項7】
前記送信するステップは、前記ソースホストマシンにおける1つ以上のVMの動作が一時停止されている間、前記更新済みページを送信するステップを含む。請求項6に記載の方法。
【請求項8】
前記損なわれたメモリページのそれぞれに関連付けられた情報を前記ターゲットホストマシンに転送するステップを含む、請求項1~7のいずれか1項に記載の方法。
【請求項9】
前記転送するステップは、前記ソースホストマシンにおける1つ以上の実行中の仮想マシンの動作を一時停止させる前に、前記損なわれたメモリページのそれぞれに関連付けられた情報を送信するステップを含む、請求項8に記載の方法。
【請求項10】
前記ターゲットホストマシンにおけるチェックサム計算から損なわれたページを除外するステップを含む、請求項1~9のいずれか1項に記載の方法。
【請求項11】
前記損なわれていないメモリページおよび前記更新済みページに基づいて、前記ソースホストマシン上の1つ以上の実行中の仮想マシンを前記ターゲットホストマシン上の1つ以上の仮想マシンにマイグレートするステップを含む、請求項1~10のいずれか1項に記載の方法。
【請求項12】
クラウドコンピューティングシステムであって、
1つ以上の仮想マシンをサポートすることができるターゲットホストマシンと、
1つ以上の仮想マシンをサポートすることができるソースホストマシンと、
命令を含むメモリに結合された1つ以上の処理デバイスとを含み、前記命令は、前記1つ以上の処理デバイスに、
ソースホストマシンによって検出された訂正不可能なメモリエラーに関連付けられた信号伝達を受取らせ、
前記訂正不可能なメモリエラーに関連付けられるべきと判断された1つ以上のメモリページを、1つ以上のそれぞれの損なわれたメモリページとして識別させ、
前記損なわれたメモリページを送信から除外して、前記ソースホストマシンに関連付けられた損なわれていないメモリページを前記ターゲットホストマシンに送信させ、所与の損なわれていないメモリページは、損なわれたメモリページとして識別されないメモリページであり、さらに、
前記ソースホストマシンで行なわれた損なわれていないメモリページの修正に関連付けられた更新済みページを前記ターゲットホストマシンに送信させる、クラウドコンピューティングシステム。
【請求項13】
前記命令は、前記1つ以上の処理デバイスに、前記ソースホストマシン上における1つ以上の実行中の仮想マシンの動作を一時停止させ、前記1つ以上の実行中の仮想マシンは、損なわれたメモリページおよび損なわれていないメモリページに関連付けられている、請求項12に記載のクラウドコンピューティングシステム。
【請求項14】
前記命令は、前記1つ以上の処理デバイスに、前記ターゲットホストマシン上における前記1つ以上の実行中の仮想マシンに関連付けられた動作を再開させる、請求項13に記載のクラウドコンピューティングシステム。
【請求項15】
前記命令は、前記1つ以上の処理デバイスに、前記訂正不可能なメモリエラーに関連付けられた情報をバウンスバッファから読取らせる、請求項12~14いずれか1項に記載のクラウドコンピューティングシステム。
【請求項16】
前記命令は、前記1つ以上の処理デバイスに、前記損なわれていないメモリページのみについて前記ターゲットホストマシンにおいてチェックサムを実行させる、請求項12~15のいずれか1項に記載のクラウドコンピューティングシステム。
【請求項17】
前記命令はさらに、前記1つ以上の処理デバイスに、前記損なわれていないメモリページについてのビットマップを更新させ、前記更新されたビットマップをコピーして前記更新済みページを生成させる、請求項12~16のいずれか1項に記載のクラウドコンピューティングシステム。
【請求項18】
前記命令はさらに、前記1つ以上の処理デバイスに、前記ソースホストマシンにおける1つ以上のVMの動作が一時停止されている間、前記更新済みページを送信させる、請求項12~17のいずれか1項に記載のクラウドコンピューティングシステム。
【請求項19】
前記命令はさらに、前記1つ以上の処理デバイスに、前記損なわれたメモリページに関連付けられた情報を前記ターゲットホストマシンに転送させる、請求項12~18のいずれか1項に記載のクラウドコンピューティングシステム。
【請求項20】
前記命令はさらに、前記1つ以上の処理デバイスに、前記ソースホストマシンにおける前記仮想マシンの動作を一時停止させる前に前記損なわれたメモリページに関連付けられた情報を送信させる、請求項19に記載のクラウドコンピューティングシステム。
【請求項21】
前記命令はさらに、前記1つ以上の処理デバイスに、前記ターゲットホストマシンにおけるチェックサム計算から損なわれたページを除外させる、請求項12~20のいずれか1項に記載のクラウドコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2020年11月17日に提出された米国特許出願第16/950,181号の継続出願であり、その開示が引用により本明細書に援用されている。
【背景技術】
【0002】
背景
クラウドコンピューティングは、企業がコンピューティングのニーズを管理する方法に影響を与えてきた。これは信頼性、柔軟性、スケーラビリティ、および冗長性をコスト効率良く提供するものである。これにより、企業が、たとえば、従来の資本投資および保守整備を考慮することなくその情報技術のニーズを管理することが可能となる。ますます多くのコンピューティングがクラウドシステムに移行してきているので、これらのシステムは、現在では、数年前にはおそらく想像できなかったであろう規模でデータを記憶、処理および出力している。このような移行の影響として、クラウド内で発生するメモリエラーが、封じ込められない場合および/またはクラウドから回復されない場合、クラウド上の企業の事業区域に対応する規模で顧客またはユーザの体験に影響を及ぼす恐れがあることが挙げられる。たとえば、ホスト上において訂正不可能なメモリエラーが検出されると当該ホストがシャットダウンし、結果として、ホストされたすべての仮想マシン(virtual machine:VM)が突然終了してしまうことは珍しいことではない。この場合、メモリサイズがギガバイトまたはテラバイトの規模であれば、再構築するのに長い時間を必要とする数千ものVMまたはアプリケーションに影響が及ぶ可能性がある。
【0003】
物理メモリがメモリ障害、たとえば「訂正不可能なエラー」を被ると、通常、未だ検出されていない他のメモリエラーが存在することとなり、そのメモリが「永続的に」破損してしまう可能性がある。このような場合、VMの動作状態を維持したままでVMをマイグレートすることにより、メモリエラー伝搬の回数および重大度を封じ込めつつダウンタイムを減らすことができる。
【発明の概要】
【0004】
概要
開示される技術のいくつかの局面は、検出、封じ込め(たとえば、破損したデータがマイグレーション時にターゲットホストに伝搬することを防止すること)、および、訂正不可能なメモリエラーからの回復を可能にする、クラウドコンピューティング環境において実現される方法またはシステムを含み得る。
【0005】
たとえば、開示される技術の一局面は、クラウドコンピューティング環境における訂正不可能なメモリエラー回復のための方法を含み得る。当該方法は、仮想マシン管理マネージャにおいて、ソースホストマシンによって検出された訂正不可能なメモリエラーに関連付けられる信号伝達を受取るステップと、当該訂正不可能なメモリエラーに関連付けられるべきと判断された1つ以上のメモリページを、1つ以上のそれぞれの損なわれたメモリページとして識別するステップと、当該ソースホストマシンに関連付けられた損なわれていないメモリページをターゲットホストマシンに送信するステップとを含み得る。所与の損なわれていないメモリページは、損なわれたメモリページとして識別されないメモリページである。当該方法はまた、当該ソースで行なわれた損なわれていないメモリページの修正に関連付けられた更新済みページを当該ターゲットホストマシンに送信するステップを含み得る。
【0006】
当該方法の他の局面は、当該ソースホストマシン上で1つ以上の実行中の仮想マシンの動作を一時停止させるステップを含み得る。当該1つ以上の実行中の仮想マシンは、損なわれたメモリページおよび損なわれていないメモリページに関連付けられている。さらに別の局面は、当該ターゲットホストマシン上における当該1つ以上の実行中の仮想マシンの動作を再開させるステップを含み得る。当該方法はさらに、当該訂正不可能なメモリエラーに関連付けられた情報をバウンスバッファから読取るステップを含み得る。さらに、当該方法に従うと、当該送信するステップは、当該ソースマシンにおける1つ以上のVMの動作が一時停止されている間、当該更新済みページを送信するステップを含み得る。当該方法はまた、当該損なわれていないメモリページのみについて当該ターゲットホストマシンにおいてチェックサムを実行するか、または、当該損なわれていないメモリページについてのビットマップを更新し、当該更新されたビットマップをコピーして当該更新済みページを生成するステップを含み得る。加えて、当該送信するステップは、当該ソースホストマシンにおける1つ以上のVMの動作が一時停止されている間、当該更新済みページを送信するステップを含み得る。当該方法はまた、当該損なわれたメモリページに関連付けられた情報を当該ターゲットホストに転送するステップを含み得る。当該転送するステップは、当該ソースホストにおける当該仮想マシンの動作を一時停止させる前に、当該損なわれたメモリページを送信するステップを含み得る。当該転送するステップは、当該ソースホストマシンにおける1つ以上の実行中の仮想マシンの動作を一時停止させる前に、当該損なわれたメモリページのそれぞれを送信するステップを含み得る。
【0007】
当該方法はまた、当該ターゲットにおけるチェックサム計算から損なわれたページを除外するステップを含み得る。さらに、当該方法は、当該損なわれていないメモリページおよび当該更新済みページに基づいて、当該ソースホストマシン上の1つ以上の実行中の仮想マシンを当該ソースマシン上の1つ以上の仮想マシンにマイグレートするステップを含み得る。
【0008】
開示される技術の別の局面は、クラウドコンピューティングシステムを含み得る。当該システムは、1つ以上の仮想マシンをサポートすることができるターゲットホストマシンと、1つ以上の仮想マシンをサポートすることができるソースホストマシンと、命令を含むメモリに結合された1つ以上の処理デバイスとを含み得る。当該命令は、当該1つ以上の処理デバイスに、ソースホストマシンによって検出された訂正不可能なメモリエラーに関連付けられた信号伝達を受取らせ、当該訂正不可能なメモリエラーに関連付けられるべきと判断された1つ以上のメモリページを、1つ以上のそれぞれの損なわれたメモリページとして識別させ、当該ソースホストマシンに関連付けられた損なわれていないメモリページをターゲットホストマシンに送信させ、所与の損なわれていないメモリページは、損なわれたメモリページとして識別されないメモリページであり、さらに、当該ソースで行なわれた損なわれていないメモリページの修正に関連付けられた更新済みページを当該ターゲットホストマシンに送信させ得る。
【0009】
当該命令はまた、当該1つ以上の処理デバイスに、当該ソースホストマシン上における1つ以上の実行中の仮想マシンの動作を一時停止させ得る。当該1つ以上の仮想マシンは、損なわれたメモリページおよび損なわれていないメモリページに関連付けられている。当該命令はまた、当該1つ以上の処理デバイスに、当該ターゲットホストマシン上における当該1つ以上の実行中の仮想マシンの動作を再開させ得る。さらに、当該命令は、当該1つ以上の処理デバイスに、当該訂正不可能なメモリエラーに関連付けられた情報をバウンスバッファから読取らせ得るか、または、当該損なわれていないメモリページのみについて当該ターゲットホストにおいてチェックサムを実行させ得る。当該命令はさらに、当該1つ以上の処理デバイスに、当該訂正不可能なメモリエラーに関連付けられた情報をバウンスバッファから読取らせ得る。当該命令はまた、当該1つ以上の処理デバイスに、当該損なわれていないメモリページについてのビットマップを更新させ、当該更新されたビットマップをコピーして当該更新済みページを生成させ得る。さらに、当該命令は、当該1つ以上の処理デバイスに、当該ソースマシンにおける1つ以上のVMの動作が一時停止されている間、当該更新済みページを送信させ得る。
【0010】
開示される技術のこの局面に従うと、当該システムはさらに、当該1つ以上の処理デバイスに、当該損なわれたページに関連付けられた情報を当該ターゲットホストに転送させる命令を含み得る。当該命令はまた、当該1つ以上の処理デバイスに、当該ソースホストにおける当該仮想マシンの動作を一時停止させる前に当該損なわれたメモリページを送信させ得る。当該命令はさらに、当該1つ以上の処理デバイスに、当該ターゲットにおけるチェックサム計算から損なわれたページを除外させ得る。
【0011】
開示される技術の付加的な局面は、クラウドコンピューティング環境において訂正不可能なメモリエラー回復のためのプロセスまたは方法を1つ以上の処理デバイスに実行させる命令が格納された1つ以上の非一時的なコンピュータ可読媒体を含み得る。当該プロセスまたは方法は、仮想マシン管理マネージャにおいて、ソースホストマシンによって検出された訂正不可能なメモリエラーに関連付けられる信号伝達を受取るステップと、当該訂正不可能なメモリエラーに関連付けられるべきと判断された1つ以上のメモリページを、1つ以上のそれぞれの損なわれたメモリページとして識別するステップと、当該ソースホストマシンに関連付けられた損なわれていないメモリページをターゲットホストマシンに送信するステップとを含み得る。所与の損なわれていないメモリページは、損なわれたメモリページとして識別されないメモリページである。当該方法またはプロセスはまた、当該ソースで行なわれた損なわれていないメモリページの修正に関連付けられた更新済みページを当該ターゲットホストに送信するステップを含み得る。当該命令は、開示される技術のうちの1つ以上の他の方法またはプロセスステップを含み得る。
【図面の簡単な説明】
【0012】
図1】開示される技術のいくつかの局面に従った例示的なシステムまたは環境を例示的に示すブロック図である。
図2】開示される技術のいくつかの局面に従った例示的なシステムまたは環境を例示的に示すブロック図である。
図3A】開示される技術のいくつかの局面に従った例示的なプロセスまたは方法を例示的に示すフローまたはスイムダイアグラム(swim diagram)である。
図3B】開示される技術のいくつかの局面に従った例示的なプロセスまたは方法を例示的に示すフローまたはスイムダイアグラムである。
図4】開示される技術のいくつかの局面に従った例示的なプロセスまたは方法を示すフローである。
図5A】開示される技術のいくつかの局面に従った、例示的なプロセスまたは方法、および下位のプロセスまたは下位の方法についてのいくつかの局面を示す図である。
図5B】開示される技術のいくつかの局面に従った、例示的なプロセスまたは方法、および下位のプロセスまたは下位の方法についてのいくつかの局面を示す図である。
図5C】開示される技術のいくつかの局面に従った、例示的なプロセスまたは方法、および下位のプロセスまたは下位の方法についてのいくつかの局面を示す図である。
図5D】開示される技術のいくつかの局面に従った、例示的なプロセスまたは方法、および下位のプロセスまたは下位の方法についてのいくつかの局面を示す図である。
【発明を実施するための形態】
【0013】
詳細な説明
概略
メモリエラーは、一般に、訂正可能なものおよび訂正不可能ものとして分類される。訂正可能なエラーは、典型的には、クラウド環境におけるホストマシン、したがってホストコンピューティングシステムの正常動作に影響を及ぼすものではない。訂正不可能なエラーは、典型的には、ホストコンピューティングシステム全体にとって致命的であり、たとえば、ホストマシンのクラッシュまたはシャットダウンを引起こす。クラウドベースの仮想マシン環境では、これは、ホストマシンによってサポートされるすべての仮想マシン(VM)がホストとともにクラッシュするかまたはシャットダウンすると、VM/ユーザにとって回復のための手がかりが全くなくなってしまうかまたは回復のための機会がほとんどなくなってしまうことを意味する。現代のクラウドコンピューティングシステムにおける訂正不可能なメモリエラーの影響は、通常、重大なものとなる。なぜなら、これらのシステムは多くの場合、ホストごとに比較的大きいサイズのメモリを採用しているからである。たとえば、クラウドコンピューティングエンジンは、12テラバイトものメモリで単一のVMを使用可能にし得る。これらのより大型のホストが被る訂正不可能なメモリエラーの割合は、典型的には、より小型のホストよりも高くなる。たとえば、メモリが多ければ多いほど、より多くのメモリエラーに変換される。メモリエラーによるダウンタイムには一般に多大な費用がかかる。
【0014】
訂正不可能なエラーが存在する場合、VMの予想される挙動の管理がさらに複雑になる可能性がある。なぜなら、これらの訂正不可能なエラーは、多くの場合、基礎をなす物理メモリのさらなる破損を表わすものであり、隠れたエラーまたはまだ認識されていないエラーを付加的に包含している可能性があるからである。さらに、訂正可能なエラーであっても、時間の経過とともに劣化する可能性のある基礎ハードウェアが存在しているために訂正不可能となる可能性がある。チェックされない状態で訂正不可能なエラーの数が増加し続けると、1つ以上のVMを実行する物理ホストの重大なクラッシュが発生し、これに対応して当該ホスト上ですべてのVMがクラッシュする可能性が高くなる。したがって、破損したハードウェア上で動作している仮想マシンを、「優良」であることが分かっているマシンにマイグレートすることにより、検出された訂正不可能なエラーの影響と、このようなエラーの下流での影響とを軽減することができる。しかしながら、「実行中」のマシンのマイグレーション中に、マイグレーションプロセスの開始中に考慮されなかった追加のメモリエラーが発生し得ることも含め、追加の要因が考慮されなければならない。
【0015】
開示される技術のいくつかの局面は、1つの物理ホストから別の物理ホストへの、実行中のVMの「ライブ」マイグレーションを含む。いくつかの例では、マイグレーションは、メモリページを重要度の順でマイグレートするステップを含む一連のステップで行なうことができる。いくつかの例では、メモリのうち最も関連する部分または最も重要な部分をマイグレートすることができる。いくつかの例では、メモリエラーのエミュレーションを実行して、「損なわれている」と判断される特定のメモリセクションまたはメモリページを除外することができる。損なわれたメモリページは、たとえば、ホスト上の破損したメモリ要素に対応する仮想メモリ位置、たとえば、フリップビットまたは破損メモリコンポーネントを備えた物理メモリ位置を有するメモリページを含んでもよい。開示される技術のいくつかの局面は、ライブマイグレーションイベント後にエンドユーザに対して一貫したビューを与えること可能にするために、特定のタイプのメモリエラー(それらのエラーのマイグレーションを含めて)を保存することを可能にする。加えて、たとえばハイパーバイザ抽象化レベルでの仮想環境におけるメモリエラーの検出、識別、および処理を用いて、たとえば、損なわれたページを追跡および隔離するなどしてライブマイグレーションを改善することにより、当該損なわれたページがコピーされて自然なライブマイグレーションプロセスの一部としてターゲットホストに転送されてしまうことのないようにし得る。他の局面は、ターゲットホストにおける計算、たとえばチェックサム計算が損なわれたページまたは破損したメモリ位置を含まないように、当該損なわれたページまたは破損したメモリ位置をターゲットホストに通知することを含み得る。
【0016】
開示される技術のいくつかの局面は1つ以上のVMのマイグレーションを含む。いくつかの例では、VMは、特定の仮想マシンに関連付けられた重要性、現在の使用状態、または重大なエラーの数に基づいた順序でマイグレートされ得る。いくつかの例では、1つ以上の訂正不可能なメモリエラーを含む1つの特定のホスト上で実行されているすべてのVMは、1つ以上の訂正不可能なメモリエラーが検出されると、健全な物理ホストにマイグレートされ得る。
【0017】
開示される技術のいくつかの局面は、基礎をなす特定のマイクロアーキテクチャプラットフォームから抽象化されるとともに包括的であるアーキテクチャを含んでおり、複数のホストプラットフォームまたはアーキテクチャにわたる仮想マシンの「全般的な」抽象化を可能にする。
【0018】
開示される技術のいくつかの局面は、1つのホストから別のホストへのVMのマイグレーションによって、仮想マシン環境のデータ完全性、安定性、スケーラビリティ、およびロバスト性を保持するために、特定のタイプのメモリエラーを封じ込めることを可能にする。
【0019】
開示される技術の一局面は、ホストおよびその関連するVMが、訂正不可能なメモリエラーを含むメモリエラーから復帰および/または回復すること、ならびに、ゲストVMワークロードなどのシステムの他の部分に影響を及ぼさないようにメモリエラーの位置を突き止めて当該メモリエラーを封じ込めること、を可能にするクラウドコンピューティングインフラストラクチャを含む。たとえば、開示される技術は、オペレーティングシステム(operating system:OS)において回復可能なエラー信号伝達を可能にするように(関連するメモリ要素を含む)ホストマシンBIOSを構成するとともに、メモリページ上のメモリエラーの検出時にOSの回復経路を強化および可能化することを含む。開示される技術の一例は、メモリエラー(たとえば、アドレス、重大度、エラーが回復可能となるように別個に信号伝達されるかどうか、など)に関連付けられたコンテキスト情報をオペレーティングシステム(OS)に信号伝達することができる中央処理装置(central processing unit:CPU)の能力を含む。このようなメカニズムは、たとえば、CPUがハードウェアエラーをOSに報告するようなIntelのx86マシンチェックアーキテクチャを含んでもよい。たとえばLinux(登録商標)を介して提供されるようなOSのカーネル内のマシンチェック例外(machine check exception:MCE)ハンドラは、さらに、POSIXなどのアプリケーションプログラミングインターフェイス(application programming interface:API)を用いて、エラーの存在に関して仮想マシンマネージャに信号で伝え得るとともに、エラーに関するコンテキスト情報(たとえば、位置、エラータイプ、回復不可能であるか否か、隣接するメモリ位置に関するステータスなど)を提供し得る。次いで、仮想マシンマネージャは、ライブマイグレーションプロセスの開始の一部としてエラー情報を取込み得る。
【0020】
たとえば、開示される技術の一局面は、メモリエラー、特に訂正不可能なメモリエラーについてホストマシンによる警告を受けるための能力を仮想マシンマネージャまたはハイパーバイザが含むようなメカニズムが設けられているクラウドコンピューティングシステムまたはアーキテクチャを含む。ハイパーバイザは、警告を受けると、ホストマシンから受信するメモリエラー情報を処理して、当該警告に含まれるメモリエラー情報から識別可能な破損したメモリ要素にアクセスしている可能性があるVMを決定する。ハイパーバイザは、影響を受けたVMを識別すると、ホストマシンが最終的に修復され得るように、影響を受けたホストマシン上で実行されるVMをフェイルオーバーするためのプロセスを開始し得る。
【0021】
理解され得るように、前述のメカニズムに従って実現されるクラウドコンピューティングシステムまたはアーキテクチャは、訂正不可能なメモリエラーからの適切な回復を含むとともに可能にすることができる。具体的には、ハイパーバイザは、影響を及ぼすメモリを識別することにより、このようなメモリの使用(たとえば、読取またはアクセス)を将来的に制限または排除することができる。加えて、ハイパーバイザは、影響を受けたVMのみにその影響を制限することができる。加えて、ハイパーバイザは、影響を受けたVMのフェイルオーバーを適切に開始し、次いで、破損したホストによってサポートされる影響を受けていないVMを別のホストに移動させることを管理して、破損したホストの修復を可能にし得る。このようにして、顧客またはユーザが訂正不可能なメモリエラーから影響を受ける対象が、破損した物理メモリ要素またはアドレスにリンクされている仮想メモリを有する影響を受けたVMのみに制限され得るが、関連していないVMはエラーを認識しないままであり、当該エラーから影響を受けない。
【0022】
例示的なシステム
図1は、本開示のいくつかの局面に従った例示的なシステム100である。システム100は1つ以上のコンピューティングデバイス110を含む。1つ以上のコンピューティングデバイス110は、コンピューティングデバイス110~110と、ネットワーク140と、クラウドコンピューティングシステム150~150を備え得る1つ以上のクラウドコンピューティングシステム150とを含む。コンピューティングデバイス110は、サービスとしてのインフラストラクチャ(Infrastructure as a Service:laaS)、サービスとしてのプラットフォーム(Platform as a Service:PaaS)、および/またはサービスとしてのソフトウェア(Software as a Service:SaaS)などのクラウドコンピューティングサービスを利用するとともに顧客位置に配置されているコンピューティングデバイスを含み得る。たとえば、コンピューティングデバイス110がビジネス企業に配置されている場合、コンピューティングデバイス110は、企業システムを稼働させる際に用いられるコンピューティングデバイス110にソフトウェアアプリケーション(たとえば、会計、ワードプロセッシング、在庫追跡などのアプリケーション)を提供するサービスとしてクラウドシステム150を用いてもよい。代替例として、コンピューティングデバイス110は、企業の運営をサポートするために、ソフトウェアアプリケーションが実行される仮想マシンの形態のインフラストラクチャをリースしてもよい。
【0023】
図1に示されるように、コンピューティングデバイス110の各々は、1つ以上のプロセッサ112と、データ(D)および命令(I)を格納するメモリ116と、ディスプレイ120と、通信インターフェイス124と、入力システム128とを含んでもよく、これらは、ネットワーク130を介して相互接続されるものとして示されている。コンピューティングデバイス110はまた、顧客の動作の一部として蓄積されたデータを格納するローカルストレージまたはリモートストレージを、たとえばストレージエリアネットワーク(Storage Area Network:SAN)上に備え得るストレージ136に結合または接続され得る。コンピューティングデバイス110は、独立型コンピュータ(たとえば、デスクトップもしくはラップトップ)、または顧客に関連付けられたサーバを備え得る。所与の顧客はまた、そのビジネスの一部として、複数のコンピューティングデバイスをサーバとして実装してもよい。独立型コンピュータの場合、ネットワーク130は、コンピュータの内部にデータバスなどを含み得るとともに、サーバの場合、ネットワーク130は、ローカルエリアネットワーク、仮想プライベートネットワーク、ワイドエリアネットワーク、または、ネットワーク140に関して以下で説明する他のタイプのネットワークのうちの1つ以上を含み得る。メモリ116は、1つ以上のプロセッサ112によって実行または使用され得る命令132およびデータ134を含むとともに当該1つ以上のプロセッサ112によってアクセス可能な情報を格納する。メモリ116は、プロセッサによってアクセス可能な情報を格納することができるものであれば如何なるタイプであってもよく、コンピューティングデバイス可読媒体、または、たとえば、ハードドライブ、メモリカード、ROM、RAM、DVDもしくは他の光ディスク、ならびに他の書込み可能メモリおよび読取り専用メモリなどの電子デバイスの助けを借りて読取り可能なデータを格納する他の媒体を含み得る。システムおよび方法は、上述したもののさまざまな組合わせを含んでもよく、これにより、命令およびデータのうちさまざまな部分がさまざまなタイプの媒体に格納される。
【0024】
命令132は、プロセッサによって直接的に(機械コードなど)または間接的に(スクリプトなど)実行されるべき命令の任意のセットであり得る。たとえば、当該命令は、コンピューティングデバイスコードとしてコンピューティングデバイス可読媒体に格納されてもよい。これに関して、「命令」および「プログラム」という語は、本明細書では同義で使用され得る。当該命令は、プロセッサによる直接処理のためのオブジェクトコードフォーマットで格納され得るか、または、オンデマンドで翻訳されるかもしくは事前にコンパイルされる独立したソースコードモジュールのスクリプトもしくは集合を含む他の任意のコンピューティングデバイス言語で格納され得る。命令のプロセス、機能、方法、およびルーチンについては以下でより詳細に説明する。
【0025】
データ134は、命令132に従ってプロセッサ112によって取出、格納、または修正され得る。一例として、メモリ116に関連付けられたデータ134は、1つ以上のクライアントデバイス、アプリケーションなどのためのサービスをサポートする際に用いられるデータを含み得る。このようなデータは、ウェブベースのアプリケーションのホスティング、ファイル共有サービス、通信サービス、ゲーム、ビデオファイルもしくはオーディオファイルの共有、または他の任意のネットワークベースのサービスをサポートするためのデータを含み得る。
【0026】
1つ以上のプロセッサ112は、市販のCPUなどの任意の従来のプロセッサであってもよい。代替的には、1つ以上のプロセッサは、ASICまたは他のハードウェアベースのプロセッサなどの専用デバイスであってもよい。図1は、コンピューティングデバイス110のプロセッサ、メモリ、および他の要素を単一ブロック内にあるものとして機能的に示しているが、プロセッサ、コンピューティングデバイス、またはメモリが、実際には、同じ物理的筐体内に配置または格納されてもされなくてもよい複数のプロセッサ、コンピューティングデバイス、またはメモリを含み得ることが当業者には理解されるだろう。一例では、1つ以上のコンピューティングデバイス110は、顧客のビジネス運営の一部として他のコンピューティングデバイスとの間でデータを受信、処理、および送信する目的で、ネットワークのさまざまなノードと情報を交換する複数のコンピューティングデバイス、たとえば負荷分散型サーバファーム、を有する1つ以上のサーバコンピューティングデバイスを含み得る。
【0027】
コンピューティングデバイス110はまた、コンピューティングデバイス110を制御することと、ユーザ空間アプリケーションおよび/または1つ以上のクラウドシステム150において、たとえば、あるクラウドシステム150内のホスト上でサポートされるデータ関連のVMにアクセスすることとを可能にするユーザインターフェイスを備えたディスプレイ120(たとえば、画面を有するモニタ、タッチスクリーン、プロジェクタ、テレビ、または情報を表示するように動作可能な他のデバイス)を含んでもよい。このような制御は、たとえば、コンピューティングデバイスを用いて、データを処理のために入力システム128を通じてクラウドシステム150にアップロードさせること、ストレージ136にデータを蓄積させること、または、より一般的には、顧客のコンピューティングシステムのさまざまな局面を管理することを含み得る。いくつかの例では、コンピューティングデバイス110はまた、laaSまたはSaaSの一部としてクラウド内のVM上で実行されるワークロードまたはジョブを指定することを可能にするAPIにアクセスし得る。入力システム128は、たとえば、USBポートを通じてデータをアップロードするために使用され得るが、コンピューティングデバイス110はまた、コマンドおよび/またはデータを受信するために使用可能なマウス、キーボード、タッチスクリーン、またはマイクロフォンを含み得る。
【0028】
ネットワーク140は、さまざまな構成や、短距離通信プロトコルを含むプロトコル、たとえば、Bluetooth(登録商標)、Bluetooth(登録商標)LE、インターネット、ワールドワイドウェブ、イントラネット、仮想プライベートネットワーク、ワイドエリアネットワーク、ローカルネットワーク、1つ以上の企業の独自の通信プロトコルを用いるプライベートネットワーク、イーサネット(登録商標)、WiFi、HTTPなど、および、上述したもののさまざまな組合せなどを含み得る。このような通信は、モデムおよび無線インターフェイスなどの他のコンピューティングデバイスとの間でデータを送信することができる任意のデバイスによって促進され得る。コンピューティングデバイスは、所与の通信プロトコルをサポートするために必要なハードウェア、ドライバ、およびソフトウェアを含み得る通信インターフェイス124を介してネットワーク140とのインターフェイスを取っている。
【0029】
クラウドコンピューティングシステム150は、高速通信またはコンピューティングネットワークを介してリンクされ得る1つ以上のデータセンタを含み得る。システム150内の所与のデータセンタは、コンピューティングシステムおよびそれらの関連するコンポーネント、たとえば、ストレージシステムおよび通信システムを収容する専用空間を建物内に備え得る。典型的には、データセンタは、通信機器のラック、サーバ/ホスト、およびディスクを含む。サーバ/ホストおよびディスクは、VMなどの仮想コンピューティングリソースを提供するために用いられる物理コンピューティングリソースを含む。所与のクラウドコンピューティングシステムが2つ以上のデータセンタを含む限りにおいて、それらのデータセンタは、互いに比較的近接したさまざまな地理的位置にあり得るとともに、タイムリーかつ経済的に効率的な態様でサービスを配信するように選択され得るとともに、冗長性を提供して高い可用性を維持し得る。同様に、典型的には、さまざまなクラウドコンピューティングシステムがさまざまな地理的位置に設けられている。
【0030】
図1に示されるように、コンピューティングシステム150は、ホストマシン152、ストレージ154、およびインフラストラクチャ160を備えるものとして示され得る。ホストマシン152、ストレージ154、およびインフラストラクチャ160は、クラウドコンピューティングシステム150内にデータセンタを備え得る。インフラストラクチャ160は、1つ以上のホストマシンに加えて、スイッチ、物理リンク(たとえば、ファイバ)、および、データセンタ内のホストマシンをストレージ154と相互接続するために用いられる他の機器を備え得る。ストレージ154は、データセンタ内の処理デバイス上で動作する仮想マシンに物理ストレージまたは仮想ストレージを提供するように区画可能なディスクまたは他のストレージデバイスを備え得る。ストレージ154は、ストレージ154によってサポートされる仮想マシンをホストするデータセンタ内のSANとして設けられてもよく、または、ストレージがサポートする仮想マシンと物理的位置を共有しない異なるデータセンタ内に設けられてもよい。所与のデータセンタ内の1つ以上のホストまたは他のコンピュータシステムは、所与のデータセンタ内の1つ以上のホストマシンに関連付けられた仮想マシンを作成および管理する際に監視エージェントまたはハイパーバイザとして作用するように構成され得る。概して、ハイパーバイザとして機能するように構成されたホストまたはコンピュータシステムは、たとえば、コンピューティングデバイス110において生じるサービスを要求した結果、顧客またはユーザにlaaS、PaaS、またはSaaSを提供することによって発生する動作を管理するために必要な命令を含むだろう。
【0031】
図2に示される例では、図1のクラウドシステム150に関連付けて示されるような分散システム200は、仮想コンピューティング環境300をサポートするかまたは実行するホストマシン210(たとえば、ハードウェアリソース210)の集合204を含む。仮想コンピューティング環境300は、仮想マシンマネージャ(virtual machine manager:VMM)320と仮想マシン(VM)層340とを含む。仮想マシン(VM)層340は、1つ以上のソフトウェアアプリケーション360のインスタンス362a、362a~362nを実行するように構成された1つ以上の仮想マシン(VM)350a~350nを実行させる。各ホストマシン210は、1つ以上の物理的な中央処理装置(physical central processing unit:pCPU)212(「データ処理ハードウェア212」)および関連するメモリハードウェア216を含み得る。各ハードウェアリソースまたはホスト210は単一の物理プロセッサ212を有するように示されているが、任意のハードウェアリソース210が複数の物理プロセッサ212を含んでもよい。ホスト210はまた、物理メモリ216を含み、当該物理メモリ216は、ホストオペレーティングシステム(OS)220によって仮想メモリに分割され得るとともに、VM層340内のVM350による使用のために、またはVMM320もしくはホストOS220による使用のために割当てられ得る。物理メモリ216は、ランダムアクセスメモリ(random access memory:RAM)および/または(図1に示すように、インフラストラクチャ160を介してアクセス可能なストレージ154を含む)ディスクストレージを備え得る。
【0032】
ホストオペレーティングシステム(OS)220は、ホストマシン210のうちの任意の1つのホストマシン210上で実行させてもよく、または、複数のホストマシン210を含む集合体にわたって動作するように構成されてもよい。便宜上、図2は、マシン210~210の集合にわたって動作するホストOS220を示す。さらに、ホストOS220は仮想コンピューティング環境300の一部として示されているが、各ホストマシン210はそれ自体のOS218を備える。しかしながら、仮想環境の観点から、各マシン上のOSは、VMM320およびVM層340に対する集合的なOS220として表わされるとともに管理される。
【0033】
いくつかの例では、VMM320は、VM350を作成、インスタンス化/展開および実行するように構成されたソフトウェア、ファームウェア、またはハードウェアのうちの少なくとも1つを含むハイパーバイザ320(たとえば、コンピュータエンジン)に対応する。1つ以上のVM350を実行するVMM320に関連付けられたデータ処理ハードウェア212などのコンピュータは、典型的には、(上記で用いたように)ホストマシン210と称される一方で、各VM350はゲストマシンと称されることもある。ここで、VMM320またはハイパーバイザは、仮想オペレーティングプラットフォームを有する対応するゲストオペレーティングシステム(OS)354(たとえば354a~354n)を各VM350に備えるように構成されているとともに、VM350上の対応するゲストOS354の実行を管理する。本明細書で用いられるように、各VM350は、「インスタンス」または「VMインスタンス」と称されてもよい。いくつかの例では、さまざまなオペレーティングシステムの複数のインスタンスが仮想化されたリソースを共有し得る。たとえば、Linux(登録商標)オペレーティングシステムの第1のVM350、ウインドウズ(登録商標)オペレーティングシステムの第2のVM350、および、OS X(登録商標)オペレーティングシステムの第3のVM350はすべて、単一の物理的なx86マシン上で動作し得る。
【0034】
VM層340は1つ以上の仮想マシン350を含む。分散システム200は、ユーザが(1つ以上のコンピューティングデバイス110を介して)オンデマンドで、すなわち、ネットワーク140を介して(クラウドシステム150を含む)分散システム200にコマンドまたは要求170(図1)を送信することによって、VM350を起動することを可能にする。たとえば、コマンド/要求170は、対応するオペレーティングシステム220に関連付けられた画像またはスナップショットを含み得るとともに、分散システム200は、当該画像またはスナップショットを用いて、対応するVM350のためのルートリソース210を作成し得る。ここで、コマンド/要求170内の画像またはスナップショットは、ブートローダ、対応するオペレーティングシステム220、およびルートファイルシステムを含み得る。コマンド/要求170を受信することに応答して、分散システム200は、対応するVM350をインスタンス化し、インスタンス化後、VM350を自動的に起動し得る。
【0035】
VM350は、実際のコンピュータシステム(たとえば、ホストマシン210)をエミュレートするとともに、専用のハードウェア、ソフトウェア、またはそれらの組合わせを含み得る実際のコンピュータシステムまたは仮想コンピュータシステムのコンピュータアーキテクチャおよび機能に基づいて動作する。いくつかの例では、分散システム200は、1つ以上のVM350を起動させる前にユーザデバイス110を許可および認証する。ソフトウェアアプリケーション360のインスタンス362、または単にインスタンスは、分散システム200のデータ処理ハードウェア212上でホストされる(上で実行される)VM350を指している。
【0036】
ホストOS220は、基礎をなすホストマシンハードウェアを仮想化し、1つ以上のVMインスタンス350の同時実行を管理する。たとえば、ホストOS220は、VMインスタンス350a~350nを管理してもよく、各VMインスタンス350は、シミュレートされたバージョンの基礎をなすホストマシンハードウェア、または別のコンピュータアーキテクチャを含んでもよい。各VMインスタンス350、350a~350nに関連付けられたシミュレートされたバージョンのハードウェアは仮想ハードウェア352、352a~352nと称される。仮想ハードウェア352は、ホストマシン210の1つ以上の物理プロセッサ212をエミュレートする1つ以上の仮想中央処理装置(virtual central processing unit:vCPU)(「仮想プロセッサ」)を含み得る。仮想プロセッサは、VMインスタンス350に関連付けられた「コンピューティングリソース」と同義で称され得る。コンピューティングリソースは、対応する個々のサービスインスタンス362を実行するために必要とされるターゲットコンピューティングリソースレベルを含み得る。
【0037】
仮想ハードウェア352は、仮想プロセッサと通信する仮想メモリをさらに含み得る。当該仮想メモリは、動作を実行するために仮想プロセッサによって実行可能なゲスト命令(たとえば、ゲストソフトウェア)を格納している。たとえば、仮想プロセッサは、ソフトウェアアプリケーション360の対応する個々のサービスインスタンス362を仮想プロセッサに実行させる、仮想メモリからの命令を実行してもよい。ここで、個々のサービスインスタンス362は、仮想ハードウェア352または物理データ処理ハードウェア212によって実行されているかどうかを判断することができないゲストインスタンスと称され得る。ホストマシンのマイクロプロセッサは、コードの書換え、再コンパイル、または命令のエミュレーションを必要とすることなく、ゲストソフトウェア命令がホストマシンのマイクロプロセッサ上で直接実行されることを可能にすることにより、仮想ハードウェア352がアプリケーション360のソフトウェアインスタンス362を効率的に実行することを可能にするためのプロセッサレベルのメカニズムを含み得る。仮想メモリは、VMインスタンス350に関連付けられた「メモリリソース」と同義であり得る。メモリリソースは、対応する個々のサービスインスタンス362を実行するために必要なターゲットメモリリソースレベルを含み得る。
【0038】
仮想ハードウェア352はさらに、物理メモリハードウェア324で上のサービスのためのランタイム容量を備える少なくとも1つの仮想ストレージデバイスを含み得る。少なくとも1つの仮想ストレージデバイスは、VMインスタンス350に関連付けられたストレージリソースと称されてもよい。ストレージリソースは、対応する個々のサービスインスタンス362を実行するために必要なターゲットストレージリソースレベルを含み得る。各VMインスタンス350上で実行されるゲストソフトウェアはさらに、それぞれのゲストソフトウェアが内部ネットワーク160(図1)、外部ネットワーク140(図1)、またはその両方を介して到達可能な他のプロセスと通信し得るのに経由されるネットワーク境界を割当ててもよい(たとえば、ネットワークアドレスを割振ってもよい)。ネットワーク境界は、VMインスタンス350に関連付けられたネットワークリソースと称されてもよい。
【0039】
各VM350上で実行されるゲストOS354は、対応する個々のサービスインスタンス362(たとえば、VMインスタンス350によるアプリケーション360の362a~362nのうちの1つ以上)の実行を制御するソフトウェアを含む。VMインスタンス350、350a~350n上で実行されるゲストOS354、354a~354nは、他のVMインスタンス350上で実行される他のゲストOS354と同じであっても異なっていてもよい。いくつかの実現例では、VMインスタンス350は、個々のサービスインスタンス362を実行するためにゲストOS354を必要としない。ホストOS220は、ホストOS220のカーネル226のために確保された仮想メモリをさらに含み得る。カーネル226は、カーネル拡張およびデバイスドライバを含んでもよく、ホストOS220のユーザプロセス空間において実行されるプロセスに対する制限から外れた特定の特権的動作を実行してもよい。特権的動作の例は、さまざまなアドレス空間へのアクセス、メモリ管理ユニットなどのホストマシン210内の特別な機能プロセッサユニットへのアクセスなどを含む。ホストOS220上で実行される通信プロセス224は、VMネットワーク通信機能の一部を提供し得るとともに、ユーザプロセス空間において、またはカーネル226に関連付けられたカーネルプロセス空間において実行され得る。
【0040】
開示される技術のいくつかの局面に従うと、MCEを実装するホストマシン210上で発生する回復不可能なメモリエラー、たとえばビットフリップは、影響を受けたゲストVMがクラッシュすることを軽減および/または回避するために、かつ、影響を受けたゲストVMのみに対する回復不可能なメモリエラーの影響を封じ込めるために、ハイパーバイザ層において管理され得る。たとえば、所与のホストマシン210に関連付けられたBIOSは、ホスト上のpCPU212によって生成されたMCEがカーネル226に送信されるように構成される。MCEは、たとえば、物理メモリアドレス、エラーの重大度、エラーが切り離されたエラーであるかどうか、エラーの信号伝達元であるpCPU内のコンポーネントなどを含む、エラーについてのコンテキスト情報を含む。カーネル226はエラーをハイパーバイザ320に中継する。次いで、ハイパーバイザ320は、その情報を処理して、エラーに関連付けられた仮想メモリを識別し、影響を受けたメモリページおよび関連するVMを識別する。VMは、通常、仮想メモリを共有しないので、所与のメモリエラーは所与のVMに対して隔離され得る。したがって、影響を受けたVMを超えてエラーを伝搬するリスクはほとんどまたは全くない。次いで、ハイパーバイザ320は、破損したメモリページを隔離して、ゲストOSがこの破損したメモリページにアクセスすることを回避する。次に、ハイパーバイザは、エラーをエミュレートすることによって、影響を受けたゲストOSに当該エラーを通知する。具体的には、ハイパーバイザは、割込み、たとえば割込み80、をゲストOSに投入することで、ゲストOSにエラーを通知する。このようにして、たとえば、エラーの影響を受けたVMのみにエラーが通知され、そのVMまたはそのVMに関連付けられたアプリケーションのみが再起動され得る。
【0041】
加えて、破損した仮想メモリアドレスまたはそれを含むメモリページについて通知されると、影響を受けたVMは、それらのメモリ位置からの読取またはそれらのメモリ位置へのアクセスを回避し得るので、結果としてエラーが封じ込まれることとなる。たとえば、破損したメモリ要素の各メモリの読取または当該各メモリへのアクセスによりMCEが生成される。開示される技術の一局面は、ホストレベルで検出されてVMMおよび/またはゲストOSにエラーが通知された後、破損したメモリ要素の複数回の読取またはアクセスの発生を低減および/または回避する。
【0042】
他の例では、ユーザアプリケーションは、複数の仮想マシンにわたって実行されてもよく、単一のVMに関連付けられたメモリエラーは複数のVMに影響を与える可能性がある(たとえば、機械学習トレーニングジョブ)。このような例では、エラーの影響により、2つ以上のVMにエラーを通知することが必要となる可能性がある。たとえば、ハイパーバイザが1つ以上の所与のジョブを2つ以上のVM間で分散させた場合、当該ハイパーバイザは、影響を受けたすべてのVMにエラーをブロードキャストしてもよい。この場合、ユーザは、影響を受けたアプリケーションのシャットダウンおよび再起動が実行可能なオプションであると判断し得る。対照的に、単一のVMが関与している場合、たとえば、VMに新しいメモリページを提供するかまたはVMを再起動することによってVMを稼働状態で維持することは実行可能なオプションであり得る。
【0043】
例示的なプロセスまたは方法
開示される技術のいくつかの局面に従った処理フローまたは方法370の例を図3Aに示す。ホスト372は、BIOS、CPUおよびカーネルを(そのOSの一部として)含む。ホストは、訂正不可能なメモリエラーを検出し、このような検出に応答してマシンチェック例外(MCE)を発行するように構成される。加えて、検出された訂正不可能なメモリエラーを分類するための能力も与えられる。たとえば、この分類は、エラーがどこで発見されるか、エラーが回復可能であるか否か、および、どのようなタイプの回復が許可されるかまたは必要であるかを含み得る。たとえば、いくつかのハードウェアアーキテクチャは、回復が不可能であり、このためカーネルがパニックモードに入る必要があることをソフトウェアに信号伝達するコンテキスト情報を中継する。このことが行なわれる典型的な例として、実行コンテキストが破損した(たとえば、CPUが特定の命令を実行する途中でエラーが生じる)場合が挙げられる。訂正不可能なメモリエラーがホスト372において検出されると、BIOSはMCEをCPUに送信する(ライン376)。
【0044】
次いで、CPUは、(#MCとして示される)MCE情報をホスト372のカーネルに中継する(ライン378)。#MCおよびMCEまたはMCE情報は、同じコンテキスト情報または同じタイプのコンテキスト情報を含み得る。カーネル内のハンドラ(たとえば、MCEまたは#MCハンドラ)は、コンテキスト情報を含む訂正不可能なメモリイベントに関するMCE情報(#MC)を受信し、ハイパーバイザ386においてMCE信号ハンドラを信号伝達する(ライン382)。信号伝達はバスエラー信号(たとえば、SIGBUS)を介して行なわれてもよい。ハイパーバイザ386は、MCE情報を復号し、これを、影響を受けたホストによってサポートされるVMに関連付けられた仮想メモリ空間にマッピングする(ライン388)。この際、ハイパーバイザ386は、破損したメモリ要素に関連付けられた仮想メモリおよびメモリページを決定する。加えて、ハイパーバイザ386はMCEイベントをエミュレートする(ライン388)。すなわち、ハイパーバイザ386は、物理メモリエラーに関連付けられたコンテキスト情報を仮想メモリ位置に関連付けられたコンテキスト情報に翻訳する。加えて、ハイパーバイザ386は、影響を受けたホスト372上にVMを有するのに必要なプロセスをインスタンス化し、別のホスト373にマイグレートしてもよい(ライン390)。
【0045】
上記に示されるように、開示される技術のいくつかの局面は、ホストカーネルのMCEハンドラに、すべての関連するMCE詳細を仮想マシンマネージャまたはハイパーバイザへと信号伝達させることを含む。ハイパーバイザの場合、MCE SIGBUSハンドラが、メモリエラーイベントを、たとえばVmEventsテーブルに記録する。イベントテーブルは、正規のVMメタデータ(たとえば、VM id、プロジェクトid;MCE詳細:全ての関連するバンクからのDIMM、ランク、バンク、MCAレジスタ)といった詳細を記録するフィールドを含んでもよい。任意には、近傍情報は、たとえば、他のどのVMがホスト上にあるか、同じソケット上にあるかなども記録され得る。近傍情報は、たとえばローハマー攻撃(Row Hammer attack)などの潜在的なセキュリティ攻撃を分析する際に重要であり得る。このような例では、開示される技術は、影響を受けたVMのすべてをゲストユーザ空間に通知し、別のホストへのより適切なフェイルオーバーを開始させ得る。
【0046】
ホストにおいて、メモリエラーの封じ込めおよびメモリエラーの回復はIIO停止およびスクリームとともにBIOSにおいてイネーブルにされる。特定の新しいMSI/NMIハンドラを介したエラー信号伝達は、ホストに対するパニックのみに関する挙動とともにホストカーネルに追加される。ホストカーネルは、MCEエラーがどのアドレス空間に属しているかと、プロセスがVMであるか否かとを認識するように構成されている。
【0047】
図3Bは、開示される技術のいくつかの局面に従った方法またはアーキテクチャ374のいくつかの局面を示す。ホスト372およびホスト373は、BIOS、CPU、およびOS/カーネルを含むさまざまなコンポーネントを含み得る。加えて、ホスト372およびホスト373は、いくつかのセグメントに分割することができる揮発性メモリおよび不揮発性メモリを含み得る。ホスト372およびホスト373は、上述した分散システム200またはホストマシン210と同様であり得る。
【0048】
VMM/ハイパーバイザ386はホスト上で実行可能である。上述したように、VMM/ハイパーバイザ386は、VM391~VM391などの1つ以上のVMを制御することができるか、当該1つ以上のVMをオーケストレートすることができるか、または、当該1つ以上のVMを作成して動作させることをイネーブルにすることができる。簡略化するためにVMを2つしか示していないが、3つ以上(たとえば、数百またはさらには数千)のVMをホスト372上でインスタンス化または実行できることが理解されるはずである。各VMは、ホスト372上の揮発性メモリまたは他のメモリの一部に対応し得る。ホスト372および373は、所与のクラウドシステムの一部と同じデータセンタに常駐する必要はない(たとえば、図1のシステム150を参照)。いくつかの例では、マイグレーションは、クラウド環境におけるさまざまなデータセンタ内のホスト間で行なわれてもよい。このような場合、VMM/ハイパーバイザ386は、さまざまな物理的位置またはさまざまなデータセンタにおいて別個のVMM/ハイパーバイザコンポーネントを含んでもよい。さらに、いくつかの例では、VMM/ハイパーバイザ386は、基礎をなすホストがどのように管理されるかに応じて、所与のデータセンタにおいて別個のコンポーネントを含み得る。さらに、VMM/ハイパーバイザは複数のホストまたはマシンにわたって機能的に分散されてもよい。
【0049】
いくつかの例では、メモリにおける「!」によって示されるように、ホスト372内のメモリのうち特定のセクションまたは部分は、回復不可能なエラーを含むことが認識され得る。図3Bに関連付けてして説明したように、これらの回復不可能なエラーは、仮想マシンおよびこれら仮想マシンがサポートするゲストアプリケーションまたはインスタンスの実行に影響を及ぼす可能性がある。一例として、VM391は、メモリのうち、MCEに関連する回復不可能なエラーを含む特定のセクション上で実行することができる。他の仮想マシンは、エラーを含まない揮発性メモリを含む物理ハードウェアを用いてもよい。所与のVMによって用いられる物理メモリおよび他の物理コンポーネントはVMM/ハイパーバイザ386を介して管理される。たとえば、所与のVMは、ホストの物理メモリ上の空間を用い得るが、当該VMMが典型的には実際の物理メモリアドレス等をVM環境内の仮想メモリアドレスにマッピングするので、通常、これら実際の物理メモリアドレス等を認識しない。
【0050】
さまざまなメモリセクションは、ホスト372の一部として図3Bに示す1つ以上のメモリページに対応し得る。いくつかの例では、1つ以上のメモリページは、ホスト372の揮発性メモリの1つ以上のセクションのメモリダンプであり得る。メモリページは、低レベルキャッシュメモリ、不揮発性メモリまたは揮発性メモリなどの任意の適切なメモリに格納され得る。MCEなどの回復不可能なエラーを有するものに対応する特定のメモリページにマーク付けすることができる。いくつかの例では、ページは、「損なわれた」ものとして、または損なわれたメモリを含むものとして、ページを識別する情報にマーク付けされ得るかまたは当該情報を含み得る。いくつかの例では、メモリページは、図2で参照されるインスタンス362aなどの特定のVMインスタンスに対応する「ゲストメモリ」またはメモリのみを含み得る。
【0051】
ホスト373はホスト372と同様であり得るとともに、ハイパーバイザ386は、特にホスト373上のVM392~VM392などの1つ以上のVMの動作を制御、オーケストレートまたは可能化することができる。いくつかの例では、ホスト373上のVMの数はホスト372上のVMの数と同じであり得る。
【0052】
メモリマイグレーションモジュール371は、1つのホストから別のホストへの仮想マシンの転送またはマイグレーションを可能にするために、リモートプロシージャコール、API、ネットワーキング機能、および、OSレベル以下で行なわれるような他の「低レベル」のメモリ動作を含み得る。メモリマイグレーションモジュール371は、ホスト372およびホスト373などの1つ以上の物理マシンにわたって分散され得る。メモリマイグレーションモジュール371はまた、ホスト372とホスト373または他のホストとの間で転送されるデータを接続するかまたはこのようなデータの転送を可能にするネットワーク上で実行することができる。
【0053】
メモリマイグレーションモジュール371はまた、チェックサムの生成と、バウンスバッファからの読取りと、メモリおよびメモリページの両方におけるMCEエラーの認識とを行なうこともできる。メモリマイグレーションモジュール371は、開示された技術のライブマイグレーション機能の局面を実行するように調整されたRPC、ソフトウェア、または他のAPIを用いてもよい。メモリマイグレーションモジュール371は、(本明細書に記載されるような)マイグレーションプロセスの機能を実行するとともに1つ以上の処理デバイス上で実行される命令のセットとして実現され得る1つ以上のモジュールを備え得る。
【0054】
いくつかの例では、メモリマイグレーションモジュール371は、「汎用」であり得るとともに、さまざまなモデルのプロセッサを含むようなさまざまなタイプのハードウェアおよび物理ホストを抽象化するためのモジュールであって、これらのさまざまなタイプのハードウェアおよび物理ホストにわたって互換性があるモジュールや、特定の物理マシンによって生成される特定のメモリまたは他のエラーコードを理解するためのモジュールを含み得る。
【0055】
図4は、開示される技術のいくつかの局面に従った方法またはプロセス400を示す。
方法400は、訂正不可能なメモリエラーに関連するMCEを検出し、仮想マシンマネージャまたはハイパーバイザに転送するステップを含み得る。MCE情報は、仮想マシンマネージャまたはハイパーバイザによって復号されて、影響を受けたメモリページにマッピングされ、これにより、影響を受けたVMにマッピングされる。次いで、仮想マシンマネージャまたはハイパーバイザは、VMを別のデバイスにマイグレートするプロセスを開始し得る。これらの動作に関するさらなる詳細については本明細書で説明している。
【0056】
ブロック410に示すように、仮想マシン管理マネージャは、ソースホストマシンによって検出された訂正不可能なメモリエラーを信号伝達する信号を受信し得る。
【0057】
ブロック420において、仮想マシン管理マネージャは、受取った信号伝達に基づいて、破損したメモリ要素に関連付けられた1つ以上の実行中の仮想マシンを決定することができる。
【0058】
ブロック430において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、訂正不可能なメモリエラーを含むメモリページのコピーを除外することができる。
【0059】
ブロック440において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、1つ以上の実行中の仮想マシンに関連付けられた少なくとも1つのメモリページをソースホストマシンからターゲットホストマシンにコピーすることができる。
【0060】
ブロック450において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、ソースホストマシン上の1つ以上の実行中の仮想マシンの動作を一時停止することができる。
【0061】
ブロック460において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、ソースホストマシンからターゲットホストマシンにビットマップを送信することができる。ブロック460は、1つ以上の実行中の仮想マシンが一時停止されている間に実行することができる。
【0062】
ブロック470において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、ターゲットホストマシン上の1つ以上の実行中の仮想マシンの動作を再開させることができる。
【0063】
ブロック480において、仮想マシン管理マネージャまたはメモリマイグレーションモジュールは、追加のメモリページを「バックグラウンドフェッチ」することができる。
【0064】
図5A図5Dは、「ソースVM」から「ターゲットVM」へのライブメモリマイグレーションのいくつかの局面を示す。図5A図5Dに関して示されるように、マイグレーションのいくつかの局面は、たとえば、「コピー前」および「コピー後」などのように、時間に関して説明され得る。加えて、ソースVMおよびターゲットVMの両方の動作状態はライブメモリマイグレーション中に記述され得る。いくつかの例では、図5A図5Dにおいて用いられているように、「時間の矢印」は左から右へと将来に向かって順に移動して、アクションのブロックが実行され得る例を示す。しかしながら、当業者であれば、プロセスの順序を置換えるかまたは逆にすることが可能であること、および、いくつかのプロセスが重複可能であることを認識するだろう。
【0065】
図5A図5Dで用いられるように、「ソースVM」は、データまたは情報のマイグレート元である仮想マシンであり得るとともに、「ターゲットVM」は、データまたは情報のマイグレート先である仮想マシンであり得る。いくつかの例では、「ソースVM」は、ホストマシン210などの特定の物理マシンに関連付けられ得るか、またはこのような特定の物理マシン上で動作し得る。いくつかの例では、方法500は、ソースVMに関連付けられた物理マシン上で発生する上述のMCEなどの特定のエラー時に開始することができる。「ソース」は、ソースVMまたは当該ソースVMに対応するホストマシンのいずれかを指し得るとともに、「ターゲット」は、ターゲットVMまたは当該ターゲットVMに対応するターゲットマシンのいずれかを指し得る。
【0066】
当業者であれば、図5A図5Dに関連付けて説明される方法の特定の実現例がさまざまに異なり得るとともに、1つ以上のソフトウェアモジュール、API、RPCを含み得るとともに、1つ以上のタイプのデータ構造、ログ、バイナリ構造、およびハードウェアを用いて当該方法を実行し得ることを認識するだろう。
【0067】
図5Aは例示的な方法500を示す。図5AにはソースVM510およびターゲットVM515が示されている。要約すると、方法500は、「コピー前」段階および「コピー後」段階内で概念化され得る動作で構成され得る。方法500は、方法520、方法530、および方法540を含み図5B図5Dに関連付けて説明されるプロセスの任意の組合わせで構成され得る。
【0068】
コピー前段階中に、「ゲストメモリ」をソースVM510からターゲットVM515にコピーすることができる。ゲストメモリは、ゲストユーザ空間またはゲストユーザアプリケーション内に作成されるメモリを含み得る。いくつかの例では、ゲストメモリは、特定のゲストユーザ空間または仮想マシンインスタンスに属する特定の仮想メモリに対応する基礎をなす物理メモリを指すこともある。コピー前段階中、ソースVM510は、関連するソース物理マシン上で動作する。この段階では、1つ以上のプロセッサがゲストメモリをターゲットにコピーする。たとえば、メモリコンテンツは、ネットワークバッファにコピーされ、ネットワーク(たとえば、図1のネットワーク160)を介してRPCプロトコルを通じてターゲットVM515に送信される。この場合、ターゲットVM上には、ゲストメモリを受信して当該受信したゲストメモリを対応するゲスト物理アドレスに格納するための対応するRPC受信機スレッドがある。
【0069】
図5Aに示されるように、コピー前およびコピー後の間、ソースまたはターゲットは、マイグレーションが発生しているにもかかわらずVMが一時停止されない電圧低下期間に入り得る。この段階中、ゲスト実行は、たとえば、ダーティトラッキングまたはコピー後のネットワーク・ページインによって減速され得る。
【0070】
図5Bは、方法500または方法520のいくつかの局面を、「コピー前」段階に関するものとして示す。メモリおよびメモリページの読取り、書込み、および追跡を行なうための命令群であり得る1つ以上のメモリマイグレーションモジュールを用いることができる。方法520は、ソース仮想マシンが「実行中」であるかまたはアクティブである間に実行することができ、これにより、方法520の実行中にユーザが仮想マシンを使用し続けることを可能にする。
【0071】
図5Bに示されるように、ソースからターゲットへのマイグレーションのプロセス中に、メモリのいくつかのページは、ソースVM上で行なわれるユーザプロセスまたは他の処理に起因して修正され得る。これらの差を追跡することができる。ゲストメモリの転送時間中に修正されたメモリのページは「ダーティページ」と称されることもある。いくつかの例では、特定のページのサブセットのみがコピー前段階中に転送され得る。いくつかの事例では、損なわれたページはダーティページのサブセットを含み得るが、このようなダーティページは、スキップされることとなるか、または、マイグレーションターゲットに対する通常のダーティページ処理の一部として処理されることはない。
【0072】
ゲストメモリは、ソースVM510上で読取られてターゲットVM515のゲストメモリに書込まれ得る。いくつかの例では、読取りプロセスおよび書込みプロセスは、1つ以上のリモートプロシージャコールまたはRPC(remote procedure call)を用いることによって実行され得る。いくつかの例では、リモートプロシージャコールは、特定のメモリコンテンツに対するポインタを用いて、物理メモリまたは仮想メモリのうちソースVM510からターゲットVM515にコピーされるべき1つ以上の部分を識別することができる。
【0073】
いくつかの例においては、バウンスバッファを転送の一部として用いることができる。バウンスバッファはメモリ内に存在するタイプのメモリであって、プロセッサがそこからデータをコピーしたりそこにデータを書込んだりするのにアーキテクチャ的に充分に「低」いレベルのメモリである。ページは、メモリを編成するためにバウンスバッファに割当てることができる。メモリマイグレーションモジュールは、「ダーティビットマップ」を増分的に更新してダーティページをコピーするステップの一部として、メモリを複数回通過するとともにダーティページを通過することを繰返し行なうことができる。
【0074】
いくつかの例では、「損なわれたページ」、または回復不可能なエラーを含むページを追跡および識別することもできる。いくつかの例では、「損なわれた」ページは、メモリマイグレーションプロセスおよびダーティページから選択的に除外することができる。いくつかの例では、MCEが発見されると、そのMCEに関連付けられたメモリページは、損なわれたものとしてマーク付けされ得る。メモリマイグレーションモジュールは、特定のページを「損なわれた」ものとしてメモリバスに通知し、メモリバスがそのメモリをソースからターゲットにコピーすることを回避させることができる。
【0075】
方法520はまた、チェックサムの生成を含み得る。チェックサムはソースからターゲットへのゲストメモリの書込みの後に生成され得る。ソースメモリページおよび関連するターゲットメモリページの両方の上でチェックサムを生成して、そのメモリページの転送がエラーなしに行なわれることを確実にし得る。いくつかの例では、損なわれたページについてのチェックサム生成またはチェックサムのチェックはスキップされ得る。
【0076】
方法520は、擬似コードとして記述される以下のプロセスまたは同様のプロセスを含み得る。
【0077】
【数1】
【0078】
代替的に説明すると、方法520は、ダーティメモリページの追跡を可能にし得るとともに、「停電」プロセスが実施されていない間、ダーティメモリページログを準備し、各ダーティメモリページログごとに、そのダーティメモリページログの変化に関連する更新をビットマップなどを介してソースからターゲットに送信し得る。加えて、チェックサムおよび変更の追跡は、方法520の一部としてメモリマイグレーションモジュールによって実行することができる。
【0079】
図5Cは、停電期間中の方法500または方法530のいくつかの局面を示す。停電期間中、ソースは「一時停止」され、ユーザはソースVMを動作させるかまたは用いることができなくなるだろう。損なわれたページはまた、方法530中に追跡して差し引くことができる。
【0080】
方法530は、停電期間の開始時に、またはソースVMが一時停止されるときに開始することができる。メモリマイグレーションモジュールは、ソースVMのメモリを通るパスを実行して、停電の前に最新のメモリまたは「最後のメモリ」を識別し、ダーティビットマップをターゲットに送信することができる。
【0081】
方法530中に、損なわれたページに関する情報または損なわれたページ自体をコピーすることができる。損なわれたページは稀であると予想されるので、いくつかの例では、「ビットマップ」とは異なる構造を用いて、損なわれたページまたは当該損なわれたページに関連する情報を転送し、メモリオーバーヘッドを制限することができる。いくつかの例では、損なわれたページへの変更は最小であると予想され、損なわれたページ自体は稀であると予想されるので、このような損なわれたページは停電期間の開始時に1回だけ送信することができる。
【0082】
方法530は、擬似コードとして記述される以下のプロセスまたは同様のプロセスを含み得る。
【0083】
【数2】
【0084】
言い換えれば、方法530では、1つ以上のメモリログを読取ることができ、メモリログの読取りから、損なわれたページを除いたダーティページのみをコピーすることができる。
【0085】
図5Dは、「コピー後」段階に関連し得る方法500または方法540のいくつかの局面を示す。この段階では、特定の情報がソースからターゲットに転送されている。この段階では、ソース上で動作していた仮想マシンをターゲット上で動作させることができる。この段階では、ターゲット上で動作する仮想マシンは、ダーティメモリページおよび損なわれたメモリページが転送されていなかったという点で、ソース上で動作する仮想マシンとは異なり得る。
【0086】
コピー後の間、または方法540の一部として、「デマンドページング」を最終的なダーティビットマップで初期化することができる。「デマンドページング」のための制御は、同じダーティビットマップでバックグラウンドフェッチャーモジュールを初期化することができる。上述したように、このビットマップは、損なわれたページが差し引かれているリストをすでに認識しているかまたは含む可能性がある。
【0087】
コピー後の間、または方法540の一部として、ソースからまだフェッチまたはマイグレートされていなかったメモリページのバックグラウンドフェッチは、バックグラウンドフェッチャーモジュールまたはメモリマイグレーションモジュールによってアクセスされ得る。
【0088】
いくつかの例では、ターゲット上では、ターゲットからソースにまだ転送されていなかった特定のメモリページの要件に応じて、ターゲットにまだマイグレートされていないメモリページにターゲットがアクセスするために、リモートメモリアクセス(remote memory access:RMA)または他のリモートプロシージャコールが用いられてもよい。
【0089】
ターゲットにおいてメモリページが受信されると、MCEエラーが発生していない場合、またはMCEエラーがその特定のメモリページに関連付けられている場合、取得されたメモリコンテンツについてチェックサムを生成することができる。このチェックサムは、メモリマイグレーションプロセスが正しく行なわれたことを検証するために用いることができる。
【0090】
方法540は、擬似コードとして記述され得る以下のプロセスまたは同様のプロセスを含み得る。
【0091】
【数3】
【0092】
特に明記しない限り、上述の代替例は相互に排他的ではなく、特有の利点を達成するためにさまざまな組合わせで実現され得る。上述の特徴のこれらおよび他の変形例および組合わせは、特許請求の範囲によって定義される主題から逸脱することなく利用することができるので、実施形態の前述の説明は、特許請求の範囲によって定義される主題の限定としてではなく、例示として解釈されるべきである。加えて、本明細書に記載される例の規定、ならびに「等(such as)」、「含む(including)」などの語句は、特許請求の範囲の主題を特定の例に限定するものとして解釈されるべきではなく、むしろ、これらの例は、可能な限り多くの実施形態のうち1つだけを例示することを意図している。さらに、異なる図面における同じ参照番号は同じまたは同様の要素を識別し得るものである。
図1
図2
図3A
図3B
図4
図5A
図5B
図5C
図5D