CPUハードウェア支援仮想化技術

CPUハードウェア支援仮想化技術

[[317685]]

現在、主なテクノロジーは Intel の VT-x と AMD の AMD-V の 2 つです。基本的な考え方は、新しい命令と動作モードを導入して、VMM とゲスト OS をそれぞれ異なるモード (ROOT モードと非 ROOT モード) で実行し、ゲスト OS をリング 0 で実行できるようにすることです。通常、ゲスト OS のコア命令は、VMM を経由せずにコンピューター システムのハードウェアに直接送信して実行できます。ゲスト OS が特別な命令を実行すると、システムは VMM に切り替えて、VMM に特別な命令を処理させます。

1. インテルVT-xテクノロジー

x86 プロセッサの仮想化の欠陥を補うために、市場主導で VT-x が誕生し、Intel は x86 アーキテクチャに基づくハードウェア支援仮想化テクノロジである Intel VT (Intel Virtualization Technology) を発表しました。

現在、Intel VT テクノロジーには、CPU、メモリ、I/O の 3 つの側面における仮想化テクノロジーが含まれています。 CPU ハードウェア支援仮想化テクノロジには、Itanium アーキテクチャに対応する VT-i (Intel Virtualization Technology for ltanium) と x86 アーキテクチャに対応する VT-x (Intel Virtualization Technologyfor x86) の 2 つのバージョンがあります。メモリ ハードウェア支援仮想化テクノロジには、EPT (Extended Page Table) テクノロジが含まれます。 I/0 ハードウェア支援仮想化テクノロジの代表は、hatelVY-d (Intel Virtualization Technology for Directed I/0) です。

Intel VT-x テクノロジーは、仮想化における初期の x86 アーキテクチャの欠陥を解決し、ゲスト OS への VMM の介入を減らしながら、変更されていないゲスト OS を特権レベル 0 で実行できるようにします。 Intel VT-d テクノロジーにより、VMM は特定の I/O デバイスを特定のゲスト OS に直接割り当てることができるため、VMM の I/O 処理の管理が軽減されます。これにより、データ転送が高速化されるだけでなく、パフォーマンスのオーバーヘッドもほとんど排除されます。下の図の通りです。 CPU ハードウェア支援仮想化テクノロジの簡単な説明フローチャート:


IBM メインフレームの例に倣って、VT-x はルート環境と非ルート環境の 2 つのオペレーティング環境を提供します。ルート環境は VMM 用に特別に用意されており、VT-x をサポートするための命令がいくつか追加されている点を除いて、VT-x のない元の x86 とよく似ています。非ルート環境は、複数の仮想マシンを実行するための制限された環境として使用されます。


上図に示すように、ルート操作モードと非ルート操作モードには、それぞれ対応する権限レベル 0 ~ 3 があります。ルート モードでは VMM は権限レベル 0 で動作し、非ルート モードではゲスト OS のカーネルは権限レベル 0 で動作し、非ルート モードではゲスト OS のアプリケーションは権限レベル 3 で動作します。ルート環境から非ルート環境へのオペレーティング環境間の変換は VMEntry と呼ばれます。非ルート環境からルート環境への移行は VMExit と呼ばれます。 VT-x は、CPU をルート モードから非ルート モードに切り替えてクライアント オペレーティング システムの命令を実行する VMEntry 操作を定義します。非ルート モードで機密命令が実行されるか、割り込みが発生すると、VMExit 操作が実行され、VMM はルート モードに戻ります。

ルート モードと非ルート モード間の変換は、VMX 操作によって実現されます。 VMM は VMXON と VMXOFF を通じて VT-x をオンまたはオフにすることができます。次の図に示すように:


VMX 操作モード プロセス:

1) VMMはVMXON命令を実行し、VMX動作モードに入ります。

2) VMM は VMLAUNCH 命令または VMRESUME 命令を実行して VM Entry 操作を生成し、ゲスト OS に入ることができます。このとき、CPU は非ルート モードになります。

3) ゲストOSが特権命令を実行すると、VMExitが発生し、システムはVMMに陥り、CPUはルートモードに切り替わります。 VMM は VMExit の理由に応じて対応するアクションを実行し、アクションが完了すると手順 2) に進み、GuestOS の実行を継続します。

4) VMM は VMXOFF 命令を実行して VMX 動作モードを終了するかどうかを決定できます。

