ここまでの紹介で、さまざまなリソースに対する仮想化には、主にコンピューティング仮想化、ストレージ仮想化、ネットワーク仮想化の 3 つの側面が含まれることがおわかりいただけたと思います。次に、これら 3 種類のリソースの仮想化方法とテクノロジについて詳しく紹介します。今日は主にCPUの仮想化である仮想化の中の「コンピューティング仮想化」についてお話します。
1. コンピューティングの仮想化 コンピューティングの仮想化には通常、次の 3 つの側面が含まれます。 (1)CPU仮想化:複数のVMがCPUリソースを共有するため、VM内の機密命令を傍受してシミュレートする必要があります。 (2)メモリ仮想化:複数のVMが同じ物理メモリを共有するため、VM同士を分離する必要があります。 (3)I/O仮想化:複数のVMがディスクやネットワークカードなどの物理デバイスを共有するため、通常、TDMAの考え方を借用して、時分割多重化技術によってデバイスを多重化します。 1.1 CPU仮想化の概要 X86 プロセッサの場合、CPU 仮想化の基本は、保護モードにリング 0 からリング 3 までの 4 つの異なる優先順位があることです。これらのリングの優先順位は、実行する機能によって異なります。リング 0 はオペレーティング システム カーネルとドライバーに使用され、最高の優先度と最大の権限を持ちます。リング 1 とリング 2 はオペレーティング システム サービスに使用され、次に高い優先度を持ちます。リング 3 はアプリケーションに使用され、最高の優先度を持ちます。ほとんどのアプリケーションはリング 3 レベルに配置されますが、リング 1 と 2 はほとんど使用されません。アプリケーションや OS によって発行されたコマンドの場合、CPU は次の図に示すように常に直接実行を使用します。 仮想化を実行する場合、ハードウェア リソースを割り当てるには、リング 0 レイヤーを VMM で制御する必要があります。 ここで疑問が生じます。OS はリング 0 のハードウェアにアクセスして直接制御する必要があり、リング 0 の部分が VMM に引き渡されたため、オペレーティング システムはリング 1 にダウングレードされました。ただし、X86 CPU はもともと単一ユーザー向けに位置付けられていたため、異なる OS にコンピューティング リソースを割り当てる問題は当時は考慮されていませんでした。 X86 命令セット アーキテクチャ (ISA、プロセッサの抽象的な記述、つまりプロセッサが実行できることを定義する設計仕様です。その本質は一連の命令セット合成です。現在主流の ISA には、X86、ARM、MIPS、Power などがあります。ここでは、X86 ISA についてのみ説明します) には、特権命令ではないセンシティブ命令が 19 個あります。これらの命令が機能するには、リング 0 レベルである必要があります。そうでない場合、オペレーティング システムは警告を生成し、アプリケーションを終了したり、システムがクラッシュしたりします。 そこで、調査の結果、当社のエンジニアはこの問題を解決するために次の 3 つの方法を提案しました。 (1)完全仮想化 この方法は、1999 年に VMware によって初めて提案されました。バイナリ変換と呼ばれる技術です。原理は、VMM を使用して OS 内の仮想化できない命令を事前にインターセプトし、バイナリ変換に置き換えることです。これにより、オペレーティング システムはハードウェアを直接制御できると認識し、実際に仮想マシンに仮想化されていることを認識しません。次の図に示すように: ただし、良好なパフォーマンスを維持するために、アプリケーションからの一般的なコマンドは引き続きハードウェアに直接要求されます。 完全仮想化の利点は、OS を変更する必要がなく、直接インストールして使用できることです。また、ほとんどの種類の OS をサポートしていますが、ハードウェア支援による仮想化がなければ、完全な仮想化を実現することは非常に困難です。 (2)準仮想化 準仮想化の原理は、ゲスト OS コアの一部のコードを変更して Hypercall を埋め込むことです。これにより、ゲスト OS は特権命令に関連するすべての操作を Hypercall に変換し、VMM に送信して、VMM が引き続き処理します。 Hypercall がサポートするバッチ処理と非同期最適化方法により、Hypercall は物理マシンに近い速度を実現できます。 これにより、仮想化不可能な命令は、ハイパーコール インターフェイスを介してハードウェアに直接要求を行うことができますが、ゲスト OS はリング 0 に残り、リング 1 にダウングレードする必要はありません。次の図に示すように: 準仮想化の利点は、CPU と I/O の損失が最小限に抑えられることです。理論的には、そのパフォーマンスは完全仮想化テクノロジよりも優れています。欠点は、OS カーネルを変更する必要があることです。 SuSE や Ubuntu などの一部の Linux バージョンのみがこれをサポートしています。 Microsoft は独自のオペレーティング システム カーネルを変更することを望んでいないため、OS の互換性は低いです。そのため、Windows システムの場合は準仮想化は使用できません。 VMware は 2005 年に Transparent Paravirtualization をリリースしました。準仮想化をサポートする OS の場合、VMWare プラットフォーム上で VMI (Virtual Machine Interface) を介して準仮想化を有効にして、I/O パフォーマンスを向上させ、CPU 使用率を削減できます。 原理としては、VMware ツールを使用して準仮想化をサポートするゲスト OS にバックドアを開き、VMM と通信し、OS に準仮想化最適化ドライバーをインストールして、I/O パフォーマンスを向上させ、CPU 使用率を削減します。これは VMware プラットフォーム上で準仮想化 OS をサポートする方法ですが、基盤となる CPU 仮想化は準仮想化技術ではなく、バイナリ変換 (Binary Translation) を使用した完全仮想化技術 (Full Virtualization) であることに注意する必要があります。 (3)CPUハードウェア支援仮想化 2005 年以降、仮想化は徐々に止められないトレンドになりました。 Intel と AMD は、基本的な CPU アーキテクチャから始めて、元の特権レベルであるリング 0、1、2、3 を変更し、それらを非ルート モードとして分類し、新しいルート モード特権レベル (リング -1 と呼ぶ人もいます) を追加することを決定しました。この方法では、OS は元のリング 0 レベルのまま、VMM はより低いルート モード レベルに調整されます。次の図に示すように: 現在、主なテクノロジーは Intel の VT-x と AMD の AMD-V の 2 つです。基本的な考え方は、新しい命令と動作モードを導入して、VMM とゲスト OS を異なるモード (ROOT モードと非 ROOT モード) で実行し、ゲスト OS をリング 0 で実行することです。通常、ゲスト OS のコア命令は、VMM を経由せずにコンピューター システムのハードウェアに直接送信して実行できます。ゲスト OS が特別な命令を実行すると、システムは VMM に切り替えて、VMM が特別な命令を処理できるようにします。 1.2 ハードウェア支援仮想化の拡張トピック ハードウェア支援仮想化では、仮想マシンの命令セットはホストマシンの物理 CPU 上で直接実行されます。仮想マシン内の命令が I/O 操作または何らかの特別な命令を実行するように設計されている場合、制御はプロセスであるホスト マシン (実際には VMM) に転送されます。ホスト マシン上でのその表示もユーザー レベルのプロセスです。 次の図は KVM を例にしています。 上の図から、VMM が vCPU とメモリの初期化を完了した後、ioctl を介して KVM インターフェイスを呼び出して仮想マシンの作成を完了し、VM を実行するスレッドを作成することが直感的にわかります。 VM は初期初期化中にさまざまなレジスタを設定し、ロードする命令のエントリ ポイント (メイン関数) を KVM が見つけられるようにします。したがって、スレッドが KVM インターフェイスを呼び出した後、物理 CPU の制御は VM に引き渡されます。 VM は、Intel の VT-x によって提供される特別な CPU 実行モードである VMX 非ルート モードで実行されます。その後、VM が特別な命令を実行すると、CPU は現在の VM コンテキストを VMCS レジスタ (このレジスタは実際のコンテキスト アドレスを格納するポインタです) に保存し、実行権を VMM に切り替えます。 VMM は VM から返された理由を取得し、アクションを実行します。 I/O 要求の場合、VMM は VM のメモリを直接読み取り、I/O 操作をシミュレートしてから、VMRESUME 命令を呼び出して、VM の実行を継続します。このとき、VM の観点から見ると、I/O 操作命令は CPU によって実行されます。 以下では、VT-x のいくつかの主要な概念についてのみ説明します。 (1)2つのモード VT-x は、IA 32 プロセッサに VMX ルート操作と VMX 非ルート操作の 2 つの動作モードを追加します。 VMM 自体は VMX ルート操作モードで実行され、ゲスト OS では VMX 非ルート操作モードが使用されます。どちらの操作モードも、リング 0 からリング 3 までの 4 つの権限レベルをサポートしているため、VMM とゲスト OS の両方が期待する操作レベルを自由に選択できます。 (2)モード変換VMエントリ、ゲストOS実行 これら 2 つの動作モードは相互に切り替えることができます。 VMX ルート操作モードで実行されている VMM は、VMLAUNCH または VMRESUME 命令を明示的に呼び出すことによって、VMX 非ルート操作モードに切り替わります。ハードウェアが自動的にゲスト OS のコンテキストをロードし、ゲスト OS の実行が開始されます。この変換は VM エントリと呼ばれます。 (3)モード変換VM終了、VMM実行 ゲスト OS が動作中に外部割り込みやページ フォールト例外などの VMM 処理を必要とするイベントに遭遇した場合、または VMCALL 命令をアクティブに呼び出して VMM サービスを呼び出す場合 (システム コールと同様)、ハードウェアは自動的にゲスト OS を一時停止し、VMX ルート動作モードに切り替えて VMM の動作を再開します。この遷移は VM 終了と呼ばれます。 VMX ルート動作モードでは、ソフトウェアの動作は基本的に VT-x テクノロジのないプロセッサの場合と同じです。ただし、VMX 非ルート操作モードでは、状況は大きく異なります。主な違いは、特定の命令が実行されたとき、または特定のイベントが発生したときに VM 終了が発生することです。 (4)VMMライフサイクル VMM は VMXON 命令で始まり、VMXOFF 命令で終了します。 ゲストを初めて起動すると、ゲストは VMLAUNCH 命令を通じてロードされます。現時点では、起動リップレジスタなどすべてが新しいです。後続のゲストの終了と再エントリは VMRESUME 命令によって行われ、VMCS (後述) が指すコンテンツが現在のゲストのコンテキストにロードされ、ゲストが実行を継続できるようになります。 (5)仮想マシン制御構造(VMCS) VMCS は、実際のメモリ アドレスを指す 64 ビット ポインターです。 VMCS は vCPU に基づいているため、vCPU の数と同じ数の VMCS ポインターが存在します。 VMM とゲスト OS は基盤となるプロセッサ リソースを共有するため、ハードウェアには互いの実行コンテキストを自動的に保存または復元するための物理メモリ領域が必要です。この領域は仮想マシン制御ブロック (VMCS) と呼ばれ、ゲスト状態領域 (Guest State Area)、ホスト状態領域 (Host State Area)、および実行制御領域が含まれます。 VM が入ると、ハードウェアはクライアント状態領域からゲスト OS コンテキストを自動的に読み込みます。 VMM コンテキストを保存する必要はありません。理由は割り込みハンドラの場合と同様です。 VMM の実行が開始されると、ゲスト OS によって妨げられることはありません。 VMM が作業を完全に完了した場合にのみ、VMM は独自にゲスト OS に切り替えることができます。 VMM が次に実行されるときには、新しいイベントを処理する必要があるため、VMM が入るたびに、VMM は一般的なイベント処理関数から実行を開始します。 VM が終了すると、ハードウェアは自動的にゲスト OS のコンテキストをクライアント状態領域に保存し、ホスト状態領域から VMM の一般的なイベント処理機能のアドレスをロードして、VMM の実行を開始します。実行制御領域には、VM の終了を引き起こすイベントをマークしたり、VM の開始時にゲスト OS に自動的に「挿入」する割り込みをマークしたりするなど、VM の開始と終了を操作できるフラグが格納されます。 (6)VMCSのクライアントステータス領域とホストステータス領域 クライアント ステータス領域とホスト ステータス領域の両方に、制御レジスタ CR0、CR3、CR4 などのいくつかの物理レジスタに関する情報が含まれている必要があります。 ESP (ESP レジスタは、関数 fun() を呼び出した後のスタックの最上部を格納します。常にスタックの最上部を指します。また、スタックの最下部ポインタ (通常はスタック ベース アドレスと呼ばれる) を格納する EBP レジスタもあります。これは、fun() 関数が呼び出される前に ESP によって EBP に渡されます) および EIP (EIP レジスタは、CPU によって次に実行される命令のアドレスを格納します) (プロセッサが 64 ビット拡張をサポートしている場合は、RSP、RIP です)。 CS、SS、DS、ES、FS、GS などのセグメント レジスタとその説明項目。 TR、GDTR、IDTR レジスタ。 IA32_SYSENTER_CS、IA32_SYSENTER_ESP、IA32_SYSENTER_EIP、IA32_PERF_GLOBAL_CTRL などの MSR レジスタ。 ゲスト状態領域には、汎用レジスタの内容は含まれません。 VMM は VM 終了時にそれらを保存するかどうかを決定し、それによってシステム パフォーマンスが向上します。クライアント ステータス領域には、ゲスト OS の実行時にプロセッサのアクティブ状態を示す 32 ビットのアクティブ状態値など、非物理レジスタの内容も含まれます。命令が正常に実行された場合、アクティブ状態になります。トリプルフォルトやその他の重大なエラーが発生した場合は、シャットダウン状態になります。 前述のように、実行制御領域は、VM のエントリと VM の終了を制御できる次のようなフラグを格納するために使用されます。 外部割り込み終了: ゲスト OS が割り込みをブロックしているかどうかに関係なく、外部割り込みによって VM 終了をトリガーできるかどうかを設定するために使用されます。 (7)割り込みウィンドウの終了: 設定されている場合、ゲスト OS が割り込みをマスク解除すると VM 終了がトリガーされます。 (8)TPRシャドウを使用する: CR8 を介してタスク優先度レジスタ (TPR) にアクセスする場合、VMCS でシャドウ TPR を使用すると、VM 終了のトリガーを回避できます。同時に、実行制御領域にも TPR しきい値設定があります。ゲスト OS によって設定された TR 値がしきい値未満の場合にのみ、VM 終了がトリガーされます。 (9)CRマスクとシャドウ: 各制御レジスタの各ビットには対応するマスクがあり、ゲスト OS が対応するビットを直接書き込むことができるか、または VM 終了をトリガーできるかを制御します。同時に、VMCS にはシャドウ制御レジスタが含まれています。ゲスト OS が制御レジスタを読み取ると、ハードウェアはシャドウ制御レジスタの値をゲスト OS に返します。 (10)ビットマップ: VMCS には、適応性を高めるためのビットマップのセットも含まれています。 例外ビットマップ: VM終了をトリガーできる例外を選択します。 I/O ビットマップ: VM 終了をトリガーする 16 ビット I/O ポートへのアクセス。 MSR ビットマップ: 制御レジスタ マスクと同様に、各 MSR レジスタには、「読み取り」ビットマップ マスクのセットと「書き込み」ビットマップ マスクのセットがあります。 VM 終了が発生するたびに、ハードウェアは VMCS に豊富な情報を自動的に保存し、VMM がイベントの種類と原因を識別しやすくなります。 VM エントリ中、VMCS はゲスト OS の割り込み記述テーブル (IDT) のアドレスを保存し、ハードウェアがゲスト OS のハンドラーを自動的に呼び出すことができるため、VMM はゲスト OS にイベント (割り込みと例外) を簡単に挿入できます。 ハードウェア支援技術の登場により、VMM とゲスト OS の実行をハードウェアを通じて自動的に分離できるようになりました。重大なイベントが発生すると、システム制御が自動的に VMM に転送されるため、VMM はすべてのシステム リソースを完全に制御できます。 ゲスト OS は、想定される最高の権限レベルで実行できるため、権限レベルの圧縮や権限レベル名の問題が解決されるだけでなく、ゲスト OS のシステム コールによって VM の終了がトリガーされることもありません。 ハードウェアは物理アドレスを使用して仮想マシン制御ブロック (VMCS) にアクセスし、VMCS はそれぞれ VMM とゲスト OS の IDTR レジスタと CR3 レジスタを保存します。したがって、VMM は独立したアドレス空間を持つことができ、ゲスト OS は独自のアドレス空間を完全に制御でき、アドレス空間の圧縮の問題は発生しません。 割り込みと例外の仮想化の問題も十分に解決されました。 VMM では、転送する必要がある仮想割り込みまたは例外を設定するだけで済みます。 VM が起動すると、ハードウェアがゲスト OS の割り込みハンドラーと例外ハンドラーを自動的に呼び出すため、VMM の設計が大幅に簡素化されます。同時に、ゲスト OS による割り込みのシールドと解放は、VM 終了をトリガーせずに実行できるため、パフォーマンスが向上します。さらに、ゲスト OS が割り込みマスクを解放したときに VM 終了をトリガーするように VMM を設定することもできるため、蓄積された仮想割り込みと例外をタイムリーに転送できます。 CPU ハードウェア支援仮想化は、実際には第 1 世代と第 2 世代に分かれています。第 2 世代では、MMU (メモリ管理ユニット) 仮想化、つまり Intel EPT と AMD RVI が追加されました。ご興味がございましたら、 詳細については、VMware、Citrix、Intel、AMD の Web サイトをご覧ください。 仮想化テクノロジに対する CPU ハードウェア サポートの最大の利点は、以前の BinaryTranslation または ParaVirtualization 操作が不要になることです。仮想化ベンダーは、この問題を解決する方法を見つけることに悩む必要がなくなりました。完全仮想化ベンダーのパフォーマンスは準仮想化ベンダーのパフォーマンスに追いついており、準仮想化ベンダーはカーネルを変更しないオペレーティング システム (Windows やほとんどの Linux など) もサポートできます。 CPU 仮想化はコンピューティング仮想化の最も重要な中核といえ、VM Exit と VM Entry を明確にしました。後続の I/O 仮想化とメモリ仮想化は、この基盤の上に構築されます。 |
>>: Office 365の中国でのビジネスは商用利用開始4年目で400%以上成長
毎日ウェブサイトに数記事を更新することは、ウェブマスターがしなければならないことですが、更新した記事...
昨日、百度の推薦エンジンに関するニュースを見ました。百度のチーフアーキテクトであり推薦エンジンの責任...
概要:QVOD社はわいせつなポルノ情報を流布した重大な事実が判明し、付加価値通信事業免許の取り消しな...
justhost.asiaはどうですか?最近、justhost はポーランドのワルシャワにデータセン...
李娟鉄道省は鉄道切符購入代理店に対する取り締まりを実施している。中国最大のオンライン旅行サイト「Ct...
Hosthatch は、デフォルトの KVM 仮想化と AMD EPYC + NVMe SSD + ...
【はじめに】現在、Qihoo 360は中国のインターネット市場価値で5位に躍り出ました。上位4社は、...
統計によると、世界中で毎分113台の携帯電話が紛失し、毎月10台に1台のコンピューターがウイルスに感...
[[422792]]前回のコースのクラスターはシングルマスター クラスターであり、実稼働環境にはリス...
この記事を書く前に、babyliu はまずすべての SEO 担当者に質問します。SEO を行う目的は...
desivps からプロモーション メールが届きました。基本的には、desivps が dedipa...
これは歴史に残る戦争だ。それは参加者の生存に関わるだけでなく、人類の技術発展の将来の方向性にも大きな...
大手ウェブマスターなら誰でも、新しいサイトでも古いサイトでも、友好的なリンクを交換する必要があること...
Licloud は新しいプロモーションを開始しました。新しい香港 VPS (e5-2680v4+NV...
AWS、Microsoft Azure、Google、IBM は長い間パブリック クラウド IaaS...