CPU 仮想化をより適切にサポートするために、VMX は仮想マシン制御構造 VMCS (Virtual Machine Control Structure) を新たに定義します。 VMCS はメモリに格納されるデータ構造であり、仮想 CPU の関連レジスタの内容と関連する制御情報が含まれます。 VM Entry または VM Exit が発生すると、CPU は VMCS を照会して更新します。 VMM は、仮想プロセッサを管理するための命令を通じて VMCS を構成することもできます。 VMCS アーキテクチャ図を以下に示します。


各仮想プロセッサは、VMCS をメモリ内の VMCS 領域と呼ばれる領域に関連付ける必要があります。 VMCS 領域の操作は、VMCS を指す 64 ビットのアドレス値である VMCS ポインターを通じて行われます。 VMCS 領域は最大サイズが 4 KB のメモリ ブロックであり、4 KB に揃える必要があります。

VMCS 領域は 3 つの部分に分かれており、オフセット 0 からは VMCS バージョン識別子が始まります。異なるバージョン番号により、CPU は異なる VMCS データ形式を維持できます。オフセット 4 から VMX 中止インジケーターが始まります。 VMX 中止が発生すると、CPU は中止の理由をここに保存します。オフセット 8 から始まるのは VMCS データ領域であり、VMX 非ルート操作と VMX 切り替えを制御します。

VMCS のデータ領域には VMX 構成情報が含まれています。VMM は、仮想マシンを起動する前に VMExit をトリガーする操作を構成します。 VMExit が生成されると、プロセッサは VMM に実行権を渡して制御を完了し、その後 VMM は指示を通じて VMEntry をトリガーして元の仮想マシンに戻るか、別の仮想マシンにスケジュールします。

VMCS データ構造は、前の VMCS アーキテクチャ図に示されているように、各仮想マシンと仮想マシンのさまざまなステータス情報の 3 つの部分で構成されます。

1) Gueststate: この領域には、VMEntry でプロセッサによってロードされ、VMExit でプロセッサによって保存される仮想マシンの実行時状態が格納されます。それは 2 つの部分から構成されます:

  • ゲスト OS レジスタのステータス。制御レジスタ、デバッグレジスタ、セグメントレジスタなどの各種レジスタの値が含まれます。
  • ゲスト OS が未登録の状態です。これを使用すると、プロセッサの現在の状態(アクティブ、停止中 (HLT)、シャットダウン中 (Shutdown)、または起動時のプロセッサ間割り込み待ち (Startup-IPI))を記録することができます。

2) Hoststate: この領域には、VMM の実行時ステータス (主に VMExit 時にプロセッサによってロードされるいくつかのレジスタ値) が格納されます。

3) 制御データ: この領域には、次のようないくつかのデータ情報が含まれています。

  • VM 実行制御フィールド。 VMM は主にこの領域を構成することで、非ルート環境における仮想マシンの実行動作を制御します。ピンベースの仮想マシン実行制御。外部割り込みまたはマスク不可能割り込み (NMI) が発生したときに VMExit が発生するかどうかを決定します。プロセッサベースの仮想マシン実行制御。仮想マシンが RDTSC、HLT、INVLPG などの命令を実行したときに VMExit が発生するかどうかを決定します。
  • VMExit 制御フィールド。この領域は VMExit の動作を制御します。 VMExit の発生後にプロセッサが 64 ビット モードになっているかどうか。外部割り込みにより VMExit が発生したときに、プロセッサが割り込みコントローラに応答して割り込みベクター番号を取得するかどうか。 VMM はこれを使用して、VME​​xit が発生したときにどの MSR を保存し、どの MSR をロードするかをカスタマイズできます。 MSR は CPU モード レジスタであり、CPU の動作環境を設定し、CPU の動作状態を識別します。
  • VMEntry 制御フィールド。この領域は VMEntry の動作を制御します。 VMEntry 後にプロセッサが IA-32e モードになっているかどうかを判断します。 VMExit の MSR コントロールと同様に、VMM はこれを使用して、VME​​ntry が発生したときにどの MSR がロードされるかをカスタマイズします。 VMM は、仮想マシンの IDT を介して仮想マシンにイベントを送信するように VMEntry を構成できます。ここでは、IDT を使用するベクター、割り込みタイプ (ハードウェア割り込みまたはソフトウェア割り込み)、エラー コードなどを設定できます。
  • VMExit 情報フィールド。この読み取り専用領域には、発生した最新の VMExit に関する情報が含まれています。この領域に書き込もうとするとエラーが発生します。 。 VMExit の理由とさまざまな理由の詳細な情報、割り込みまたは例外ベクター番号、割り込みタイプとエラー コード、IDT を介してイベントが送信されたときに生成される VMExit 情報、および命令が実行されたときに生成される VMExit 情報がここに保存されます。

VMCS 構造では、仮想マシンを制御するには、VMCS 構造を読み書きする必要があります。 vCPU の割り込みを設定し、ステータスを確認することは、実際には VMCS データ構造の読み取りと書き込みです。

2. AMD-Vテクノロジー

上のセクションでは、Intel のハードウェア支援仮想化テクノロジを紹介しましたが、AMD のハードウェア支援仮想化テクノロジの特徴は何でしょうか。 AMD は 2006 年からハードウェア支援仮想化テクノロジの研究に取り組んでいます。AMD-V の正式名称は AMD Virtualization です。 AMD-V はコードの観点からは AMD や SVM と呼ばれます。 AMD がこの仮想化技術を開発したときの社内プロジェクト コードは Pacifica であり、これは AMD が開始したハードウェア支援仮想化技術です。


Intel VT-x と AMD-V が提供する機能のほとんどは似ていますが、名前が異なる場合があります。たとえば、Intel VT-x では仮想マシンのステータスと制御情報を保存するために使用されるデータ構造を VMCS と呼びますが、AMD-V では VMCB と呼びます。 Intel VT-x では、TLB レコード内の VM アドレス空間をマークするために使用されるフィールドを VPID と呼び、AMD-V では ASID と呼びます。 Intel VT-x では第 2 レベルのアドレス変換を EPT と呼び、AMD では NPT と呼びます。類似点があるにもかかわらず、Intel VT-x と AMD-V は VMM への実装において互換性がありません。

AMD-V は、AMD の従来の x86-64 に基づいた「ゲスト」動作モードを導入します。 「ゲスト」動作モードは、ゲスト オペレーティング システムに入るときの CPU のモードです。 「ゲスト」オペレーティング モードは、ゲスト オペレーティング システムの既存の 4 つの特権レベル メカニズムを変更せずに、VMM とは異なるゲスト オペレーティング システムの動作環境を設定します。つまり、「ゲスト」モードでは、ゲスト オペレーティング システムのカーネルは引き続きリング 0 で実行され、ユーザー プログラムは引き続きリング 3 で実行されます。ベア メタル上のオペレーティング システムと VMM の動作モードは、従来の x86 と同じであり、「ホスト」動作モードと呼ばれます。 VMM は VMRUN 命令を実行して CPU を「ゲスト」動作モードにし、ゲスト オペレーティング システム コードを実行します。ゲスト オペレーティング システムが操作中に機密命令またはイベントに遭遇すると、ハードウェアは VMEXIT 動作を実行し、CPU は「ホスト」モードに戻って VMM コードを実行します。 VMRUN 命令のパラメータは物理アドレス ポインタであり、仮想マシンの起動と制御に関するすべての情報が含まれる仮想マシン制御ブロック (VMCB) のメモリ データ構造を指します。


「ゲスト」モードの重要性は、ゲスト オペレーティング システム コードを変更することなく、ゲスト オペレーティング システムを完全に異なるオペレーティング環境に配置できることです。 「ゲスト」モードを確立すると、システム内のリング 0 よりも強力な権限制御が確立されます。つまり、ゲスト オペレーティング システムのリング 0 権限は、VMM のリング 0 権限に譲る必要があります。ゲスト オペレーティング システムで実行されている特権命令は、リング 0 でも VMM によって傍受される可能性があります。「リングの特権解除」はハードウェアによって自動的に処理されます。さらに、VMM は VMCB 内のさまざまなインターセプト制御フィールドを通じて命令やイベントを選択的にインターセプトしたり、条件付きインターセプトを設定したりできます。すべての機密特権命令または非特権命令は、その制御下にあります。


VMCB データ構造には主に以下の内容が含まれます。

1. 傍受する必要がある命令またはイベントを記述するフィールドのリスト。で:

  • 2つの16ビットフィールドは、CRクラス制御レジスタの読み取りと書き込みの傍受を制御するために使用されます。
  • 2 つの 16 ビット フィールドは、DR クラス デバッグ レジスタの読み取りおよび書き込みインターセプトを制御するために使用されます。
  • 例外のインターセプトを制御するために使用される32ビットフィールド
  • 64 ビット フィールドは、INTR、NMI、SMI などのイベント、HLT、CPUID、INVD/WBINVD、INVLPG/INVLPGA、MWAIT などの命令など、システム ステータスの変更を引き起こすさまざまなイベントまたは命令のインターセプトを制御するために使用され、IO 命令と MSR レジスタの読み取りと書き込みを制御するかどうかを示す 2 ビットも含まれます。
  • IO ポート アクセス制御ビットマップと MSR 読み取り/書き込み制御ビットマップを指す物理アドレス ポインター フィールド。このビットマップは、さまざまな IO ポートと MSR レジスタへの仮想マシンの読み取りおよび書き込みアクセスを差別的に制御するために使用されます。
  • 仮想マシンの CPU ステータスを説明する情報。汎用レジスタ、セグメント レジスタ、記述子テーブル レジスタ、コード ポインタなどを除くほとんどの制御レジスタが含まれます。VMM が VMRUN を実行するときに VMCB 物理アドレスを格納するために RAX が使用されるため、RAX レジスタも含まれます。セグメント レジスタの場合、情報には、セグメント レジスタに対応するセグメント記述子も含まれます。これは、従来の x86 のソフトウェアからは隠されている情報です。
  • 仮想マシンの実行を制御するフィールド。主に仮想マシンの割り込みと NPT を制御するフィールド。
  • 仮想マシンが「ゲスト」モードに入った後に実行されるアクションを示すフィールド。 VMM が仮想マシンに挿入する割り込みまたは例外情報を記述するフィールドが含まれます。挿入された割り込みまたは例外は、仮想マシン内で完全に発生するのと同様に、VMRUN が「ゲスト」モードに入った直後に実行されます。
  • VMEXIT 情報を提供するフィールド。これには、VMEXIT の原因となったイベントのコード、例外または割り込み番号、ページ フォールトのリニア アドレス、インターセプトされた命令のエンコードなどが含まれます。

VMCB とそれに関連する制御ビットマップは、完全に物理アドレスによって指定されるため、「ゲスト」空間の線形アドレスに依存して「ゲスト」モードと「ホスト」モードを切り替えるプロセスが回避されます (従来のオペレーティング システムでのユーザー空間からカーネルへの切り替えは、IDT で提供されるターゲットの線形アドレスに依存します)。これにより、VMM はゲスト オペレーティング システムとはまったく異なるアドレス空間を使用できるようになります。

VMCB の内容は物理的に 2 つの部分に分かれています。仮想マシンの CPU 状態を保存するために使用される情報は、2048 バイトの後半を占め、VMCB.SAVE と呼ぶことができます。その他の情報は最初の 1024 バイトを占め、VMCB.CONTROL と呼ぶことができます。

VMRUN コマンドは VMCB をパラメータとして受け取り、CPU を「ゲスト」状態にし、VMCB.SAVE の内容に従って仮想マシンの CPU レジスタ状態を復元し、VMCB.SAVE の CS:RIP フィールドで示されるアドレスで仮想マシンのコード実行を開始し、MSR_VM_HSAVE_PA レジスタで示される物理メモリ領域に以前の VMM の CPU 状態を保存します。 VMRUN によって保存された VMM の CPU 状態の CS:RIP は、実際には VMM のコード内の VMCB の次の命令です。仮想マシンが何らかの理由で #VMEXIT を発生させた場合、VMM は VMRUN の後の命令から実行を開始します。 CPU が #VMEXIT 動作を実行すると、仮想マシンの状態が VMCB.SAVE 領域に自動的に保存され、MSR_VM_HSAVE_PA で指定された領域から VMM の CPU 状態がロードされます。

VMLOAD および VMSAVE 命令は VMRUN の補足です。これらは、FS、GS、TR、LDTR レジスタやそれらに関連する暗黙的な記述子レジスタの内容など、あまり使用されない CPU 状態をロードおよび復元するために使用されます。 VMLOAD と VMSAVE により、VMM 実装は「ゲスト」のエントリおよび終了プロセスを最適化できるため、ほとんどの場合、最小限の状態の保存と復元には VMRUN のみが使用されます。

VMMCALL 命令は、ゲスト オペレーティング システム カーネル用に AMD-V によって提供される明確な関数呼び出しインターフェイスです。 syscall 命令 (リング 3 からリング 0 へ) と同様に、VMMCALL を使用すると、ゲスト オペレーティング システムは #VMEXIT を直接実行し、VMM に入って VMM サービスを要求できます。

3. まとめ

CPU仮想化技術の実装について見てみましょう。純粋なソフトウェア CPU 仮想化では、トラップ シミュレーション モードを使用して特権命令をシミュレートします。ただし、x86 アーキテクチャでは、特権命令のみをシミュレートできるため、一部の機密命令はシミュレートできず、完全な仮想化を実現できません。 (x86 アーキテクチャでは、特権命令はセンシティブ命令である必要がありますが、特権命令よりもセンシティブ命令の方が多いため、一部のセンシティブ命令が非特権命令となり、シミュレートできず、CPU 仮想化の異常が発生します)。また、ハードウェア支援による仮想化では、ルート モード (ルート操作) と非ルート モード (非ルート操作) が導入され、各モードには ring0 から 3 までの 4 つの特権レベルがあります。そのため、ハードウェア支援による仮想化では、トラッピングの概念は実際には VM-EXIT 操作に置き換えられ、これは非ルート モードからルート モードへの終了を表し、ルート モードから非ルート モードへの切り替えは VM-Entry 操作です。

<<:  クラウドコンピューティングは近い将来どのように変化するか

>>:  Kubernetes での Spark デプロイメントの完全ガイド

推薦する

ウェブサイトの最適化をブランド構築のプロセスとして扱うことが核心です

Baiduのアルゴリズムが継続的にアップグレードされるにつれて、従来のウェブサイト運営モデルは深刻な...

スタートアップ プロジェクトに適したソフト コピーを作成するにはどうすればよいでしょうか? 60 ポイントを重視しますか、それともスキルや戦術を重視しますか?

月収10万元の起業の夢を実現するミニプログラム起業支援プランコピーライティングとソフト記事執筆の道で...

Huawei Cloud FusionInsightが第1位にランクイン、顧客のデジタル変革のための強固なデータ基盤を提供

最近、工業情報化部は返答書を発表し、次のステップは「ビッグデータ産業発展第14次5カ年計画」の公布を...

A5 はフォーラム署名をキャンセルし、ウェブサイトの権威を高めるために A5 フォーラムを効果的に使用する方法について議論します。

皆さんご存知のとおり、4月25日、百度ウェブマスタープラットフォームは、大量の低品質フォーラム署名外...

ビッグデータ環境におけるニッチなウェブサイト向けのインターネットマーケティング手法の例

少し前にA5で「ビッグデータ環境における起業のチャンス」という記事を見たのを覚えています。私は主流の...

テクノロジーの未来: アジア太平洋地域におけるデータウェアハウスサービスと通信への影響

テクノロジーの未来は急速に進化しており、アジア太平洋地域はデータ ウェアハウス サービス (DWaa...

5種類のデータ分析で一流のウェブサイトを作りましょう

プロのSEO担当者は、Webサイト構築の初期段階で、自社の現状や同業他社の競合を分析し、徹底したデー...

Baiduの最適化に関する個人的な意見

Baidu は現在、世界最大の中国の検索エンジンであり、ほとんどのウェブマスターにとって非常に重要な...

百度で数千万のキーワードで上位4位に入る企業ウェブサイトの最適化手法

書き始める前に、基本的な状況を簡単に分析します。Enterprise Station Trophy ...

分散 |知っておくべき負荷分散

[[378668]]最近、友人がバックグラウンドでメッセージを残し、負荷分散に関する記事を書くように...

Webmaster.com からの日報: チケット取得ブラウザは正常に使用可能、Facebook は終了へ

1. 本日より、大晦日の列車のチケットをオンラインで購入できます。チケットブラウザは引き続き通常通り...

テンセントクラウドが新しい星星海サーバーをリリース、従来製品のアプリケーション規模は前年比30倍に増加

3月16日、Tencent Cloudは自社開発の新世代星星海サーバーのリリースを発表した。サーバー...

Bステーションのブランドマーケティング戦略

ビリビリは若いユーザーが多い動画コンテンツコミュニティとして、徐々にブランドの注目を集めています。 ...

元従業員が悪いレビューを使ってタオバオの商人を脅迫した。7,000を要求した後、さらに600,000を要求した。

オンラインショップ店員が解雇された後…彼は最初に7,000元を提示して彼女を脅迫することに成功し、そ...